Byla vydána verze 1.99.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.
Od 13. do 15. října proběhne v Praze OpenSSL Conference 2026. Na YouTube lze zhlédnout videozáznamy přednášek z loňského roku.
Eben Upton oznámil další zdražení jednodeskových počítačů Raspberry Pi. Tentokrát 2 GB varianty o 12,50 dolarů. Nově 2 GB Raspberry Pi 4 stojí 67,50 dolarů a 2 GB Raspberry Pi 5 stojí 77,50 dolarů.
OpenMandriva ROME, tj. průběžně aktualizovaná (rolling) edice linuxové distribuce OpenMandriva, byla vydána ve verzi 26.09. Vedle Flatpaku také s podporou Snapu.
Edison Design Group po více než 30 letech zveřejnil zdrojový kód svého EDG C/C++ front-endu. Ten proslul širokou podporou standardů C++ a kompatibilitou s dialekty kompilátorů od Microsoftu, GNU, Clangu, Sunu a dokonce i s prehistorickým cfrontem. EDG byl použit například v kompilátoru Intel C++ Classic, kompilátoru NVCC od firmy NVIDIA pro platformu CUDA nebo v našeptávači kódu IntelliSense v produktech společnosti Microsoft. Projekt nyní spravuje organizace The C++ Alliance a kód je dostupný pod licencí Apache 2.0, doplněnou o výjimky projektu LLVM.
Pocket Tank je malé kapesní virtuální akvárium postavené na vývojové desce ESP32-S3-Touch-AMOLED-1.8. Na dvoujádrovém mikrokontroléru ESP32-S3 s 8 MB PSRAM a 16 MB flash paměti běží jak simulace akvária, tak i malý jazykový model určující chování rybiček. Lokální model o velikosti 7,56 MB se 14 miliony parametrů vznikl destilací modelu Gemma 4 26B, tedy učitele s 26 miliardami parametrů. Kromě firmwaru pro skutečný modul s AMOLED
… více »Open-source nástroj Jevstiller vytváří (destiluje) malý lokální model, který se průběžně učí z odpovědí komerční služby Jev. Běžné dotazy vyřizuje přímo na vlastním hardware, čímž může řádově zkrátit čas odezvy a snížit provozní náklady díky menšímu využívání zpoplatněného API. Nejisté požadavky Jevstiller posílá do Jevu, rovněž průběžně kontroluje náhodná dvě procenta dotazů Jevem. Pokud se lokální model začne s Jevem rozcházet,
… více »Konference LinuxDays 2026 proběhne již tento víkend 3. a 4. října v Praze v areálu ČVUT v Dejvicích na FIT. Konference LinuxDays 2026 znamená desítky přednášek a workshopů, zástup zajímavých osobností, místo pro setkání, spoustu nových nápadů a informací a stánky řady různých projektů: Fedora, openSUSE, vpsFree.cz, Mozilla, MacGyver - bastlíři SH, OpenAlt a mnoho dalších. Vstup je volný.
Microsoft oznámil, že WSL kontejnery (WSLC) aneb linuxové kontejnery ve Windows Subsystem for Linux (WSL) jsou již obecně dostupné. Současně popsal jejich architekturu.
openSUSE Leap 16.1 vstoupil do RC fáze. Nově lze instalovat jako standardní systém (Standard) nebo jako neměnný systém s atomickými aktualizacemi (Immutable). Samostatná neměnná distribuce openSUSE Leap Micro končí.
Programming stuff. And stuff.
Pythoní modul je vygenerován swig-em, který obaluje skutečný C++ kód. Sdílená knihovna načtena pythonem při importu. (Existuje projekt pyffmpeg, jenže ten umí zjistit jenom to, co ffmpeg vypíše na stdout/stderr.)
Jediná možnost ochrany proti segfaultu je mít kód v separátním procesu (při odchycení SIGSEGV je již pozdě).
Možnosti jsem viděl asi následovně:
První drobnou vadou na kráse je nepřenositelnost forku. Momentálně by to nebyl problém, ale mám radši přenositelný kód. Sdílená paměť je problematická se STL kontejnery, bylo by nutné psát vlastní STL alokátor, který bude alokovat paměť ve sdílené paměti (opruz). Boostí serializace je celkem elegantní, ale IMHO ne až tak elegantní jako pythoní cPickle.
POSH vypadal zajímavě, ale těžko říci jak moc je vyspělý, spíš mi přišel jako zajímavý výzkumný projekt, ale musel bych věnovat spoustu času abych zjistil jak je na tom se spolehlivostí.
Vylučovací metodou zůstala poslední varianta, subprocess.Popen + cPickle. Modul cPickle umí (de)serializovat pythoní objekty bez nutnosti psát kód pro serializaci (až na výjimky).
Bohužel mezi výjimky, které cPickle automaticky serializovat neumí, patří právě swigem vygenerované objekty, protože pro python jsou "neprůhledné". Naštestí to není problém rychle napravit ručně (opět modulo výjimky způsobeny implementační náladou swigu). Stačí nadefinovat __setstate__ a __getstate__.
C++ header:
struct Resolution
{
Resolution(): width(0), height(0) {}
Resolution(int w, int h): width(w), height(h) {}
int width;
int height;
};
typedef std::map<std::string, std::string> Metadata_t;
swigový zdroják:
%include "std_string.i"
%include "std_pair.i"
%include "std_map.i"
%include "pyiterators.swg"
namespace std {
%template(StringStringMap) map<string, string>
}
%extend Resolution {
%insert("python") %{
def __getstate__(self):
return (self.width, self.height)
def __setstate__(self,tup):
#zavolá konstruktor Resolution(width, height) s uloženým tuplem
self.this = _pycffmpeg.new_Resolution(*tup)
#říká, že python vlastní objekt a má ho pak zgarbagecollectovat
self.thisown = 1
%}
}
%extend std::map<std::string, std::string> {
%insert("python") %{
def __getstate__(self):
metadataDict = {}
metadataDict.update(self)
return metadataDict
def __setstate__(self,metadataDict):
self.this = _pycffmpeg.new_StringStringMap()
self.thisown = 1
#self není dict, nemá update() metodu
#zdání dictu dělá std_map.i a pyiterators.swg
for (k, v) in metadataDict.iteritems():
self[k] = v
%}
}
U všech tříd výše uveden postup serializace přes dodefinování __setstate__ a __getstate__ fungoval, až na jednu. Konstruktor _pycffmpeg.new_FormatInfo z nějakého důvodu vracel const pointer místo normálního non-const. Netuším proč, spíše nějaký bug; swig interně rozlišuje typy objektů a signatury metod podle ním vygenerovaného stringu (proto je možné taky použít C++-style overloading, což normálně v pythonu nejde).
Nakonec jsem to vyřešil ručně napsanou wrapper třídou "nezpicklovatelné" třídy, která jednoduše zkopíruje všechny atributy do sebe (není možné použít self.__dict__ u tříd generovaných swigem, mají jenom "this").
Kdybyste měli nějaký jiný nápad na řešení sandboxování nativního kódu, rozhodně by mě to zajímalo.
Tiskni
Sdílej:
Jenom poznámka kvůli úplnosti: FormatInfo je "nejvyšší" třída, obsahuje Duration, vector StreamInfo, které obsahují resolution, pixel aspect, display aspect atd.
mediainfo nebo libmediainfo?
Umí dost věcí, viz ukázka...
General
Complete name : /media/share/Freeski Films/Picture This/Picture.This.1080p.x264.mkv
Format : Matroska
File size : 1.50 GiB
Duration : 33mn 42s
Overall bit rate : 6 387 Kbps
Encoded date : UTC 2009-03-15 13:44:06
Writing application : mkvmerge v2.5.3 ('Boogie') built on Mar 7 2009 15:00:41
Writing library : libebml v0.7.7 + libmatroska v0.8.1
Video
Format : AVC
Format/Info : Advanced Video Codec
Format profile : High@L4.0
Format settings, CABAC : Yes
Format settings, ReFrames : 1 frame
Muxing mode : Container profile=Unknown@4.0
Codec ID : V_MPEG4/ISO/AVC
Duration : 33mn 40s
Bit rate : 5 742 Kbps
Nominal bit rate : 6 000 Kbps
Width : 1 920 pixels
Height : 1 080 pixels
Display aspect ratio : 16/9
Frame rate : 29.970 fps
Resolution : 24 bits
Colorimetry : 4:2:0
Scan type : Progressive
Bits/(Pixel*Frame) : 0.097
Title : PICTURE.THIS
Writing library : x264 core 67 r1127M 8d82fec
Encoding settings : cabac=1 / ref=1 / deblock=1:0:0 / analyse=0x3:0x133 / me=hex / subme=6 / psy_rd=1.0:0.0 / mixed_ref=0 / me_range=16 / chroma_me=1 / trellis=0 / 8x8dct=1 / cqm=0 / deadzone=21,11 / chroma_qp_offset=-2 / threads=3 / nr=0 / decimate=1 / mbaff=0 / bframes=0 / keyint=300 / keyint_min=30 / scenecut=40 / rc=2pass / bitrate=6000 / ratetol=1.0 / qcomp=0.60 / qpmin=10 / qpmax=51 / qpstep=4 / cplxblur=20.0 / qblur=0.5 / ip_ratio=1.40 / aq=1:1.00
Language : English
Audio
Format : AC-3
Format/Info : Audio Coding 3
Codec ID : A_AC3
Duration : 33mn 42s
Bit rate mode : Constant
Bit rate : 384 Kbps
Channel(s) : 2 channels
Channel positions : L R
Sampling rate : 48.0 KHz
Language : English
Chapters
Language : English
1 : 00:00:00.000 Intro
2 : 00:04:02.000 Seth Huot
3 : 00:06:38.000 Andreas Wiig
4 : 00:07:53.000 Wille Yli Luoma
5 : 00:10:41.000 Darrell Mathes
6 : 00:12:47.000 DCP
7 : 00:13:14.000 Etienne Gilbert
8 : 00:13:25.000 Hampus Mosesson
9 : 00:13:50.000 Shaun White Kevin Pearce
10 : 00:16:09.000 Jussi Oksanen
11 : 00:18:29.000 Eero Ettala
12 : 00:22:29.000 Heikki Sorsa
13 : 00:24:36.000 Aaron Biittner
14 : 00:29:11.000 Jeremy Jones
15 : 00:29:39.000 Credits
Díky moc, MediaInfo jsem neznal. Vyzkoušel jsem to na několika speciálních zmršených případech, proti mojí metodě to má o jedno video lepší úspěšnost (největší problém je s display aspect ratio videa; videa a jejich kontejnery jsou různě zmršeny).
N.B.: i kdybych MediaInfo znal, bych byl opatrnej. Původní kód používal ffmpeg na detekci, jenom někde to nefungovalo úplně správně. Když opravím známé speciální případy a pořád používám ffmpeg/libavformat, vím, že nerozbiju existující správné případy. Nicméně MediaInfo vypadá fakt použitelně. Jenom teď zrovna nevím který z reportovaných display aspectů bych použil
Zatím original display aspect vypadá na ten správný.
Tak jsem zrovna objevil video fajl (ASF), kde ffmpeg hlasi delku 4.9 s, mplayer s asf demuxerem 11 s, mediainfo 8 s. Spravna je 11 sec. Jeste idealne ma v kontejneru nastaveno 1000 fps. Jsem videl ve zdrojacich ffmpegu a/nebo mplayeru specialni hack pro tohle chovani, chutovka.
Podobne neni vubec vyjimkou ze u kontejneru je napsana jina delka videa nez u video streamu. Ach jo.
Heh, specialnich pripadu je tak 25%, kazdy necim jiny (rozumej "jinak zmrsen"). Uz to mame celkem vychytany ale prekvapeni se tak brzo nezbavime.
A není to celé overkill? Pokud chci použít sdílenou knihovnu, ve které dojde k segfaultu, je to na bugreport a opravu v dané knihovně.
To sice ano, jenže nejprve chceme třeba vůbec mít v logu nějaké info že to segfaultlo (graceful fault). Taky je pak možné udělat nejaké cleanup akce, to nejde když segfault sestřelí hlavní pythoní proces. Pro představu se daný pythoní skript pouští cronem, rádově na 2-3 tisíc videí týdenně.
Jinak obecně se segfaultům nedá vyhnout, model-checking ffmpegu by nedokázala zaplatit snad ani NASA 
> Taky je pak možné udělat nejaké cleanup akce, to nejde když segfault sestřelí hlavní pythoní proces
A nestacilo by tedy v tom Pythonu ten segfault obslouzit? Je to signal jako kazdy jiny.
Jak jsem psal výše, IMHO je při odchycení SIGSEGV již pozdě. Nemáte žádnou jistotu, že je paměť v nějakém "minimálně" konzistentním stavu, aby bylo možné udělat cleanup. Snad by šlo zavolat mprotect, jenže v pythonu by to bylo dost komplikované, protože správa paměti je "odstíněna" od programátora.
Prvně bych změnil "ve které dojde k segfaultu" na "ve které může dojít k segfaultu".
Já si rýpnu, ale když tenhle přístup porovnám proti filozofii Erlangu a vývoji v Erlangu, kdy se erlangovské procesy navzájem monitorují, okamžite se restartnou když zahučí a je možné měnit kód za běhu bez restartu služby, it feels a little bit inferior.
Dúfam, že v budúcnosti sa viac presadí aj v ostatných jazykoch erlangovský prístup, ktorý s chybami proste počíta.Nemůžu se zbavit dojmu, že takový přístup se trochu mlátí s vedlejšími efetky, takže napasovat to do nefunkcionálního jazyka může být obtížné.
Marek měl na mysli spíš erlangovskou robustnost nežli kód bez vedlejších efektů (to je pak lepší/jednodušší rovnou použít Erlang proti simulaci "side-effect-lessness" v nefunkcionálním jazyku). V principu minimalizovat dopad fatální chyby kódu, která způsobí crash nebo buffer overflow. I v C/C++ aplikacích to není výjimka, viz třeba KDE, které restartne plasma-desktop po segfaultu. Buffer/heap overflow se pak dá řešit na úrovni OS (NX bit, ASLR, grsecurity, SELinux, AppArmor, stack-smash protectors, atd.)
Hlavní důvod sandboxování ffmpegu byl, že by v naší aplikaci mohl způsobit race condition, kdy by se video soubor neostranil cleanupem z fronty (protože by se ho aplikace pořád snažila zpracovat, segfaultla, a pak znova).
Miesto POSH a cpickle mozno by sa dalo pouzit
Podíval jsem se na PYRO, stejně myslím že by měl podobné problémy jako cPickle, pro Python jsou ty swigem obalené objekty "neprůhledné". Speciálně je asi nebude možné podědit z Pyro.core.ObjBase, swig vyžaduje dědění z vlastní třídy _object.
Jinak výborný projekt pro RPC je ZeroC ICE, integrace s mnoha jazyky (C/C++, Java, Python...). Hrál jsem se s tím jenom chvíli, ale je to fakt paráda.