Google Chrome 152 byl prohlášen za stabilní. Nejnovější stabilní verze 152.0.7977.64 přináší řadu novinek. Podrobný přehled v poznámkách k vydání. Opraveno bylo 327 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.
Před 35 lety, 25. srpna 1991, oznámil Linus Benedict Torvalds v diskusní skupině comp.os.minix, že vyvíjí (svobodný) operační systém (jako koníček, nebude tak velký a profesionální jako GNU) pro klony 386 (486), že začal v dubnu a během několika měsíců by mohl mít něco použitelného.
Apple představil čipy M6 a M5 Ultra, Mac mini s M6 nebo M5 Pro a Mac Studio s M5 Max nebo M5 Ultra. Fedora Asahi Remix zatím podporuje jenom M1 a M2.
Firefox 157 přinese zapnutou podporu rastrového grafického formátu JPEG XL. Založena je na v Rustu napsané implementaci jxl-rs používané i v Chrome a Chromiu.
Vanilla OS 3 „Reunion“ byl vydán. Tato na Debianu „Sid“ založená desktopová distribuce s transakčními aktualizacemi „neměnného“ základního systému (ABRoot) nově podporuje architekturu arm64 (vedle x86-64), podporuje reprodukovatelné sestavení většiny balíčků a vylepšuje systémové nástroje. Vlastní meta-správce balíčků APX nyní používá Distrobox v2 a je dostupný i pro jiné distribuce.
Řemínky pro Apple Watch, bezdrátová sluchátka nebo nabíjecí adaptéry. Takovou nabídku našli v uplynulých dnech příslušníci Celního úřadu v Liberci při kontrole kamenného obchodu na Náchodsku. Celkem zde zadrželi 3 035 kusů zboží podezřelého z porušování práv duševního vlastnictví. Pokud by se jednalo o originální výrobky, jejich hodnota by podle odhadu přesáhla 10,8 milionu korun.
Byla vydána verze 31.1 textového editoru GNU Emacs. Podrobný přehled novinek v souboru NEWS.
Webový prohlížeč Waterfox (Wikipedie), fork Firefoxu, byl vydán ve verzi 6.7.0. Postaven je na jádru Gecko ESR 153.
Multiplatformní open source voxelový herní engine Luanti byl vydán ve verzi 5.17.0. Podrobný přehled novinek v changelogu. Přidána byla základní podpora gamepadů. Opraveno bylo několik zranitelností. Původně se jedná o Minecraftem inspirovaný Minetest v říjnu loňského roku přejmenovaný na Luanti.
Americká technologická společnost Apple loni v Irsku na daních zaplatila 17 miliard dolarů (zhruba 350 miliard Kč). To představovalo 40 procent celkové částky, kterou firma odvedla na dani z příjmů po celém světě. Vyplývá to z účetních výkazů podniku. Platbu výrazně zvýšilo rozhodnutí Soudního dvora EU z roku 2024, podle něhož měl Apple doplatit Irsku na daních 13 miliard eur (313 miliard Kč).
/proc/sys/dev/cdrom/info, bohužel se mi nedaří. Soubor je otevřen POSIX funkcí open() s přístupem O_RDONLY. Soubor se otevře (tj. funkce nevrátí -1). Poté v cyklu načítám bajt po bajtu (v souboru nelze seekovat a zjistit tak jeho velikost):
while( read( fd, (void*)&bajt, 1 ) == 1 )
{
....
}
Problém je v tom, že se načte pouze první znak. Pro další pak funkce vrátí 0 (ne -1, což by znamenalo chybu). Zajímalo by mě, jak takový soubor načíst.
open a read s tím rozdílem, že tam byl buffer něco přes 8000. Poprvé bylo vrácen počet přečtených bajtů a v druhé 0 (tj. EOF). Tak mě napadá, jestli se celý soubor nemusí přečíst najednou????? Nějak se mi kvůli tomu nechce prasit můj kód, takže se radši ptám. Pokud nikdo vědět nebude, tak to asi vyzkouším. Následuje výstup strace -r, kde se načte jen první znak C ze souboru. Zajímavé je, cat vypíše soubor celý (že by dostatečný buffer?). Další zarážející věcí je, že funkce getline() si klidně čte po řádcích. Jak jsem ale řekl, chtěl bych použít funkci open() a read() - kvůli jiným možnostem otevírání, než mi nabízí funkce fopen().
0.000040 write(1, "Debug: Application constructor -"..., 40) = 40
0.000491 write(1, "Debug: Application contructor - "..., 37) = 37
0.000170 brk(0) = 0x804a000
0.000027 brk(0x806b000) = 0x806b000
0.000043 open("/proc/sys/dev/cdrom/info", O_RDONLY|O_LARGEFILE) = 3
0.000073 write(1, "File opened", 11) = 11
0.000069 write(1, "\n", 1) = 1
0.000081 read(3, "C", 1) = 1
0.000041 write(1, "Debug: something readed\n", 24) = 24
0.000088 read(3, "", 1) = 0
0.000028 write(1, "C", 1) = 1
0.000059 write(1, "\n", 1) = 1
0.000073 read(3, "", 1) = 0
0.000031 write(1, "Debug: Application::run() - begi"..., 35) = 35
0.000088 close(3) = 0
Zde je část kódu programu:
int main( ... )
{
...
File cdroms;
File stdOut;
stdOut.openStdOut();
if( cdroms.open("/proc/sys/dev/cdrom/info", fmReadOnly ) )
{
stdOut.writeLine("File opened");
String line;
while( cdroms.readLine(line) )
{
stdOut.writeLine(line);
}
cdroms.close();
}
...
}
bool File::open( const String& fileName, FileMode mode, Permission perms )
{
close();
m_pHandle = ::open( fileName.cStr(), mode | O_LARGEFILE, (mode_t)perms );
return opened();
}
Int64 File::read( Byte *data, Int64 size ) const
{
if( size <= 0 ) return 0;
if(!opened()) return -1;
Int64 totalReaded = 0;
Int64 readed = 0, toRead = 0;
do{
toRead = MIN(size-totalReaded,SSIZE_MAX);
readed = (Int64)::read( m_pHandle, (void*)data, (size_t)toRead );
if( readed == 0 ) break; //EOF
if( readed < 0 ) return readed; //error
totalReaded += readed;
data += readed;
} while(totalReaded < size);
return totalReaded;
}
bool File::readLine( String& str ) const
{
bool somethingReaded = false;
str.clear();
Char chr;
if( read( (Byte*)&chr, 1 ) == 1 )
{
somethingReaded = true;
do{
if( chr == 0 ) break;
else if( chr == '\r' ) {
prevR = true;
break;
} else if( chr == '\n' ) {
if(prevR) {
prevR = false;
continue;
} else break;
} else {
prevR = false;
str.append(chr);
}
} while( read( (Byte*)&chr, 1 ) == 1 );
}
return somethingReaded;
}
Tiskni
Sdílej: