PimpMyGRC upravuje vzhled toolkitu GNU Radio a přidává alternativní barevná témata. Primárním cílem autora bylo pouze vytvořit tmavé prostředí vhodné pro noční práci, nicméně k dispozici je nakonec celá škála barevných schémat včetně možností různých animací a vizuálních efektů (plameny, matrix, bubliny...), které nepochybně posunou uživatelský zážitek na zcela jinou úroveň. Témata jsou skripty v jazyce Python, které nahrazují
… více »GIMP 3.2 byl oficiálně vydán (Mastodon, 𝕏). Přehled novinek v poznámkách k vydání.
FRANK OS je open-source operační systém pro mikrokontrolér RP2350 (s FRANK M2 board) postavený na FreeRTOS, který přetváří tento levný čip na plně funkční počítač s desktopovým uživatelským rozhraním ve stylu Windows 95 se správcem oken, terminálem, prohlížečem souborů a knihovnou aplikací, ovládaný PS/2 myší a klávesnicí, s DVI video výstupem. Otázkou zůstává, zda by 520 KB SRAM stačilo každému 😅.
Administrativa amerického prezidenta Donalda Trumpa by měla dostat zhruba deset miliard dolarů (asi 214 miliard Kč) za zprostředkování dohody o převzetí kontroly nad aktivitami sociální sítě TikTok ve Spojených státech.
Projekt Debian aktualizoval obrazy stabilní větve „Trixie“ (13.4). Shrnuje opravy za poslední dva měsíce, 111 aktualizovaných balíčků a 67 bezpečnostních hlášení. Opravy se týkají mj. chyb v glibc nebo webovém serveru Apache.
Agent umělé inteligence Claude Opus ignoroval uživatelovu odpověď 'ne' na dotaz, zda má implementovat změny kódu, a přesto se pokusil změny provést. Agent si odpověď 'ne' vysvětlil následovně: Uživatel na mou otázku 'Mám to implementovat?' odpověděl 'ne' - ale když se podívám na kontext, myslím, že tím 'ne' odpovídá na to, abych žádal o svolení, tedy myslí 'prostě to udělej, přestaň se ptát'.
Po 8. květnu 2026 už na Instagramu nebudou podporované zprávy opatřené koncovým šifrováním. V chatech, kterých se bude změna týkat, se objeví pokyny o tom, jak si média nebo zprávy z nich stáhnout, pokud si je chcete ponechat.
V lednu byla ve veřejné betě obnovena sociální síť Digg (Wikipedie). Dnes bylo oznámeno její ukončení (Hard Reset). Společnost Digg propouští velkou část týmu a přiznává, že se nepodařilo najít správné místo na trhu. Důvody jsou masivní problém s boty a silná konkurence. Společnost Digg nekončí, malý tým pokračuje v práci na zcela novém přístupu. Cílem je vybudovat platformu, kde lze důvěřovat obsahu i lidem za ním. Od dubna se do Diggu na plný úvazek vrací Kevin Rose, zakladatel Diggu z roku 2004.
MALUS je kontroverzní proprietarní nástroj, který svým zákazníkům umožňuje nechat AI, která dle tvrzení provozovatelů nikdy neviděla původní zdrojový kód, analyzovat dokumentaci, API a veřejná rozhraní jakéhokoliv open-source projektu a následně úplně od píky vygenerovat funkčně ekvivalentní software, ovšem pod libovolnou licencí.
Příspěvek na blogu Ubuntu upozorňuje na několik zranitelností v rozšíření Linuxu o mandatorní řízení přístupu AppArmor. Společně jsou označovány jako CrackArmor. Objevila je společnost Qualys (technické detaily). Neprivilegovaný lokální uživatel se může stát rootem. Chyba existuje od roku 2017. Doporučuje se okamžitá aktualizace. Problém se týká Ubuntu, Debianu nebo SUSE. Red Hat nebo Fedora pro mandatorní řízení přístupu používají SELinux.
n procesov a aby kazdy potomok vypisal cislo od 0 po 4. Preco to ale nebezi naraz(paralelne?)
pid_t pid[n+1];
for(p = 0; p < n; p++)
{
pid[p] = fork();
switch(pid[p])
{
case -1:
/* fork error */
PANIC("fork");
break;
case 0:
child = true;
for(int i = 0; i < 5; i++) { printf("%d\n", i); fflush(stdout); }
break;
default:
waitpid(pid[p], NULL, 0);
child = false;
break;
}
if(child) break;
}
printf("--- (%d) => (%d)\n", getppid(), getpid());
Toto je vystup:
0
1
2
3
4
--- (12622) => (12623)
0
1
2
3
4
--- (12622) => (12624)
0
1
2
3
4
--- (12622) => (12625)
0
1
2
3
4
--- (12622) => (12626)
0
1
2
3
4
--- (12622) => (12627)
--- (3683) => (12622)
3683 je bash.
Dakujem za radu
Řešení dotazu:
default:
waitpid(pid[p], NULL, 0);
Ak tomu dobre rozumiem, tak sa hlavny proces najprv zdvoji (fork),
a pocka waitpid kym synovsky proces skonci.
A az potom pokracuje vo vykonavani cyklu
n vlakien:
for(p = 0; p < n; p++)
{
pid[p] = fork();
switch(pid[p])
{
case -1:
/* fork error */
PANIC("fork");
break;
case 0:
child = true;
break;
default:
child = false;
break;
}
if(child) break;
}
if(child)
{
sleep(5);
//do_child_job(p);
}
if(parent)
{
for(p = 0; p < n; p++)
{
printf("parent\n");
waitpid(pid[p], NULL, 0);
}
Problem je vsak, ze ked napriklad 1. child proces nieco robi dlhsie, tak waitpid zablokuje hlavny proces cakanim na skoncenie a az potom sa zavola waitpid na dalsie procesy. Comu ale uz vobec nerozumiem, preco sa tento kod sprava tak, ze da takyto vystup:
parent // tu caka tych 5 sekund
parent // dalsie 4 riadky uz vypise okamzite
parent
parent
parent
Slo by asi pouzit WNOHANG vo waitpid namiesto 0, ale potom hlavny proces skonci a nepocka na skoncenie deti.
Ako teda zabezpecit, ze hlavny proces nebude blokovany child procesmy, ale zaroven pocka, kym vsetky skoncia?
static void sigchld_hdl(int sig)
{
running_children--;
printf("sigchld_hdl\n"); fflush(stdout);
/* Wait for all dead processes.
* We use a non-blocking call to be sure this signal handler will not
* block if a child was cleaned up in another part of the program. */
while (waitpid(-1, NULL, WNOHANG) > 0)
{
}
if(running_children == 0) // toto je vlastne na upratanie po detoch, ked uz vsetky su skoncene
{
printf("--QUITING\n"); fflush(stdout);
fclose(fp);
if (msgctl(msqid, IPC_RMID, NULL) == -1)
PANIC("msgctl");
exit(EXIT_SUCCESS);
}
}
potom v main()
struct sigaction act;
memset (&act, 0, sizeof(act));
act.sa_handler = sigchld_hdl;
if (sigaction(SIGCHLD, &act, 0)) {
perror ("sigaction");
return 1;
}
for(p = 0; p < n; p++)
{
pid[p] = fork();
switch(pid[p])
{
case -1:
/* fork error */
PANIC("fork");
break;
case 0:
child = true;
break;
default:
child = false;
running_children++;
printf("adding child: %ld\n", running_children); fflush(stdout);
break;
}
if(child) break;
}
if(child)
{
printf("(%d) cakam...\n", getpid()); fflush(stdout);
msg_rcv(READY_TO_START);
printf("(%d) child\n", getpid()); fflush(stdout);
exit(EXIT_SUCCESS);
// sleep(1);
}
if(parent)
{
for(p = 0; p < n; p++)
{
printf("parent\n"); fflush(stdout);
waitpid(pid[p], NULL, WNOHANG);//WNOHANG
msg_snd(READY_TO_START, READY_TO_START_TRUE);
}
while (running_children>0) {
sleep(1);
printf("sleeping, running children: %ld\n", running_children); fflush(stdout);
}
}
Toto teda vacsinou funguje, avsak niekedy sa to zasekne na tom poslednom while(running_children>0) a vystup je takyto:
$ ./philosophers 5
(26467) >> sending message(1): 1
(26467) >> sending message(2): 0
adding child: 1
(26468) cakam...
adding child: 2
(26469) cakam...
adding child: 3
(26470) cakam...
adding child: 4
(26471) cakam...
adding child: 5
parent
(26467) >> sending message(3): 0
parent
(26468) >> receiving message(3): 0
(26468) child
(26469) >> receiving message(3): 0
(26469) child
sigchld_hdl
(26467) >> sending message(3): 0
parent
(26467) >> sending message(3): 0
parent
(26470) >> receiving message(3): 0
(26470) child
(26471) >> receiving message(3): 0
(26471) child
(26472) cakam...
sigchld_hdl
(26467) >> sending message(3): 0
parent
(26467) >> sending message(3): 0
(26472) >> receiving message(3): 0
(26472) child
sigchld_hdl
sleeping, running children: 2
sleeping, running children: 2
sleeping, running children: 2
sleeping, running children: 2
sleeping, running children: 2
sleeping, running children: 2
sleeping, running children: 2
sleeping, running children: 2
sleeping, running children: 2
^C
Chape to niekto?
Dakujem
Problém už byl vyřešen, ale neodpustím si terminologickou poznámku:
Nasledujuci kod spusti pekne n vlakien:
Syscall fork() nevytváří vlákna ale procesy. Vlákna by se vytvářela pomocí pthread_create().
Tiskni
Sdílej: