Čínská společnost Tencent uvolnila svůj AI model HunyuanWorld-Voyager pro generování videí 3D světů z jednoho obrázku a určené trajektorie kamery. Licence ale nedovoluje jeho používání na území Evropské unie, Spojeného království a Jižní Koreje.
Blender Studio se spojilo s kapelou OK Go a výsledkem je videoklip k písni Impulse Purchase. Stejně jako samotný 3D software Blender je i ve videoklipu použitý animovaný chlápek open source. Kdokoli si jej může stáhnout a upravovat.
Zig Software Foundation stojící za programovacím jazykem Zig publikovala finanční zprávu za rok 2024. Současně s prosbou o finanční příspěvek.
Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za srpen (YouTube). Vypíchnuta je podpora Tabulek Google, implementace Gamepad API a Cookie Store API nebo také podpora WebGL na Linuxu.
openSUSE Leap 16, včetně Leap Micra 6.2+, nově nabízí 24 měsíců podpory pro každé vydání. To je dva roky aktualizací a stability, což z něj činí nejdéle podporovanou komunitní distribuci vůbec. Leap se tak stává ideální platformou pro všechny, kdo hledají moderní, stabilní a dlouhodobě podporovanou komunitní Linux distribuci.
Národní úřad pro kybernetickou a informační bezpečnost (NÚKIB) vydal dne 3. 9. 2025 VAROVÁNÍ před hrozbou v oblasti kybernetické bezpečnosti spočívající v předávání systémových a uživatelských dat do Čínské lidové republiky a ve vzdálené správě technických aktiv vykonávané z území Čínské lidové republiky. Varováním se musí zabývat povinné osoby podle zákona o kybernetické bezpečnosti.
Americká internetová společnost Google nemusí prodat svůj prohlížeč Chrome ani operační systém Android. Rozhodl o tom soud ve Washingtonu, který tak zamítl požadavek amerického ministerstva spravedlnosti. Soud ale firmě nařídil sdílet data s jinými podniky v zájmu posílení konkurence v oblasti internetového vyhledávání. Zároveň Googlu zakázal uzavírat dohody s výrobci mobilních a dalších zařízení, které by znemožňovaly
… více »Prvního září ozbrojení policisté zatkli na na londýnském letišti Heathrow scénáristu a režiséra Grahama Linehana, známého především komediálními seriály Ajťáci, Otec Ted nebo Black Books. Během výslechu měl 57letý Graham nebezpečně zvýšený krevní tlak až na samou hranici mrtvice a proto byl z policejní stanice převezen do nemocnice. Důvodem zatčení bylo údajné podněcování násilí v jeho 'vtipných' příspěvcích na sociální síti
… více »Studentská dílna Macgyver zve na další Virtuální Bastlírnu - pravidelné online setkání všech, kdo mají blízko k bastlení, elektronice, IT, vědě a technice. Letní prázdniny jsou za námi a je čas probrat novinky, které se přes srpen nahromadily. Tentokrát jich je více než 50! Těšit se můžete mimo jiné na:
Hardware – Bus Pirate na ESP32, reverse engineering Raspberry Pi, pseudo-ZX-80 na RISC-V, PicoCalc, organizéry na nářadí z pěny nebo … více »Google Chrome 140 byl prohlášen za stabilní. Nejnovější stabilní verze 140.0.7339.80 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 6 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.
Programming stuff. And stuff.
Nejjednodušší použití callgrindu je zavolat ho na celou binárku. Důležité je mít binárku přeloženu s debugovacími symboly (je možné kombinovat přepínače -Ox a -g u gcc). Budu používat cpuspinner.cpp jako příklad. Měření celého běhu programu:
valgrind --tool=callgrind ./cpuspinner
Když potřebujete změřit jenom část, zaincludujte valgrind/callgrind.h a můžete použít makra:
Callgrind pak spustíme s parametrem --instr-atstart=no, aby neměřil dokud nenarazí na první z maker (viz příklad v cpuspinner.cpp):
valgrind --tool=callgrind --instr-atstart=no ./cpuspinner
V callgrind.h je vícero maker, kterými můžete ovládat měření a generování dat (lze "dumpnout" několik měření v jednom běhu apod.), viz manuál callgrindu. Makra z callgrind.h nědělají nic pokud program není spuštěn pod callgrindem.
K callgrindu je přibalen nástroj callgrind_control, kterým lze vypnout/zapnout instrumentaci k probíhajícímu měření. Hodí se to třeba k interaktivním GUI aplikacím. Spustíte valgrind s parametrem --instr-atstart=no, v momentě kdy chcete začít měřit, zavoláte
callgrind_control -i on
a pro vypnutí měření
callgrind_control -i off
Když použijete přepínač -g u gcc, informace o debugovacích symbolech se nakonec dostanou do výsledné binárky (executable, shared object). Typicky se binárky před "releasem" strip-nou, čímž se debugovací informace zahodí.
Jenže může se vyskytnout bug, který shodí aplikaci a není (jednoduše) replikovatelný. Můžete získat coredump, ten ale není bez debug symbolů přílíš užitečný. Je ovšem způsom jak zachovat debugovací symboly odděleně od binárek. Příklad s cpuspinner:
objcopy --only-keep-debug cpuspinner cpuspinner.debug
strip cpuspinner
objcopy --add-gnu-debuglink=cpuspinner.debug cpuspinner
Tyto tři příkazy nejprve vygenerují kopii debugovacích symbolů do souboru cpuspinner.debug. Pak se stripnou z původního cpuspinner a nakonec se do cpuspinner uloží odkaz, že debugovací symboly existují v souboru cpuspinner.debug. Gdb, jeho nadstavby a valgrind pak umí debug symboly najít v takhle vygenerovaných separátních debug souborech. (Pozn.: snad jednou se mi stalo, že je nějaký starší valgrind "neviděl"). Debugovací symboly lze někam odložit, kdyby se něco podobného muselo řešit. Velmi dobře se komprimují s LZMA kompresí.
Někdy může být užitečné zjistit stack trace za běhu, např. při logování výjimky, jak to umí Java nebo Python. V C++ to za jistých podmínek jde. Tady je jeden článek generování stack trace v C++, přímý odkaz na zdrojáky dbg::stack.
Poznámka: aby dbg::stack fungoval, musíte svůj program přeložit s -rdynamic a nesmíte použít flag -fomit-frame-pointer. Funguje to i na x86_64, jenom je potřeba doplnit jeden ifdef do stack.cpp.
Tiskni
Sdílej:
Ahoj diky za tip. Ten dbg::stack vypada dobre. Taky jsem se o neco takovyho pokousel:
Marka __HERE__ a __HERE__SHORT__ slouzi k identifikaci mista ve zdrojacich. Pouzivam to pri vyhazovani vyjimek. Mam vlastni typ pro vyjimku, ktera ma 1. argument konstruktoru std::string.
A pouzivam to takhle:
throw(OciException(__HERE__, "Not implemented yet\n"));
--- snap ---
#ifdef __GNUC__
#define __HERE_SHORT__ ::std::string(((strrchr(__FILE__, '/') ?: __FILE__ - 1) + 1)) + ":"__HERE1__(__LINE__)
#define __HERE__ ::trotl::str_backtrace() + __HERE3__(__LINE__, __FILE__)
#define __HERE1__(x) STR(x)"\t" + __PRETTY_FUNCTION__
#define __HERE2__(x,y) ::std::string("("y":" STR(x)"(") + __PRETTY_FUNCTION__ +")"
#define __HERE3__(x,y) ::std::string("\n(") + __PRETTY_FUNCTION__ + ") " y ":" STR(x) + "\n"
#define STR(a) #a
#else
...
inline ::std::string str_backtrace()
--- snap ---
{
::std::stringstream ret;
#ifdef __GNUC__
void *buffer[TROTL_BACKTRACE_DEPTH];
int bsize = ::backtrace(buffer, TROTL_BACKTRACE_DEPTH);
char **names = backtrace_symbols (buffer, bsize);
for(int i=0; i<bsize; i++)
ret << names[i] << std::endl;
free(names);
#endif
return ret.str();
}