Byly zveřejněny prezentace a videozáznamy přednášek a fotografie z česko-slovenského setkání poskytovatelů přístupu k internetu, provozovatelů telekomunikačních sítí, registrátorů domén a provozovatelů počítačových sítí a technických nadšenců CSNOG 2023 (Czech and Slovak Network Operators Group) konaného 16. a 17. května ve Zlínu.
Soutěž amatérských robotů Robotický den 2023 proběhne v neděli 4. června v Kongresovém centru Praha.
V Tchaj-peji probíhá počítačový veletrh COMPUTEX 2023. Firmy představují své novinky. Nvidia například superpočítač DGX GH200 AI.
Vyšla nová verze XMPP (Jabber) klienta Gajim. Nejvýznamnější novinkou je integrace OMEMO pluginu přímo do jádra aplikace, takže již není třeba plugin samostatně instalovat. Přehled dalších novinek je dostupný na oficiálních stránkách. Gajim je vytvořen v jazyce Python s využitím knihovny GTK a vedle Linuxu jej lze vyzkoušet i na platformách MacOS a Windows.
Komunita KDE představila stránku KDE for Developers pro vývojáře používající KDE aplikace. Postupně byly představeny stránky pro umělce KDE for Creators, děti KDE for Kids a vědce KDE for Scientists.
Společnost ARM představila platformu Total Compute Solutions 2023 (TCS23) s 5. generací GPU Immortalis-G720, Mali-G720 a Mali-G620 a Armv9.2 CPU Cortex-X4, Cortex-A720 a Cortex-A520 s DSU-120.
Na konferenci Microsoft Build 2023 byl představen Azure Linux container host for Azure Kubernetes Service (AKS). Podrobnosti ve videu s otázkami a odpovědmi. Shrnutí v článku na DevClass.
Na itch.io probíhá Linux Game Jam 2023. Zapojit se a přihlásit hru běžící na Linuxu lze do 6. června do 01:59. Zahrát si lze hry z loňského ročníku.
Na Steamu lze získat zdarma počítačové hry Warhammer 40,000: Gladius - Relics of War a Hue. Na Epic Games Storu počítačovou hru Fallout: New Vegas - Ultimate Edition.
WordPress (Wikipedie), open source systém pro správu webového obsahu (CMS), zítra slaví 20 let. První verze byla vydána 27. května 2003.
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: