Canonical vydal (email, blog, YouTube) Ubuntu 24.04 LTS Noble Numbat. Přehled novinek v poznámkách k vydání a také příspěvcích na blogu: novinky v desktopu a novinky v bezpečnosti. Vydány byly také oficiální deriváty Edubuntu, Kubuntu, Lubuntu, Ubuntu Budgie, Ubuntu Cinnamon, Ubuntu Kylin, Ubuntu MATE, Ubuntu Studio, Ubuntu Unity a Xubuntu. Jedná se o 10. LTS verzi.
Na YouTube je k dispozici videozáznam z včerejšího Czech Open Source Policy Forum 2024.
Fossil (Wikipedie) byl vydán ve verzi 2.24. Jedná se o distribuovaný systém správy verzí propojený se správou chyb, wiki stránek a blogů s integrovaným webovým rozhraním. Vše běží z jednoho jediného spustitelného souboru a uloženo je v SQLite databázi.
Byla vydána nová stabilní verze 6.7 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 124. Přehled novinek i s náhledy v příspěvku na blogu. Vypíchnout lze Spořič paměti (Memory Saver) automaticky hibernující karty, které nebyly nějakou dobu používány nebo vylepšené Odběry (Feed Reader).
OpenJS Foundation, oficiální projekt konsorcia Linux Foundation, oznámila vydání verze 22 otevřeného multiplatformního prostředí pro vývoj a běh síťových aplikací napsaných v JavaScriptu Node.js (Wikipedie). V říjnu se verze 22 stane novou aktivní LTS verzí. Podpora je plánována do dubna 2027.
Byla vydána verze 8.2 open source virtualizační platformy Proxmox VE (Proxmox Virtual Environment, Wikipedie) založené na Debianu. Přehled novinek v poznámkách k vydání a v informačním videu. Zdůrazněn je průvodce migrací hostů z VMware ESXi do Proxmoxu.
R (Wikipedie), programovací jazyk a prostředí určené pro statistickou analýzu dat a jejich grafické zobrazení, bylo vydáno ve verzi 4.4.0. Její kódové jméno je Puppy Cup.
IBM kupuje společnost HashiCorp (Terraform, Packer, Vault, Boundary, Consul, Nomad, Waypoint, Vagrant, …) za 6,4 miliardy dolarů, tj. 35 dolarů za akcii.
Byl vydán TrueNAS SCALE 24.04 “Dragonfish”. Přehled novinek této open source storage platformy postavené na Debianu v poznámkách k vydání.
Oznámeny byly nové Raspberry Pi Compute Module 4S. Vedle původní 1 GB varianty jsou nově k dispozici také varianty s 2 GB, 4 GB a 8 GB paměti. Compute Modules 4S mají na rozdíl od Compute Module 4 tvar a velikost Compute Module 3+ a předchozích. Lze tak provést snadný upgrade.
date("Y-m-d 0:0:0", strtotime("-2 days + ".$min." minutes"));což ale nefunguje, neboť to přičítá k základnímu času a až potom ořízne čas.
for($i=0;$i<$cas[count($cas)];$i++)a hledat
if(60 > ($cas[$i] - $cas[$i-1]) < 120)tím dostanete ty hodnoty co chcete, ostatním přiřadíte NULL. Samozřejmě, že to chce ošetřit začátek, kdy i = 0 a pak také nějak zyvšovat $cas[$i-1] o 60 pokud neni nalezen časový vzorek. Kdyžtak odpoledne mohu poslat kus kodu.
<?php $d1 = new DateTime('-2 days'); $d1 = new DateTime($d1->format('Y-m-d H:i:00')); $i1 = new DateInterval('PT1M'); for($i=0;$i<10;$i++) echo $d1->add($i1)->format('Y-m-d H:i:00'), "\n"; echo "\n",$d1->add(new DateInterval('PT1440M'))->format('Y-m-d H:i:00'), "\n";
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d-%H:%i:00');
$today_start = date("Y-m-d 0:0:0", strtotime("-2 days")); $today_stop = date("Y-m-d 0:0:0", strtotime("+1 days")); $vysledek = mysql_query("SELECT cas,hum FROM mereni WHERE (cas > '$today_start') AND (cas < '$today_stop') ORDER BY cas"); while($zaznam = MySQL_Fetch_Array($vysledek)) { $cas[] = $zaznam['cas']; $hum[] = $zaznam['hum']; } $cas_old = strtotime($today_start); $j = 0; for($i=0;$i<count($hum);$i++){ $str_cas = strtotime($cas[$i]); if($str_cas >= ($cas_old + 60)){ if($str_cas < ($cas_old + 120)){ $hum2[$j] = $hum[$i]; $j++; $cas_old = $str_cas; } else{ while($str_cas >= ($cas_old + 120)) { $hum2[$j] = NULL; $j++; $cas_old += 60; } $hum2[$j] = $hum[$i]; $j++; $cas_old = $str_cas; } } }Zde uvádím pro přehlednost verzi bez ošetření případných chyb. V proměné $hum2 jsou naměřené hodnoty, které odpovídají od půlnoci předpředchozího do poslední měřené hodnoty, s krokem 1 minuta
Když si vytvořím testovací data:
CREATE TABLE t ( id int(11) NOT NULL auto_increment, d datetime DEFAULT NULL, data varchar(20) DEFAULT NULL, PRIMARY KEY (id) ); delimiter $$ CREATE PROCEDURE prepare_test_data() BEGIN DECLARE i INT DEFAULT 0; WHILE i < 8000 DO INSERT INTO t (d, data) VALUES (DATE_FORMAT(NOW() - INTERVAL i MINUTE, '%Y-%m-%d-%H:%i:00'),CONCAT('VAL:',i)); INSERT INTO tt (d, data) VALUES (DATE_FORMAT(NOW() - INTERVAL i MINUTE, '%Y-%m-%d-%H:%i:00'),CONCAT('VAL:',i)); SET i = i + 12; END WHILE; END$$ delimiter ; call prepare_test_data(); DROP PROCEDURE prepare_test_data; CREATE TABLE series ( id int(11) NOT NULL auto_increment, PRIMARY KEY (id) ); delimiter $$ CREATE PROCEDURE prepare_series_data() BEGIN DECLARE i INT DEFAULT 0; WHILE i < 4320 DO INSERT INTO series () VALUES(); SET i = i + 1; END WHILE; END$$ delimiter ; call prepare_series_data(); DROP PROCEDURE prepare_series_data;
Pokud jsou data již ukládána ze sekundama: 00 (je zvolen interval od NOW()
)
SELECT IFNULL(t.d,DATE_FORMAT(NOW() - INTERVAL series.id MINUTE,'%Y-%m-%d-%H:%i:00')) AS dt, t.data FROM series LEFT JOIN t ON t.d = CONVERT(DATE_FORMAT(NOW() - INTERVAL series.id MINUTE,'%Y-%m-%d-%H:%i:00'),DATETIME) ORDER BY series.id ASC;Za: 9.61 sec
Pokud NEjsou data již ukládána ze sekundama: 00 (je zvolen interval od NOW()
)
SELECT IFNULL(t.d,DATE_FORMAT(NOW() - INTERVAL series.id MINUTE,'%Y-%m-%d-%H:%i:00')) AS dt, t.data FROM series LEFT JOIN t ON CONVERT(DATE_FORMAT(t.d - INTERVAL series.id MINUTE,'%Y-%m-%d-%H:%i:00'),DATETIME) = CONVERT(DATE_FORMAT(NOW() - INTERVAL series.id MINUTE,'%Y-%m-%d-%H:%i:00'),DATETIME) ORDER BY series.id ASC;Za: 15.64 sec
Efektivní, ale odstranit duplicitu už efektivně neumím:
(SELECT d, data FROM t WHERE d > NOW() - INTERVAL 4320 MINUTE) UNION (SELECT DATE_FORMAT(NOW() - INTERVAL series.id MINUTE,'%Y-%m-%d %H:%i:00') AS d, NULL AS data FROM series) ORDER BY d ASC;Za: 0.02 sec Pominul jsem možnost udělat
temporary table
…
A nakonec uklidím:
DROP TABLE t; DROP TABLE series;
Když si vytvořím testovací data:
CREATE TABLE t ( id int(11) NOT NULL auto_increment, d datetime DEFAULT NULL, data varchar(20) DEFAULT NULL, PRIMARY KEY (id) ); delimiter $$ CREATE PROCEDURE prepare_test_data() BEGIN DECLARE i INT DEFAULT 0; WHILE i < 8000 DO INSERT INTO t (d, data) VALUES (DATE_FORMAT(NOW() - INTERVAL i MINUTE, '%Y-%m-%d-%H:%i:00'),CONCAT('VAL:',i)); SET i = i + 12; END WHILE; END$$ delimiter ; call prepare_test_data(); DROP PROCEDURE prepare_test_data; CREATE TABLE series ( id int(11) NOT NULL auto_increment, PRIMARY KEY (id) ); delimiter $$ CREATE PROCEDURE prepare_series_data() BEGIN DECLARE i INT DEFAULT 0; WHILE i < 4320 DO INSERT INTO series () VALUES(); SET i = i + 1; END WHILE; END$$ delimiter ; call prepare_series_data(); DROP PROCEDURE prepare_series_data;
Asi bys nepochopil jak jsem přemýšlel , myslel jsem že řešíš to co neumím vyřešit :).
Ono i tímto způsobem, který mě nevím proč nenapadl:
SELECT t1.d AS dt, t.data FROM (SELECT CONVERT(DATE_FORMAT(NOW() - INTERVAL series.id MINUTE,'%Y-%m-%d-%H:%i:00'),DATETIME) AS d FROM series) AS t1 LEFT JOIN t ON t.d = t1.d ORDER BY dt ASC;Mám 2.7 sec ale pokud si předgeneruji sérii do do pomocné tabulky tak dostávám 2.6 sec, takže dál to nelze.
Zatím vždy, když jsem řešil něco podobného, definoval jsem ID záznamové tabulky jako 'tick' v tomto případě minuta a měl jsem definovaný posun (tick nula se rovná tomuto datu-času) a při zakládání záznamu jsem spočítal tick z NOW() a prdl to do ID. Následný jakýkoliv join řady se děje nad INT a je to pohoda a šlahá to.
Tiskni Sdílej: