Od 3. listopadu 2025 budou muset nová rozšíření Firefoxu specifikovat, zda shromažďují nebo sdílejí osobní údaje. Po všech rozšířeních to bude vyžadováno někdy v první polovině roku 2026. Tyto informace se zobrazí uživateli, když začne instalovat rozšíření, spolu s veškerými oprávněními, která rozšíření požaduje.
Jste nuceni pracovat s Linuxem? Chybí vám pohodlí, které vám poskytoval Microsoft, když vás špehoval a sledoval všechno, co děláte? Nebojte se. Recall for Linux vám vrátí všechny skvělé funkce Windows Recall, které vám chyběly.
Společnost Fre(i)e Software oznámila, že má budget na práci na Debianu pro tablety s cílem jeho vyžívání pro vzdělávací účely. Jako uživatelské prostředí bude použito Lomiri.
Proběhla hackerská soutěž Pwn2Own Ireland 2025. Celkově bylo vyplaceno 1 024 750 dolarů za 73 unikátních zranitelností nultého dne (0-day). Vítězný Summoning Team si odnesl 187 500 dolarů. Shrnutí po jednotlivých dnech na blogu Zero Day Initiative (1. den, 2. den a 3. den) a na YouTube.
Byl publikován říjnový přehled dění a novinek z vývoje Asahi Linuxu, tj. Linuxu pro Apple Silicon. Pracuje se na podpoře M3. Zanedlouho vyjde Fedora Asahi Remix 43. Vývojáře lze podpořit na Open Collective a GitHub Sponsors.
Iniciativa Open Device Partnership (ODP) nedávno představila projekt Patina. Jedná se o implementaci UEFI firmwaru v Rustu. Vývoj probíhá na GitHubu. Zdrojové kódy jsou k dispozici pod licencí Apache 2.0. Nejnovější verze Patiny je 13.0.0.
Obrovská poptávka po plynových turbínách zapříčinila, že datová centra začala používat v generátorech dodávajících energii pro provoz AI staré dobré proudové letecké motory, konvertované na plyn. Jejich výhodou je, že jsou menší, lehčí a lépe udržovatelné než jejich průmyslové protějšky. Proto jsou ideální pro dočasné nebo mobilní použití.
Typst byl vydán ve verzi 0.14. Jedná se o rozšiřitelný značkovací jazyk a překladač pro vytváření dokumentů včetně odborných textů s matematickými vzorci, diagramy či bibliografií.
Specialisté společnosti ESET zaznamenali útočnou kampaň, která cílí na uživatele a uživatelky v Česku a na Slovensku. Útočníci po telefonu zmanipulují oběť ke stažení falešné aplikace údajně od České národní banky (ČNB) nebo Národní banky Slovenska (NBS), přiložení platební karty k telefonu a zadání PINu. Malware poté v reálném čase přenese data z karty útočníkovi, který je bezkontaktně zneužije u bankomatu nebo na platebním terminálu.
V Ubuntu 25.10 byl balíček základních nástrojů gnu-coreutils nahrazen balíčkem rust-coreutils se základními nástroji přepsanými do Rustu. Ukázalo se, že nový "date" znefunkčnil automatickou aktualizaci. Pro obnovu je nutno balíček rust-coreutils manuálně aktualizovat.
/proc/net/dev, ale to není podstatný, protože tam mám spíš nějakou chybu, jenže nevím jakou... Ukazuje mi nesmysl:
dl 18014261070691488 kB/s up 0 kB/sNení na tohle třeba nějaká knihovna? Pokud ne, co tam mám špatně? Díky...
Pro začátek zkus program v případě že se nepovede otevřít ten soubor rovnou zabít
cat /proc/net/dev | grep eth0 | awk '{print $1}' (za predpokladu ze si zmenis eth0 :)

awk '/eth0/ {print $1}' /proc/net/dev
$ time for ((i=0; i<999; i++))
do
awk '/eth0/ {print $1}' /proc/net/dev
done > /dev/null
real 0m2.008s
user 0m0.908s
sys 0m1.092s
$ time for ((i=0; i<999; i++))
do
cat /proc/net/dev | grep eth0 | awk '{print $1}'
done > /dev/null
real 0m5.584s
user 0m2.261s
sys 0m3.295s
No, vyřešeno, dík...
S využitím standardní C++ knihovny by se to dalo napsat mnohem elegantněji.Věřím. Zatím nemám peníze na Mistrovství v C++, takže to asi nevymyslím
Zatím zkusím najít nějaký program v C++, ve kterém se se soubory z /proc pracuje, abych viděl jak to z nich dolují
return vyhodil exception, takže by zjistil, co se děje… :-)
ifstream f("/proc/net/dev");
string s;
while(getline(f, s))
if (s.find("eth0") != -1)
cout << s << endl;Tohle vypíše řádek obsahující "eth0", jenže jak z toho dostat ty dvě hodnoty (počet přijatých a odeslaných bajtů) aby to bylo mnohem elegantnější?
Např. takhle:
class Netload {
public:
typedef unsigned long long count_t;
std::string name;
count_t d;
count_t u;
Netload(count_t id = 0, count_t iu = 0) { d = id; u = iu; }
~Netload() {}
const Netload operator - (const Netload& x);
};
inline const Netload Netload::operator - (const Netload& x)
{
return Netload(d - x.d, u - x.u);
}
std::istream& operator >> (std::istream& s, Netload& x)
{
std::string buff;
getline(s, buff, ':');
if (!s) return s;
s >> x.d;
Netload::count_t tmp;
for (int i=0; i<7; i++)
s >> x;
s >> x.u;
s.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
return s;
}
bool GetStat(const std::string& ifname, Netload& stat)
{
std::ifstream s("/proc/net/dev");
if (!s) throw std::runtime_error("cannot open /proc/net/dev");
s.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
s.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
while (s >> stat) {
if (stat.name == ifname) return true;
}
return false;
}
Btw, budu to ještě muset ověřit, ale když použiju tenhle main(), tak se zdá že neměří upload, ukáže vždy nulu...
int main(int argc, char** argv) {
if (argc != 2) {
cout << "Usage: " << argv[0] << " eth0\n";
return 1;
}
Netload before, now, diff;
GetStat(argv[1], before);
sleep(1);
GetStat(argv[1], now);
diff.d = now.d - before.d;
diff.u = now.u - before.u;
cout << "dl " << diff.d / 1024 << " kB/s\nup " << diff.u / 1024 << " kB/s\n";
}
To bude tím, že jsem to nezkoušel. :-) Jinak by tento jednoúčelový prográmek šel samozřejmě napsat jednodušeji, ale předpokládám, že s těmi hodnotami budete chtít pracovat nějak soustavněji, takže spíš než na jednoduchost implementace té třídy jsem se zaměřil na jednoduchost použití. Zrovna tak místo konstanty 'std::numeric_limits<std::streamsize>::max()' jsem mohl napsat třeba 256, ale IMHO je lepší si na podobné bulharské konstanty nezvykat a psát všude to, co tam logicky patří. Takže druhý pokus:
#include <iostream>
#include <fstream>
#include <stdexcept>
#include <unistd.h> // sleep
class Netload {
public:
typedef unsigned long long count_t;
std::string name;
count_t d;
count_t u;
Netload() { d = u = 0; }
Netload(std::string& iname, count_t id = 0, count_t iu = 0)
: name(iname) { d = id; u = iu; }
~Netload() {}
const Netload operator - (const Netload& x);
};
inline const Netload Netload::operator - (const Netload& x)
{
return Netload(name, d - x.d, u - x.u);
}
inline void trimleft(std::string& s)
{
unsigned i = 0;
unsigned L = s.length();
while (i<L && s[i]==' ') i++;
s.erase(0, i);
}
std::istream& operator >> (std::istream& s, Netload& x)
{
getline(s, x.name, ':');
if (!s) return s;
trimleft(x.name);
s >> x.d;
Netload::count_t tmp;
for (int i=0; i<7; i++)
s >> tmp;
s >> x.u;
s.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
return s;
}
std::ostream& operator << (std::ostream& s, const Netload& x)
{
s << x.name << ": dn " << x.d/1024 << " KB, up " << x.u/1024 << " KB\n";
return s;
}
void GetStat(const std::string& ifname, Netload& stat)
{
std::ifstream s("/proc/net/dev");
if (!s) throw std::runtime_error("cannot open /proc/net/dev");
s.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
s.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
while (s >> stat) {
if (stat.name == ifname) return;
}
throw std::runtime_error("cannot read statistics for selected interface");
}
int main(int argc, char** argv)
{
try {
if (argc != 2)
throw std::runtime_error("Usage: transfer <ifname>");
Netload before, now;
GetStat(argv[1], before);
sleep(1);
GetStat(argv[1], now);
std::cout << (now - before);
return 0;
}
catch(std::exception& e) {
std::cerr << "transfer: " << e.what() << std::endl;
return 1;
}
}
Tou elegancí jsem myslel hlavně to, jak se vám zpřehlední právě main() a zejména zpracování chyb. Díky použití nástrojů jazyka C++ můžete totiž oddělit reakci na chybu od její detekce.
$ mrtg-ip-acct eth0 236054352 240845652 4:05pm up 199 days, 12:11, 1 user, load average: 0.00, 0.02, 0.00 localhost
Tiskni
Sdílej: