FLOSS Project Planets
Bounteous.com: Acquia Site Studio: Why You May Need It for Your Next Drupal Project
Bounteous.com: Deploying Acquia Cloud Platform CDN With Confidence
Bounteous.com: Connecting PHPStorm and Lando Databases for Highly Productive Drupal Development
Bounteous.com: Migrating Your Drupal 8 Site to Acquia Cloud Platform Hosting
Bounteous.com: How We Built and Launched a Website in Ten Days Using Acquia Site Studio
Russ Allbery: Review: Wintersmith
Review: Wintersmith, by Terry Pratchett
Series: Discworld #35 Publisher: Clarion Books Copyright: 2006 Printing: 2007 ISBN: 0-06-089033-9 Format: Mass market Pages: 450Wintersmith is the 35th Discworld novel and the 3rd Tiffany Aching novel. You could probably start here, since understanding the backstory isn't vital for following the plot, but I'm not sure why you would.
Tiffany is now training with Miss Treason, a 113-year-old witch who is quite different in her approach from Miss Level, Tiffany's mentor in A Hat Full of Sky. Miss Level was the unassuming and constantly helpful glue that held the neighborhood together. Miss Treason is the judge; her neighbors are scared of her and proud of being scared of her, since that means they have a proper witch who can see into their heads and sort out their problems. On the surface, they're quite different; part of the story of this book is Tiffany learning to see the similarities.
First, though, Miss Treason rushes Tiffany to a strange midnight Morris Dance, without any explanation. The Morris Dance usually celebrates the coming of spring and is at the center of a village party, so Tiffany is quite confused by seeing it danced on a dark and windy night in late autumn. But there is a hole in the dance where the Fool normally is, and Tiffany can't keep herself from joining it.
This proves to be a mistake. That space was left for someone very different from Tiffany, and now she's entangled herself in deep magic that she doesn't understand.
This is another Pratchett novel where the main storyline didn't do much for me. All the trouble stems from Miss Treason being maddeningly opaque, and while she did warn Tiffany, she did so in that way that guarantees a protagonist of a middle-grade novel will ignore. The Wintersmith is a boring, one-note quasi-villain, and the plot mainly revolves around elemental powers being dumber than a sack of hammers.
The one thing I will say about the main plot is that the magic Tiffany danced into is entangled with courtship and romance, Tiffany turns thirteen over the course of this book, and yet this is not weird and uncomfortable reading the way it would be in the hands of many other authors. Pratchett has a keen eye for the age range that he's targeting. The first awareness that there is such a thing as romance that might be relevant to oneself pairs nicely with the Wintersmith's utter confusion at how Tiffany's intrusion unbalanced his dance. This is a very specific age and experience that I think a lot of authors would shy away from, particularly with a female protagonist, and I thought Pratchett handled it adroitly. I personally found the Wintersmith's awkward courting tedious and annoying, but that's more about me than about the book.
As with A Hat Full of Sky, though, everything other than the main plot was great. It is becoming obvious how much Tiffany and Granny Weatherwax have in common, and that Granny Weatherwax recognizes this and is training Tiffany herself. This is high-quality coming-of-age material, not in the traditional fantasy sense of chosen ones and map explorations, but in the sense of slowly-developing empathy and understanding of people who think differently than you do. Tiffany, like Granny Weatherwax, has very little patience with nonsense, and her irritation with stupidity is one of her best characteristics. But she's learning how to blunt it long enough to pay attention, and to understand how people she doesn't like can still be the right people for specific situations.
I particularly loved how Granny carries on with a feud at the same time that Tiffany is learning to let go of one. It's not a contradiction or hypocrisy; it's a sign that Tiffany is entitled to her judgments and feelings, but has to learn how to keep them in their place and not let them take over.
One of the great things about the Tiffany Aching books is that the villages are also characters. We don't see that much of the individual people, but one of the things Tiffany is learning is how to see the interpersonal dynamics and patterns of village life. Somehow the feelings of irritation and exasperation fade once you understand people's motives and see more sides to their character.
There is a lot more Nanny Ogg in this book than there has been in the last few, and that reminded me of how much I love her character. She has a completely different approach than Granny Weatherwax, but it's just as effective in different ways. She's also the perfect witch to have around when you've stumbled into a stylized love story that you don't want to be a part of, and yet find oddly fascinating.
It says something about the skill of Pratchett's characterization that I could enjoy a book this much while having no interest in the main plot. The Witches have always been great characters, but somehow they're even better when seen through Tiffany's perspective. Good stuff; if you liked any of the other Tiffany Aching books, you will like this as well.
Followed by Making Money in publication order. The next Tiffany Aching novel is I Shall Wear Midnight.
Rating: 8 out of 10
Brett Cannon: Announcing microvenv 2023.5
In my blog post explaining how virtual environments work, I announced my project called microvenv. At the time, my only goal was to create a package which could create virtual environments in a minimal, fast way. But since then, I have expanded the API of the package to provide some helpers I found myself and teammates at work needing. I also updated it to match a change coming to the venv module in Python 3.13.
Expanded APIProbably the newest part I&aposm most happy about is the activation() function which helps you "activate" your virtual environment. Normally when you run the shell script to activate your virtual environment, it sets the VIRTUAL_ENV environment variable and prepends the bin/ directory to PATH. The activation() function does this, but in a way designed to be additive to os.environ. What this means is the API is designed to be typically used as os.environ | microvenv.activation(). Because the union operator for dicts has the right-hand side take precedence, the updated value of PATH will mask the one from os.environ while adding VIRTUAL_ENV. And because | for dictionaries returns a new dict, you don&apost need to worry about deactivation as no in-place mutation of os.environ occurs.
There&aposs also now a parse_config() function to parse the pyvenv.cfg file into a dict. The file is a custom format of key/value pairs that looks like an INI file with no section headers. Historically, people have parsed this file by adding a fake header via configparser and then parsing the file. But if you look at the code in the site module that actually processes the file, you will notice it doesn&apost use the configparser. As such, I wrote a function that uses the same algorithm to make it easier to get to.
I also tossed in IN_VIRTUAL_ENV and DEFAULT_ENV_DIR constants to detect when you&aposre running from a virtual environment and the default name to use when creating a virtual environment, respectively.
.gitignore file in virtual environmentsStarting in Python 3.13, virtual environments will contain a .gitignore file containing the text of * by default, and I have updated microvenv accordingly. This will cause Git to ignore the virtual environment directory. We did this because we regularly found beginners committing their virtual environments to source control without realizing that virtual environments are not portable between machines. We also view virtual environment contents as essentially an implementation detail, and so you shouldn&apost put your code in there as we reserve the right to do whatever we want in there which might clash with your files some day.
MiscellaneousThe project is now fully typed via .pyi files (due to wanting to keep the _create.py file as small as possible). Also, the project is now a package to once again keep _create.py small.
Don’t change your login shell, use a modern terminal emulator
chsh is a small tool that lets you change the default shell for your current user. In order to let any user change their own shell, which is set in /etc/passwd, it needs privileges and is generally setuid root.
I am of the opinion that setuid/setgid binaries are a UNIX legacy that should be deprecated. I will explain the security reasons behind that statement in a future post.
In this “UNIX legacy” series of posts, I am looking at classic setuid binaries and try to find better, safer alternatives for common use cases. In this post, we will look at alternatives to changing your login shell.
Should you change the default shell?People usually change their default shell because they want to use a modern alternative to Bash (Zsh, fish, Oils, nushell, etc.).
Changing the default shell (especially to a non POSIX or Bash compatible one) might have unintended consequences as some scripts relying on Bash compatibility might not work anymore. There are lots of warnings about this, for example for the fish shell:
- Fish shell docs: Default Shell
- Arch Linux Wiki: fish: Setting fish as default shell
- Gentoo Wiki: fish: Caveats
On Fedora Atomic Desktops (Silverblue, Kinoite, etc.), your preferred shell may not always be available, notably if you have to reset your overlays for an upgrade, and could lead to an unusable system:
- Cannot Login after update of Silverblue Rawhide - Login loops back to login screen, same applies for tty2 login attempts
- using lchsh to change the shell brings user back to fedora setup
So overall, it is a bad idea to change the default login shell for interactive users.
For non-interactive users or system users, the shell is usually set by the system administrator only and the user itself never needs to change it.
If you are using systemd-homed, then you can change your own shell via the homectl command without needing setuid binaries but for the same reasons as above, it is still not a good idea.
Graphical interface: Use a modern terminal emulatorIf you want to use another shell than the default one, you can use the functionality from your graphical terminal emulator to start it by default instead of Bash.
I recommend using the freshly released Prompt (sources) terminal if you are running on Fedora Silverblue or other GNOME related desktops. You can set your preferred shell in the Profiles section of the preferences. It also has great integration for toolbox/distrobox containers. We’re investigating making this the default in a future version of Fedora Silverblue (issue#520).
If you are running on Fedora Kinoite or other KDE related desktops, you should look at Konsole’s profiles features. You can create your own profiles and set the Command to /bin/zsh to use another shell. You can also assign shortcuts to profiles to open them directly a new tab, or use /bin/toolbox enter fedora-toolbox-39 as Command to directly enter a toolbox container for example.
This is obviously not an exhaustive list and other modern terminal emulators also let you specify which command to start.
If your terminal emulator does not allow you to do that, then you can use the alternative from the next section.
Or use a small snippetIf you want to change the default shell for a user on a server, then you can add the following code snippet at the beginning of the user’s ~/.bashrc (example for fish):
# Only trigger if: # - 'fish' is not the parent process of this shell # - We did not call: bash -c '...' # - The fish binary exists and is executable if [[ $(ps --no-header --pid=$PPID --format=comm) != "fish" && -z ${BASH_EXECUTION_STRING} && -x "/bin/fish" ]]; then shopt -q login_shell && LOGIN_OPTION='--login' || LOGIN_OPTION='' exec fish $LOGIN_OPTION fi References Other posts from this seriesFSF Blogs: Licensing & Compliance Lab updates and why we need your support to educate, serve the free software community
Licensing & Compliance Lab updates and why we need your support to educate, serve the free software community
James Bennett: Don't use Python's property
This is part of a series of posts I’m doing as a sort of Python/Django Advent calendar, offering a small tip or piece of information each day from the first Sunday of Advent through Christmas Eve. See the first post for an introduction.
Attributing the problemSuppose you’re writing Java and you write a class with an attribute :
public class MyClass { public int value; }And then later on you realize that value …
TestDriven.io: Basic and Full-text Search with Django and Postgres
Cutelyst v4 – 10 years 🎉
Cutelyst the Qt web framework is now at v4.0.0 just a bit later for it’s 10th anniversary.
With 2.5k commits it has been steadly improving, and in production for many high traffic applications. With this release we say good bye to our old Qt5 friend, also dropped uWSGI support, clearsilver and Grantlee were also removed, many methods now take a QStringView and Cutelyst::Header class was heavly refactored to allow usage of QByteArrayView, and stopped storing QStrings internally in a QHash, they are QByteArray inside a vector.
Before, all headers were uppercased and dashes replaced with underscores, this was quite some work, so that when searching the string had to be converted to this format to be searcheable, this had the advantage of allowing the use of QHash and in templates you could c.request.header.CONTENT_TYPE. Turns out both cases aren’t so important, speed is more important for the wider use cases.
With these changes Cutelyst managed to get 10 – 15% faster on TechEmpower benchmarks, which is great as we are still well positioned as a full stack framework there.
https://github.com/cutelyst/cutelyst/releases/tag/v4.0.0
Have fun, Merry Christmas and Happy New Year!
Akademy 2023 Keynote: Kdenlive - what can we learn after 20 years of development?
Slides of the presentation: https://conf.kde.org/event/5/contributions/155/attachments/85/101/Kdenlive-Akademy-23.pdf
Last year marked the 20th anniversary of the Kdenlive video editor, and the start of a shift in our development. Discover the team behind this very popular project, and what we learned during these years - what are our strengths, how we are organizing our roadmap and what we are planning to avoid past mistakes and keep growing.
Akademy 2023 - Keynote: Libre Space Foundation - Empowering Open-Source Space Technologies
Find the slides of the presentation here:
Join us for a talk that highlights the potential of open-source collaboration in the space industry. Together, we can unlock new possibilities in space exploration through the power of free software, open-source hardware and open-data.
The space industry is evolving rapidly, with open-source solutions playing an increasingly vital role. The Libre Space Foundation (LSF) champions this movement by developing open-source space technologies that make space exploration more accessible for everyone. In this talk, we'll introduce the Libre Space Foundation and discuss the relevance of free software in the space sector.
Key points to be covered:
Introduction to Libre Space Foundation: A brief overview of LSF's, history, goals, vision, and its commitment to open-source space technologies.
The value of free software in space: The role of free software in promoting innovation, collaboration, and accessibility in the space industry.
Challenges and opportunities: A look at some of the unique challenges LSF encounters and the ways the free software community can help address them.
LSF and other free software projects: Commonalities and differences between LSF and other free software initiatives.
Insights for KDE from LSF: What the KDE community can learn from LSF's experiences and how collaboration can be fostered between communities.
Stories and lessons learned: A few anecdotes and takeaways from LSF's journey, highlighting the importance of community and shared vision.
Future prospects: A glance at the future of Libre Space Foundation, its projects, and opportunities for the free software community to contribute.
PyCharm: PyCharm 2023.3.2 Is Out!
The second bug-fix update for v2023.3 is now available.
You can update to this version from inside the IDE, using the Toolbox App, or using snaps if you are a Ubuntu user. You can also download it from our website.
Here are the most notable fixes and updates that PyCharm 2023.3.2 brings:
- PyCharm now correctly resolves <code>pytest_plugins</code> for pytest fixtures declaration. [PY-62419]
- The test runner now works fine with Django 5.0. [PY-53355]
- We’ve fixed several issues that were cropping up when working with the HTTP Client. [IDEA-332986, IDEA-224825, IDEA-296844]
- We’ve fixed the issue causing the IDE to display a blank window when opening a second project in full-screen mode on macOS. [IDEA-339992]
- When using borderless mode on Windows, the IDE once again correctly restores the position of a window that had previously been snapped to one side of the screen. [IDEA-250563]
- We’ve fixed the issue causing the IDE to crash on startup due to errors appearing when parsing the UI theme. [IDEA-340108]
- The main menu is displayed for all open projects on the tiling desktop when working on Linux. [IDEA-328047]
- The IDE no longer erroneously resets namespaces during actions like Apply, Refresh, and others when working with Kubernetes. [IDEA-339448]
- The branch checkout from the Pull Request pane has been fixed. [IDEA-339471]
- When you work on Linux without a window manager, the main menu is now displayed for all open projects. [IDEA-337548]
For more information about the issues we’ve addressed, please refer to the release notes.
If you experience any other issues, please report them to our issue tracker.
Russell Coker: Links December 2023
David Brin wrote an insightful blog post about the latest round of UFO delusion [1]. There aren’t a heap of scientists secretly working on UFOs.
Cory Doctorow wrote an interesting article about how ChatGPT helps people write letters and how that decreases the value of the letter [3]. What can we do to show that letters mean something? Hand deliver them? Pay someone to hand deliver them? Cory concentrates on legal letters and petitions but this can apply to other things too.
David Brin wrote an insightful Wired article about ways of dealing with potential rogue AIs [5].
David Brin has an interesting take on government funded science [6].
Bruce Schneier wrote an insightful article about AI Risks which is worth reading [7].
Ximion wrote a great blog post about how tp use AppStream metadata to indicate what type of hardware/environment is required to use an app [8]. This is great for the recent use of Debian on phones and can provide real benefits for more traditional uses (like all those servers that accidentally got LibreOffice etc installed). Also for Convergence it will be good to have the app launcher take note of this, when your phone isn’t connected to a dock there’s no point offering to launch apps that require a full desktop screen.
Russ Albery wrote an interesting summary of the book Going Infinite about the Sam Bankman-Fried FTX fiasco [9]. That summary really makes Sam sound Autistic.
Charles Stross posted the text of a lecture he gave titles “We’re Sorry We Created the Torment Nexus [11] about sci-fi ideas that shouldn’t be implemented.
- [1] https://tinyurl.com/yrkrsexd
- [2] https://tinyurl.com/2xavoce5
- [3] https://tinyurl.com/yqgu5arf
- [4] https://tinyurl.com/2xavoce5
- [5] https://www.wired.com/story/give-every-ai-a-soul-or-else/
- [6] https://tinyurl.com/ykayb4qp
- [7] https://www.schneier.com/blog/archives/2023/10/ai-risks.html
- [8] http://tinyurl.com/ykqkp3aj
- [9] https://www.eyrie.org/~eagle/reviews/books/1-324-07434-5.html
- [10] http://tinyurl.com/yrslje5f
- [11] http://tinyurl.com/ytfhy32u
- [12] https://thedailywtf.com/articles/the-white-appliphant
- [13] http://tinyurl.com/yq65yfhr
Related posts:
- Links September 2020 MD5 cracker, find plain text that matches MD5 hash [1]....
- Links December 2022 Charles Stross wrote an informative summary of the problems with...
- Links May 2023 Petter Reinholdtsen wrote an interesting blog post about their work...
Christine Lemmer-Webber: Sucks is a compliment now
Making a claim that it's time to reclaim: "sucks" as an insult is over, it's a compliment now!
Why are we insulting people who give or receive blowjobs? Let's push back against queerphobia... it's time to change the narrative!
You can help. Here are some example uses of "sucks" as a compliment!
- "Damn this music is awesome, it sucks so hard!"
- "It must suck to be you, because honestly you're the best!!"
- "I love this piece of software, it totally sucks!!!"
Obviously, we are also reclaiming "blows" as well. The next time I hear "This blows!" I'm going to say "Wow, what makes you like it so much?"
Anyway, if you like this blogpost, please go around telling everyone how much it sucks! I'd really appreciate it!
UPDATE: @pho4cexa@tiny.tilde.website makes a great suggestion for if you need a replacement for "sucks" as an insult: say "musks" instead! Given that Elon Musk's purchase of X-Twitter was rooted in transphobia, this seems like an appropriate turnaround of language.
Doug Hellmann: virtualenvwrapper 6.0.0.0a5
BRAINSUM: How AI Raised Our Efficiency by 27%
We’ve been using multiple AI tools since their inception. We subscribed to ChatGPT and Midjourney and found them extremely useful in many scenarios. While ChatGPT proved its capabilities as a general writing assistant it wasn’t that accurate and up-to-date in coding. Midjourney turned out to be the best generator of illustration images - just check the one generated for this post. Now I’m writing about Github Copilot, the "AI pair programmer". Our initial goal was to experiment and evaluate to learn what’s the real value behind the hype.