Blíží se léto, chladiče topí, tranzistory se přehřívají, novinářům pomalu docházejí témata a nastává klasická okurková sezóna. Je tomu tak i mezi bastlíři? Na to se podíváme na Virtuální Bastlírně! Tentokrát se strahováci podívají na zoubek velmi slibně vypadajícímu open-source EDM projektu - ne, nejde o taneční hudbu, ale o elektroobrábění. Ukáží taky, jak vypadá starší cykloradar zevnitř nebo jak se testuje odolnost iPhonů.
… více »Společnosti Ticketmaster byla odcizena databáze s osobními údaji (jméno, adresa, telefonní číslo a část platebních údajů) 560 miliónů zákazníku. Za odcizením stojí skupina ShinyHunters a za nezveřejnění této databáze požaduje 500 tisíc dolarů [BBC].
Byla vydána nová stabilní verze 24.05 linuxové distribuce NixOS (Wikipedie). Její kódové označení je Uakari. Podrobný přehled novinek v poznámkách k vydání. O balíčky se v NixOS stará správce balíčků Nix.
Byla vydána nová verze 1.48.0 sady nástrojů pro správu síťových připojení NetworkManager. Novinkám se v příspěvku na blogu NetworkManageru věnuje Fernando F. Mancera. Mimo jiné se v nastavení místo mac-address-blacklist nově používá mac-address-denylist.
Před 25 lety, 31. května 1999, započal vývoj grafického editoru Krita (Wikipedie). Tenkrát ještě pod názvem KImageShop a později pod názvem Krayon.
Farid Abdelnour se v příspěvku na blogu rozepsal o novinkám v nejnovější verzi 24.05.0 editoru videa Kdenlive (Wikipedie). Ke stažení brzy také na Flathubu.
David Revoy, autor mj. komiksu Pepper&Carrot, se rozepsal o své aktuální grafické pracovní stanici: Debian 12 Bookworm, okenní systém X11, KDE Plasma 5.27, …
Wayland (Wikipedie) byl vydán ve verzi 1.23.0. Z novinek lze vypíchnout podporu OpenBSD.
Craig Loewen na blogu Microsoftu představil novinky ve Windows Subsystému pro Linux (WSL). Vypíchnout lze GUI aplikaci pro nastavování WSL nebo správu WSL z Dev Home.
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:
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 )