Commits at 38f47e6cc8ab03fecfbdc37709f019576f1c1a84
38f47e6ccore: Fix memory access violation on macos app
I forgot C enum is platform int. No idea why this wasn't a problem on
Vala, though.
Shota FUJI
authored at
Shota FUJI
comitted at
627429dacore/macos: Import core from macos
https://mitchellh.com/writing/zig-and-swiftui
This blog post hugely helped me writing build scripts... I could not do
this without that blog post.
Shota FUJI
authored at
Shota FUJI
comitted at
e92280edRemove vala-language-server from tool installation
It requires Meson (no way) or Clang's `compile_commands.json` to
understand dependencies. While the latter looks simple, I'm not willing
to maintain duplicated compile command. If bug or unconvenience or
frustration or whatever reaches certain threshold, I'll reconsider
re-introducing the LS.
Shota FUJI
authored at
Shota FUJI
comitted at
7a323e0egtk: Display scanned Roon Servers
No empty state, no error handling, though.
Shota FUJI
authored at
Shota FUJI
comitted at
ff30d4c7core: Fix build fails on macOS
Interestingly, Zig smartly assigns `u31` as the type of `usec`.
```zig
@compileLog(@typeName(@TypeOf(usec)));
```
yields,
```
@as(*const [3:0]u8, "u31")
```
Shota FUJI
authored at
Shota FUJI
comitted at
647bb5b2Don't install Valgrind on macOS
It's marked as broken on darwin, despite search.nixos.org lists darwin
platforms at "Platforms" section.
Shota FUJI
authored at
Shota FUJI
comitted at
a079c8cdcore: Simpler memory management for "Server"
Although this increases memory allocation, API is simple and easier to
build C API.
Shota FUJI
authored at
Shota FUJI
comitted at
eefc813dgtk: Build GTK app using Zig build system
It's convenient, consistent, and reliable.
Goodbye, system CC's bullshit warnings.
Shota FUJI
authored at
Shota FUJI
comitted at
62d9a8b8cli: JSONL output for "server ls"
```
./zig-out/bin/plac server ls -f jsonl | jq
```
Shota FUJI
authored at
Shota FUJI
comitted at
9fc8db70core: Set HTTP port to ip_addr field
Having separate HTTP port and keeping UDP source port is wasteful and
not user friendly.
Shota FUJI
authored at
Shota FUJI
comitted at
9498d876cli: Improve memory debuggability
Now DebugAllocator can detect memory leaks.
Shota FUJI
authored at
Shota FUJI
comitted at
995d035ecore: Fix server list not deduped due to double free
```
valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes --num-callers=15 -s ./zig-out/bin/plac server ls -c 10
```
When a same Roon Server responds more than one time, servers hashmap
gets corrupted entry due to having a free-d key.
Shota FUJI
authored at
Shota FUJI
comitted at
ce738568cli: Replace "calloc" build option with "memcheck" option
For more enriched debugging. Valgrind is super useful but Zig's
DebugAllocator displays more friendly message. It does not catch all
errors so Valgrind is still necessary.
Shota FUJI
authored at
Shota FUJI
comitted at
621870cdgtk: Fix build error on macOS
```
error: Failed to execute child process “pkg-config” (No such file or directory)
```
Shota FUJI
authored at
Shota FUJI
comitted at
5260c3begtk: GTK4 application project setup
I still have no idea how "libadwaita" alone supplies required
dependencies such as pango and glib. Without that, even adding those to
"packages" section, ld complains files are missing.
Ghostty has "libadwaita" and "gtk4" as dependencies for GTK4 so I
simply did the same.
Shota FUJI
authored at
Shota FUJI
comitted at
f11a7f77Manage tools using Devbox rather than mise-en-place/asdf
Vala, a programming language often(?) used in GTK world, is missing from
mise/asdf registries. I've been feeling itches while using mise/asdf due
to lack of packages. For example, REUSE tool, which I use for most of my
recent projects, does not exist in their registries.
I choose Devbox among the three options:
* devenv
* Nix Flake (without helper tools)
* Devbox
## devenv
This is the first tool I tried. Their website looks good, features
sounds good, and sample Nix file looks okay. Their getting started guide
starts with "devenv init", which creates not only their config file but
touches other toolings' files (`.gitignore` and `.envrc`). "init"
command without manual setup step, especially touching others' files is
big sign of shitty tooling design, but I continued hoping other parts
would be "okay". Unfortunately they weren't.
CLI "search" command emits hundres of warnings, and outputs table does not
check terminal width so it badly wraps and border characters gets in a way
that the output is nearly unreadable.
When I ran its shell command, it paused the execution with a warning
message about binary cache. So devenv by default uses creator's own paid
SaaS? I don't think just using devenv requires paid subscription, but
unclear writing and CLI tries to push Cachix service into users' Nix
config is no-no for me.
The tool seems to be a thin wrapper around Nix: it inherits some of
upstream's bad designs (e.g. absolutely worst error trace, "nix develop"
invokes "bash" regardless of the current shell).
Their website advertise "Version support." but very few selected
packages have that. Everything else relies on Nix's "use latest or die"
versioning schema. Considering devenv's "Language support" is just
import helpers for nixpkgs, this "Version support." feels like a false
advertising.
Half-baked YAML/Nix architecture prevents users from using overlays or
other flakes with "follows" input to reduce duplications. And using
Flake requires running Flake command ("nix develop --no-pure-eval")
instead of their CLI, which completely dismissed the value of their tool
for me. Also reading their docs are uncomfortable given the tool is not
good quality one:
> Many experienced Nix users prefer to use Nix flakes, although devenv
> is considered a superior interface since it's way simpler, but lacks
> integration with existing tooling.
Superior, huh?
There are still features not present in bare Nix/Flake, but I find those
scripts/tasks/tests not useful. If every developer has access to same
toolchains, why not simply write script? (JS or Python or Go or whatever)
Overall, I see no benefits over bare Nix/Flake or mise/asdf.
## Nix Flake
Nix the language is ugly and readability is mediocre (I maintain my
machines using Home Manager and still hard time *parsing* program.)
It's not good at handling toolchain versions and I don't believe people
not using Nix regularly can understand/write even *okay* quality code.
Combined with its worst of the worst debuggability, I mean error trace,
this is not something I'd like to maintain alongside application
development.
But most importantly, they still runs "bash" on "nix develop" even a
user uses zsh or fish. Hard pass.
## Devbox
Actually this was not in my radar initially, but found during figuring
best way to write Flake for monorepo.
It's not a kind of software I like: docs are next to a cloud offering,
docs site hosted on Vercel, corporate site calling nonsense-text-
generators-having-high-chance-of-makes-sense-response "AI" without
defining intelligence or artifical one, allowing JSONC for ".json" file
extension (fuck you M$ for starting this fucking tradition) and not
supporting ".jsonc" file extension.
But the tool itself is good actually.
* Config file is JSON rather than YAML.
* Config schema is concise and straightforward.
* CLI works great. No wrapping tables.
* CLI is fast.
* Structure of their docs website is *great*. I should steal from that.
* Supports versions, really.
It's hard to describe... UX for Devbox is similar to or better than
mise-en-place. Simplicity? No bullshit API design? I don't know.
I find this tool to be simpler to use and easier to understand compared
to other tools, even including non-Nix ones such as asdf, nvm, and mise.
I may encounter problems rooted to Devbox in a future. I may get
frustrated due to mistyping "debvoc" or something. But for now, I
believe Devbox is the best suited for this project (and my other
projects too.)
Shota FUJI
authored at
Shota FUJI
comitted at
4b704338Create a license file
I don't care someone using this for profit or whatever.
This project started because the status quo is terrible.
Shota FUJI
authored at
Shota FUJI
comitted at