Po pěti letech vývoje vyšla česká počítačová hra Scarlet Deer Inn (ProtonDB). Scarlet Deer Inn je vyšívaná temná středověká pohádka. Zatímco život ve zdánlivě obyčejné vesnici se točí kolem běžných povinností a sousedských drbů, v podzemí se skrývají zlověstná tajemství.
Představen byl Raspberry Pi Touch Display 2 s uhlopříčkou 10 palců a rozlišením 1200 × 1920 pixelů. Cena je 80 dolarů.
RPCS3 (Wikipedie), tj. open source emulátor Sony PlayStation 3, snížil minimální požadavky. Nově jsou podporovány starší grafické karty ATI Radeon řady HD 2000, 3000 a 4000 z let 2007 až 2009. Na PC běží už 75 % všech her pro PlayStation 3. V budoucnu bude RPCS3 fungovat bez firmwaru z PS3. V RPCS3 byl implementován systémový modul cellSysmodule (𝕏).
Vyšel open-source nástroj winetop (MIT) — nativní CLI/TUI pro sledování a ukončování Wine, Proton, Lutris, Heroic a Bottles sezení. Seskupuje procesy podle WINEPREFIX / Steam AppId, umí bezpečně zabít jen hru (včetně Steam reaperu) a nabízí i skriptovatelné příkazy (list, kill, orphans, …). Balíčky jsou mimo jiné na crates.io, Copru (dnf copr enable kovariadam/winetop), PPA ppa:kovariadam/winetop a AUR (winetop-bin).
Ve spolupráci společností OpenAI a Work Louder byla představena (𝕏) hardwarová klávesnice Codex Micro pro práci s AI agenty. Cena klávesnice je 230 dolarů.
Byl vydán Mozilla Firefox 153.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 153 bude brzy k dispozici také na Flathubu a Snapcraftu.
V linux-cve-announce bylo oznámeno 433 zranitelností za jediný den (19. července).
Byla vydána nová verze 5.44 programovacího jazyka Perl (Wikipedie). Do vývoje se zapojilo 71 vývojářů. Změněno bylo přibližně 270 tisíc řádků v 1 300 souborech. Přehled novinek a změn v podrobném seznamu.
Na 23. září 2026 je do bratislavské Nové Cvernovky naplánovaná jednodenní konference #nobullshit.camp pro tech leadery, DevOps a platform inženýry. Mají tu zaznít upřímné příběhy z praxe o tom, co v produkčních systémech reálně fungovalo, co se pokazilo a co si z toho lidé odnesli. Témata pokrývají tři oblasti – DevOps a platformy (Kubernetes, cloud, provoz systémů), firemní kulturu a leadership. Program běží ve dvou formátech: hlavní
… více »Byla vydána nová verze 1.58 sady nástrojů pro správu síťových připojení NetworkManager. Novinkám se v příspěvku na blogu NetworkManageru věnuje Josephine Pfeiffer. Vypíchnout lze možnost nmtui zobrazit nastavení Wi-Fi jako QR kód nebo podporu CLAT (464XLAT) a tunelů GENEVE (Generic Network Virtualization Encapsulation).
time caller: messageA dale vytvorit knihovnu s funkcí pro zápis do této roury. dalším parametrem daemona je interval, ve kterém daemon zapisuje vlastní statistiku (počet obdržených zpráv) do syslogu. Daemon jsem napsal pomoci fce select(), ale nemuzu odstranit chybu, ktera spociva v ukonceni programu pote, co si precte prvni zpravu z roury a korektne ji zapise do zadaneho logu. V nasledujicim prubehu WHILE funkce select vrati hodnotu vetsi nez nula, jakoby dosla dalsi zprava, ale funkce read vrati nulu. Zajimalo by me, kde je chyba. Je to nekde v souboru s rourou, nebo v samotnem spatnem pouziti select ? Kod daemona:
/*
#define DEFAULT_INTERVAL 2
#define SIZE 256
char* get_current_time() {
time_t current_time;
char* c_time_string;
int j;
current_time = time(NULL); /* Obtain current time as seconds elapsed since the Epoch. */
if (current_time == ((time_t)-1)) {
(void) fprintf(stderr, "Failure to compute the current time.");
exit(EXIT_FAILURE);
}
c_time_string = ctime(¤t_time); /* Convert to local time format. */
for ( j = 0; c_time_string[j] != '\n'; j++) /*Get rid EOL*/
;
c_time_string[j] = '\0';
if (c_time_string == NULL) {
(void) fprintf(stderr, "Failure to convert the current time.");
exit(EXIT_FAILURE);
}
return c_time_string;
}
void print_help() {
printf("Programme must be run with with 2 arguments:\n"
"argv[1] is a name of the file which the daemon wil be writting in\n"
"argv[2] is an interval the daemon will be sending logs into syslog\n");
}
int main(int argc, char *argv[]) {
if (argc != 3) {
print_help();
exit(1);
}
int c;
while((c = getopt(argc, argv, "h")) != -1) {
switch (c) {
case 'h':
print_help();
break;
case '?':
printf("try -h for help");
break;
default:
break;
}
}
FILE *fw;
int fp;
char buf[SIZE];
char *linesep;
int line, i, count;
buf[0] = '\0'; // in case there is nothing to read
buf[SIZE] = '\0'; // guarentee a end-of-line
fd_set readfds;
struct timeval timeout;
int r;
int interval = atoi(argv[2]);
openlog ("exampleprog", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
fprintf(stderr, "Daemonizing...\n");
//daemon(0,0);
unlink("/tmp/pb173_syslog");
mkfifo("/tmp/pb173_syslog", S_IWUSR | S_IRUSR | S_IRGRP | S_IROTH);
fp = open("/tmp/pb173_syslog", O_RDONLY | O_NONBLOCK);
if(fp == -1) {
syslog (LOG_CRIT, "Could not open the pipe: %s\n", strerror(errno));
exit(1);
}
fw = fopen(argv[1], "a+");
if(fw == NULL) {
openlog ("exampleprog", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
syslog (LOG_CRIT, "Error openning logfile : %s\n", strerror(errno));
exit(1);
}
timeout.tv_sec = interval;
timeout.tv_usec = 0;
count = 0;
line = 0;
r = 0;
while(1) {
FD_ZERO(&readfds);
FD_SET(fp,&readfds);
r = select(fp+1, &readfds, NULL, NULL, &timeout);
if (r == -1) {
openlog ("daemon", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
syslog (LOG_CRIT, "Error openning logfile : %s\n", strerror(errno));
close(fp);
fclose(fw);
exit(1);
}
if (r == 0) {
timeout.tv_sec = interval;
timeout.tv_usec = 0;
setlogmask (LOG_UPTO (LOG_NOTICE));
openlog ("daemon", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
syslog (LOG_NOTICE, "Number of received messages: %d\n", count );
closelog ();
} else {
line += (r = read(fp, buf+line, SIZE-line-1));
if (r == 0) {
close(fp);
fclose(fw);
exit(EXIT_SUCCESS);
}
buf[line] = '\0';
if (line && (linesep = strstr(buf, "\n"))) {
*linesep = '\0';
char *caller;
int callerLength;
char *message;
caller = strtok(buf, "^");
callerLength = strlen(caller);
message = caller + callerLength + 1;
fprintf(fw, "%s %s: %s\n", get_current_time(), caller, message);
fflush(fw);
memmove(buf, linesep + 1, (line = strlen(linesep + 1)) + 1);
count++;
}
}
}
close(fp);
fclose(fw);
exit(EXIT_SUCCESS);
}
A kod funkce, ktera zapisuje do roury:
int sl_log(const char *caller, const char* message) {
int fp;
fp = open("/tmp/pb173_syslog", O_WRONLY);
char *msg;
if (fp == -1) {
perror("Could not open the pipe\n");
exit(1);
}
asprintf(&msg, "%s^%s\n", caller, message);
write(fp, msg, strlen(msg));
free(msg);
close(fp);
return 0;
}
Řešení dotazu:
Tiskni
Sdílej: