Před 70 lety, 7. června 1954, ve věku 41 let, zemřel Alan Turing, britský matematik, logik, kryptoanalytik a zakladatel moderní informatiky.
NiceGUI umožňuje používat webový prohlížeč jako frontend pro kód v Pythonu. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.
Open source platforma Home Assistant (Demo, GitHub, Wikipedie) pro monitorování a řízení inteligentní domácnosti byla vydána ve verzi 2024.6. Z novinek lze vypíchnout lepší integraci LLM (OpenAI, Google AI, Ollama) nebo podporu Matter 1.3.
IKEA ve Spojeném království hledá zaměstnance do své nové pobočky. Do pobočky v počítačové hře Roblox. Nástupní mzda je 13,15 liber na hodinu.
Alyssa Rosenzweig se v příspěvku na svém blogu Vulkan 1.3 na M1 za 1 měsíc rozepsala o novém Vulkan 1.3 ovladači Honeykrisp pro Apple M1 splňujícím specifikaci Khronosu. Vychází z ovladače NVK pro GPU od Nvidie. V plánu je dále rozchodit DXVK a vkd3d-proton a tím pádem Direct3D, aby na Apple M1 s Asahi Linuxem běžely hry pro Microsoft Windows.
Byla vydána (𝕏) květnová aktualizace aneb nová verze 1.90 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a animovanými gify v poznámkách k vydání. Ve verzi 1.90 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.
Byla vydána (Mastodon, 𝕏) nová verze 2024.2 linuxové distribuce navržené pro digitální forenzní analýzu a penetrační testování Kali Linux (Wikipedie). Přehled novinek se seznamem nových nástrojů v oficiálním oznámení.
Počítačová hra Tetris slaví 40 let. Alexej Pažitnov dokončil první hratelnou verzi 6. června 1984. Mezitím vznikla celá řada variant. Například Peklo nebo Nebe. Loni měl premiéru film Tetris.
MicroPython (Wikipedie), tj. implementace Pythonu 3 optimalizovaná pro jednočipové počítače, byl vydán ve verzi 1.23.0. V přehledu novinek je vypíchnuta podpora dynamických USB zařízení nebo nové moduly openamp, tls a vfs.
Canonical vydal Ubuntu Core 24. Představení na YouTube. Nová verze Ubuntu Core vychází z Ubuntu 24.04 LTS a podporována bude 12 let. Ubuntu Core je určeno pro IoT (internet věcí) a vestavěné systémy.
Na úvod - kedže je to prvý môj zápisok v roku 2012 - všetko dobré do nového roku . Zaujímalo ma (po jednej siahodlhej debate na tému ipv4 vs ipv6 vs DNS) akú veľkosť by mal súbor obsahujúci v každom riadku presne jednu IPv4 adresu (začínajúc od nezmyslu 0.0.0.0 až po nezmysel 255.255.255.255 čiže 2^32 alebo 4 294 967 296 možných unikátnych adries). A ako dlho jeho vytvorenie bude trvať. Takže tu sú moje výsledky.
Testovacia zostava - Compaq nc6320, C2D T5500, 2MB cache, 1,5GB RAM, SSD 32GB, Debian 6 i386. Napísal som si jednoduchý programček v Pascale.
var aaa,bbb,ccc,ddd : integer; begin for aaa:=0 to 255 do for bbb:=0 to 255 do for ccc:=0 to 255 do for ddd:=0 to 255 do writeln(aaa,'.',bbb,'.',ccc,'.',ddd); end.
Ten som následne preložil a spustil:
time ./ipv4_adds > ipv4.txt
Čo chvíľu trvalo... A skončilo sa to neúspešne, nakoľko /home má na notebookovskom SSD iba 21GB a teda skončil som na hláške "No space left on device". Takže nasledovalo pripojenie 250GB disku skrz USB a opätovné spustenie. Vytvorenie súboru trvalo:
real 44m18.968s user 27m18.690s sys 13m41.483sVeľkosť súboru:
$ du ipv4.txt 59899904 ipv4.txt $ du -h ipv4.txt 58G ipv4.txtNejaké ďalšie štatistiky:
$ time wc ipv4.txt 4294967296 4294967296 61337501696 ipv4.txt real 48m28.705s user 46m46.351s sys 1m21.309sČo poviete? Zaujimavé nie?
Tiskni Sdílej:
Ha, díky za nápad - dala by se na tom testovat rychlost komprimace/dekomprimace. Rozhodně jestli se mi to povede vygenerovat, tak zkusim LZMA kompresi a někam to uploadnout. Zatim jsem "jen" na 39.113.249.255
'\n'
.
wc -l
jinak by poslední (prázdný) řádek nesplňoval požadavkyto zalezi jestli newline character povazujes za oddelovac nebo ukoncovac radku. Pokud za ukoncovac tak tam prazdny radek neni, i kdyz ho nektery editory zobrazi...
There is also some confusion whether newlines terminate or separate lines. If a newline is considered a separator, there will be no newline after the last line of a file. The general convention on most systems is to add a newline even after the last line, i.e. to treat newline as a line terminator. Some programs have problems processing the last line of a file if it is not newline terminated. Conversely, programs that expect newline to be used as a separator will interpret a final newline as starting a new (empty) line.zdroj: http://en.wikipedia.org/wiki/Newline
\n
není oddělovač, nýbrž ukončovač řádku.
Také by se to dalo říct tak, že každá položka v souboru je oddělená ukončením řádkuŘíct se to sice dá, dokonce i napsat, po striktní logice dokonce dojdeš k tomu, že je to pravdivý výrok (pokud je každá položka na samostatném řádku), ale přesto je nesmysl se podle toho řídit.
if
je zbytečný – když máš metodu/funkci načtiDalšíŘádek()
, tak v ní prostě čteš vstup, dokud nenarazíš na konec řádku nebo* souboru a načtenou hodnotu vrátíš. Takže z tohoto pohledu (načítání souboru, kde položka = řádek) je úplně jedno, jestli tam to poslední \n
je nebo ne. (význam to má akorát při spojování souborů nebo při výpisu do konsole…)
*) je jasné, že za koncem souboru už řádek nepokračuje, takže vrátíme hodnotu. Kdybychom chtěli být zlí, tak vyhodíme výjimku, že je řádek v neplatné syntaxi (není ukončen \n
), ale to by asi k ničemu dobré nebylo.
unsigned long i; for (i=0; i<2^32; i++) { sprintf("%i.%i.%i.%i",(*i & 0xff000000)>>24,(*i & 0x00ff0000)>>16,(*i & 0x0000ff00)>>8,(*i & 0x000000ff)); }
uint32_t i = UINT32_C(0xffeeffee); printf("%" PRIu32 "\n", i);
#include <stdint.h> #include <stdio.h> int main() { uint32_t ip = 0; do { printf("%u.%u.%u.%u\n", (uint8_t)(ip >> 24), (uint8_t)(ip >> 16), (uint8_t)(ip >> 8), (uint8_t)ip); } while (++ip <= 0xffffffff); }Ale nemám dost místa na disku na to abych to odzkoušel
Určitě je to správně? Gynerovaný soubor má už 63GB a pořát jede, zdá se, odzačátku .. :D
poky@antik:~$ time ./c > ips
Ukončen (SIGTERM)
real 28m31.981s
user 25m41.980s
sys 1m38.766s
poky@antik:~$ du ips
69162400 ips
poky@antik:~$ du -h ips
66G ips
poky@antik:~$ wc -l ips
4998991943 ips
poky@antik:~$
Taky jsem si ten kód mohl nejdřív pořádně pročíst...
int main(void) { int i,j,k,l; long long int x=0; char ip[20]; for (i=0;i<POCET;++i) { printf("%03d\n",i); for (j=0;j<POCET;++j) for (k=0;k<POCET;++k) for (l=0;l<POCET;++l) { sprintf(ip,"%d.%d.%d.%d\n",i,j,k,l); x+=strlen(ip); } } printf("%lld\n",x); return 0; }O ukládání do souboru jsem se ani nepokoušel, nejvíc místa na jednom disku mám gigabajt. I takhle ten program trval rovné tři hodiny
A kde je test ipv6?
Počet ipv4 adres vám trochu hapruje, 10^12 jste vzal kde? Je to snad 2^32 ne? Tedy 4 294 967 296 adres..
X.X.X.X
(10+2*90+3*156)/256 = 658/256 = 329/128 = 2.57
4+4*329/128 = 4+329/32 = 457/32 = 14.28
2^32*457/32 = 2^(32-5)*457=2^27*457=61'337'501'696
Máme 4 čísla (X.X.X.X), kde každé z čísel může nabývat 255 různých možností.
256
1.2.3.4
10.0.128.240
196.168.0.1
AB.CD.EF.51
10.A.1B.1
Podle masky sítě může být i 11.22.33.0/8. Ale zpravidla se toto nepoužívá.
akú veľkosť by mal súbor obsahujúci v každom riadku presne jednu IPv4 adresu
IPv4 adresa je 32b číslo, tedy 4B. 2^32*4B = 16 GiB. Použijeme-li nějaký znak jako oddělovač tak to bude 20GiB. Netřeba generovat a hlavně netřeba ukládat. Btw. jsi to mohl prohnat přes pv
do /dev/null
.
IPv4 adresa je 32b číslo, tedy 4B. 2^32*4B = 16 GiB.To mi bolo jasné pred testom - nebolo mi jasné akú veľkosť by mal ASCI súbor. Ešte by som chcel odfiltrovať _nejako_ (???) len adresné rozsahy patriace SR a CR z tohto zoznamu, takže hádzať to do /dev/null pre mňa nemá nejako význam :)
To mi bolo jasné pred testom - nebolo mi jasné akú veľkosť by mal ASCI súbor.
Nicméně počítat to tak, že si je všechny vygenerujete, je nesmysl (a když už, je nesmysl si ten soubor generovat na disku a pak na něj pouštět wc
, od toho máme roury). Stačí jednoduchá úvaha: každý byte může nabývat 10 jednociferných, 90 dvouciferných a 156 tříciferných hodnot, každá se ve výpisu zopakuje 2^24-krát (pro všechny kombinace zbývajících tří). K tomu navíc na každý řádek připadají tři tečky a jeden linefeed. Celkem tedy 4*2^24*(10+2*90+3*156) + (3+1)*2^32 = 61337501696. I kdybych to počítal ručně pomocí tužky a papíru, budu o řád rychlejší než váš program…
Ešte by som chcel odfiltrovať _nejako_ (???) len adresné rozsahy patriace SR a CR z tohto zoznamuTo sa stále mení
Nestačilo by jen definovat přes regulární výraz třeba formu IP adresy a pak podle potřeby s tím pracovat? Z toho bys mohl i spočítat velikost souboru ... místo samotného generování.
49*48*47*46*45*44 ------------------- = 13983816 sloupečků 1*2*3*4*5*6A samozřejmě to musíš vydělit počtem sloupečků na tiketu (ani nevím kolik jich dneska je), vyjde ti počet tiketů...
No, 1:14M, to je asi stejně pravděpodobný, jako že mě sundá meteorit, když vyjdu před barák :)pokud to mam interpretovat jako P(sunda me meteorit | vyjdu pred barak) = 1/14e6, tak pri 10e6 lidech, kazdy vyjde pred barak prumerne 2x denne (jenom odhad), by meteorit sundal prumerne 2*10e6 / 14e6 = 1.43 lidi denne.
Jooo VŠICHNI
Uz chapu, proc vsichni potrebuji tak rychle pocitace a velke disky.To jako že u pornosbírky ti taky stačí si poznamenat, jak je velká a kolik je minut a obsah už mít nemusíš?