‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
Welcome to the
System Crafters Newsletter!
Issue #008 - March 7, 2024
by David Wilson
-- This newsletter is best viewed with a monospace font! --
-- If your e-mail client can't do that, use this URL: --
-- https://systemcrafters.net/newsletter/sc-news-008.html --
-- Read it in Emacs with `M-x eww`! --
== Table of Contents ==
1. Introduction
2. The Mission of System Crafters
3. Learn Scheme with Us!
4. Tip of the Week - Project Switch Actions in Emacs
5. Crafter News
6. Friday's Stream - Code Dive: Project.el in Emacs
7. Closing
== Introduction ==
Welcome to the new issue of the System Crafters Newsletter!
This issue finally delivers on a change that I've been mulling over for months:
the introduction of a more modern layout using HTML.
I didn't forget about those of you who prefer the plain text format, though;
this e-mail contains both the HTML and old-school plain text versions! Your
e-mail client should be able to display either format to you by switching a
setting in the message viewer.
This new improvement is possible thanks to Org Export and e-mail's support for
multiple [MIME] types for the message body. In the near future, I'll continue
my [Publishing Websites with Org Mode] series to explain all of the cool things
I've learned about Org's publishing system!
I am still trying to calibrate the look of the HTML version of the e-mail so
please feel free to reply directly and let me know what you think, particularly
if the fonts are too large or small or if the colors I use are not very
readable.
I hope you like it!
------
Links:
[MIME] <https://en.wikipedia.org/wiki/MIME>
[Publishing Websites with Org Mode]
<https://www.youtube.com/watch?v=AfkrzFodoNw&list=PLEoMzSkcN8oNBsVT7h2Fyt4oTABckSv8j>
== The Mission of System Crafters ==
You might be surprised to learn that the System Crafters YouTube channel and
community has been going for almost 4 years now. It's been amazing to see so
many smart, friendly, and interesting people join us every year. It has become
a welcoming little corner of the Internet where geeks and hackers of all sorts
can hang out and share their interests.
As the community continues to grow, it feels appropriate to define a guiding
mission that reflects what we've already been doing and where we are headed.
After thinking a lot about this, I've come up with this concise mission
statement:
Elevating computer enthusiasts to experts of code and craft.
We're all /computer enthusiasts/ to some degree, there's no questioning that.
We come from many different backgrounds; professional programmers, engineers,
researchers, physicists, mathematicians, entrepreneurs, creatives, and many
more. Our passion is to explore what we can do with our computers to have fun,
build cool projects, share what we learn, and achieve personal goals.
We /elevate/ someone by giving them knowledge and support to improve the skills
needed to accomplish their goals. We do it in a kind, constructive, and
encouraging way. Crafting our tools and systems is so much fun that we want
everyone to experience the same satisfaction from it!
We become /experts/ by developing a level of skill that gives complete
confidence and ability to accomplish our goals. Whether it's to customize every
detail of your working environment, build useful tools for oneself and others,
or achieve the next great hack, our expertise is what gets us there. Those of
us who are experts should share our knowledge to help create more experts!
I believe that everyone would benefit from learning to /code/, to become a
programmer. Our lives are becoming more entwined with software and technology
every year. Having the ability to write code gives you incredible power, the
ability to bend software to your will rather than be controlled by it. Even if
you don't consider yourself a programmer, you *can* learn to do it and I am very
motivated to help you.
Regardless of one's expertise or programming ability, there is always joy in the
/craft/ of computing. This is what keeps us up late at night, tweaking our
Emacs configuration or trying out a new window manager. The inescapable desire
to build something both useful and personally meaningful. System crafting is a
form of self expression and a fulfilling endeavour that can actually improve the
quality of your life!
What does all this mean for you, the reader? If you are early in your system
crafting journey, we are here to help you learn and accomplish your goals. If
you are an experienced crafter, please share what you know and inspire others to
keep reaching for the next level of experience.
I am very thankful that all of you are on this journey with me, especially those
of you who have been around since the beginning. Your continued participation
and enthusiasm has given me confidence that this community can actually have a
meaningful impact.
My role here is to teach what I know and facilitate the operation of the
community. With your help, we can elevate many more computer enthusiasts to
experts!
Please feel free to reply to this e-mail with your thoughts, I would be happy to
hear from you.
== Learn Scheme with Us! ==
I've been working hard this week on the new iteration of the "Hands-On Guile
Scheme for Beginners" course that I announced last Thursday. I'm really excited
about all the improvements that I'm working on, I think it's going to make a
huge difference in the value that the course will provide.
To connect with the mission I described in the last section, my goal with this
course is to teach beginners, either to programming or just to Scheme, how to
think like a Scheme hacker and build real programs using a fascinating
programming language.
The potential for Scheme to become /the/ core language for system crafting is
only growing every year. I want to help more people to become Scheme hackers so
that we can all help to accelerate this progress and build some cool projects
while we do it!
There are a few seats left for the March iteration of the course, so if you're
interested to join you should sign up before next Friday, March 15th. More
details can be found on the course page:
https://systemcrafters.net/courses/hands-on-guile-scheme-beginners/
This is a unique opportunity to learn Scheme with a diverse group of crafters, I
hope you'll join us!
== Tip of the Week - Project Switch Actions in Emacs ==
This week I want to share a cool feature of Emacs' built-in `project.el' which
enables you to control what happens when you switch projects using `M-x
project-switch-project' (`C-x p p').
By default, `project-switch-project' will prompt you for a project to open, and
upon selecting a project you will be presented with a menu in the echo area with
a series of actions like finding files in the project, opening the project
directory with `find-file', or launching an Eshell buffer for the project. Each
action you are presented with has an associated keyboard key that you can press
to select that action.
As you'd probably expect, the set of actions that you are offered is
configurable! This list is stored in the variable `project-switch-commands'
which has the following default value as of Emacs 29:
,----
|
| (defcustom project-switch-commands
| '((project-find-file "Find file")
| (project-find-regexp "Find regexp")
| (project-find-dir "Find directory")
| (project-vc-dir "VC-Dir")
| (project-eshell "Eshell")))
|
`----
This variable holds a list where each item is another list beginning with the
symbol representing an Emacs Lisp function, a string for the action's name, and
an optional string to control the quick key that is presented for that action in
the echo area.
You can add any actions you like to this list using `add-to-list'. For example,
perhaps I want to make it really easy to search across a project using Ripgrep
as soon as I try to switch to it. I can add this single line to my
configuration:
,----
|
| (add-to-list 'project-switch-commands '(consult-ripgrep "Ripgrep" "F"))
|
`----
This binds the `consult-ripgrep' command (part of the [Consult] package) to the
action name "Ripgrep" and the quick key "F".
You can add any other actions you like in this way!
But what if you want `project.el' to immediately switch to your project without
prompting you?
You can replace the value of `project-switch-commands' with the symbol
representing any Emacs Lisp function to have it call that function immediately
without any prompting. Here's how you can configure it to immediately open up a
Dired buffer for the project using the `project-dired' command:
,----
|
| (setq project-switch-commands 'project-dired)
|
`----
There's one catch to this approach, though! It seems that the
`default-directory' is not set to the project path at the time that your
preferred function is executed, or at least that has been my experience.
In some cases, we need to create our own function to ensure that our action is
executed inside of the path of the project.
We can use the expression `(project-root (project-current))' to get the path of
the current project:
,----
|
| (defun my/project-magit-status ()
| (interactive)
| (magit-status (project-root (project-current))))
|
| (setq project-switch-commands 'my/project-git-status)
|
`----
If you want to learn more about `project.el', check out this week's live stream
where I'll dive into the code for this package to see what other interesting
tricks we can discover!
------
Links:
[Consult] <https://github.com/minad/consult>
== Crafter News ==
Here are some interesting news items in the broader sphere of system crafting:
* LibrePlanet 2024 is 2 months away!
LibrePlanet 2024 will be happening on May 4th and 5th this year! If you're
interested to attend either in-person or online, there are registration links
on the site below:
https://libreplanet.org/2024
There is a full deck of really interesting sessions to attend! I'll be giving
a keynote presentation called "Cultivating a welcoming free software community
that lasts" on Saturday morning. I hope I'll get to meet some of you there!
* Article: Proven Complexity and Technology Choice
Colin Woodbury, aka fosskers, has written another great article, this time
making the case that we should perhaps choose simpler tools for our projects
instead of making things unnecessarily complicated.
He makes this case by establishing a philosophical "razor" for evaluating
whether our technology choices are actually driven by need or just for our own
entertainment.
I certainly agree with the spirit of his point: to really solve problems it's
better to be as direct as possible without introducing anything that
complicates the software such that it is harder to maintain or even to
complete.
On the other hand, there's a lot of value in trying new languages, frameworks,
platforms, and tools to learn what you can and decide what works best for you.
Learning is a big part of becoming an expert crafter!
Colin's article is well worth a read:
http://www.fosskers.ca/en/blog/proven-complexity
== Friday's Stream - Code Dive: Project.el in Emacs ==
This week on "Code Dive" we'll be taking a deeper look at Emacs' built-in
project.el to see what interesting features or Emacs Lisp tricks we can
discover. If we have time, we'll try hacking on some customizations using the
hooks that this package provides.
The stream will go live at Friday, March 8th at 6PM EET (UTC+2), check your
local time on this page:
https://time.is/compare/1800_in_Athens
You can find the stream at these URLs:
https://youtube.com/live/O6hMwJfaXV8
https://twitch.tv/SystemCrafters
https://systemcrafters.net/live-streams/march-8-2024/
== Closing ==
I hope you enjoyed this issue of the System Crafters Newsletter! I always want
to improve and streamline the content so please send me your thoughts and
feedback by replying directly to this e-mail.
Until next time, Happy Hacking!
--
David Wilson
[email protected]