Počítačová hra Factorio (Wikipedie) nově běží nativně na ARM64 Linuxu a headsetu Steam Frame.
Fugleramme, v překladu 'ptačí rámeček', je open-source projekt postavený na Raspberry Pi, který pomocí lokální umělé inteligence BirdNET-Go rozpoznává ptačí druhy podle jejich zpěvu a na displeji následně zobrazuje koláž tvořenou odpovídajícími ilustracemi. Databáze obsahuje přes 800 ručně vybraných historických přírodovědných ilustrací více než 400 druhů ptáků.
… více »Unicode Consortium, nezisková organizace koordinující rozvoj standardu Unicode, oznámila vydání Unicode 18.0. Přidáno bylo 13 007 nových znaků. Celkově jich je 172 808. Přibylo 9 nových Emoji.
Nové číslo časopisu Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 169 (pdf).
Byla vydána nová verze 6.4 programovacího jazyka Swift (Wikipedie). Zdrojové kódy jsou k dispozici na GitHubu.
Německý kancléř Friedrich Merz (CDU) se během debaty s finalisty studentské vědecké soutěže Jugend forscht vyjádřil pro konec anonymity na internetu a vyslovil názor, že pro uživatele Internetu by měla platit podobná právní odpovědnost jako pro novináře tradičních médií. Na dotaz studenta, jak by se tedy povinnost uvádět pravé jméno slučovala s prací investigativních novinářů nebo ochranou jejich zdrojů, Merz neodpověděl, ve své
… více »Společnost Fujitsu představila FUJITSU-MONAKA CPU a Fujitsu MONAKA Server. Navrženo, vyvinuto a vyrobeno v Japonsku. Pro suverénní AI infrastrukturu.
Předprodej v květnu představených notebooků Googlebook, nástupců notebooků Chromebook, bude spuštěn v pondělí 21. září.
Byla vydána betaverze Fedora Linuxu 45 (ChangeSet), tj. poslední zastávka před vydáním finální verze, která je naplánována na úterý 20. října. S konzolí kmscon místo fbcon. Současně byla vydána betaverze Fedora Linux Asahi Remixu 45. S podporou čipů M3.
Po půl roce vývoje od vydání verze 50 bylo vydáno GNOME 51 s kódovým názvem "A Coruña" (Mastodon). Podrobný přehled novinek i s náhledy v poznámkách k vydání a v novinkách pro vývojáře. Videopředstavení na PeerTube a YouTube.
Jako bych slyšel ironii ... ale máš pravdu ... 
less --follow-name
tail -f) program
https://klogg.filimonov.dev anebo
https://glogg.bonnefon.org/index.html
Programy tail, more a všechny ostatní metody nesplňovaly moje požadavky ( nebo neumím číst man a google ).Nebýval kdysi tohle portál pro fanoušky linuxu?
import os
import time
class TailFIterator:
"""
Text file iterator, which yields new lines added to the file, like
tail -F. It can detect when the file descriptor was changed (logrotated) or
the file was truncated (also used by logrotate).
You can overload:
.on_file_not_found()
To change behaviour when the file was followed, but was deleted
in the process (logrotated). Standard behaviour is to wait 5 seconds,
try again forever. See also .file_not_found_counter for details.
.on_no_changes_detected()
To decide what to do when no change was detected. Default is to
wait 1s.
"""
def __init__(self, file_path: str, file_mode: str = "rt"):
self.file_size = 0
self.file_path = file_path
self.file_mode = file_mode
self.inode_number = os.stat(file_path).st_ino
self.logfile = open(file_path, self.file_mode)
self.file_not_found_counter = 0
def __iter__(self):
while True:
try:
size = self._get_current_size()
self.file_not_found_counter = 0
except FileNotFoundError as e:
self.file_not_found_counter += 1
self.on_file_not_found(self.file_not_found_counter, e)
continue
if size > self.file_size:
self.logfile.seek(self.file_size)
for line in self.logfile:
yield line
self.file_size = self.logfile.tell()
# in case the .truncate() was called
elif size < self.file_size:
self._check_and_handle_logrotate()
self.file_size = 0
continue
if self._check_and_handle_logrotate():
continue
self.on_no_changes_detected()
def _get_current_size(self) -> int:
return os.stat(self.file_path).st_size
def _check_and_handle_logrotate(self) -> bool:
current_file_info = os.stat(self.file_path)
current_inode_number = current_file_info.st_ino
if current_inode_number != self.inode_number:
self.inode_number = current_file_info.st_ino
self.logfile = open(self.file_path, self.file_mode)
self.file_size = 0
return True
def on_file_not_found(self, file_not_found_counter: int, exception):
if file_not_found_counter > 5:
raise exception
time.sleep(5)
def on_no_changes_detected(self):
time.sleep(1)
(Psal jsem kdysi pro jeden starší projekt co běžel někde kam jsem nechtěl tahat závislosti).
. Za starých časů jsem psal něco podobného pro PHP a používalo to externí inotify. Dneska už zbytečné, každý jazyk to podoporuje.
Děkuji za fakt šikovné podněty ... I komentátorům vašeho příspěvku... Zvlášť Jenda musel prohrabávat staré (.. co - prastaré) archivy, aby našel prastarý kód ( i když podle syntaxe možná zase tak prastarý není, ale stejně) ... fakt dík :)Je to několik let staré, prohledávat jsem nemusel, mám v notionu složku se snippety kam si házím použitelné věci a různé ukázky.
.. jak jsi onehdá snil ... no počkáme ... a snad se dožijem
\b(ERROR|INFO|WARN)\b
Výhoda je, že to nebude matchovat třeba information nebo terror.
Escape HTML - například <1> by se měla změnit na <1> , jinak to může být hezký námět nat code injection
S těmi newline a načítáním nového souboru - bude tam nějaká komplexita navíc, neboť match či přidání nového řádku by se mělo dít jenom v případech, kdy se dokončilo načtení aspoň jednoho řádku. To jenom detail, když už to tak komplikuju.
Tiskni
Sdílej: