Nové číslo časopisu Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 160 (pdf).
Izrael od února zakáže dětem používat v prostorách základních škol mobilní telefony. Podle agentury AFP to uvedlo izraelské ministerstvo školství, které zdůraznilo negativní dopady, které na žactvo používání telefonů má. Izrael se tímto krokem přidává k rostoucímu počtu zemí, které dětem ve vzdělávacích zařízeních přístup k telefonům omezují.
Internetová společnost Google ze skupiny Alphabet pravděpodobně dostane příští rok pokutu od Evropské komise za nedostatečné dodržování pravidel proti upřednostňování vlastních služeb a produktů ve výsledcích vyhledávání. V březnu EK obvinila Google, že ve výsledcích vyhledávání upřednostňuje na úkor konkurence vlastní služby, například Google Shopping, Google Hotels a Google Flights. Případ staví Google proti specializovaným
… více »Byl oznámen program a spuštěna registrace na konferenci Prague PostgreSQL Developer Day 2026. Konference se koná 27. a 28. ledna a bude mít tři tracky s 18 přednáškami a jeden den workshopů.
Na webu československého síťařského setkání CSNOG 2026 je vyvěšený program, registrace a další informace k akci. CSNOG 2026 se uskuteční 21. a 22. ledna příštího roku a bude se i tentokrát konat ve Zlíně. Přednášky, kterých bude více než 30, budou opět rozdělené do tří bloků - správa sítí, legislativa a regulace a akademické projekty. Počet míst je omezený, proto kdo má zájem, měl by se registrovat co nejdříve.
Máirín Duffy a Brian Smith v článku pro Fedora Magazine ukazují použití LLM pro diagnostiku systému (Fedora Linuxu) přes Model Context Protocol od firmy Anthropic. I ukázkové výstupy v samotném článku obsahují AI vygenerované nesmysly, např. doporučení přeinstalovat balíček pomocí správce balíčků APT z Debianu místo DNF nativního na Fedoře.
Projekt D7VK dospěl do verze 1.0. Jedná se o fork DXVK implementující překlad volání Direct3D 7 na Vulkan. DXVK zvládá Direct3D 8, 9, 10 a 11.
Byla vydána nová verze 2025.4 linuxové distribuce navržené pro digitální forenzní analýzu a penetrační testování Kali Linux (Wikipedie). Přehled novinek se seznamem nových nástrojů v oficiálním oznámení na blogu.
Národní úřad pro kybernetickou a informační bezpečnost (NÚKIB) zveřejnil Národní politiku koordinovaného zveřejňování zranitelností (pdf), jejímž cílem je nejen zvyšování bezpečnosti produktů informačních a komunikačních technologií (ICT), ale také ochrana objevitelů zranitelností před negativními právními dopady. Součástí je rovněž vytvoření „koordinátora pro účely CVD“, jímž je podle nového zákona o kybernetické … více »
Vývojáři KDE oznámili vydání balíku aplikací KDE Gear 25.12. Přehled novinek i s náhledy a videi v oficiálním oznámení.
rád si nechám v diskuzi poradit
Co je šokujícího na tom, že na feature request, který nemá nijak zásadní vliv na funkčnost hry, odpovím "tak to napiš sám a pošli mi patch"? Ze 144 commitů v mojí větvi jsou jen tři patche od někoho jiného, z toho jeden jsou ikonky a další jsem musel sám z poloviny přepsat, protože autor se mi na žádost o vylepšení patche už neozval.
BTW, měl bych Jardíkovi poděkovat. Při opravování typů proměnných a návratových hodnot, co přímo pracují se sizeof, se mi podařilo najít a opravit jeden bug v pointerové aritmetice.
// skeldal/branches/next_ghost/unix/init.cpp
void Sys_SetPath(unsigned idx, const char *path) {
size_t len = strlen(path); // tady byl int
assert(idx < PATHTABLE_SIZE);
if (pathtable[idx]) {
free(pathtable[idx]);
}
// tady nebyl test *path == 0, což mohlo způsobit pád v kódu
// níže, protože len-1 by šlo na neplatný index SIZE_MAX
if (!*path || *path == 0) {
pathtable[idx] = (char*)malloc(1);
pathtable[idx][0] = '\0';
return;
}
if (path[len - 1] != '/') {
len++;
}
pathtable[idx] = (char*)malloc(len + 1);
strcpy(pathtable[idx], path);
pathtable[idx][len-1] = '/';
pathtable[idx][len] = '\0';
}
Ještě tam teda chybí kontrola návratových hodnot z malloc(), to už se mi nechce dělat.
Další chyby:
// není reentrant
char *Sys_FullPath(unsigned idx, const char *file) {
static char ret[PATH_MAX];
assert(idx < PATHTABLE_SIZE);
// tady může dojít k přetečení fixně velikého bufferu
strcpy(ret, pathtable[idx]);
strncat(ret, file, PATH_MAX - strlen(ret) - 1);
return ret;
}
// není reentrant
char *Sys_DOSPath(unsigned defdir, const char *path) {
static char ret[PATH_MAX];
int i, length; // "má" být size_t
assert(defdir < PATHTABLE_SIZE);
// možnost přetečení bufferu
strcpy(ret, pathtable[defdir]);
length = strlen(ret);
strncat(ret + length, path, PATH_MAX - length - 1);
strupr(ret + length);
for (i = length; ret[i]; i++) {
if (ret[i] == '\\') {
ret[i] = '/';
}
}
return ret;
}
void Sys_Init(void) {
char home[PATH_MAX]; // smyšlená hodnota maximální velikosti cesty
int len; // size_t
// možnost přetečení bufferu, getenv() může vrátit NULL
strcpy(home, getenv("HOME"));
len = strlen(home);
// neplatný index při len == 0
if (home[len-1] != '/') {
home[len++] = '/';
}
// další možnost přetečení bufferu
strcpy(home + len, ".skeldal/");
Nakonec dotaz: znáš třeba std::map a std::string? Když je to C++ kód, proč to nepoužít? Ušetřil bys si spoustu starostí, např. Sys_SetPath by mohl vypadat nějak takto:
typedef std::map<unsigned, std::string> Mapa;
Mapa mapa;
void Sys_SetPath(unsigned id, const std::string& path)
{
std::string& oldVal = mapa[id];
std::string::size_type len;
oldVal = path;
len = oldVal.size();
if (len > 0 && oldVal[len-1] != '/') oldVal += '/';
}
A při chybné alokaci ti to prostě vyprskne std::bad_alloc
STL znám a odmítám to použít, protože bych tím akorát zablokoval možnost portovat Skeldal na mobilní platformy s omezenou pamětí.To je škoda. Já si trochu procházel ten kód a místama jsou tam takové čuňárny a je to tak nepřehledné, všude možně chybí kontrola chyb, některé funkce vůbec neupozorní na chyby (ani nějakým kódem, ani výjimkou, ani vypsáním) a vypadá to fakt neudržitelně. Ale snaha se cení.
Proč děláme takovou hloupost? Stručná, byť možná trochu nesrozumitelná, odpověď na tuto otázku by se dala shrnout do věty: "Protože STL vás nutí si přát, aby C++ mělo automatickou správu paměti (garbage collector - GC)". Problém je v tom, že do STL kontejneru můžete vkládat pouze objekty, které mají definovanou kopii. Navíc, pokud aspoň trochu dbáte na rychlost aplikace, musí tato kopie pokud možno být jednoduše proveditelná (rychlá). To v praxi znamená, že do STL kontejneru je možné efektivně ukládat fundamentální typy, možná ještě tak řetězce a pár dalších jednoduchých typů. Všechno ostatní lze uložit pouze nepřímo pomocí ukazatele. Tím se ztrácí jedna ze základních výhod, kterou používaní kontejnerových šablon přináší - automatická správa paměti.
AC_ARG_WITH(gamedata-prefix,
[AS_HELP_STRING([--with-gamedata-prefix=PREFIX], [Prefix for game data.])],
)
ad 5)set -e
: ${AUTORECONF:=autoreconf}
if test "$*"; then
ARGS="$*"
else
if test -f config.log ; then
ARGS=`grep '^ \$ \./configure ' config.log | sed 's/^ \$ \.\/configure //' 2> /dev/null`
fi
fi
echo "Running ${AUTORECONF}..."
$AUTORECONF --install --verbose
test x$NOCONFIGURE = x && echo "Running ./configure $ARGS" && ./configure $ARGS
ad 1) a 5) Neznám moc balíků, které by tohle dělaly, a UNIXový standard je ./configure; make; make install. Dokud se ze "svaté trojice" nestane čtveřice, která začíná ./autogen.sh nebo něčím podobným, budu mít configure skript přímo v repozitáři, stejně jako většina ostatních projektů. Navíc takový skript GNU Coding Standards nevyžaduje.
ad 2) Díky za tip, tohle jsem neznal.
ad 3) Podle GNU Coding Standard je to zcela v pořádku a já se s dovolením budu držet GNU Coding Standards. Freedesktop si může vymýšlet, co chce, ale to ještě neznamená, že to má smysl používat.
ad 4) -Dcosi je flag preprocesoru, takže AM_CPPFLAGS je naprosto správné umístění. CPPFLAGS se používá při kompilaci C i C++, CXXFLAGS jen pro C++.
Tiskni
Sdílej: