Eric Lengyel dobrovolně uvolnil jako volné dílo svůj patentovaný algoritmus Slug. Algoritmus vykresluje text a vektorovou grafiku na GPU přímo z dat Bézierových křivek, aniž by využíval texturové mapy obsahující jakékoli předem vypočítané nebo uložené obrázky a počítá přesné pokrytí pro ostré a škálovatelné zobrazení písma, referenční ukázka implementace v HLSL shaderech je na GitHubu. Slug je volným dílem od 17. března letošního
… více »Sashiko (GitHub) je open source automatizovaný systém pro revizi kódu linuxového jádra. Monitoruje veřejné mailing listy a hodnotí navrhované změny pomocí umělé inteligence. Výpočetní zdroje a LLM tokeny poskytuje Google.
Cambalache, tj. RAD (rapid application development) nástroj pro GTK 4 a GTK 3, dospěl po pěti letech vývoje do verze 1.0. Instalovat jej lze i z Flathubu.
KiCad (Wikipedie), sada svobodných softwarových nástrojů pro počítačový návrh elektronických zařízení (EDA), byl vydán v nové major verzi 10.0.0 (𝕏). Přehled novinek v příspěvku na blogu.
Letošní Turingovou cenu (2025 ACM A.M. Turing Award, Nobelova cena informatiky) získali Charles H. Bennett a Gilles Brassard za základní přínosy do oboru kvantové informatiky, které převrátily pojetí bezpečné neprolomitelné komunikace a výpočetní techniky. Jejich protokol BB84 z roku 1984 umožnil fyzikálně zaručený bezpečný přenos šifrovacích klíčů, zatímco jejich práce o kvantové teleportaci položila teoretické základy pro budoucí kvantový internet. Jejich práce spojila fyziku s informatikou a ovlivnila celou generaci vědců.
Firefox 149 dostupný od 24. března přinese bezplatnou vestavěnou VPN s 50 GB přenesených dat měsíčně (s CZ a SK se zatím nepočítá) a zobrazení dvou webových stránek vedle sebe v jednom panelu (split view). Firefox Labs 149 umožní přidat poznámky k panelům (tab notes, videoukázka).
Byla vydána nová stabilní verze 7.9 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 146. Přehled novinek i s náhledy v příspěvku na blogu.
Dle plánu byla vydána Opera GX pro Linux. Ke stažení je .deb i .rpm. V plánu je flatpak. Opera GX je webový prohlížeč zaměřený na hráče počítačových her.
GNUnet (Wikipedie) byl vydán v nové major verzi 0.27.0. Jedná se o framework pro decentralizované peer-to-peer síťování, na kterém je postavena řada aplikací.
Byly publikovány informace (technické detaily) o bezpečnostním problému Snapu. Jedná se o CVE-2026-3888. Neprivilegovaný lokální uživatel může s využitím snap-confine a systemd-tmpfiles získat práva roota.
Jelikož padla spousta návrhů na použití std::sort k řazení, učinil jsem tak. Bohužel však nepociťuji ŽÁDNÉ zrychlení. Připadá mi to úplně stejně rychlé.
void FileInfoList::sort( int column, bool ascending )
{
FileInfoComparator fic( column, ascending );
std::sort( begin(), end(), fic );
}
bool FileInfoComparator::operator()( const PFileInfo& fi1, const PFileInfo& fi2 )
{
if( fi1->isDots() ) return true;
if( fi2->isDots() ) return false;
if( fi1->isDir() && !fi2->isDir() ) return true;
if( fi2->isDir() && !fi1->isDir() ) return false;
int cmpRes = 0;
off64_t size1,size2;
time_t date1, date2;
switch( sortColumn )
{
case FileInfoList::COLUMN_NAME:
cmpRes = g_utf8_collate( fi1->getNameTitle().c_str(), fi2->getNameTitle().c_str() );
break;
case FileInfoList::COLUMN_EXT:
cmpRes = g_utf8_collate( fi1->getName().c_str(), fi2->getName().c_str() );
break;
case FileInfoList::COLUMN_SIZE:
fi1->getSize(size1); fi2->getSize(size2);
if(size1>size2) cmpRes = 1;
else if( size2>size1 ) cmpRes = -1;
break;
case FileInfoList::COLUMN_DATE:
fi1->getDate(date1); fi2->getDate(date2);
if(date1>date2) cmpRes = -1;
else if(date2>date1) cmpRes = 1;
break;
case FileInfoList::COLUMN_ATTRS:
cmpRes = g_utf8_collate( fi1->getAttrs().c_str(), fi2->getAttrs().c_str() );
break;
case FileInfoList::COLUMN_OWNER:
cmpRes = g_utf8_collate( fi1->getOwner().c_str(), fi2->getOwner().c_str() );
break;
default:
cmpRes = g_utf8_collate( fi1->getGroup().c_str(), fi2->getGroup().c_str() );
break;
}
if(cmpRes == 0) cmpRes = g_utf8_collate( fi1->getName().c_str(), fi2->getName().c_str() );
if(ascending) cmpRes = -cmpRes;
return (cmpRes > 0);
}
Tiskni
Sdílej:
Někdy nestačí myslet a je třeba vědět.
Kdepak, bez profileru při ladění výkonu nehnu prstem.
. Taky nerad přepisuju kód. o němž 100% nevím, že je to ten kousek, co mě zpomaluje.
stat() nebo lstat()? Pak by mne nepřekvapilo, pokud by problém byl skutečně tady a ne v samotném řazení seznamu.
typedef shared_ptr<PFileInfo> PFileInfoPtr_t; typedef std::vector<PFileInfoPtr_t> fileContainer;
class FileInfoList: public std::vector<FileInfo*>{
...
}
Drží tedy ukazatele. PFileInfo je jen typedef na FileInfo*, abych se vyhnul něčemu jako const FileInfo*& v tom operátoru ().

preco neskusit (ako som navrhoval)
- extra komparatory (triedy) pre kazdy typ stlpca
- vyhodit . a .. z filelistu
navyse, nie je doriesena otazka, ako sortovat v pripade rovnosti kriteria (datumy, velkosti, ...)
return cmpRes == 0;vlastne i to moze byt dovod tej "pomalosti"
)
20:08:39:458 start 20:08:40:419 endsamozrejme, ziskani celeho vypisu rwxrw-rw- by to urcite zpomalilo, ale trideni mi QListView dela uplne sam - krome trideni podle data modifikace. Tam se musi napsat jedna porovnavaci funkce.
bool FileInfoComparator::operator()( const PFileInfo& fi1, const PFileInfo& fi2 )Pokud definice PFileInfo vypada nejak takto
typedef FileInfo* PFileInfo;tak to dohromady nedela to, co nejspis prepodkladate. Vyleze z toho totiz reference na konstatni ukazatel na objekt FileInfo. Neboli primo
fi1 menit nelze, ale objekt, na ktery ukazuje, ano (*fi1 = *fi2 projde). A take je zcela zbytecne cpat na ukazatele jeste reference. IMHO spravna deklarace by mela vypadat takto
bool FileInfoComparator::operator()(const FileInfo* fi1, const FileInfo* fi2 )