O víkendu probíhá v Bostonu, a také virtuálně, konference LibrePlanet 2024 organizovaná nadací Free Software Foundation (FSF).
Nová vývojová verze Wine 9.8 řeší mimo jiné chybu #3689 při instalaci Microsoft Office 97 nahlášenou v roce 2005.
Coppwr, tj. GUI nástroj pro nízkoúrovňové ovládání PipeWire, byl vydán v nové verzi 1.6.0. Zdrojové kódy jsou k dispozici na GitHubu. Instalovat lze také z Flathubu.
Byla vydána dubnová aktualizace aneb nová verze 1.89 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a animovanými gify v poznámkách k vydání. Vypíchnout lze, že v terminálu lze nově povolit vkládání kopírovaného textu stisknutím středního tlačítka myši. Ve verzi 1.89 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.
Proton, tj. fork Wine integrovaný v Steam Play a umožňující v Linuxu přímo ze Steamu hrát hry určené pouze pro Windows, byl vydán ve verzi 9.0-1 (𝕏). Přehled novinek se seznamem nově podporovaných her na GitHubu. Aktuální přehled her pro Windows běžících díky Protonu také na Linuxu na stránkách ProtonDB.
Byla vydána verze 1.78.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání na GitHubu. Vyzkoušet Rust lze například na stránce Rust by Example.
Služba Dropbox Sign (původně HelloSign) pro elektronické podepisování smluv byla hacknuta.
Byla vydána nová major verze 8.0 textového editoru GNU nano (Wikipedie). Podrobný přehled novinek a oprav v oznámení v diskusním listu info-nano nebo v souboru ChangeLog na Savannah. Volbou --modernbindings (-/) lze povolit "moderní" klávesové zkratky: ^C kopírování, ^V vložení, ^Z vrácení zpět, … Tato volba je aktivována také pokud binárka s nano nebo link na ni začíná písmenem "e".
Před 60 lety, 1. května 1964, byl představen programovací jazyk BASIC (Beginners' All-purpose Symbolic Instruction Code).
Byla vydána nová verze 12.0 minimalistické linuxové distribuce (JeOS, Just enough Operating System) pro Kodi (dříve XBMC) a multimediálního centra LibreELEC (Libre Embedded Linux Entertainment Center). Jedná se o fork linuxové distribuce OpenELEC (Open Embedded Linux Entertainment Center). LibreELEC 12.0 přichází s Kodi 21.0 "Omega".
insert into hodnoty (id,hodnota,datum_od,datum_do) values (1,3.300,'2018-01-01','2019-12-31'), (1,3.600,'2020-01-01','2020-11-31'), (1,3.850,'2021-01-01','2021-12-31'), (1,4.000,'2022-01-01','2022-12-31'), (1,4.350,'2023-01-01','2023-12-31'), (1,4.700,'2024-01-01','3333-03-03'), (2,3.300,'2018-01-01','2019-12-31'), (2,3.600,'2020-01-01','2020-12-31'), (2,3.850,'2021-01-01','2021-12-31'), (2,4.000,'2022-01-01','2022-12-31'); (2,4.350,'2023-01-01','2023-12-31'), (2,4.700,'2024-01-01','3333-03-03'), (3,2.848,'2018-01-01','2018-08-31'), (3,2.943,'2018-09-01','2018-12-31'), (3,3.188,'2019-01-01','2019-12-31'), (3,3.555,'2020-01-01','2020-12-31'), (3,3.819,'2020-12-01','2021-12-31'), (3,3.961,'2022-01-01','2022-12-31'), (3,4.291,'2023-01-01','2023-12-31'), (3,4.597,'2024-01-01','3333-03-03');su v nej id ktore maju urcitu casovu platnost. je mozne priamo v sql zistit, ci sa pre jednotlive id datumove intervaly neprekryvaju(t.j. ci id nema v dany datum viacero moznych hodnot) a zaroven ci nie su v intervaloch medzery(t.z. ci neexistuje datum pre ktory id nema ziadnu hodnotu)? v priklade ako najmensi mozny datum je 2018-01-01 a najvyssi 3333-03-03. pre id=1 napr. chybaju hodnoty pre december 2020. pre id=3 su zase pre interval datumov december 2020 platne 2 hodnoty(3.555 aj 3.819 co je nespravne). je mozne tieto chyby v integrite dat nejako lahko vyselektovat? dakujem.
select * from hodnoty h1 join hodnoty h2 on daterange(h1.datum_od, h1.datum_do, '[]') && daterange(h2.datum_od, h2.datum_do, '[]') and h1.id < h2.id;A jestli něco nechybí můžeš zjistit tak, že porovnáš součty délek intervalů s intervalem (nejmenší datum, největší). V mariadb možná bude potřeba napsat vlastní podmínky na porovnání intervalů, nevím, jestli je tam na to funkce.
with t1 as( select id, datediff(max(datum_do), min(datum_od)) + 1 as celkovy_pocet_dni from hodnoty group by id ), t2 as( select id, sum(datediff(datum_do, datum_od) + 1) as sucet_intervalov from hodnoty group by id ), t3 as ( select t1.id as id, celkovy_pocet_dni - sucet_intervalov as rozdiel from t1 left join t2 on t2.id = t1.id having rozdiel != 0 ) select id, case when rozdiel < 0 then 'duplicita datumov' when rozdiel > 0 then 'chybajuci interval datumov' end as chyba from t3 order by t3.id
(1,1.000,'2018-01-01','2018-12-31'), (1,1.000,'2018-01-01','2018-12-31'), (1,1.000,'2020-01-01','2020-12-31')
-- kontrola ci datum_do nie je mensi ako datum_od select *, datediff(h.datum_do, h.datum_od) as pocet_dni from hodnoty as h having pocet_dni < 0 order by h.id, h.datum_od, h.datum_do; -- kontrola ci intervaly datumov na seba plynulo nadvazuju with t1 as ( select h.id, lag(h.datum_do, 1) over ( PARTITION BY h.id order by h.id, h.datum_od, h.datum_do ) as datum_pred, h.datum_od, h.datum_do, lead(h.datum_od, 1) over ( PARTITION BY h.id order by h.id, h.datum_od, h.datum_do ) as datum_po from hodnoty as h order by h.id, h.datum_od, h.datum_do ) select id, datum_pred, case when datediff(datum_od, datum_pred) is NULL then 'OK' when datediff(datum_od, datum_pred) = 1 then 'OK' else 'CHYBA' end as stav_1, datum_od, datum_do, case when datediff(datum_po, datum_do) is NULL then 'OK' when datediff(datum_po, datum_do) = 1 then 'OK' else 'CHYBA' end as stav_2, datum_po from t1 having stav_1 = 'CHYBA' or stav_2 = 'CHYBA'skusil som to vyriesit pomocou LAG a LEAD. rozdelil som to do dvoch krokov. najskor sa skontroluje ci su v poriadku jednotlive datumove intervaly. a v druhom kroku sa skontroluje ci intervaly pre jednotlive id na seba nadvazuju a neprekryvaju sa. vie mi to niekto skontrolovat ci tam zase nie je nejaka chyba? nejaky pripad pri ktorom by kontrola zlyhala?
select
A.*
,B.*
from hodnoty A
join hodnoty B on A.id = b.id and A.datum_do >= B.datum_od and A.datum_od <= B.datum_do
řešení vychází z následujícího obrázku, který ukazuje možné překryvy
A +----------------+ o x o x o x o x +-----+ +----+ +-----+ B B B
Díry v jistém smyslu jsou problematičtější, protože vždycky budete mít díru. A to na začátku a na konci.
select
A.*
,min(B.datum_od)
from hodnoty A
join hodnoty B on A.id = B.id and A.datum_do < B.datum_od
group by A.*
having A.datum_do + interval '1' day < min(B.datum_od)
Rychlejší řešení děr je pomocí analytických funkcí. Konkrétně funkce LAG a LEAD
SELECT id, hodnota, datum_od, datum_do FROM ( SELECT id, hodnota, datum_od, datum_do, LEAD(datum_od) OVER (PARTITION BY id ORDER BY datum_od) AS next_datum_od FROM hodnoty ) AS t WHERE datum_do >= next_datum_od; SELECT id, hodnota, datum_od, datum_do FROM ( SELECT id, hodnota, datum_od, datum_do, LAG(datum_do) OVER (PARTITION BY id ORDER BY datum_od) AS prev_datum_do FROM hodnoty ) AS t WHERE datum_od > DATE_ADD(prev_datum_do, INTERVAL 1 DAY);
Tiskni Sdílej: