Google představil telefon Pixel 10a. S funkci Satelitní SOS, která vás spojí se záchrannými složkami i v místech bez signálu Wi-Fi nebo mobilní sítě. Cena telefonu je od 13 290 Kč.
Byl publikován přehled dění a novinek z vývoje Asahi Linuxu, tj. Linuxu pro Apple Silicon. Fedora 43 Asahi Remix s KDE Plasma už funguje na M3. Zatím ale bez GPU akcelerace. Vývojáře lze podpořit na Open Collective a GitHub Sponsors.
Red Hat představil nový nástroj Digital Sovereignty Readiness Assessment (GitHub), který organizacím umožní vyhodnotit jejich aktuální schopnosti v oblasti digitální suverenity a nastavit strategii pro nezávislé a bezpečné řízení IT prostředí.
BarraCUDA je neoficiální open-source CUDA kompilátor, ale pro grafické karty AMD (CUDA je proprietární technologie společnosti NVIDIA). BarraCUDA dokáže přeložit zdrojové *.cu soubory (prakticky C/C++) přímo do strojového kódu mikroarchitektury GFX11 a vytvořit tak ELF *.hsaco binární soubory, spustitelné na grafické kartě AMD. Zdrojový kód (převážně C99) je k dispozici na GitHubu, pod licencí Apache-2.0.
Podvodné reklamy na sociálních internetových platformách, jako je Facebook, Instagram nebo X, vytvořily loni v Česku jejich provozovatelům příjmy 139 milionů eur, tedy zhruba 3,4 miliardy korun. Proti roku 2022 je to nárůst o 51 procent. Vyplývá to z analýzy Juniper Research pro společnost Revolut. Podle výzkumu je v Česku zhruba jedna ze sedmi zobrazených reklam podvodná. Je to o 14,5 procenta více, než je evropský průměr, kde je podvodná každá desátá reklama.
Desktopové prostředí KDE Plasma bylo vydáno ve verzi 6.6 (Mastodon). Přehled novinek i s videi a se snímky obrazovek v oficiálním oznámení. Podrobný přehled v seznamu změn.
Czkawka a Krokiet, grafické aplikace pro hledání duplicitních a zbytečných souborů, byly vydány ve verzi 11.0. Podrobný přehled novinek v příspěvku na Medium. Od verze 7.0 je vedle frontendu Czkawka postaveného nad frameworkem GTK 4 vyvíjen nový frontend Krokiet postavený nad frameworkem Slint. Frontend Czkawka je už pouze v udržovacím módu. Novinky jsou implementovány ve frontendu Krokiet.
Jiří Eischmann na svém blogu publikoval článek Úvod do MeshCore: "Doteď mě radioamatérské vysílání úplně míjelo. Když jsem se ale dozvěděl, že existují komunity, které svépomocí budují bezdrátové sítě, které jsou nezávislé na Internetu a do značné míry taky elektrické síti a přes které můžete komunikovat s lidmi i na druhé straně republiky, zaujalo mě to. Když o tom přede mnou pořád básnili kolegové v práci, rozhodl jsem se, že to zkusím taky.
… více »Byla vydána verze 0.5.20 open source správce počítačových her na Linuxu Lutris (Wikipedie). Přehled novinek v oznámení na GitHubu. Instalovat lze také z Flathubu.
Peter Steinberger, autor open source AI asistenta OpenClaw, nastupuje do OpenAI. OpenClaw bude převeden pod nadaci a zůstane otevřený a nezávislý.
Zdravim, mam problem s jednim kodem. Po urcite dobe behu mi padne na hubu.Nevim uz jak tuto chybu osetrit. Nejsem uplne C guru... Prikladam zdrojak fce ve ktere to asi pada:
float DejTeplotu(char* OW)
{
unsigned err;
char * buf;
size_t s ;
char* cesta;
char* prac;
if (OW == NULL) {cout << "Nulovy OW!!!"; return 0; }
else
{
//if (OW == NULL) {cout << "Nulovy OW!!!"; return 0; break; }
//cout << "Delka:" << strlen(OW);
cesta = (char *) malloc(strlen("//10.99A689020800/temperaturenase"));
prac = (char *) malloc(strlen(OW));
if ((cesta != NULL) && (prac !=NULL))
{
cesta[0] = 0;
prac = strcpy(prac,OW);
cesta = strcpy(cesta,"/");
// cout << cesta;
unsigned i;
for (i = 0; i < strlen(prac); i++)
{
// cout << prac[i] << endl;
cesta[i+1] = prac[i];
}
cesta[i+1] = 0;
strcat(cesta,"/temperature");
// cout << endl << "Vysledek:" << cesta << endl;
err = OW_init("/dev/i2c-1");
if (err >= 0)
{
OW_set_error_print("2");
OW_set_error_level("6");
OW_get(cesta,&buf,&s) ;
// OW_get("/10.99A689020800/temperature",&buf,&s) ;
return stof(buf);
free(buf);
free(prac);
free(cesta);
OW_finish() ;
}
else
{
cout << "Vyskytla se chyba v inicializaci-asi malo pameti" << endl;
return 0;
}
}
else
{
free(cesta);
free(prac);
cout << "Vyskytla se chyba v inicializaci" << endl;
return 0;
}
}
}
A jeste vypis z gdb:
Program received signal SIGSEGV, Segmentation fault. 0xb6a7e834 in strlen () from /lib/arm-linux-gnueabihf/libc.so.6 (gdb) bt #0 0xb6a7e834 in strlen () from /lib/arm-linux-gnueabihf/libc.so.6 #1 0xb6c77934 in std::basic_string:char, std::char_traits"char", std::allocator"char" >::basic_string(char const*, std::allocator"char" const&) () from /usr/lib/arm-linux-gnueabihf/libstdc++.so.6 #2 0x00009550 in DejTeplotu (OW=0x32419 "1099A68902080000") at ./main.cpp:75 #3 0x00009fd0 in main () at ./main.cpp:298 (gdb)
Jsem v koncich...Kdyby nekdo mohl probehnout tento kod a nakopl mne... Dekuji
Řešení dotazu:
gdb toho moc nevidím. Že by chybějící volba -g při kompilaci?
Na první pohled mi přijde, že počítáš s tím, že strlen() vrací velikost řetězce v paměti. Ve skutečnosti ale vrací délku řetězce. V paměti céčkovský řetězec ještě přidává znak 0x00, potřebuje tedy jeden bajt navíc.
Navíc je to taková sprasená ukázka kódu, že nevím, co si jen zkoušíš a co má nějaký reálný význam. Občas je dobré pro účely porady minimalizovat zdroják na co nejmenší kus, kde se problém ještě projevuje.
cpp a jsou použity stream-y, tak není důvod proč nepoužít std::string a je (s tímto) pokoj.
Řádek 75 je
return stof(buf);
přičemž stof() na argument volá konstruktor std::stringstream, který nejdřív implicitně zavolá konstruktor std::string. Můj tip je, že OW_get() vrátila NULL nebo nějaký nesmyslný pointer. Protože nevím, co ta funkce dělá, nemůžu si být jistý, jestli smí vrátit NULL a jestli jste to měl ošetřit (spíš ano).
// tady bys mel mit
prac = (char *) malloc(strlen(OW) + 1);
// misto
prac = (char *) malloc(strlen(OW));
if ((cesta != NULL) && (prac !=NULL))
{
cesta[0] = 0;
// jinak je tohle blbost, jak pise kolega vyse v poznamce!!!
// protoze neni kam ulozit ukoncovaci 0x0
prac = strcpy(prac,OW);
return okamžitě vyskočí z prováděné funkce, takže příkazy za returnem se již neprovedou. Tvůj způsob použití return dává tušit, že máš úplně jinou představu o jeho fungování. Funkce malloc vrátí NULL, pokud nemůže tvůj požadavek na alokaci paměti uspokojit a patrně právě na tom potom ten proces upadne, když se snažíš do NULL pointeru zkopírovat jiný řetězec.
OW_get(), jak jsem vám radil?
float DejTeplotu(string OW)
{
float vystup;
vystup = 0;
//cout << "OW:"<< OW << "delka:" << OW.length() << endl;
if (OW.length() == 16)
{
char * buf;
size_t s ;
string cesta = "/";
cesta += OW;
cesta += "/temperature";
if (OW_init("/dev/i2c-1") >= 0)
{
OW_set_error_print("2");
OW_set_error_level("6");
// OW_get("/10.99A689020800/temperature",&buf,&s) ;
if (OW_get(cesta.c_str(),&buf,&s) >=0)
{
vystup = stof(buf);
free(buf);
OW_finish() ;
} else
{
cout << "Chyba pri ziskavani teploty z cidla: " << OW << endl;
}
}else
{
cout << "Chyba pri inicializaci sbernice!" << endl;
}
}else
{
cout << "Neplatny nazev cidla!" << endl;
}
return vystup;
}
Pominu-li coding style, který se mi moc nelíbí a navíc ani není konzistentní, měl bych výhrady hlavně ke zpracování chyb. Dojde-li k chybě, měla by funkce buď vyhodit výjimku (když už používáte C++, proč nevyužít jeho výhod?) nebo chybu signalizovat volajícímu (typicky návratovou hodnotou). Varianta, kdy funkce natvrdo vypíše chybu na chybový výstup a pak vrátí jakousi nahodilou hodnotu, kterou by dost možná mohla vrátit i pokud je všechno v pořádku, je velmi nešťastný. Jak má volající poznat, jestli dostal smysluplnou hodnotu nebo jestli došlo k chybě?
Výjimky. Je to přehledné, pohodlné a můžete si snadno zvolit, kde se bude na chybu reagovat a jaké informace je tam potřeba předat. Samozřejmě za to platíte určitým overheadem, který ale u tohoto typu aplikace nebude nijak tragický.
Jinak samozřejmě můžete použít léty prověřenou klasiku: teplota se bude ukládat do bufferu, na který dostanete pointer (v C++ můžete použít referenci) a funkce bude vracet jako návratovou hodnotu kód chyby (nebo aspoň bool OK/chyba).
for (i = 0; i < strlen(prac); i++)
{
//cout << prac[i] << endl;
cesta[i+1] = prac[i];
}
cesta[i+1] = 0;
Tiskni
Sdílej: