Ben Sturmfels oznámil vydání MediaGoblinu 0.15.0. Přehled novinek v poznámkách k vydání. MediaGoblin (Wikipedie) je svobodná multimediální publikační platforma a decentralizovaná alternativa ke službám jako Flickr, YouTube, SoundCloud atd. Ukázka například na LibrePlanet.
TerminalPhone (png) je skript v Bashi pro push-to-talk hlasovou a textovou komunikaci přes Tor využívající .onion adresy.
Před dvěma lety zavedli operátoři ochranu proti podvrženým hovorům, kdy volající falšuje čísla anebo se vydává za někoho jiného. Nyní v roce 2026 blokují operátoři díky nasazeným technologiím v průměru 3 miliony pokusů o podvodný hovor měsíčně (tzn., že k propojení na zákazníka vůbec nedojde). Ochrana před tzv. spoofingem je pro zákazníky a zákaznice všech tří operátorů zdarma, ať už jde o mobilní čísla nebo pevné linky.
Společnost Meta (Facebook) předává React, React Native a související projekty jako JSX nadaci React Foundation patřící pod Linux Foundation. Zakládajícími členy React Foundation jsou Amazon, Callstack, Expo, Huawei, Meta, Microsoft, Software Mansion a Vercel.
Samsung na akci Galaxy Unpacked February 2026 (YouTube) představil své nové telefony Galaxy S26, S26+ a S26 Ultra a sluchátka Galaxy Buds4 a Buds4 Pro. Telefon Galaxy S26 Ultra má nový typ displeje (Privacy Display) chránící obsah na obrazovce před zvědavými pohledy (YouTube).
Byla vydána grafická knihovna Mesa 26.0.1 s podporou API OpenGL 4.6 a Vulkan 1.4. Je to první stabilní verze po 26.0.0, kde se novinky týkají mj. výkonu ray tracingu na GPU AMD a HoneyKrisp, implementace API Vulkan pro macOS.
Byla vydána nová verze 4.6 multiplatformního integrovaného vývojového prostředí (IDE) pro rychlý vývoj aplikaci (RAD) ve Free Pascalu Lazarus (Wikipedie). Využíván je Free Pascal Compiler (FPC) 3.2.2.
Byla vydána nová verze 3.23.0 FreeRDP, tj. svobodné implementace protokolu RDP (Remote Desktop Protocol). Opravuje 11 bezpečnostních chyb.
Španělský softwarový inženýr oznámil, že se mu podařilo na dálku ovládat sedm tisíc robotických vysavačů po celém světě. Upozornil tak na slabé kybernetické zabezpečení těchto technologií a jejich možné a snadné zneužití. Nesnažil se hacknout všechny robotické vysavače po světě, ale pouze propojil svůj nový DJI Romo vysavač se zařízením Playstation. Aplikace podle něj ihned začala komunikovat se všemi sedmi tisíci spotřebiči a on je
… více »Momo je fenka cavapoo, která svými náhodnými stisky kláves bezdrátové klávesnice vytváří jednoduché počítačové hry. Technicky to funguje tak, že Raspberry Pi s připojenou bluetooth klávesnicí posílá text do Claude Code, který pak v Godotu píše hry a sám je i testuje pomocí screenshotů a jednoduchých simulovaných vstupů. Za stisky kláves je Momo automaticky odměňována pamlsky. Klíčový je pro projekt prompt, který instruuje AI, aby i
… více »tail -f). Zkoušel jsem to přes fork a semafor, ale dostal jsem tip, že by se to mělo nějak dát udělat přes MainLoop() - to je koneckonců smyčka, která by měla zavolat určitou funkci kontrolující soubor.
Ale zatím jsem nenašel "obecný" postup, jak toho dosáhnout. Programátor nejsem, netuším, po čem vlastně pátrám.
Používám wxPython (ale postup asi bude obecný pro jaký koliv toolkit), část kódu:
class Monitor(wx.App):
def OnInit(self):
init GUI
[....]
def watcher(self):
if zmena_v_souboru:
zmena_v_gui
def main():
pymonitor = Monitor(0)
pymonitor.MainLoop()
main()
Jak na to?
Díky

#!/usr/bin/env python
import sys, os, select, fcntl, signal
SEEK_SET, SEEK_CUR, SEEK_END = 0, 1, 2
bufsize = 4096
def handler_SIGIO(a, b):
pass
def dump_to_end(fd):
while True:
chunk = os.read(fd, bufsize)
if not chunk: break
sys.stdout.write(chunk)
fd = os.open(sys.argv[1], os.O_RDONLY)
signal.signal(signal.SIGIO, handler_SIGIO)
filepos = 0
while True:
os.lseek(fd, filepos, SEEK_SET)
dump_to_end(fd)
filepos = os.lseek(fd, 0, SEEK_CUR)
print filepos
fcntl.fcntl(fd, fcntl.F_SETLEASE, fcntl.F_RDLCK)
signal.pause()
Dá se to udělat i jinak? Nevýhodou je to šaškování se signálem a volání pause()
, pokud si je explicitně neuděláš (třeba přes rouru). Není lepší použít vlákna?
#!/usr/bin/env python
import pygtk
pygtk.require('2.0')
import gtk, gobject, stat, os, sys
class WatchFile:
def __init__(self, filename):
self.filename = filename
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.connect('delete_event', self.delete_event)
self.window.connect('destroy', self.quit)
self.checkbut = gtk.CheckButton('File "%s" has changed' %filename)
self.checkbut.show()
self.times = (None, None, None)
self.has_changed()
gobject.timeout_add(1000, self.periodic_check, None)
self.window.add(self.checkbut)
self.window.show()
def periodic_check(self, object):
if self.has_changed():
self.checkbut.set_active(1)
return True
def has_changed(self):
sr = os.lstat(self.filename)
t = (sr.st_atime, sr.st_mtime, sr.st_ctime)
if t != self.times:
self.times = t
return True
else:
return False
def delete_event(self, widget, data):
return False
def quit(self, widget, data = None):
gtk.main_quit()
def main(self):
gtk.main()
if __name__ == '__main__':
wtch = WatchFile(sys.argv[1])
wtch.main()
Tohle ukáže checkbox, který se automaticky zaškrtne při každé změně souboru. Odšktrnutí jsem ponechal na uživateli, ať si klikne myší. Každou sekundu to kontroluje všechny tři časy u souboru. Jádrem pudla je timeout_add, o kterém psal Petr Mach.
self.timer = wx.wxPyTimer(self.watcher)
self.timer.Start(1000)
self.watcher() # to je ta funkce, která to celé dělá
čerpal jsem z roota (cirkus s okny)
dík za nasměrování správným směrem.
Tiskni
Sdílej: