Byl vydán Linux Mint 22.2 s kódovým jménem Zara. Podrobnosti v přehledu novinek a poznámkách k vydání. Vypíchnout lze novou XApp aplikaci Fingwit pro autentizaci pomocí otisků prstů nebo vlastní fork knihovny libAdwaita s názvem libAdapta podporující grafická témata. Linux Mint 22.2 bude podporován do roku 2029.
Čínská společnost Tencent uvolnila svůj AI model HunyuanWorld-Voyager pro generování videí 3D světů z jednoho obrázku a určené trajektorie kamery. Licence ale nedovoluje jeho používání na území Evropské unie, Spojeného království a Jižní Koreje.
Blender Studio se spojilo s kapelou OK Go a výsledkem je videoklip k písni Impulse Purchase. Stejně jako samotný 3D software Blender je i ve videoklipu použitý animovaný chlápek open source. Kdokoli si jej může stáhnout a upravovat.
Zig Software Foundation stojící za programovacím jazykem Zig publikovala finanční zprávu za rok 2024. Současně s prosbou o finanční příspěvek.
Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za srpen (YouTube). Vypíchnuta je podpora Tabulek Google, implementace Gamepad API a Cookie Store API nebo také podpora WebGL na Linuxu.
openSUSE Leap 16, včetně Leap Micra 6.2+, nově nabízí 24 měsíců podpory pro každé vydání. To je dva roky aktualizací a stability, což z něj činí nejdéle podporovanou komunitní distribuci vůbec. Leap se tak stává ideální platformou pro všechny, kdo hledají moderní, stabilní a dlouhodobě podporovanou komunitní Linux distribuci.
Národní úřad pro kybernetickou a informační bezpečnost (NÚKIB) vydal dne 3. 9. 2025 VAROVÁNÍ před hrozbou v oblasti kybernetické bezpečnosti spočívající v předávání systémových a uživatelských dat do Čínské lidové republiky a ve vzdálené správě technických aktiv vykonávané z území Čínské lidové republiky. Varováním se musí zabývat povinné osoby podle zákona o kybernetické bezpečnosti.
Americká internetová společnost Google nemusí prodat svůj prohlížeč Chrome ani operační systém Android. Rozhodl o tom soud ve Washingtonu, který tak zamítl požadavek amerického ministerstva spravedlnosti. Soud ale firmě nařídil sdílet data s jinými podniky v zájmu posílení konkurence v oblasti internetového vyhledávání. Zároveň Googlu zakázal uzavírat dohody s výrobci mobilních a dalších zařízení, které by znemožňovaly
… více »Prvního září ozbrojení policisté zatkli na na londýnském letišti Heathrow scénáristu a režiséra Grahama Linehana, známého především komediálními seriály Ajťáci, Otec Ted nebo Black Books. Během výslechu měl 57letý Graham nebezpečně zvýšený krevní tlak až na samou hranici mrtvice a proto byl z policejní stanice převezen do nemocnice. Důvodem zatčení bylo údajné podněcování násilí v jeho 'vtipných' příspěvcích na sociální síti
… více »Studentská dílna Macgyver zve na další Virtuální Bastlírnu - pravidelné online setkání všech, kdo mají blízko k bastlení, elektronice, IT, vědě a technice. Letní prázdniny jsou za námi a je čas probrat novinky, které se přes srpen nahromadily. Tentokrát jich je více než 50! Těšit se můžete mimo jiné na:
Hardware – Bus Pirate na ESP32, reverse engineering Raspberry Pi, pseudo-ZX-80 na RISC-V, PicoCalc, organizéry na nářadí z pěny nebo … více »/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...
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
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
/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; }
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: