Jiří Eischmann v příspěvku na svém blogu představuje typy, jak lépe chránit své soukromí na mobilním telefonu: "Asi dnes neexistuje způsob, jak se sledování vyhnout úplně. Minimálně ne způsob, který by byl kompatibilní s tím, jak lidé technologie běžně používají. Soukromí ovšem není binární věc, ale škála. Absolutního soukromí je dnes na Internetu dost dobře nedosažitelné, ale jen posun na škále blíže k němu se počítá. Čím méně dat se o vás posbírá, tím nepřesnější budou vaše profily a tím méně budou zneužitelné proti vám."
Byla vydána nová stabilní verze 25.05 linuxové distribuce NixOS (Wikipedie). Její kódové označení je Warbler. Podrobný přehled novinek v poznámkách k vydání. O balíčky se v NixOS stará správce balíčků Nix.
Multiplatformní open source spouštěč her Heroic Games Launcher byl vydán v nové stabilní verzi 2.17.0 Franky (Mastodon, 𝕏). Přehled novinek na GitHubu. Instalovat lze také z Flathubu.
Organizace Apache Software Foundation (ASF) vydala verzi 26 integrovaného vývojového prostředí a vývojové platformy napsané v Javě NetBeans (Wikipedie). Přehled novinek na GitHubu. Instalovat lze také ze Snapcraftu a Flathubu.
Klávesnice IBM Enhanced Keyboard, známá také jako Model M, byla poprvé představena v roce 1985, tzn. před 40 lety, s počítači IBM 7531/7532 Industrial Computer a 3161/3163 ASCII Display Station. Výročí připomíná článek na zevrubném sběratelském webu Admiral Shark's Keyboards. Rozložení kláves IBM Enhanced Keyboard se stalo průmyslovým standardem.
Vyšlo Pharo 13 s vylepšenou podporou HiDPI či objektovým Transcriptem. Pharo je programovací jazyk a vývojové prostředí s řadou pokročilých vlastností.
Java má dnes 30. narozeniny. Veřejnosti byla představena 23. května 1995.
1. července Mozilla vypne službu Fakespot pro detekci podvodných recenzí v internetových obchodech. Mozilla koupila Fakespot v květnu 2023.
8. července Mozilla vypne službu Pocket (Wikipedie) pro ukládání článků z webu na později. Do 8. října si uživatelé mohou vyexportovat data. Mozilla koupila Pocket v únoru 2017. Několik měsíců byl Pocket integrovanou součástí Firefoxu.
Turris OS má aktuálně problém s aktualizací související s ukončením podpory protokolu OCSP u certifikační autority Let's Encrypt.
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).
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.
\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
Tiskni
Sdílej: