TIL: S3 kann Torrents
Posts mit Tag "til"
TIL sqlite3_set_authorizer. Damit kann man einen Callback definieren, den SQLite aufruft, wenn eine Query auf eine bestimmte Datenbank/Tabelle/Spalte zugreifen möchte.
Gefunden, weil node:sqlite das jetzt kann:
import { DatabaseSync, constants } from 'node:sqlite';
const db = new DatabaseSync(':memory:');
// Set up an authorizer that denies all table creation
db.setAuthorizer((actionCode) => {
if (actionCode === constants.SQLITE_CREATE_TABLE) {
return constants.SQLITE_DENY;
}
return constants.SQLITE_OK;
});
// This will work
db.prepare('SELECT 1').get();
// This will throw an error due to authorization denial
try {
db.exec('CREATE TABLE blocked (id INTEGER)');
} catch (err) {
console.log('Operation blocked:', err.message);
} TIL Industrieminute.
Heute im Changelog von Bun gesehen: Node.js hat eine Histogram-API: createHistogram:
import { createHistogram } from "perf_hooks";
// Create a histogram that can record values between 1 and 1,000,000,
// maintaining 3 significant figures of precision.
const histogram = createHistogram({
lowest: 1,
highest: 1_000_000,
figures: 3,
});
histogram.record(100);
histogram.record(200);
histogram.record(1000);
histogram.record(100); // Record a duplicate
console.log("Min:", histogram.min);
console.log("Max:", histogram.max);
console.log("Mean:", histogram.mean);
console.log("Standard Deviation:", histogram.stddev);
console.log("Total Count:", histogram.totalCount);
console.log("Percentile 50 (Median):", histogram.percentile(50)); Any program can be a GitHub Actions shell.
Man kann damit auch Parameter von Bash setzen. Hier global als Default:
defaults:
run:
shell: bash -euxo pipefail {0} ip kann JSON ausgeben: ip -j a
Docker kann mehrere Build-Contexte. Damit kann man dann shared-Directorys haben, ohne den Build-Context auf den gemeinsamen Root zu legen.
Firefox’s html parser is written in Java and converted to C++ at build time. Hier die Java-Sourcen.
Wundert mich sehr, dass das noch niemand nach Rust portiert hat. Klar, so ein HTML-Parser is bestimmt nicht so trivial, aber wenn die Java-Implementierung sich automatisiert nach C++ übersetzen kann, wird das Problem schon relativ vereinfacht sein. Vielleicht benutzen sie in der C++-Version zu viel mutability, die man in Rust einfach nicht tun würde.
TIL: HTML-<address>-Element. War gerade dabei, zu schauen, wie man ein Impressum mit möglichst viel a11y macht.
Die Curl-CLI hat einen Parameter --libcurl <filename>[hinweis], mit dem man sich ein C-Programm ausgeben lassen kann, welches die libcurl so benutzt, dass der Request dabei heraus kommt, den man mit der Curl-CLI gemacht hat.
TIL docker system df:
# docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 5 5 1.318GB 858.6MB (65%)
Containers 5 5 3.416kB 0B (0%)
Local Volumes 5 1 442B 354B (80%)
Build Cache 0 0 0B 0B Man kennt ja aus Docker-Multistage-Builds das COPY --from=build, um eine Datei aus einer anderen Stage zu kopieren.
Gerade habe ich beim Docker-Image von composer gesehen, dass das nicht nur beschränkt auf Images im selben Multi-stage-Build ist. Man kann dort jedes Image angeben.
Also kann man statt dem hier:
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
&& php composer-setup.php --install-dir=/usr/local/bin --filename=composer \
&& php -r "unlink('composer-setup.php');" \
&& composer --version
Auch das hier machen und die Binary aus dem offiziellen composer-Image kopieren:
COPY --from=composer /usr/bin/composer /usr/bin/composer
Nachteil dabei ist, dass der Builder dafür das komplette Image runterladen muss. Ist in manchen Situationen vielleicht ganz praktisch.
TIL es gibt ein standardisiertes Format für Test-Output: Test Anything Protocol (TAP).
HLI, dass argv[0] NULL sein kann. Hintergrund: Man kann beim Syscall execve einfach {NULL} übergeben. Das wurde jetzt für PolicyKit relevant und endete in “pwnkit”.
Dass argv[0] NULL sein kann, haben viele Programme sicherlich nicht auf dem Schirm. Gibt bestimmt auch viele andere betroffene Software.