Raspberry Pi OS, oficiální operační systém pro Raspberry Pi, byl vydán v nové verzi 2025-10-01. Přehled novinek v příspěvku na blogu Raspberry Pi a poznámkách k vydání. Jedná o první verzi postavenou na Debianu 13 Trixie.
Byla vydána nová verze 4.6 svobodného notačního programu MuseScore Studio (Wikipedie). Představení novinek v oznámení v diskusním fóru a také na YouTube.
Společnost DuckDuckGo stojící za stejnojmenným vyhledávačem věnovala 1,1 milionu dolarů (stejně jako loni) na podporu digitálních práv, online soukromí a lepšího internetového ekosystému. Rozdělila je mezi 29 organizací a projektů. Za 15 let rozdala 8 050 000 dolarů.
Svobodný multiplatformní herní engine Bevy napsaný v Rustu byl vydán ve verzi 0.17. Díky 278 přispěvatelům.
Bylo vydáno openSUSE Leap 16 (cs). Ve výchozím nastavení přichází s vypnutou 32bitovou (ia32) podporou. Uživatelům však poskytuje možnost ji ručně povolit a užívat si tak hraní her ve Steamu, který stále závisí na 32bitových knihovnách. Změnily se požadavky na hardware. Leap 16 nyní vyžaduje jako minimální úroveň architektury procesoru x86-64-v2, což obecně znamená procesory zakoupené v roce 2008 nebo později. Uživatelé se starším hardwarem mohou migrovat na Slowroll nebo Tumbleweed.
Ministerstvo průmyslu a obchodu (MPO) ve spolupráci s Národní rozvojovou investiční (NRI) připravuje nový investiční nástroj zaměřený na podporu špičkových technologií – DeepTech fond. Jeho cílem je posílit inovační ekosystém české ekonomiky, rozvíjet projekty s vysokou přidanou hodnotou, podpořit vznik nových technologických lídrů a postupně zařadit Českou republiku mezi země s nejvyspělejší technologickou základnou.
… více »Radicle byl vydán ve verzi 1.5.0 s kódovým jménem Hibiscus. Jedná se o distribuovanou alternativu k softwarům pro spolupráci jako např. GitLab.
Společnost OpenAI představila text-to-video AI model Sora 2 pro generování realistických videí z textového popisu. Přesnější, realističtější a lépe ovladatelný než předchozí modely. Nabízí také synchronizované dialogy a zvukové efekty.
UBports, nadace a komunita kolem Ubuntu pro telefony a tablety Ubuntu Touch, vydala Ubuntu Touch 24.04-1.0, tj. první stabilní vydání založené na Ubuntu 24.04 LTS.
Rakouská armáda přechází na LibreOffice. Ne kvůli licencím (16 000 počítačů). Hlavním důvodem je digitální suverenita. Prezentace v pdf z LibreOffice Conference 2025.
user::rw- user:gemini:rwx group::r-- mask::rwx other::r--Já se snažím, aby z toho vzniklo vícedimenzionální hash, kde by se dalo přistupovat k datům zhruba takto: $acl{user}{gemini}{read}=1 Pokud máte svůj vlastní, jednoduchý nápad na řešení, klidně i s jiným způsobem uložení dat, nečtěte dále a navrhněte vaše řešení Mám nějaký svůj kód, který ale selhává právě na vytváření vícedimenzionální hashe... Kód není dokončený, výsledné spojení do jednoho hashe by se měl udít pomocí Hash::Merge, nicméně navazování těch hashí do té vícedimenzové nějak selhává... problémový řádek je označený komentářem, je skoro dole...
#!/usr/bin/perl -w use strict; use Data::Dump qw(dump); my $string = "user::rw- user:gemini:rwx group::r-- mask::rwx other::r-- "; #Stripping last end of line $string =~ s/^$//g; my @lines = split(/\n/,$string); my %result = (); my %output = (); foreach my $line(@lines) { my @parts = split(/:/,$line); #This small part of code is ugly hack for situation, when while dies, if $part is empty string (OMG why?) if (!$parts[1] and $parts[2]) #FIXME { $parts[1] = 'NULL'; } INTERN:while( my $part = pop(@parts)) { if ($part =~ m/[r-][w-][x-]/) { my @perms = split(//,$part); if($perms[0] eq 'r') { $result{'read'} = 1 } else {$result{'read'} = 0 } if($perms[1] eq 'w') { $result{'write'} = 1 } else {$result{'write'} = 0 } if($perms[2] eq 'x') { $result{'exec'} = 1 } else {$result{'exec'} = 0 } # print "$result{'read'},$result{'write'},$result{'exec'} \n"; } else { my %meta = (); %meta = %result; %result = (); #Tento radek vsechno rozbije!! $result{$part} = %meta; } } dump(%result); }Bohužel, výstup z toho vůbec není takový, jako by člověk čekal, označený řádek to nějak rozbije a výstupem dumpu je tohle...
jakub@gondolin:/tmp$ ./test.pl ("user", "1/8") ("user", "1/8") ("group", "1/8") ("mask", "1/8") ("other", "1/8")
Řešení dotazu:
$result{$part} = \%meta
... referencia na hash.
to "parts =~" skús takto:
if ($parts =~ m/([-r])([-w])([-x])/) { $result{read} = $1 eq 'r'; $result{write} = $1 eq 'w'; $result{exec} = $1 eq 'x'; )
Pokud máte svůj vlastní, jednoduchý nápad na řešení, klidně i s jiným způsobem uložení dat, nečtěte dále a navrhněte vaše řešeníAsi by se dalo vymyslet 100 způsobů, jde o to, na co to chcete použít... Každopádně ale doporučuju u takovéto datové struktury použít rovnou referenci na hash (
$acl->{user}{gemini}
) místo hashe.
Jinak se mi moc nezdá že by ten kód byl v Perlu :) zkusil jsem to napsat takto:
use Modern::Perl; use Test::More tests => 1; my @input = qw/user::rw- user:gemini:rwx group::r-- mask::rwx other::r--/; my $expected_output = { user => { NULL => { read => 1, write => 1, execute => 0 }, gemini => { read => 1, write => 1, execute => 1 }, }, group => { NULL => { read => 1, write => 0, execute => 0 }, }, mask => { NULL => { read => 1, write => 1, execute => 1 }, }, other => { NULL => { read => 1, write => 0, execute => 0 }, }, }; is_deeply(acl_as_hash(@input), $expected_output); sub acl_as_hash { my $output; for my $line (@_) { my ($type, $name, $priv) = split(/:/, $line, 3); $name ||= 'NULL'; $output->{$type}->{$name} = _privs_for($priv); } return $output; } sub _privs_for { my $priv = shift; return { read => $priv =~ /r/ ? 1 : 0, write => $priv =~ /w/ ? 1 : 0, execute => $priv =~ /x/ ? 1 : 0, }; }
user:gemini:r-x
tak můžeme mít ještě default:user:someone:rwx
(můj blik: čtvrtý sloupec může být pouze(!!!) default)
A teď, když se na to dívám, tak to vážně šlo všechno udělat jednodušeji a já si jen trval na obecném řešení pro nekonečný počet sloupců
Důvod pro implementaci je zhruba takový, že potřebuju nějaké programovací rozhraní pro ACL, v Perl není vůbec (jen výše zmíněné nepřenositelné Solaris::ACL) a v Pythonu je jen python-libacl, které je celé nějaké divné...
tak jako máme user:gemini:r-x tak můžeme mít ještě default:user:someone:rwx (můj blik: čtvrtý sloupec může být pouze(!!!) default)Jo tohle. No, ale to bych asi držel oboje na stejné úrovni jinak v tom bude pěknej bordel.
Důvod pro implementaci je zhruba takový, že potřebuju nějaké programovací rozhraní pro ACLOK, v tom případě to berete za špatný konec. Začněte s tím, že to rozhraní použijete (i když ho nemáte), tím zjistíte, jaký potřebujete interface, a pak dodělejte tu implementaci. Datová struktura je implementační detail až úplně na konci. Třeba zjistíte že to chcete úplně jinak. Např.
my $acl = Moje::ACL->new('/home/franta'); if ($acl->readable_by('franta')) { ... }nebo
my $acl = Moje::ACL->new( { franta => 'rw-' } ); $acl->apply_to('/home/franta');atd.
No, do něčeho podobného to směřuju, akorát tu hash chci použít jako podklad pro ty funkce... Každopádně dobrá rada s tou implementací... (A taky jsem díky vám objevil Modern::Perl)Důvod pro implementaci je zhruba takový, že potřebuju nějaké programovací rozhraní pro ACLOK, v tom případě to berete za špatný konec. Začněte s tím, že to rozhraní použijete (i když ho nemáte), tím zjistíte, jaký potřebujete interface, a pak dodělejte tu implementaci. Datová struktura je implementační detail až úplně na konci. Třeba zjistíte že to chcete úplně jinak. Např.my $acl = Moje::ACL->new('/home/franta'); if ($acl->readable_by('franta')) { ... }
No, do něčeho podobného to směřuju, akorát tu hash chci použít jako podklad pro ty funkce... Každopádně dobrá rada s tou implementací...Pokud se Vám líbí ta objektová notace, tak zkuste třeba Moose. Jak říkám, jestli tam nakonec bude ten hash nebo něco jiného vyplyne z kontextu až budete psát
sub readable_by
.
Tiskni
Sdílej: