Spolek OpenAlt zve příznivce otevřených řešení a přístupu na 211. sraz, který proběhne v pátek 19. září od 18:00 ve Studentském klubu U Kachničky na Fakultě informačních technologií Vysokého učení technického na adrese Božetěchova 2/1. Na srazu proběhne přednáška Jiřího Eischmanna o nové verzi prostředí GNOME 49. Nemáte-li možnost se zúčastnit osobně, přednáškový blok bude opět streamován živě na server VHSky.cz a následně i zpřístupněn záznam.
Microsoft se vyhnul pokutě od Evropské komise za zneužívání svého dominantního postavení na trhu v souvislosti s aplikací Teams. S komisí se dohodl na závazcích, které slíbil splnit. Unijní exekutivě se nelíbilo, že firma svazuje svůj nástroj pro chatování a videohovory Teams se sadou kancelářských programů Office. Microsoft nyní slíbil jasné oddělení aplikace od kancelářských nástrojů, jako jsou Word, Excel a Outlook. Na Microsoft si
… více »Samba (Wikipedie), svobodná implementace SMB a Active Directory, byla vydána ve verzi 4.23.0. Počínaje verzí Samba 4.23 jsou unixová rozšíření SMB3 ve výchozím nastavení povolena. Přidána byla podpora SMB3 přes QUIC. Nová utilita smb_prometheus_endpoint exportuje metriky ve formátu Prometheus.
Správcovský tým repozitáře F-Droid pro Android sdílí doporučení, jak řešit žádosti o odstranění nelegálního obsahu. Základem je mít nastavené formální procesy, vyhrazenou e-mailovou adresu a být transparentní. Zdůrazňují také důležitost volby jurisdikce (F-Droid je v Nizozemsku).
Byly publikovány informace o další zranitelnosti v procesorech. Nejnovější zranitelnost byla pojmenována VMScape (CVE-2025-40300, GitHub) a v upstream Linuxech je již opravena. Jedná se o variantu Spectre. KVM host může číst data z uživatelského prostoru hypervizoru, např. QEMU.
V červenci loňského roku organizace Apache Software Foundation (ASF) oznámila, že se částečně přestane dopouštět kulturní apropriace a změní své logo. Dnes bylo nové logo představeno. "Indiánské pírko" bylo nahrazeno dubovým listem a text Apache Software Foundation zkratkou ASF. Slovo Apache se bude "zatím" dál používat. Oficiální název organizace zůstává Apache Software Foundation, stejně jako názvy projektů, například Apache HTTP Server.
Byla vydána (𝕏) srpnová aktualizace aneb nová verze 1.104 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.104 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.
Spotify spustilo přehrávání v bezztrátové kvalitě. V předplatném Spotify Premium.
Spoluzakladatel a předseda správní rady americké softwarové společnosti Oracle Larry Ellison vystřídal spoluzakladatele automobilky Tesla a dalších firem Elona Muska na postu nejbohatšího člověka světa. Hodnota Ellisonova majetku díky dnešnímu prudkému posílení ceny akcií Oraclu odpoledne vykazovala nárůst o více než 100 miliard dolarů a dosáhla 393 miliard USD (zhruba 8,2 bilionu Kč). Hodnota Muskova majetku činila zhruba 385 miliard dolarů.
Bylo vydáno Eclipse IDE 2025-09 aneb Eclipse 4.37. Představení novinek tohoto integrovaného vývojového prostředí také na YouTube.
Když zdrojový kód zkrátíte a zároveň vám vzroste rychlost exekuce, tak si můžete být skoro jistí, že už do toho pomalu pronikáte. Prohlížel jsem si takhle nějaký kód v erlangu a viděl jsem tam takovou hezkou vychytávku (stejná myšlenka je použita níže ve funkci mapper/2 a collector/2), kdy dotyčný procházel pomocí lists:foldl
list a zároveň z něho vytvářel slovník (dict
). No a pak mě napadlo jestli bych taky nemohl přepsat stavový algoritmus z mého prvního erlangového modulu na rekurzivní, ale se schopností foldl/foldr funkce a pak ostatní funkce jako map a perms přepsat se stejným trikem. Zároveň mi vrtalo hlavou jestli se to náhodou nezrychlí a byl jsem dost překvený, nárust výkonu byl více než dvojnásobný a kódu dost podstatně ubylo (dostal jsem se na 1,1 us což je ani ne 2x víc než v C napsaný Alghoritm-Permute pro perl!).
Pak jsem udělal ještě drobnou úpravu (viz ugly), která je z funkčního hlediska zbytečná, ale rychlost to ještě trošku zvedlo. Taky jsem udělal generátor, aby se dalo použít podobně jako původní kód, ale tam tam rychlost poklesla, ale je jen o něco pomalejší než původní. Z toho je pěkně vidět, že to zaslání několika miliónů zpráv tam a zpátky umí erlang udělat opravdu rychle.
Copyright © 2007 Hynek Vychodil
Version: 0.0.2
Authors: Hynek Vychodil (pichi@nekde.top) [web site: http://www.abclinuxu.cz/blog/Pichi].
perms - Permutation generator
This module provides "simply" permutation generator with state support.
> perms:perms([a,b,c]). [[a,b,c],[a,c,b],[b,a,c],[b,c,a],[c,a,b],[c,b,a]] > perms:foreach(fun(P)->io:format("~p~n",[P]) end, [a,b,c]). [a,b,c] [a,c,b] [b,a,c] [b,c,a] [c,a,b] [c,b,a] ok > perms:foldl(fun perms:inc/2, 0, lists:seq(1,10)). 3628800 > perms:map(fun(P)->io:format("~p~n",[P]), P end, [a,b,c]). [c,b,a] [b,c,a] [c,a,b] [a,c,b] [b,a,c] [a,b,c] [[a,b,c],[b,a,c],[a,c,b],[c,a,b],[b,c,a],[c,b,a]] % see map/2 why called in reverse order > F = perms:new([a,b,c]). <0.199.0> > perms:next(F). [a,b,c] > perms:next(F). [a,c,b] > perms:free(F). free > perms:next(F). '$end_of_table'
foldFun() = (P::list(), AccIn) -> AccOut
first/1 | (Deprecated.) Makes first permutation (same as original L ) and Generator . |
foldl/3 | Folds permutations of L . |
foldr/3 | Same as foldl/3 but in reverse order. |
foreach/2 | Call F for each permutation P of L . |
free/1 | Terminate Generator before all permutation passed (free memory). |
generatorTest/1 | Test generator for benchmarking purposes. |
inc/2 | Counter. |
map/2 | Makes Result list() of Res results from calling F on each permutations P of L . |
mapr/2 | Makes reversed Result list() of Res results from calling F on each permutations P of L
but F is called in right order of permutations e.g. |
new/1 | Make new permutation generator. |
next/1 | Makes next permutation P from Generator . |
perms/1 | Returns list() containing all L 's permutations. |
first(L::list()) -> {L::list(), Generator::pid()}
This function is deprecated: Use S=new(L), next(S)
instead.
Makes first permutation (same as original L
) and Generator
.
See also: next/1.
foldl(F::foldFun(), Acc0, L::list()) -> Acc
Folds permutations of L
. Calls F
on each permutation of L
. Acc0
is passed as AccIn
to firts F
call
and each AccOut
is passed to next F
call.
Last F
call result is returned as Acc
.
foldr(F, Acc0, L::list()) -> Acc
Same as foldl/3
but in reverse order.
foreach(F, L::list()) -> ok
Call F
for each permutation P
of L
.
free(Generator::pid()) -> free
Terminate Generator
before all permutation passed (free memory).
generatorTest(L::list()) -> ok
Test generator for benchmarking purposes.
Generator use is about four times slower than perms/1
,
foreach/2
, map/2
and foldl/3
but consumed less memory except foreach/2
and foldl/3
.
inc(Ignored::any(), CIn::number()) -> COut::number
Counter. Returns second argument increased by one. Can be used as foldFun()
mainly for testing purposes.
map(F, L::list()) -> Result::list()
Makes Result
list()
of Res
results from calling F
on each permutations P
of L
.
Warning: For implementation reasons F
is called on permutations in reverese order.
If order is important use lists:reverse(mapr(F, L))
instead
See also: mapr/2.
mapr(F, L::list()) -> Result::list()
Makes reversed Result
list()
of Res
results from calling F
on each permutations P
of L
but F
is called in right order of permutations e.g. original L
as the first, two last elements swaped as the second, etc.
See also: map/2.
new(L::list()) -> Generator::pid()
Make new permutation generator.
next(Generator::pid()) -> P::list()
Makes next permutation P
from Generator
.
perms(L::list()) -> Permutations::list()
Returns list()
containing all L
's permutations.
%% @copyright 2007 Hynek Vychodil %% @author Hynek Vychodil <pichi@nekde.top> %% [http://www.abclinuxu.cz/blog/Pichi] %% @version 0.0.2 %% @end %% ===================================================================== %% @doc perms - Permutation generator %% %% This module provides "simply" permutation generator with state support. %% %% == Usage == %%``` %%> perms:perms([a,b,c]). %%[[a,b,c],[a,c,b],[b,a,c],[b,c,a],[c,a,b],[c,b,a]] %%> perms:foreach(fun(P)->io:format("~p~n",[P]) end, [a,b,c]). %%[a,b,c] %%[a,c,b] %%[b,a,c] %%[b,c,a] %%[c,a,b] %%[c,b,a] %%ok %%> perms:foldl(fun perms:inc/2, 0, lists:seq(1,10)). %%3628800 %%> perms:map(fun(P)->io:format("~p~n",[P]), P end, [a,b,c]). %%[c,b,a] %%[b,c,a] %%[c,a,b] %%[a,c,b] %%[b,a,c] %%[a,b,c] %%[[a,b,c],[b,a,c],[a,c,b],[c,a,b],[b,c,a],[c,b,a]] %% % see map/2 why called in reverse order %%> F = perms:new([a,b,c]). %%<0.199.0> %%> perms:next(F). %%[a,b,c] %%> perms:next(F). %%[a,c,b] %%> perms:free(F). %%free %%> perms:next(F). %%'$end_of_table' %%''' -module(perms). -export([perms/1, foreach/2, map/2, mapr/2, foldl/3, foldr/3]). -export([first/1, next/1, new/1, free/1, inc/2, generatorTest/1]). -version("0.0.2"). -import(lists, [reverse/1, reverse/2]). %% @spec (list()) -> Permutations::list() %% @doc Returns {@type list()} containing all `L''s permutations. perms(L) -> foldr(fun collector/2, [], L). collector(P, L) -> [P|L]. %% @spec (F, list()) -> ok %% F = (P::list()) -> any() %% @doc Call `F' for each permutation `P' of `L'. foreach(F,L) -> foldl(fun do/2, F, L), ok. do(P, F) -> F(P), F. %% @spec (F, list()) -> Result::list() %% F = (P::list()) -> Res %% Result = [Res] %% @doc Makes `Result' {@type list()} of `Res' results from calling `F' on each permutations `P' of `L'. %% Warning: For implementation reasons `F' is called on permutations in reverese order. %% If order is important use `lists:reverse(mapr(F, L))' instead %% @see mapr/2 map(F, L) -> element(2, foldr(fun mapper/2, {F, []}, L)). mapper(P, {F, L}) -> {F, [F(P)|L]}. %% @spec (F, list()) -> Result::list() %% F = (P::list()) -> Res %% Result = [Res] %% @doc Makes reversed `Result' {@type list()} of `Res' results from calling `F' on each permutations `P' of `L' %% but `F' is called in right order of permutations e.g. original `L' as the first, two last elements swaped as the second, etc. %% @see map/2 mapr(F, L) -> element(2, foldl(fun mapper/2, {F, []}, L)). %% @spec (F::foldFun(), Acc0, list()) -> Acc %% @type foldFun() = (P::list(), AccIn) -> AccOut %% @doc Folds permutations of `L'. Calls `F' on each permutation of `L'. `Acc0' is passed as `AccIn' to firts `F' call %% and each `AccOut' is passed to next `F' call. %% Last `F' call result is returned as `Acc'. foldl(F, Acc0, L) -> foldr(F, Acc0, reverse(L)). %% @spec (F, Acc0, list()) -> Acc %% F = (P::list(), AccIn) -> AccOut %% @doc Same as {@link foldl/3} but in reverse order. foldr(F, Acc0, L) -> foldr(F, _AccIn = Acc0, L, _PermTail=[]). foldr(F, AccIn, [], Perm) -> F(Perm, AccIn); foldr(F, AccIn, L, PermTail) -> foldr(F, AccIn, _ToDo=L, _Done=[], PermTail). foldr(_F, AccIn, [] = _ToDo, _Done, _PermTail) -> AccIn; foldr(F, AccIn, [H] = _ToDo, [] = _Done, PermTail) -> F([H|PermTail], AccIn); % ugly but minor speed up (~10%) foldr(F, AccIn, [H|T] = _ToDo, Done, PermTail) -> foldr(F, _NewAcc = foldr(F, AccIn, reverse(Done, T), [H|PermTail]), T, [H|Done], PermTail). %% @spec (Ignored::any(), CIn::number()) -> COut::number %% @doc Counter. Returns second argument increased by one. Can be used as {@type foldFun()} mainly for testing purposes. inc(_,A) -> A+1. %% @spec (list())->Generator::pid() %% @doc Make new permutation generator. new(L) -> spawn(fun() -> foreach(fun receiver/1, L) end). %% @spec (list()) -> {L::list(), Generator::pid()} %% @doc Makes first permutation (same as original `L') and `Generator'. %% @deprecated Use `S=new(L), next(S)' instead. %% @see next/1 first(L) -> S=new(L), {next(S), S}. %% @spec (Generator::pid()) -> P::list() %% @doc Makes next permutation `P' from `Generator'. next(S) -> case process_info(S, status) of undefined -> '$end_of_table'; _ -> S ! self(), receive {S, P} -> P end end. %% @spec (Generator::pid()) -> free %% @doc Terminate `Generator' before all permutation passed (free memory). free(S) -> S ! free. receiver(P) -> receive free -> exit(normal); PID when is_pid(PID) -> PID ! {self(), P} end. %% @spec (list()) -> ok %% @doc Test generator for benchmarking purposes. %% Generator use is about four times slower than {@link perms/1}, %% {@link foreach/2}, {@link map/2} and {@link foldl/3} but consumed less memory except {@link foreach/2} and {@link foldl/3}. generatorTest(L) -> generatorTest(new(L), next). generatorTest(_, '$end_of_table') -> ok; generatorTest(S, _) -> generatorTest(S, next(S)).
Tiskni
Sdílej: