Vim Classic byl vydán ve verzi 8.3. Drew DeVault oznámil tento fork editoru Vim (verze 8.2.0148, tj. těsně před zavedením Vim9 skriptování) v březnu letošního roku. Důvodem forku bylo, že vývojáři editorů Vim a Neovim začali při vývoji využívat LLM.
Open source konference DevConf.CZ 2026 proběhne 18. a 19. června v Brně na FIT VUT. Publikován byl program a spuštěna byla registrace.
Společnost JetBrains uvolnila verzi 2 svého open-source velkého jazykového modelu (LLM) pro vývojáře Mellum.
Probíhá konference Microsoft Build 2026. Microsoft představuje své novinky: kvantový čip Majorana 2, Surface Laptop Ultra a Surface RTX Spark Dev Box s NVIDIA RTX Spark, Intelligent Terminal, Coreutils for Windows (fork Rust Coreutils), AI modely MAI, AI agenta Scout, platformu pro agent-first zařízení Project Solara, …
Google Chrome 149 byl prohlášen za stabilní. Nejnovější stabilní verze 149.0.7827.53 přináší řadu novinek. Podrobný přehled v poznámkách k vydání. Vylepšeny byly také nástroje pro vývojáře.
Pluto.jl, reaktivní notebook pro programovací jazyk Julia, dospěl do verze 1.0.
Byla vydána nová verze 12.0.0 vizuálního programovacího jazyka Snap! (Wikipedie) inspirovaného jazykem Scratch (Wikipedie). Přehled novinek na GitHubu.
Počítačovou hru Gravity Circuit (ProtonDB) lze do 14. června do 19:00 získat na Steamu zdarma. Napořád.
Nejnovější X.Org X server 21.1.23 a Xwayland 24.1.12 řeší 9 bezpečnostních chyb.
npm balíčky @redhat-cloud-services byly kompromitovány.
/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: