Poslední příspěvky

Stran: 1 [2] 3 4 ... 10
11
Vývoj / Re:Přechod z Javy na Rust. Ano či ne?
« Poslední příspěvek od Radek Miček kdy 02. 10. 2025, 19:52:10 »
Ale vysvětli mi, proč bych měl tím dictem něco ztrácet? Nevidím proto jediný důvod...

Protože ne všechny formáty jsou jako dict. Některé serializační formáty např. nemají názvy polí, nebo mohou vzít kus paměti, kde je struktura (s definovaným layoutem) a nic dalšího s ním nedělat. Nebo dokoknce větší blok paměti, kde je více struktur, které na sebe odkazují (třeba pomocí relativních offsetů).

Navíc často ten dict může obsahovat jen omezenou množinu typů, takže třeba neomezeně dlouhé číslo do něj nejde uložit přímo jako číslo, ale jako řetězec a pak se bokem serializátoru do JSONu musí říct, ať to uloží jako číslo, ne jako řetězec (i když to tak je v tom slovníku).
12
Vývoj / Re:Přechod z Javy na Rust. Ano či ne?
« Poslední příspěvek od Franta Kučera kdy 02. 10. 2025, 19:34:27 »
Přijdete o zapouzdření, takže si zabetonujete vnitřnosti.
Jak jednou objekt serializujete, tak už takřka nemůžete překopat vnitřní reprezentaci. Nějaká aktualizace pak obvykle něco rozbije.

Ve výsledku pak občas máte vnitřnosti objektů dvakrát. Jednou pro sebe, jednou pro serializátor a přesypáváte je tam a zpět.

Smyslem té serializace je, že chci s někým komunikovat – typicky s nějakým externím systémem nebo třeba s jinou instancí svého programu. Proto si dohodneme nějaké rozhraní, kontrakt, který budou obě strany dodržovat, a který popisuje logickou strukturu předávaných dat případně i protokol jejich předávání. Ten koncept IDL nevznikl jen tak pro nic za nic…

A proto má smysl, aby ty objekty vygenerované z téhle specifikace jí odpovídaly 1:1 – abych mohl ve své aplikaci mohl vytvářet nebo číst libovolné struktury, které jsou dle té specifikace validní. Tady není moc prostor pro kreativitu a nemá smysl si to dělat po svém a jinak. Ty objekty/třídy nemám pro nějaký serializátor, ale pro podporu toho formátu a jeho logického modelu. Slouží to jako most mezi mým programovacím jazykem (abych používal normální třídy, struktury, konstanty, volal metody, funkce…) a tím formátem nebo protokolem. A tady je žádoucí dodržovat správnou úroveň abstrakce a nedovolit těm strukturám specifickým pro daný formát, aby prosakovaly do zbytku programu, který už je obecný. Takže ano, budu tam ty třídy mít dvakrát, nebo třeba jedenáctkrát, pokud budu pracovat s deseti formáty. Ale pokaždé to jsou trochu jiné struktury a data (pokud by tomu tak nebylo, tak by to znamenalo, že ten program je nejspíš vcelku zbytečný a nic moc nedělá). Tzn. mám nějaké jádro programu a v něm používám nějaké entity-třídy – to je můj datový model, který odpovídá mému záměru logice toho programu. A pak tam mám moduly pro napojení na různé externí systémy a v nich se používají třídy specifické pro dané protokoly nebo formáty. V těchto modulech je pak nějaká obchodní logika, která na jedné straně pracuje s mými entitami a na druhé straně se strukturami specifickými pro ten formát nebo protokol.

Pokud by ta aplikace měla nějaké extrémní nároky na výkon nebo požadavek, že se data nemají v paměti kopírovat, tak bych se na nějaké objekty a konstruování jejich stromu úplně vykašlal a z parseru bych emitoval události, které by se průběžně zpracovávaly… případně bych vyrobil ukazatele na části dat v té původní paměti, aby se to nikam nekopírovalo a zpracovalo rovnou na místě.
13
Sítě / Re:Metronet končí, ke komu přejít?
« Poslední příspěvek od ripper6 kdy 02. 10. 2025, 19:14:56 »
Jinak co ctu smlouvu JON, casto nesedi ceny, treba castka 702czk mesicne, ale v jejich systemu ze je faktura na rok a castka 632czk mesicne.
Dal v papirech je treba cena za modem 1400czk, modem ale zadny jsem neobjednal a ani nedostal.
Je to logicke, protoze davno u nich funguju a mam i novej Terminator co umi 35b bonding.

14
Vývoj / Re:Přechod z Javy na Rust. Ano či ne?
« Poslední příspěvek od Franta Kučera kdy 02. 10. 2025, 19:06:41 »
Ale vysvětli mi, proč bych měl tím dictem něco ztrácet? Nevidím proto jediný důvod...

Tohle už jsem komentoval někde výše. Když už se to tedy bude řešit takhle ručně (osobně bych spíš použil spíš tu reflexi a anotace nebo kód generovaný ze specifikace), tak bych tam nechal normální datové typy toho programovacího jazyka – a jejich mapování na datové typy formátu, ať si řeší ta serializační knihovna (specifika se dají upravit konfigurací, ale nevidím důvod, proč by někdo měl být nucen to ručně programovat).
15
Vývoj / Re:Přechod z Javy na Rust. Ano či ne?
« Poslední příspěvek od Franta Kučera kdy 02. 10. 2025, 18:55:22 »
Pokud to jazyk podporuje, tak se k tomuto účelu použije spíš reflexe + případně anotace, kterými se dá upravit specifické chování a mapování.
Serializace reflexí má své mouchy. A jak je ten serializátor psaný někým jiným, jsou z toho pěkně vypasené masařky.

1) Navrhujete vnitřnosti podle toho, co umí serializátor.
Když máte štěstí dostanete třeba nekonečno a nan. Na denormály ani nemyslete. A na inty větší než 48b bych taky raději slepě nespoléhal.
Pokud serializátor není součást jazyka, tak určitě nedostanete všechny standardní knihovny.

2) Přijdete o zapouzdření, takže si zabetonujete vnitřnosti.
Jak jednou objekt serializujete, tak už takřka nemůžete překopat vnitřní reprezentaci. Nějaká aktualizace pak obvykle něco rozbije.

Ve výsledku pak občas máte vnitřnosti objektů dvakrát. Jednou pro sebe, jednou pro serializátor a přesypáváte je tam a zpět.

Tak přesně tohle je ten případ, kdy by mne zajímalo, na základě jakých zkušeností a projektů se takový komentář a názor vznikl. Nikdo z mých zákazníků bohužel (bohudík?) nechce platit za ruční implementaci de/serializátoru a za to, že se o ten nadbytečný kód budou další generace programátorů starat. Ale možná je to někde běžná praxe - právě proto bych rád věděl kde a jaké k tomu vedou důvody.

Moje zkušenost vychází hlavně z bankovních projektů. Tam serializujeme objekty do XML, JSONu případně do Avro nebo nějakých specialit typu ISO 8583. Nebo jsem dělal projekty v oboru telekomunikací a tam to bylo trochu pestřejší, formáty byly často binární, bylo tam hodně ASN.1, Radius, Diameter, SMPP atd. A prakticky vždy je snaha tuhle práci automatizovat a minimalizovat množství kódu, který se musí napsat. Takže buď se do tříd dopíší anotace nebo, lépe, se vychází ze specifikace (XSD, WSDL, Swagger/OpenAPI, Avro schéma, definice ASN.1 modulů, slovníky atd.) a z ní se generují třídy nebo něco jiného. V obou případech ale tu práci za nás dělá nějaká knihovna. Ručně jsem to řešil jen párkrát u hodně malých projektů, kde toho ručně psaného kódu bylo tak málo, že převládl užitek ze snížení komplexity závislostí.

Napadají mne ještě takové věci jako multimediální kodeky nebo implementace síťových protokolů v operačním systému nebo nějaké firmwary… ale tam se spíš než vyrábění stromů objektů ta data namapují přímo, aby se nemusela vůbec kopírovat, maximálně se narovná endianita číselných typů, ale jinak data leží pořád na stejném místě v paměti, a buď se na ně 1:1 napasuje nějaká céčkovská struktura, nebo se vyrobí ukazatele, které ukazují na části dat na tom původním místě nebo se to zpracovává proudově a parser generuje události / volá funkce a ty se průběžně odbavují.
16
Sítě / Re:Jak získat přípojku od Cetinu
« Poslední příspěvek od Martin-2 kdy 02. 10. 2025, 18:48:10 »
Ono by to i šlo, ale jako vždy tam bude že to celé zaplatíte, celá přípojka bude ve výhradním vlastnictví cetinu (prakticky jim to odevzdáte) a bude tam smlouva na odběr po dobu např 2-3 roků od jejich smluvní partnera (nepřekvapí že se jedná o O2).

Tak nějak to posledně stálo v dokumentech co řešil kolega (už je to nějaká doba).
.
17
Sítě / Re:Metronet končí, ke komu přejít?
« Poslední příspěvek od ripper6 kdy 02. 10. 2025, 18:33:09 »
Jo a jen detail, JON CZ dava podepsat novou jejich smlouvu, pokud pozadate jen o navyseni rychlosti.
Je to standardni postup u operatoru?  :)
18
Sítě / Re:Metronet končí, ke komu přejít?
« Poslední příspěvek od ripper6 kdy 02. 10. 2025, 18:20:19 »
Jen uvaha, mam mit fakturu od JON cz, takze zaplatit na rok?  :)

PODA je znama, pokud to vezme, pojede to tam.
Zaroven ale jestli transakce nepadne, PODA nedela VDSL, je znama ze dela optiku a 60Ghz ci wi-fi internet vzduchem  :)

19
Vývoj / Re:Přechod z Javy na Rust. Ano či ne?
« Poslední příspěvek od BoneFlute kdy 02. 10. 2025, 18:15:42 »
Nebudu ho učit serializovat se do Jsonu, nebo do Databáze, ale obecný serializování musí umět on.

Ale i obecných serializačních formátů existuje mnoho. Jeden například povolí 64-bitová celá čísla a druhý povolí celá čísla bez omezení velikosti. Jiný povolí čas na mikrosekundy, další na pikosekundy. Některé mohou řešit, jak jsou data uložena v paměti, jiné se od toho snaží abstrahovat.

Bavíme v kontextu OOP.
Serializační formát je jen jeden, ten dict, což bude nějaký slovník.
A starostí toho objektu právě je, že když používá například čísla s nekonečnou délkou, tak je napasovat do toho interface. O tom byl právě ten příklad.

Pak je další vrstva, že chci serializovat do jsonu. Která umožní přidávat další věci.

To mi nepřijde jako dobrý návrh - protože to, co už ztratíte tím dictem, se bude dost těžko rekonstruovat v další vrstvě. Proč prostě nemít jen jednu vrstvu. Bude to určitě srozumitelnější a rychlejší.

Ten příspěvek byl jako vysvětlení kdy udělat metodu a kdy ne. Ale budiž.

Srozumitelnější a rychlejší bezpochyby ano.

Nevýhoda je neflexibilita.

Ale vysvětli mi, proč bych měl tím dictem něco ztrácet? Nevidím proto jediný důvod...
A o jaké rekonstrukci to mluvíš? Přeci v rámci rozdělení zodpovědnosti já v té druhé vrstvě nic rekonstruovat nebudu. Prostě převedu co mám na to co mám. Dostal jsem dict, převedu ho na json, a json převedu na dict.

20
Vývoj / Re:Přechod z Javy na Rust. Ano či ne?
« Poslední příspěvek od Radek Miček kdy 02. 10. 2025, 18:03:37 »
Nebudu ho učit serializovat se do Jsonu, nebo do Databáze, ale obecný serializování musí umět on.

Ale i obecných serializačních formátů existuje mnoho. Jeden například povolí 64-bitová celá čísla a druhý povolí celá čísla bez omezení velikosti. Jiný povolí čas na mikrosekundy, další na pikosekundy. Některé mohou řešit, jak jsou data uložena v paměti, jiné se od toho snaží abstrahovat.

Bavíme v kontextu OOP.
Serializační formát je jen jeden, ten dict, což bude nějaký slovník.
A starostí toho objektu právě je, že když používá například čísla s nekonečnou délkou, tak je napasovat do toho interface. O tom byl právě ten příklad.

Pak je další vrstva, že chci serializovat do jsonu. Která umožní přidávat další věci.

To mi nepřijde jako dobrý návrh - protože to, co už ztratíte tím dictem, se bude dost těžko rekonstruovat v další vrstvě. Proč prostě nemít jen jednu vrstvu. Bude to určitě srozumitelnější a rychlejší.
Stran: 1 [2] 3 4 ... 10