Byla vydána nová verze 4.5 (𝕏, Bluesky, Mastodon) multiplatformního open source herního enginu Godot (Wikipedie, GitHub). Přehled novinek i s náhledy v příspěvku na blogu.
Byla vydána verze 3.0 (Mastodon) nástroje pro záznam a sdílení terminálových sezení asciinema (GitHub). S novou verzí formátu záznamu asciicast v3, podporou live streamingu a především kompletním přepisem z Pythonu do Rustu.
Canonical oznámil, že bude podporovat a distribuovat toolkit NVIDIA CUDA (Wikipedie) v Ubuntu.
Tržní hodnota americké společnosti Alphabet, která je majitelem internetového vyhledávače Google, dnes poprvé překonala hranici tří bilionů dolarů (62,1 bilionu Kč). Alphabet se připojil k malé skupině společností, které tuto hranici pokořily. Jsou mezi nimi zatím americké firmy Nvidia, Microsoft a Apple.
Spojené státy a Čína dosáhly dohody ohledně pokračování populární čínské platformy pro sdílení krátkých videí TikTok v USA. V příspěvku na síti Truth Social to dnes naznačil americký prezident Donald Trump. Dosažení rámcové dohody o TikToku vzápětí oznámil americký ministr financí Scott Bessent, který v Madridu jedná s čínskými představiteli o vzájemných obchodních vztazích mezi USA a Čínou. Bessentova slova později potvrdila také čínská strana.
MKVToolNix, tj. sada nástrojů pro práci s formátem (medialnym kontajnerom) Matroska, byl vydán ve verzi 95.0. Podpora přehrávání formátu Matroska míří do Firefoxu [Bug 1422891, Technický popis]. Přehrávání lze již testovat ve Firefoxu Nightly.
Spolek OpenAlt zve příznivce otevřených řešení a přístupu na 211. sraz, který proběhne v pátek 19. září od 18:00 ve Studentském klubu U Kachničky na Fakultě informačních technologií Vysokého učení technického na adrese Božetěchova 2/1. Na srazu proběhne přednáška Jiřího Eischmanna o nové verzi prostředí GNOME 49. Nemáte-li možnost se zúčastnit osobně, přednáškový blok bude opět streamován živě na server VHSky.cz a následně i zpřístupněn záznam.
Microsoft se vyhnul pokutě od Evropské komise za zneužívání svého dominantního postavení na trhu v souvislosti s aplikací Teams. S komisí se dohodl na závazcích, které slíbil splnit. Unijní exekutivě se nelíbilo, že firma svazuje svůj nástroj pro chatování a videohovory Teams se sadou kancelářských programů Office. Microsoft nyní slíbil jasné oddělení aplikace od kancelářských nástrojů, jako jsou Word, Excel a Outlook. Na Microsoft si
… více »Samba (Wikipedie), svobodná implementace SMB a Active Directory, byla vydána ve verzi 4.23.0. Počínaje verzí Samba 4.23 jsou unixová rozšíření SMB3 ve výchozím nastavení povolena. Přidána byla podpora SMB3 přes QUIC. Nová utilita smb_prometheus_endpoint exportuje metriky ve formátu Prometheus.
Správcovský tým repozitáře F-Droid pro Android sdílí doporučení, jak řešit žádosti o odstranění nelegálního obsahu. Základem je mít nastavené formální procesy, vyhrazenou e-mailovou adresu a být transparentní. Zdůrazňují také důležitost volby jurisdikce (F-Droid je v Nizozemsku).
void EventPumpX11::waitForWork() { UISystemX11* uiSystem = UI_SYSTEM(); int fd = uiSystem->_fd; int fdSize = fd + 1; fd_set fdSet; struct timeval tval; FD_ZERO(&fdSet); FD_SET(fd, &fdSet); TimeDelta delay = _delayedWorkTime - Time::now(); if (delay > TimeDelta()) { // Go to sleep. X11 will wake us to process X events. We also set interval // to wake up if there are planned tasks to specific time (Timers). int64_t udelay = delay.inMicroseconds(); tval.tv_sec = (int)(udelay / 1000000); tval.tv_usec = (int)(udelay % 1000000); if (tval.tv_usec <= 100) tval.tv_usec = 100; int ret = ::select(fdSize, &fdSet, NULL, NULL, &tval); // TODO: Check for select result } else { // It looks like delayedWorkTime indicates a time in the past, so we // need to call doDelayedWork now. _delayedWorkTime = Time(); } }kde fd je deskriptor, který jsem obdržel pomocí ConnectionNumber(Display*) (Xlib). O co mi jde, potřeboval bych probudit event loop, když chci z jiného vlákna poslat událost do toho hlavního, které čeká buď na událost z X11 nebo na vypršení časového limitu potřebného pro jiné úkoly (delay). Myslím, že správná cesta bude vytvořit vlastní file descriptor, na který pošlu 1 byte v případě, že budu chtít probudit event loop, ale nějak nevím jak přesně na to (toto jsem ještě nikdy nedělal). Použít fd_set a do masky dát vlastní fd? Stačí mi nakopnutí správným směrem ;)
void EventPumpX11::waitForWork() { UISystemX11* uiSystem = UI_SYSTEM(); int fd = uiSystem->_fd; int fdSize = fog_max(fd, uiSystem->_wakeUpPipe[0]) + 1; fd_set fdSet; struct timeval tval; struct timeval* ptval = NULL; FD_ZERO(&fdSet); FD_SET(fd, &fdSet); FD_SET(uiSystem->_wakeUpPipe[0], &fdSet); if (_delayedWorkTime.isNull()) { // There are no scheduled tasks, so ptval is NULL and this tells to select() // that it should wait infitine time. } else { TimeDelta delay = _delayedWorkTime - Time::now(); if (delay > TimeDelta()) { // Go to sleep. X11 will wake us to process X events and we also set // interval to wake up to run planned tasks (usually Timers). int64_t udelay = delay.inMicroseconds(); tval.tv_sec = (int)(udelay / 1000000); tval.tv_usec = (int)(udelay % 1000000); if (tval.tv_usec <= 100) tval.tv_usec = 100; ptval = &tval; } else { // It looks like delayedWorkTime indicates a time in the past, so we // need to call doDelayedWork now. _delayedWorkTime = Time(); return; } } int ret = ::select(fdSize, &fdSet, NULL, NULL, ptval); if (ret < 0) { fog_debug("Fog::EventPumpX11::waitForWork() - select() failed (errno=%d).", errno); } if (ret > 0) { if (FD_ISSET(uiSystem->_wakeUpPipe[0], &fdSet)) { // Dummy c, the actual value is out of our interest. uint8_t c; read(uiSystem->_wakeUpPipe[0], &c, 1); _wakeUpSent.cmpXchg(1, 0); } } }a Kód pro probuzen9 z jiiného vlákna vypadá takto:
void EventPumpX11::sendWakeUp() { if (_wakeUpSent.cmpXchg(0, 1)) { UISystemX11* uiSystem = UI_SYSTEM(); uint8_t c = 'W'; write(uiSystem->_wakeUpPipe[1], &c, 1); } }požil jsem atomické operace k tomu, abych do pipe neposílal příliš moc, teď tam je normálně jen ten 1 BYTE, který probudí select. Funguje to, ale samořejmě to může obsahovat chyby (zase tak moc jsem to neotestoval)... Ke kompletnosti ještě vytvoření pipe:
// Create wakeup pipe. if (pipe(_wakeUpPipe) < 0) { fog_debug("Fog::UISystemX11::Can't create wakeup pipe"); goto fail; }K zápisu používám _wakeUpPipe[1] a ke čtení _wakeUpPipe[0], doufám, že jsem to pochopil správně...:)
Tiskni
Sdílej: