V Brestu dnes začala konference vývojářů a uživatelů linuxové distribuce Debian DebConf25. Na programu je řada zajímavých přednášek. Sledovat je lze online.
Před 30 lety, tj. 14. července 1995, se začala používat přípona .mp3 pro soubory s hudbou komprimovanou pomocí MPEG-2 Audio Layer 3.
Výroba 8bitových domácích počítačů Commodore 64 byla ukončena v dubnu 1994. Po více než 30 letech byl představen nový oficiální Commodore 64 Ultimate (YouTube). S deskou postavenou na FPGA. Ve 3 edicích v ceně od 299 dolarů a plánovaným dodáním v říjnu a listopadu letošního roku.
Společnost Hugging Face ve spolupráci se společností Pollen Robotics představila open source robota Reachy Mini (YouTube). Předobjednat lze lite verzi za 299 dolarů a wireless verzi s Raspberry Pi 5 za 449 dolarů.
Dnes v 17:30 bude oficiálně vydána open source počítačová hra DOGWALK vytvořena v 3D softwaru Blender a herním enginu Godot. Release party proběhne na YouTube od 17:00.
McDonald's se spojil se společností Paradox a pracovníky nabírá také pomocí AI řešení s virtuální asistentkou Olivii běžící na webu McHire. Ian Carroll a Sam Curry se na toto AI řešení blíže podívali a opravdu je překvapilo, že se mohli přihlásit pomocí jména 123456 a hesla 123456 a získat přístup k údajům o 64 milionech uchazečů o práci.
Byla vydána (𝕏) červnová aktualizace aneb nová verze 1.102 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a videi v poznámkách k vydání. Ve verzi 1.102 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.
Byla vydána nová verze 2.4.64 svobodného multiplatformního webového serveru Apache (httpd). Řešeno je mimo jiné 8 bezpečnostních chyb.
Společnost xAI na síti 𝕏 představila Grok 4, tj. novou verzi svého AI LLM modelu Grok.
Ministerstvo vnitra odhalilo závažný kyberincident v IT systému resortu. Systém, do kterého se dostal útočník bez oprávnění, byl odpojen a nedošlo k odcizení dat [𝕏].
Odkazy
Dnešný blog bude relatívne krátky, v podstate pôjde len o jednoduchý programík, ktorý demonštruje to, že xfs v záznamoch dirent nerozlišuje medzi adresármi a súbormi čo môže nepripravenému softvéru urobiť poriadne problémy. Na záver blogu jeden malý bonus - foto mojej mačky
Včera som zopár hodín strávil ladením malého programu na správu siete - connman
. Táto malá utilitka sa používa prevažne v mobilných zariadeniach (tizen, nemo ...). Pre jedno embedded zariadenie som potreboval vyrobiť okrem network manažéra aj nastavenie časovej zóny. Keďže už connman používam na pripojenie k sieti nebolo nad čím váhať a využil som rovno aj jeho modul na nastavenie času / časovej zóny a ntp. To som ale nečakal na aký problém narazím pri použití xfs.
Niekoľko hodín som strávil pátraním prečo nemám vôbec hodiny dostupné cez dbus rozhranie. Došiel som až k súboru timezone.c a konkrétne k funkcii find_origin
. Nenápadný kód typu:
while ((d = readdir(dir))) { switch (d->d_type) { ... } }
vyzerá na prvý pohľad v poriadku. Niektoré súborové systémy však pri čítaní adresára nevracajú vôbec d_type
. Na prvý pohľad to síce vyzerá nezmyselne, ale ak je atribút typu súboru uložený samostatne vo vlastnom inode (tj. pre každý súbor sa pre zistenie jeho typu musí načítať samostatný uzol na disku) môže byť directory listing poriadne pomalý. Preto v takých prípadoch môže filesystém vracať neznámy typ a konkrétny typ záznamu sa musí zistiť cez volanie stat
.
Na záver ešte sľúbený príklad (nič neošetrujem, netrhajte si prosím vlasy
#include <sys/stat.h> #include <dirent.h> #include <stdlib.h> #include <stdio.h> int main(int argc, char *argv[]) { DIR *dir = opendir(argv[1]); struct dirent *d; struct stat buf; char path[255]; while ((d = readdir(dir))) { // Identifikacia caz fstat switch (d->d_type) { case DT_UNKNOWN : printf("UNKNOWN"); break; case DT_FIFO : printf("FIFO "); break; case DT_CHR : printf("CHR "); break; case DT_DIR : printf("DIR "); break; case DT_BLK : printf("BLK "); break; case DT_REG : printf("REG "); break; case DT_LNK : printf("LNK "); break; case DT_SOCK : printf("SOCK "); break; case DT_WHT : printf("WHT "); break; } printf(" ("); // Identifikacia cez d_type snprintf(path, 255, "%s/%s", argv[1], d->d_name); if (stat(path, &buf) == 0) { if (S_ISREG (buf.st_mode)) printf("REG "); if (S_ISDIR (buf.st_mode)) printf("DIR "); if (S_ISCHR (buf.st_mode)) printf("CHR "); if (S_ISBLK (buf.st_mode)) printf("BLK "); if (S_ISFIFO (buf.st_mode)) printf("FIFO"); if (S_ISLNK (buf.st_mode)) printf("LNK "); if (S_ISSOCK (buf.st_mode)) printf("SOCK"); } printf(") %s ", d->d_name); printf("\n"); } return 0; }
Po zavolaní ./a.out /cesta/k/adresaru
na nasledujúci adresár:
% ls -lh celkom 0 drwxr-xr-x 2 mirec mirec 6 okt 26 11:48 adresar prw-r--r-- 1 mirec mirec 0 okt 26 11:48 fifo -rw-r--r-- 1 mirec mirec 0 okt 26 11:48 subor
vypíše testovací program nasledujúce záznamy:
./a.out test DIR (DIR ) . DIR (DIR ) .. UNKNOWN (DIR ) adresar UNKNOWN (REG ) subor UNKNOWN (FIFO) fifo
Prvý záznam je vrátený z dirent, druhý už korektný získaný volaním stat.
Minulý blog bol taký trochu smutnejší a na záver som poslal fotku jednej mačky, ktorá behala po okolí. Tentoraz posielam foto v podstate už môjho kocúra. Asi pred 3 týždňami som ho našiel pred dverami a od vtedy je doma každý deň. Majiteľka je niečo ako crazy cat women zo simpsonovcov, takže domov sa už radšej nevracia
Tiskni
Sdílej:
unsigned char d_type; /* type of file; not supported
by all file system types */
Jop, v manuále je to napísané správne, ale v bugreporte ku connman-u to inteláci zahodili, lebo podľa nich všetky normálne filesystémy to podporujú.
btw: Namiesto stat by bolo v tomto pripade lepsie pouzit lstat nech sa nesleduju linky.