O víkendu probíhá konference OpenAlt 2025. Na programu je spousta zajímavých přednášek. Pokud jste v Brně, stavte se. Vstup zdarma.
Josef Průša představil novou velkoformátovou uzavřenou CoreXY 3D tiskárnu Prusa CORE One L a nový open source standard chytrých cívek OpenPrintTag i s novou přepracovanou špulkou.
Na GOG.com běží Autumn Sale. Při té příležitosti je zdarma hororová počítačová hra STASIS (ProtonDB: Platinum).
Ubuntu 25.10 má nově balíčky sestavené také pro úroveň mikroarchitektury x86-64-v3 (amd64v3).
Byla vydána verze 1.91.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.
Ministerstvo průmyslu a obchodu vyhlásilo druhou veřejnou soutěž v programu TWIST, který podporuje výzkum, vývoj a využití umělé inteligence v podnikání. Firmy mohou získat až 30 milionů korun na jeden projekt zaměřený na nové produkty či inovaci podnikových procesů. Návrhy projektů lze podávat od 31. října do 17. prosince 2025. Celková alokace výzvy činí 800 milionů korun.
Google v srpnu oznámil, že na „certifikovaných“ zařízeních s Androidem omezí instalaci aplikací (včetně „sideloadingu“) tak, že bude vyžadovat, aby aplikace byly podepsány centrálně registrovanými vývojáři s ověřenou identitou. Iniciativa Keep Android Open se to snaží zvrátit. Podepsat lze otevřený dopis adresovaný Googlu nebo petici na Change.org.
Byla vydána nová verze 18 integrovaného vývojového prostředí (IDE) Qt Creator. S podporou Development Containers. Podrobný přehled novinek v changelogu.
Cursor (Wikipedie) od společnosti Anysphere byl vydán ve verzi 2.0. Jedná se o multiplatformní proprietární editor kódů s podporou AI (vibe coding).
Google Chrome 142 byl prohlášen za stabilní. Nejnovější stabilní verze 142.0.7444.59 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 20 bezpečnostních chyb. Za nejvážnější z nich bylo vyplaceno 50 000 dolarů. Vylepšeny byly také nástroje pro vývojáře.
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: