Dnes a zítra probíhá vývojářská konference Google I/O 2025. Sledovat lze na YouTube a na síti 𝕏 (#GoogleIO).
V Bostonu probíhá konference Red Hat Summit 2025. Vybrané přednášky lze sledovat na YouTube. Dění lze sledovat na síti 𝕏 (#RHSummit).
Společnost Red Hat oficiálně oznámila vydání Red Hat Enterprise Linuxu 10. Vedle nových vlastností přináší také aktualizaci ovladačů a předběžné ukázky budoucích technologií. Podrobnosti v poznámkách k vydání.
Tuto sobotu 24. května se koná historicky první komunitní den projektu Home Assistant. Zváni jsou všichni příznivci, nadšenci a uživatelé tohoto projektu. Pro účast je potřebná registrace. Odkazy na akce v Praze a v Bratislavě.
Troy Hunt představil Have I Been Pwned 2.0, tj. nový vylepšený web služby, kde si uživatelé mohou zkontrolovat, zda se jejich hesla a osobní údaje neobjevily v únicích dat a případně se nechat na další úniky upozorňovat.
Microsoft představil open source textový editor Edit bežící v terminálu. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.
V Seattlu a také online probíhá konference Microsoft Build 2025. Microsoft představuje své novinky. Windows Subsystem for Linux je nově open source. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.
Z příspěvku Turris Sentinel – co přinesl rok 2024 na blogu CZ.NIC: "Za poslední rok (únor 2024 – únor 2025) jsme zachytili 8,3 miliardy incidentů a to z 232 zemí a z jejich závislých území. Tyto útoky přišly od 6,2 milionu útočníků (respektive unikátních adres). SMTP minipot je stále nejlákavější pastí, zhruba 79 % útoků bylo směřováno na tento minipot, 16 % útoků směřovalo na minipot Telnet, 3 % útoků směřovaly na minipot HTTP a 2 % na minipot FTP. Dále jsme zaznamenali 3,2 milionu unikátních hesel a 318 tisíc unikátních loginů, které útočníci zkoušeli."
Byla vydána (Mastodon, 𝕏) nová verze 3.0.4 svobodné aplikace pro úpravu a vytváření rastrové grafiky GIMP (GNU Image Manipulation Program). Přehled novinek v oznámení o vydání a v souboru NEWS na GitLabu. Nový GIMP je již k dispozici také na Flathubu.
Byla vydána nová stabilní verze 7.4 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 136. Přehled novinek i s náhledy v příspěvku na blogu.
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: