Tým Qwen (Alibaba Cloud) uvolnil jako open-source své modely Qwen3‑TTS pro převádění textu na řeč. Sada obsahuje modely VoiceDesign (tvorba hlasu dle popisu), CustomVoice (stylizace) a Base (klonování hlasu). Modely podporují syntézu deseti různých jazyků (čeština a slovenština chybí). Stránka projektu na GitHubu, natrénované modely jsou dostupné na Hugging Face. Distribuováno pod licencí Apache‑2.0.
Svobodný citační manažer Zotero (Wikipedie, GitHub) byl vydán v nové major verzi 8. Přehled novinek v příspěvku na blogu.
Byla vydána verze 1.93.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání. Vyzkoušet Rust lze například na stránce Rust by Example.
Svobodný operační systém ReactOS (Wikipedie), jehož cílem je kompletní binární kompatibilita s aplikacemi a ovladači pro Windows, slaví 30. narozeniny.
Společnost Raspberry Pi má nově v nabídce flash disky Raspberry Pi Flash Drive: 128 GB za 30 dolarů a 256 GB za 55 dolarů.
Technologie Skip pro multiplatformní mobilní vývoj, která umožňuje vývojářům vytvářet iOS a Android aplikace z jediné Swift a SwiftUI kódové základny, se s vydáním verze 1.7 stala open source.
Na GitHubu byl zveřejněn algoritmus "Pro vás" sociální sítě 𝕏.
Byla vydána nová major verze 34.0.0 webového prohlížeče Pale Moon (Wikipedie) vycházejícího z Firefoxu. Přehled novinek v poznámkách k vydání.
Win8DE je desktopové prostředí pro Wayland, inspirované nechvalně proslulým uživatelským rozhraním Metro z Windows 8. Nabízí dlaždicové rozhraní s velkými tlačítky a jednoduchou navigací, optimalizované pro dotyková zařízení. Cílem projektu je přetvořit design operačního systému Windows 8 do funkčního a minimalistického rozhraní vhodného pro každodenní použití na Linuxu.
Laboratoře CZ.NIC vydaly Datovku 4.28.0 a Mobilní Datovku 2.6.0. Hlavní novinkou je ukládání rozpracovaných datových zpráv do konceptů. Datovka je svobodné multiplatformní aplikace pro přístup k datovým schránkám a k trvalému uchovávání datových zpráv v lokální databázi.
const char *dev = "/dev/input/by-id/usb-Gaming_KB_Gaming_KB-event-kbd";
fd = open(dev, O_RDONLY);
while (1) {
n = read(fd, &ev, sizeof ev);
if (ev.type == EV_KEY) {
// nějaké zpracování
}
}
Chtěl bych něco takovéhoto (pro libovolný, při spuštění daný, počet klávesnic, čili místo dev1, dev2 by byl nějaký seznam, nebo Vector, nebo tak něco, ale to už taky zvládnu)
const char *dev = "/dev/input/by-id/usb-Gaming_KB_Gaming_KB-event-kbd";
const char *dev2 = "/dev/input/by-id/usb-neco-jineho-event-kbd";
fd = open(dev, O_RDONLY);
fd2 = open(dev2, O_RDONLY);
while (1) {
n = read(fd, &ev, sizeof ev);
n2 = read(fd2, &ev2, sizeof ev2);
if (n1) {
if (ev.type == EV_KEY) {
// nějaké zpracování
}
}
if (n2) {
if (ev2.type == EV_KEY) {
// nějaké podobné zpracování
}
}
}
ale dělat to naráz (neblokující), nečekat zablokovaný na jedné z klávesnic ....
nebo ještě lépe blokovat, dokud nebude aspoň jedna stisknutá, abych se zbytečně nemotal ve smyčce a nepožíral planě výkon
Asi bych to zvládnul nějak přez vlákna, ale to mi přijde s kanonem na vrabce
Řešení dotazu:
poll() nebo select()? Zdá se mi, že obě dokážou číst z více file descriptorů naráz, ale už jsem je dlouho nepoužil.
Druhá možnost je std::thread pro každou klávesnici. (Ale pro use case shift na jedné a písmeno na druhé je mnohem lepší poll().)
Tiskni
Sdílej: