Před rokem a půl vývojáři postmarketOS informovali, že pro projekt hledají nové jméno. Včera bylo oznámeno: postmarketOS se nově jmenuje Nura.
Hra Factorio dorazila na Printables. Hned teď si můžete stáhnout 65 různých modelů a nechat celou mimozemskou planetu oživnout na svém stole.
GNU Project Debugger aneb GDB byl vydán ve verzi 18.1. Podrobný přehled novinek v souboru NEWS.
Prezident USA Donald Trump během svého projevu na valném shromáždění OSN 22. září 2026 prohlásil, že umělá inteligence 'bude dále oficiálně nazývána superinteligencí', zkráceně SI. Svůj návrh zdůvodnil takto: 'Použití slova artificial činí inteligenci falešnou. Ona falešná není, ve skutečnosti je úžasná'. Zároveň ve svém proslovu prohlásil, že Spojené státy kategoricky odmítají jakékoliv pokusy o vytvoření 'globalistického
… více »Čínská technologická firma Xiaomi představila novou verzi 2.6 svého modelu MiMo, váhy modelů MiMo‑V2.6‑Pro‑RL a MiMo‑V2.6‑Flash‑RL jsou dostupné na HuggingFace pod licencí MIT. Výkonnější varianta Pro má přes bilion parametrů, z toho 42 miliard aktivních, úspornější Flash 309 miliard parametrů, z nichž se při generování aktivuje přibližně 15 miliard. Oba modely mají délku kontextového okna milion tokenů. Tyto MoE modely zvládají
… více »Proběhl Snapdragon Summit 2026. Společnost Qualcomm se mimo jiné pochlubila během Linuxu na čipech Snapdragon X2. Zatím pouze v ranní verzi vhodné pro vývojáře linuxových distribucí a přispěvatele do jádra Linux.
Byla vydána nová verze 2.0 klienta F-Droid určeného pro instalaci bezplatných a otevřených mobilních aplikací do Androidu ze softwarového repozitáře F-Droid (Wikipedie). Jedná se o alternativu k Google Play.
Debian Inference Portal nabízí vývojářům Debianu bezplatný přístup ke službám AI/LLM. Sponzorem je společnost Scaleway.
Robert Ressl nalezl ve WordPressu kritickou zranitelnost CVE-2026-87902 s CVSS 9.2. Útočníkům umožňuje neoprávněný přístup k souborům a vzdálené spuštění kódu (RCE). Opravena je ve verzích 7.1.2, 7.0.6, 6.9.9…
Společnost Meta na dvoudenní konferenci Meta Connect 2026 představuje své novinky. Vypíchnout lze lehké brýle s funkci VR Meta VR Glasses. Do prodeje půjdou na jaře 2027 za cenu 1299,99 dolarů.
#include <czmq.h>
static void
s_actor1 (zsock_t *pipe, void *args)
{
char *name = strdup (args);
zsock_signal (pipe, 0);
for (int i = 0; i != 10; i++)
zsys_info ("%s:\tcount %d\n", name, i);
zstr_free (&name);
}
int main () {
zactor_t *actor = zactor_new (s_actor1, "actor1");
while (true) {
char *str = zstr_recv (actor);
if (str) {
puts (str);
zstr_free (&str);
}
else
break;
}
zactor_destroy (&actor);
}
Každý actor funkce očekává dva parametry, zeromq socket a void ukazatel na případná další data. Obvykle se args nevyplatí používat a pokud, tak na něco jako log_prefix. Rozhodně není dobrý nápad takto předávat třeba zeromq sockety. Technicky totiž actor běží v jiném vlákně.
Parametr pipe je potom EXPAIR socket, který což je v podstatě obousměrná asynchronní roura. Ta funguje přes inproc transport, takže všechny funkce send/recv pouze předávají ukazatele mezi vlákny. Výhodou je, že tyto funkce akceptují actor, zeromq socket, nebo pipe. Takže je používání konzistentní ze všech stran.
Třída zactor má velmi jednoduchý protokol, actor samotný musí oznámit pomocí zsys_signal, že dokončil inicializaci a může zpracovávat zprávy. Druhým požadavkem je, že actor musí číst ze svého socketu a v případě příkazu $TERM se ukončit.
#include <czmq.h>
static void
s_actor1 (zsock_t *pipe, void *args)
{
char *name = strdup (args);
zsock_signal (pipe, 0);
for (int i = 0; i != 10; i++)
zsys_info ("%s:\tcount %d\n", name, i);
zstr_send (pipe, "$DONE");
zstr_free (&name);
}
čte a
int main () {
....
char *str = zstr_recv (actor);
if (str && streq (str, "$DONE"))
break;
A tady vidíme flexibilitu třídy zactor, knihovny zeromq a posílání zpráv. Je triviální zajistit komunikaci mezi hlavním vláknem a actory.
static void
s_actor1 (zsock_t *pipe, void *args)
{
zsock_signal (pipe, 0);
zpoller_t *poller = zpoller_new (pipe, NULL);
while (!zsys_interrupted) {
void *which = zpoller_wait (poller, -1);
if (!which)
break;
zmsg_t *msg = zmsg_recv (pipe);
char *cmd = zmsg_popstr (msg);
if (!cmd || streq (cmd, "$TERM")) {
zmsg_destroy (&msg);
zstr_free (&cmd);
break;
}
else
if (streq (cmd, "COUNT")) {
char *smax = zmsg_popstr (msg);
int max = atoi (smax);
for (int i = 0; i != max; i++)
zsys_info ("count %d", i);
zstr_send (pipe, "$END");
}
zmsg_destroy (&msg);
zstr_free (&cmd);
}
zpoller_destroy (&poller);
}
...
int main () {
zactor_t *actor = zactor_new (s_actor1, NULL);
zstr_sendx (actor, "COUNT", "42", NULL);
Posílání dat do actoru je snadné. Funkce zstr_sendx odešle zprávu s vícero rámci (frame), která bude předána actoru. V těle actoru je zpráva zpracována a provedena.
Typický actor ovšem nekomunikuje pouze ze svým socketem pipe, ale obvykle má otevřených vícero socketů, které mpořebuje číst. Na tohle se hodí další třída zpoller, která čeká tak dlouho, než se na jednom ze sledovaných socketů neobjeví data, která je možné číst.
libmlm.so) a démon (malamute), který spouští actor mlm_server. Tento model je extrémně flexibilní, protože umožňuje snadný vývoj, testování i integraci do libovolného kódu. V zásadě je smyčka pokus/omyl je extrémně krátká a zároveň vývojář nepotřebuje znát LD_PRELOAD hacky jako cwrap, socket_wrapper a podobně.
Spuštění samotného brokeru potom vypadá zhruba takto ...
#include <malamute.h>
...
char *endpoint = "inproc://@/malamute";
zactor_t *server = zactor_new (mlm_server, "Malamute");
if (verbose)
zstr_sendx (server, "VERBOSE", NULL);
zstr_sendx (server, "BIND", endpoint, NULL);
while (true) {
char *str = zstr_recv (server);
if (str) {
puts (str);
zstr_free (&str);
}
else {
zsys_info ("Interrupted");
break;
}
}
zactor_destroy (&server);
Celý malamute potom běží jako actor, který ovšem na některé formy komunikace spouští další actory. Stejně tak klientská část je actor, takže i přes poměrně jednoduché API člověk má program, kde beží a spolupracuje několik vláken.
Ovšem o malamute až nekdy příště.
Tiskni
Sdílej:
Ladit takové systémy není zrovna triviální. Jsou tu tedy nějaké doporučené postupy – jak to co nejvíc zpřehlednit a usnadnit pochopení ostatním (a svému budoucímu já)? (protože psaní takových programů se někdy nejde vyhnout)Tak zrovna ohledně zeromq a actorů, tak postup je takový, že si člověk navrhne schéma a typ zpráv. Potom se postaví prototyp, který se otestuje na očekávaný výkon. No a pak se řeší binární formáty dat a podobně. V zásadě postup je rychlá iterace pokus/omyl a unit testy. Právě actor model a zprojekt k takovému stylu vývoje přímo vybízí. Ladit takové programy v debuggeru nelze (s výjimkou code dumpu). Jediná metoda jsou ladící výpisy. Výhoda je v tom, že při rychlém iterativním vývoji člověk napáchá pár chyb na jejichž řešení si na ta správná místa musí přidat ladící výpisy. Potom jsou obecnější rady, jako mít plně dokumentované a otestované API, nesdílet stav mezi komponentami a podobně.
Ladit takové programy v debuggeru nelze (s výjimkou code dumpu).Počítám, že na tyhle věci by se dal nasadit koncept Time traveling debuggeru, to by mohlo fungovat velmi pěkně. (Ačkoli implementace by asi nebyla úplně triviální.)