Clement "Clem" Lefebvre publikoval souhrn dění v Linux Mintu za červen 2026. Vypíchnuta je vylepšená podpora Waylandu. Už není považována za experimentální. V příští verzi Linux Mintu, plánována je na Vánoce, bude běh Cinnamonu plně podporován na X11 i Waylandu. V květnu na vývoj Linux Mintu přispělo 611 dárců celkovou částkou 19 612 dolarů. Dalších 2 326 patronů přispělo na Patreonu celkovou částkou 5 334 dolarů.
V Linuxu v KVM byla nalezena a v upstreamu již byla opravena kritická zranitelnost Januscape aneb CVE-2026-53359. Root na hostovaném počítači (virtuální stroj) může obejít izolaci a získat plnou kontrolu nad hostitelským systémem (DoS útok nebo vzdálené spuštění kódu s právy roota). Na obou hlavních architekturách – Intel i AMD. Zranitelnost v Linuxu existovala téměř 16 let (od srpna 2010 do června 2026).
Tribunál Soudního dvora Evropské unie dnes zamítl několik žalob, v nichž se americká společnost Apple ohrazovala proti pravidlům fungování velkých technologických společností na unijním trhu. Applu se nelíbilo, že jeho obchod s aplikacemi a operační systém iOS mají podléhat přísnějším povinnostem jen proto, že Brusel firmu považuje za takzvaného gatekeepera, tedy strážce přístupu.
Na WhatsAppu budou postupně v průběhu následujících měsíců zavedena uživatelská jména. Telefonní čísla tak mohou zůstat soukromá. Aktuálně si lze uživatelské jméno rezervovat.
Byl aktualizován TIOBE Index (Wikipedie). Programovací jazyk Rust se poprvé dostal do první desítky tohoto žebříčku popularity programovacích jazyků. Vede Python následovaný C, C++, Java, C#, …
Proton (Wikipedie), tj. fork Wine integrovaný ve Steamu umožňující na Linuxu hrát hry určené pouze pro Windows, byl vydán ve verzi 11.0-1. Přehled novinek se seznamem nově podporovaných her na GitHubu. Aktuální přehled všech podporovaných her na stránkách ProtonDB
Byly publikovány zdrojové kódy počítačové hry Unturned. Pro nekomerční účely. V plánu je přelicencování pod MIT. Hra Unturned je postavena nad multiplatformním herním enginem Unity.
První česká družice navržená a sestavená výhradně studenty se dostala na oběžnou dráhu Země. Družice KOSTKA, kterou vyvinul studentský tým YSpace z Vysokého učení technického v Brně (VUT), dnes odstartovala na palubě rakety Falcon 9 společnosti SpaceX v rámci mise Transporter-17 z kalifornské základny Vandenberg Space Force Base.
Po nákresech ovladače Steam Controller a puku společnost Valve na svém GitLabu publikovala projekt Inkterface, tj. podrobný návod (PDF, video v mp4) na sestavení předního panelu s e-papírovým displejem pro Steam Machine pro zobrazování systémových informací. Použity jsou součástky od společnosti Adafruit.
V jádře Linux byla nalezena a v dubnu letošního roku v upstreamu opravena kritická zranitelnost Bad Epoll aneb CVE-2026-46242. Jedná se o zranitelnost typu "race-condition use-after-free", která běžnému uživateli umožňuje získat práva roota. Na distribucích Linuxu i na Androidu. Dokonce i zevnitř sandboxu prohlížeče Chrome. Chyba byla do Linuxu zavedena v dubnu 2023, tj. Linux 6.4.
// Include the library code:
#include <*iquidCrystal.h>
#include <*neWire.h>
#include <*allasTemperature.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(13, 12, 11, 10, 9, 8);
// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 2
// #define TEMPERATURE_PRECISION 9
// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
// set value
byte data[9];
byte termometr[8] = {B00100, B01010, B01010, B01110, B01110, B11111, B11111, B01110};
byte maximmetr[8] = {B00000, B00000, B00100, B01010, B00000, B01010, B00100, B00000};
void setup() {
// set up the LCD's number of columns and rows:
lcd.createChar(0, termometr);
lcd.createChar(1, maximmetr);
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.write(byte(0));
lcd.setCursor(0, 1);
lcd.write(byte(1));
// Start up the library
sensors.begin();
}
void loop() {
sensors.requestTemperatures();
// první čidlo DS18S20
lcd.setCursor(1, 0);
if (sensors.getTempCByIndex(0) > 100) {
lcd.setCursor(0, 0);
}
if ((data[1] >> 7) == 1) { //zobrazení záporných hodnot
data[0] = ~data[0];
lcd.print("-");
}
else {
lcd.print(" ");
}
if (sensors.getTempCByIndex(0) < 10) { // posun o jedno desetinné místo
lcd.setCursor(3, 0);
lcd.setCursor(2, 0);
lcd.print(" ");
}
lcd.print(sensors.getTempCByIndex(0));
lcd.setCursor(6, 0);
lcd.print((char)223);
lcd.print("C");
// druhé čidlo DS18S20
lcd.setCursor(9, 0);
if (sensors.getTempCByIndex(1) > 100) {
lcd.setCursor(8, 0);
}
if ((data[1] >> 7) == 1) { //zobrazení záporných hodnot
data[0] = ~data[0];
lcd.print("-");
}
else {
lcd.print(" ");
}
if (sensors.getTempCByIndex(1) < 10) { // posun o jedno desetinné místo
lcd.setCursor(11, 0);
lcd.setCursor(10, 0);
lcd.print(" ");
}
lcd.print(sensors.getTempCByIndex(1));
lcd.setCursor(14, 0);
lcd.print((char)223);
lcd.print("C");
}
Řešení dotazu:
// Nastavení proměnných pro minimální teploty
float LowTempMin;
float LowTemp1;
float LowTemp2;
// Min teplota pro první sensor DS18S20
if (sensorOne < LowTemp1) {
LowTemp1 = sensorOne;
}
// Min teplota pro druhé sensor DS18S20
if (sensorTwo < LowTemp2) {
LowTemp2 = sensorTwo;
}
// Min teplota pro oba sensory DS18S20
if (LowTemp1 < LowTempMin) {
LowTemp1 = LowTempMin;
}
else {
LowTempMin = LowTemp2;
}
Když obdobný kód použiji pouze pro jedno čidlo, tak to funguje náramně. Trošinku to jaksi nechápu, proč pro jedno ano a pro dvě už ne.
// Min teplota pro oba sensory DS18S20
if (LowTemp1 < LowTemp2) {
LowTempMin = LowTemp1;
}
else {
LowTempMin = LowTemp2;
}
#include <*iquidCrystal.h>
#include <*neWire.h>
#include <*allasTemperature.h>
LiquidCrystal lcd(13, 12, 11, 10, 9, 8);
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
byte data[9];
byte termometr[8] = {B00100, B01010, B01010, B01110, B01110, B11111, B11111, B01110};
byte maximmetr[8] = {B00000, B00000, B00100, B01010, B00000, B01010, B00100, B00000};
void setup() {
lcd.begin(16, 2);
lcd.createChar(0, termometr);
lcd.createChar(1, maximmetr);
lcd.write(byte(0));
lcd.setCursor(0, 1);
lcd.write(byte(1));
sensors.begin();
}
void loop() {
sensors.requestTemperatures();
float sensorOne = sensors.getTempCByIndex(0);
lcd.setCursor(1, 0); // udržet jedno desetinné místo
if (sensorOne > 100) {
lcd.setCursor(0, 0);
}
else if (sensorOne < 100) {
lcd.home();
lcd.write(byte(0)); // obnovit symbol teploty
}
if ((data[1] >> 7) == 1) { // zobrazení znaménka mínus
data[0] = ~data[0];
lcd.print("-");
}
else {
lcd.print(" "); // nezobrazení znaménka plus
}
if (sensorOne < 10) { // udržet jedno desetinné místo
lcd.setCursor(2, 0);
lcd.print(" "); // nezobrazení znaménka plus
}
if (sensorOne < 0) { // udržet jedno desetinné místo
lcd.setCursor(1, 0);
lcd.print(" "); // smazat předchozí znaménko mínus
}
if (sensorOne <= -10) { // udržet jedno desetinné místo
lcd.setCursor(1, 0);
}
lcd.print(sensorOne);
lcd.setCursor(6, 0);
lcd.print((char)223);
lcd.print("C");
// second sensor DS18S20
float sensorTwo = sensors.getTempCByIndex(1);
lcd.setCursor(9, 0); // udržet jedno desetinné místo
if (sensorTwo > 100) {
lcd.setCursor(8, 0);
}
if ((data[1] >> 7) == 1) { // zobrazení znaménka mínus
data[0] = ~data[0];
lcd.print("-");
}
else {
lcd.print(" "); // nezobrazení znaménka plus
}
if (sensorTwo < 10) { // udržet jedno desetinné místo
lcd.setCursor(10, 0);
lcd.print(" "); // nezobrazení znaménka plus
}
if (sensorTwo < 0) { // udržet jedno desetinné místo
lcd.setCursor(10, 0);
lcd.print(" "); // smazat předchozí znaménko mínus
lcd.setCursor(9, 0);
lcd.print(" "); // smazat předchozí znaménko mínus
}
if (sensorTwo <= -10) { // udržet jedno desetinné místo
lcd.setCursor(9, 0);
}
lcd.print(sensorTwo);
lcd.setCursor(14, 0);
lcd.print((char)223);
lcd.print("C");
// Nastavení proměnných pro min a max teploty
float LowTempMin;
float LowTemp1;
float LowTemp2;
// Min teplota pro první sensor DS18S20
if (sensorOne < LowTemp1) {
LowTemp1 = sensorOne;
}
// Min teplota pro druhé sensor DS18S20
if (sensorTwo < LowTemp2) {
LowTemp2 = sensorTwo;
}
// Min teplota pro oba sensory DS18S20
if (LowTemp1 < LowTemp2) {
LowTempMin = LowTemp1;
}
else {
LowTempMin = LowTemp2;
}
// Max teplota pro oba sensory DS18S20...
lcd.setCursor(2, 1);
lcd.print(LowTempMin);
lcd.setCursor(6, 1);
lcd.print((char)223);
lcd.print("C");
lcd.setCursor(10, 1);
lcd.print(LowTemp2);
lcd.setCursor(14, 1);
lcd.print((char)223);
lcd.print("C");
}
float LowTempMin; float LowTemp1; float LowTemp2;musí být mimo loop(), a v setup() bych jim přiřadil nějaké vysoké číslo, jinak mají výchozí tu nulu.
#include <*iquidCrystal.h>
#include <*neWire.h>
#include <*allasTemperature.h>
LiquidCrystal lcd(13, 12, 11, 10, 9, 8);
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
byte data[9];
byte termometr[8] = {B00100, B01010, B01010, B01110, B01110, B11111, B11111, B01110};
byte maximmetr[8] = {B00000, B00000, B00100, B01010, B00000, B01010, B00100, B00000};
float LowTemp1 = 127;
float LowTemp2 = 127;
float LowTempMin = 127;
float HighTemp1 = 127;
float HighTemp2 = 127;
float HighTempMax = 127;
void setup() {
lcd.begin(16, 2);
lcd.createChar(0, termometr);
lcd.createChar(1, maximmetr);
lcd.write(byte(0));
lcd.setCursor(0, 1);
lcd.write(byte(1));
sensors.begin();
}
void loop() {
sensors.requestTemperatures();
float sensorOne = sensors.getTempCByIndex(0);
lcd.setCursor(1, 0); // udržet jedno desetinné místo
if (sensorOne > 100) {
lcd.setCursor(0, 0);
}
else if (sensorOne < 100) {
lcd.home();
lcd.write(byte(0)); // obnovit symbol teploty
}
if ((data[1] >> 7) == 1) { // zobrazení znaménka mínus
data[0] = ~data[0];
lcd.print("-");
}
else {
lcd.print(" "); // nezobrazení znaménka plus
}
if (sensorOne < 10) { // udržet jedno desetinné místo
lcd.setCursor(2, 0);
lcd.print(" "); // nezobrazení znaménka plus
}
if (sensorOne < 0) { // udržet jedno desetinné místo
lcd.setCursor(1, 0);
lcd.print(" "); // smazat předchozí znaménko mínus
}
if (sensorOne <= -10) { // udržet jedno desetinné místo
lcd.setCursor(1, 0);
}
lcd.print(sensorOne);
lcd.setCursor(6, 0);
lcd.print((char)223);
lcd.print("C");
// second sensor DS18S20
float sensorTwo = sensors.getTempCByIndex(1);
lcd.setCursor(9, 0); // udržet jedno desetinné místo
if (sensorTwo > 100) {
lcd.setCursor(8, 0);
}
if ((data[1] >> 7) == 1) { // zobrazení znaménka mínus
data[0] = ~data[0];
lcd.print("-");
}
else {
lcd.print(" "); // nezobrazení znaménka plus
}
if (sensorTwo < 10) { // udržet jedno desetinné místo
lcd.setCursor(10, 0);
lcd.print(" "); // nezobrazení znaménka plus
}
if (sensorTwo < 0) { // udržet jedno desetinné místo
lcd.setCursor(10, 0);
lcd.print(" "); // smazat předchozí znaménko mínus
lcd.setCursor(9, 0);
lcd.print(" "); // smazat předchozí znaménko mínus
}
if (sensorTwo <= -10) { // udržet jedno desetinné místo
lcd.setCursor(9, 0);
}
lcd.print(sensorTwo);
lcd.setCursor(14, 0);
lcd.print((char)223);
lcd.print("C");
// Nastavení proměnných pro min a max teploty
// Min teplota pro první sensor DS18S20
if (sensorOne < LowTemp1) {
LowTemp1 = sensorOne;
}
// Min teplota pro druhý sensor DS18S20
if (sensorTwo < LowTemp2) {
LowTemp2 = sensorTwo;
}
// Min teplota pro oba sensory DS18S20
if (LowTemp1 < LowTemp2) {
LowTempMin = LowTemp1;
}
else {
LowTempMin = LowTemp2;
}
// Max teplota pro první sensor DS18S20
if (sensorOne < HighTemp1) {
HighTemp1 = sensorOne;
}
// Max teplota pro druhý sensor DS18S20
if (sensorTwo < HighTemp2) {
HighTemp2 = sensorTwo;
}
// Max teplota pro oba sensory DS18S20
if (HighTemp1 < HighTemp2) {
HighTempMax = HighTemp1;
}
else {
HighTempMax = HighTemp2;
}
lcd.setCursor(2, 1);
lcd.print(LowTempMin);
lcd.setCursor(6, 1);
lcd.print((char)223);
lcd.print("C");
lcd.setCursor(10, 1);
lcd.print(HighTempMax);
lcd.setCursor(14, 1);
lcd.print((char)223);
lcd.print("C");
}
// Max teplota pro první sensor DS18S20
//CHYBNÝ TEST: je teplota senzoru jedna menší než aktuální nejvyšší teplota
if (sensorOne < HighTemp1) {
//ano, pak ulož do nejvyšší hodnoty aktuální
HighTemp1 = sensorOne;
}
// Max teplota pro druhý sensor DS18S20
if (sensorTwo < HighTemp2) {
HighTemp2 = sensorTwo;
}
jak vidíš nemůže to fungovat, musíš tam obrátit znamínko rovnosti na sensorOne > HighTemp1
. Ta znaménka jsem v nedočkavosti neotočil a hodnoty jsem nastavil na:
float LowTemp1 = 127; float LowTemp2 = 127; float LowTempMin = 127; float HighTemp1 = -55; float HighTemp2 = -55; float HighTempMax = -55;a hůž to krásně funguje. Mockrát díky. Jenom jestli mohu poprosit abych tomu více porozumněl. Proč nemohou být proměnné bez počáteční hodnoty popř. jen nuly? Vím, že to nefunguje, ale nějak si to neumím zdůvodnit. V každém případě mám radost a děkuji všem za pomoc.
Tiskni
Sdílej: