Byl vydán Linux Mint 22.3 s kódovým jménem Zena. Podrobnosti v přehledu novinek a poznámkách k vydání. Vypíchnout lze, že nástroj Systémová hlášení (System Reports) získal mnoho nových funkcí a byl přejmenován na Informace o systému (System Information). Linux Mint 22.3 bude podporován do roku 2029.
Wine bylo po roce vývoje od vydání verze 10.0 vydáno v nové stabilní verzi 11.0. Přehled novinek na GitLabu. Vypíchnuta je podpora NTSYNC a dokončení architektury WoW64.
Byl vydán Mozilla Firefox 147.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Firefox nově podporuje Freedesktop.org XDG Base Directory Specification. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 147 bude brzy k dispozici také na Flathubu a Snapcraftu.
Asociace repair.org udělila anticeny těm nejhorším produktům představeným na veletrhu CES 2026. Oceněnými jsou například šmírující kamery Amazon Ring AI, chytrý běžecký pás od společnosti Merach, která otevřeně přiznává, že nedokáže zabezpečit osobní data uživatelů, případně jednorázové lízátko, které rozvibrovává čelisti uživatele a tak přehrává hudbu. Absolutním vítězem je lednička od Samsungu, která zobrazuje reklamy a kterou lze otevřít pouze hlasovým příkazem přes cloudovou službu.
Íránští protirežimní aktivisté si všímají 30% až 80% ztráty packetů při komunikaci se satelity služby Starlink. Mohlo by se jednat o vedlejší důsledek rušení GPS, kterou pozemní přijímače Starlinku používají k výpočtu polohy satelitů a kterou se režim rovněž snaží blokovat, podle bezpečnostního experta a iranisty Amira Rashidiho je ale pravděpodobnější příčinou terestrické rušení přímo satelitní komunikace Starlinku podobnou
… více »Evropská komise (EK) zvažuje, že zařadí komunikační službu WhatsApp americké společnosti Meta mezi velké internetové platformy, které podléhají přísnější regulaci podle unijního nařízení o digitálních službách (DSA). Firmy s více než 45 miliony uživatelů jsou podle DSA považovány za velmi velké on-line platformy (Very Large Online Platforms; VLOP) a podléhají přísnějším pravidlům EU pro internetový obsah. Pravidla po
… více »Tržní hodnota technologické společnosti Alphabet poprvé v historii přesáhla čtyři biliony dolarů (83 bilionů Kč). Stalo se tak poté, co Apple oznámil, že bude na poli umělé inteligence (AI) spolupracovat s dceřinou firmou Alphabetu, společností Google.
Nové číslo časopisu Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 161 (pdf).
Po delší době vývoje vyšla nativní linuxová verze virtuálního bubeníka MT-PowerDrumKit 2 ve formátu VST3. Mezi testovanými hosty jsou Reaper, Ardour, Bitwig a Carla.
Desktopové prostředí Budgie bylo vydáno ve verzi 10.10. Dokončena byla migrace z X11 na Wayland. Budgie 10 vstupuje do režimu údržby. Vývoj se přesouvá k Budgie 11. Dlouho se řešilo, v čem bude nové Budgie napsáno. Budgie 10 je postaveno nad GTK 3. Přemýšlelo se také nad přepsáním z GTK do EFL. Budgie 11 bude nakonec postaveno nad Qt 6.
Všechny zápisy v blogu jsou pod licencí Creative Commons BY-SA 3.0 CZ
Tentokrát jsem se vrtal v build systému Skeldalu a dodělal dlouho slibovanou možnost nastavit cesty k datovým souborům přes configure skript. Má to ale jeden háček: od revize 160 se mění defaultní cesta k datovým souborům hry.
Při updatu na nejnovější revizi tak máte na výběr ze dvou možností: Buď si herní data přesunete/nasymlinkujete do adresáře /usr/local/share/skeldal, nebo budete spouštět configure skript takto:
./configure --datadir='${prefix}/games'
Pokud někdo víte, jak autoconf rozumným způsobem donutit změnit default proměnné ${datadir} na ${prefix}/games, rád si nechám v diskuzi poradit. Hlavní podmínka je, že tahle změna musí bez vnějšího zásahu přežít následný autoreconf.
Další změny od minula jsou spíše technického charakteru. První změna potěší autory dobrodružství, protože nový kód na načítání textů korektně řeší spoustu okrajových případů, na kterých by předchozí kód zbytečně selhal. Navíc teď správně hlásí číslo řádku, na kterém je chyba. Druhá změna potěší majitele starších strojů. Pokusil jsem se zoptimalizovat nejvytíženější renderovací funkce a všechny kromě jedné se mi podařilo zrychlit skoro na dvojnásobek. Změna se ale projeví jen zvýšením frameratu. Kvůli implementaci hlavní smyčky podle všeho hra místo častějšího uspání jen častěji kreslí. Někdy se budu muset do vnitřností hry podívat trochu hlouběji a konečně pořádně oddělit vykreslování od přepočítávání herního stavu.
Do první stabilní verze portu tak zbývá už jen mapování kláves a dořešení několika technických drobností.
Tiskni
Sdílej:
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++.