How to Manage 'Systemd' Services and Units Using 'Systemctl' in Linux
Systemctl is a systemd utility which is responsible for Controlling the systemd system and service manager. Systemd is a collection of system management daemons, utilities and libraries which serve...
How to Manage ‘Systemd’ Services and Units Using ‘Systemctl’ in Linux · tecmint.com [1]
A fantastic overview of the systemd cli.
Note
This post is a thought [2]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: https://www.tecmint.com/manage-services-using-systemd-and-systemctl-in-linux/
[2]: /thoughts/
Publishing rhythm
How to fix ZFS pool not importing at boot
You have probably tried Stack Exchange and reddit at this point, so what do you have to lose?
./techtipsy · ounapuu.ee [1]
Hacky solution to get zpool import tank to work on boot right away. This has been an issue that has plagued my system for months and no matter what dependencies I add in it never works, but adding a sleep as ExecStartPre did the trick.
Note
This post is a thought [2]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: https://ounapuu.ee/posts/2021/02/01/how-to-fix-zfs-pool-not-importing-at-boot/
[2]: /thoughts/
External Link
stackoverflow.com [1]
In flask apps I often get a 404 for routes with a trailing slash. This Stack Overflow post shows how to configure flask to allow trailing slashes on some or all routes.
Note
This post is a thought [2]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: https://stackoverflow.com/questions/33241050/trailing-slash-triggers-404-in-flask-path-rule
[2]: /thoughts/
Deleting Specific Lines in a File with sed or yq — Nick Janetakis
We
Nick Janetakis · nickjanetakis.com [1]
sed can be a tricky beast, I often stumble when trying to pipe into it. Next time I need to use sed, I should reference this article by Nick Janetakis. He makes it looks much easier than my experience has been, and it appears to behave like a vim :%s/ substitution does, or a g/ g command.
Note
This post is a thought [2]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: https://nickjanetakis.com/blog/deleting-specific-lines-in-a-file-with-sed-or-yq
[2]: /thoughts/
External Link
htmx.org [1]
json-enc extension converts url encoded form values into json encoded data, this is very useful for fastapi [2] to have the same interface for htmx [3] and curl type of interfaces.
Note
This post is a thought [4]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: https://htmx.org/extensions/json-enc/
[2]: /fastapi/
[3]: /htmx/
[4]: /thoughts/
Header Parameters - FastAPI
FastAPI framework, high performance, easy to learn, fast to code, ready for production
fastapi.tiangolo.com [1]
Getting request headers in fastapi [2] has a pretty nice stetup, it allows you to get headers values as function arguments,
I was able to use headers to detect if a request was made from htmx [3] or not.
If the request was made from htmx, then we want a html [4] format, otherwise I’m probably hitting the api programatically from something like curl or python
@post_router.post("/post/")
async def post_post(
request: Request,
post: PostCreate,
current_user: Annotated[User, Depends(try_get_current_active_user)],
session: Session = Depends(get_session),
is_hx_request: Annotated[str | None, Header()] = None,
) -> PostRead:
"create a post"
print('hx_request', hx_request)
db_post = Post.from_orm(post)
session.add(db_post)
session.commit()
session.refresh(db_post)
if is_hx_request:
return templates.TemplateResponse("post_item.html", {"request": request, "config": config, "post": db_post})
return db_post
Note
This post is a thought [5]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]:...
GitHub - 1j01/textual-paint: :art: MS Paint in your terminal.
:art: MS Paint in your terminal. Contribute to 1j01/textual-paint development by creating an account on GitHub.
GitHub · github.com [1]
1j01 [2] created a complete working clone of ms paint in the terminal using the textual framework. It’s incredible.
Note
This post is a thought [3]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: https://github.com/1j01/textual-paint
[2]: https://github.com/1j01
[3]: /thoughts/
Dear Red Hat… featuring Jeff Geerling (Changelog & Friends #7)
Red Hat's decision to lock down RHEL sources behind a subscription paywall was met with much ire and opened opportunity for Oracle to get a smack in and SUSE to announce a fork with $10 million beh…
Changelog · changelog.com [1]
Loved this explanation about all the recent lock down with RHEL from Jeff Geerling.
Note
This post is a thought [2]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: https://changelog.com/friends/7
[2]: /thoughts/
sqlite-utils now supports plugins
sqlite-utils 3.34 is out with a major new feature: support for plugins. sqlite-utils is my combination Python library and command-line tool for manipulating SQLite databases. It recently celebrated...
Simon Willison’s Weblog · simonwillison.net [1]
As the title states sqlite-utils now supports plugins. I dug in just a bit and Simon implemented this completely with entrypoints, no framework or library at all.
Note
This post is a thought [2]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: https://simonwillison.net/2023/Jul/24/sqlite-utils-plugins/
[2]: /thoughts/
-
Great short explaination of session vs token authentication.
Note
This post is a thought [1]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: /thoughts/
Form Data - FastAPI
FastAPI framework, high performance, easy to learn, fast to code, ready for production
fastapi.tiangolo.com [1]
Getting form data inside of fastapi [2] was not intuitive to me at first. Everything I had used in fastapi leaned on pydantic models. Form data comes in differently and needs collected differently.
from typing import Annotated
from fastapi import FastAPI, Form
app = FastAPI()
@app.post("/login/")
async def login(username: Annotated[str, Form()], password: Annotated[str, Form()]):
return {"username": username}
Note
This post is a thought [3]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: https://fastapi.tiangolo.com/tutorial/request-forms/#define-form-parameters
[2]: /fastapi/
[3]: /thoughts/
[1]
I am creating this post from a desktop app that I created in 3 lines.
import webview
webview.create_window('Woah dude!', 'https://thoughts.waylonwalker.com')
webview.start()
Note
This post is a thought [2]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: /static/https://pywebview.flowrl.com/guide/usage.html
[2]: /thoughts/
Column INSERT/UPDATE Defaults
—
SQLAlchemy 1.4 Documentation
docs.sqlalchemy.org [1]
sqlalchemy server_defaults end up as defaults in the database when new values are inserted.
t = Table(
"test",
metadata_obj,
Column("abc", String(20), server_default="abc"),
Column("created_at", DateTime, server_default=func.sysdate()),
Column("index_value", Integer, server_default=text("0")),
)
CREATE TABLE test (
abc varchar(20) default 'abc',
created_at datetime default sysdate,
index_value integer default 0
)
Note
This post is a thought [2]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: https://docs.sqlalchemy.org/en/14/core/defaults.html#server-invoked-ddl-explicit-default-expressions
[2]: /thoughts/
Template Designer Documentation — Jinja Documentation (3.1.x)
jinja.palletsprojects.com [1]
A feature of jinja that I just discovered is including sub templates. Here is an example from the docs.
{% include 'header.html' %}
Body goes here.
{% include 'footer.html' %}
And inside of my thoughts project I used it to render posts.
<ul id='posts'>
{% for post in posts.__root__ %}
{% include 'post_item.html' %}
{% endfor %}
</ul>
note that post_item.html [2] automatically inherits the post variable.
Note
This post is a thought [3]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: https://jinja.palletsprojects.com/en/3.1.x/templates/#include
[2]: /html/
[3]: /thoughts/
Templates - FastAPI
FastAPI framework, high performance, easy to learn, fast to code, ready for production
fastapi.tiangolo.com [1]
A guide to add Jinja2Templates to fastapi [2].
Note
This post is a thought [3]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: https://fastapi.tiangolo.com/advanced/templates/
[2]: /fastapi/
[3]: /thoughts/
htmx ~ Documentation
htmx gives you access to AJAX, CSS Transitions, WebSockets and Server Sent Events directly in HTML, using attributes, so you can build modern user interfaces with the simplicity and power of hypert...
htmx.org [1]
A complete reference of all of the htmx [2] swapping methods.
Note
This post is a thought [3]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: https://htmx.org/docs/#swapping
[2]: /htmx/
[3]: /thoughts/
External Link
stackoverflow.com [1]
I am trying to use htmx [2] on a new fastapi [3] site for my thoughts, and have been hitting this error.
Mixed Content: The page at 'https://front.mydomain.com/#/clients/1' was loaded over HTTPS, but requested an insecure resource 'http://back.mydomain/jobs/?_end=25&_order=DESC&_sort=id&_start=0&client_id=1'. This request has been blocked; the content must be served over HTTPS.
What is happening # [4]
I have an htmx component that gets the current users name, but if they are not logged in the backend redirects to a login form.
<div hx-get='/users/me' hx-trigger='load'>
get me
</div>
But for some reason when the front end gets this redirect, it tries to do it through http, and flags it as insecure.
The solution # [5]
To solve this issue, the post directs to set the --forwarded-allow-ips to ‘*’
uvicorn thoughts.api.app:app --port 5000 --reload --log-level info --host 0.0.0.0 --workers 1 --forwarded-allow-ips '*'
Note
This post is a thought [6]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: https://stackoverflow.com/questions/63511413/fastapi-redirection-for-trailing-slash-returns-non-s...
gistfile1.txt [1]
text
On void linux.
Under `/etc/containers/` there is a file called `registries.conf`. It is complemented by `man 5 containers-registries.conf`.
Change (for me lines 11-12) which say
[registries.search]
registries = []
to
[registries.search]
registries = ['docker.io']
(drawn from https://www.projectatomic.io/blog/2018/05/podman-tls/)
---
Without the above you won’t be able to use basic podman functions. You might get errors like:
- Error: unable to pull fedora:28: image name provided is a short name and no search registries are defined in the registries config file.
- Error: unable to pull stripe/stripe-cli: image name provided is a short name and no search registries are defined in the registries config file.
---
Various documentation (redhat blog entries, man podman pages) say that dockerhub is a default, but without this step it’s clearly not.
Good luck. Feel free to use the comment box below if you have a github account.
By default podman will not pull images from docker.io and will need setup. This guide worked for me.
Note
This post is a thought [2]. It’s a short note that I make
about someone else’s content online #thoughts
References:...
External Link
htmx.org [1]
Using templates with htmx [2] requires the client-side-templates extension, and the template engine to be loaded in a <script> tag.
example htmx using templates.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<script src="https://unpkg.com/htmx.org"></script>
<script src="https://unpkg.com/htmx.org/dist/ext/client-side-templates.js"></script>
<script src="https://unpkg.com/mustache@latest"></script>
</head>
<body>
<div hx-ext="client-side-templates">
<button hx-get="https://jsonplaceholder.typicode.com/todos/1"
hx-swap="innerHTML"
hx-target="#content"
mustache-template="foo">
Click Me
</button>
<p id="content">Start</p>
<template id="foo">
<p> {% raw %}{{userID}}{% endraw %} and {% raw %}{{id}}{% endraw %} and {% raw %}{{title}}{% endraw %} and {% raw %}{{completed}}{% endraw %}</p>
</template>
</div>
</body>
</html>
Note
This post is a thought [3]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: https://htmx.org/extensions/client-side-templates/
[2]: /htmx/
[3]: /thoughts/
Static Files - FastAPI
FastAPI framework, high performance, easy to learn, fast to code, ready for production
fastapi.tiangolo.com [1]
Mounting static files in fastapi [2].
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
app = FastAPI()
app.mount("/static", StaticFiles(directory="static"), name="static")
Note
This post is a thought [3]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: https://fastapi.tiangolo.com/tutorial/static-files/
[2]: /fastapi/
[3]: /thoughts/