Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Příspěvky - Logik

Stran: 1 ... 3 4 [5] 6 7 ... 68
61
k3dAR, DeathWalker:
To je zas hádka.
Když dělám novou instalaci, tak musím nainstalovat veškeré své userspace programy. V některém případě to znamená žádná práce (notebook "na web"), někdy to je celej den práce. Ale nemusí to bejt zdaleka jen "tupý" zkopírování dat.

Když přenáším starej systém na novej ntb, tak je o něco více práce s přenosem, a ve výjimečnejch případech, kdy to nefunguje "out of box", to navíc vyžaduje umět to opravit.

Nějaká generalizace (todle je lepší, todle je horší) IMHO není na místě, záleží na tom jak se liší HW a zdali je exotickej HW - a jak má člověk "složitej" userspace.

62
Distribuce / Re:Debian 11 po instalaci nenabootuje
« kdy: 29. 08. 2021, 22:37:33 »
Oook, dík za upřesnění, v tom jsem byl mimo. Ale stejně, pokud to byly debianí firmware, tak ty jsou z jádra vyčleněny především kvůli licenci, že by to kvůli nim mrzlo (a ještě takhle) je IMHO hodně nepravděpodobný.
Pohnul jsi s tím nějak?

63
Distribuce / Re:Debian 11 po instalaci nenabootuje
« kdy: 29. 08. 2021, 19:14:22 »
Johanson: prosím, raď jen věci, které víš jistě, nebo alespoň je neraď jako "fakta", ale jako možnosti.

- Do debianu se instalátorem žádné ovladače neinstalují, tedy tazatel evidentně myslel ovladače windows, a ty jaksi nemohli způsobit nefunkčnost Debianu.
- Blikání kursoru vůbec nemusí znamenat, že systém zamrznul, ale např. i to, jak píšu výš, že systemd na něco čeká. Naopak zamrzlýmu systému by nejspíš kurzor neblikal (byť i to se stát může, tak to ani náhodou není pravděpodobná možnost).

Nick1234:
Zamrzlej systém v konzoli bys měl poznat tak, že nebudou reagovat numlock/capslock diody. Ale daleko pravděpodobnější je, že se zasekla nějaká unita systemd, viz minulý post.


64
Distribuce / Re:Debian 11 po instalaci nenabootuje
« kdy: 29. 08. 2021, 13:46:41 »
S největší pravděpodobností se zasekla se nějaká unita systemd, na které závisí spuštění login manageru (nebo jak se mu nadává).

Nejsou už nastartovaný konsole (přepínaj se CTRL+ALT+FX)? Pak můžeš z jiný zjistit, která to je a řešit.
Taky někdy stačí jen dost dlouho počkat, až se chybující unita vytimeoutuje (ale to může být i 5min a víc).
Pokud ani jedno nefunguje, tak zkusit spustit jednouživatelský režim:
https://serverfault.com/questions/482079/debian-boot-to-single-user-mode
a tam si prohlídnout logy z předchozího bootu (journactl --boot=-1).

65
Vývoj / Re:PHP - deserializace objektu - ošetření vstupu
« kdy: 09. 08. 2021, 12:13:54 »
Také se mi to zdá jako úplně ukázková věc na aplikaci redisu.

Nicméně, pokud bych už to chtěl řešit bez "externího úložiště" a použít PHP serializaci, tak bych k serializovanému objektu připojil ještě hash s nějakým secret code (defakto další podpis), kterej bych ověřil před unserializací. Ale i tak i to přijde jako "very bad practice".


Pokud už posílat nějaká data takto na klienta, tak ne serializovaný objekt, ale např. něco v JSON formátu a ten objekt z toho JSONu vytvořit "ručně". Tam je podstatně menší prostor na bezpečnostní díry, než při použití serializace. Ale to jsme vlastně u toho JSON web tokenu, kterej tu někdo navrhoval, aneb u klasické zásady:

Pokud se něco týká bezpečnosti, POUŽIJ OSVĚDČENÁ ŘEŠENÍ. Šance, že při samodomo řešení bezpečnosti něco uděláš blbě je v podstatě 100%. To neplatí jen pro úplné lopaty:lidí, kteří opravdu zvládají všechny aspekty bezpečnosti a zároveň jsou ještě k tomu schopni je dobře implementovat zas tak moc není.


Filip:
Citace
HTTP protokol vznikl jako bezstavový. Stav do toho přináší až uživatel. Takže podle mne stav patří na klienta.
Vznikl, ale také vznikl pro naprosto jiné účely, než pro které se dnes používá. Takže ať už se to bude řešit jakkoli, vždycky to je "rovnák na vohejbák". Oni už samotný cookies, který k tomu ať tak či tak použiješ, popíraj původní ideu HTTP.

66
Vývoj / Re:Rada při návrhu db tabulek
« kdy: 02. 07. 2021, 14:31:37 »
Citace
Zde je naprosto mylně uvedený vztah. Nejedná se o ORM versus DB. Ale o ORM versus vývojář.Pokud je třeba získat nějaké informace, tak se ptáme - kdo je dokáže získat lépe stroj=ORM, nebo vývojář?
Ty, které může lépe získat stroj: tzn. statistiky atd...., ORM získat za rozumný čas nemůže, protože prostě na ně "nevidí". Nemá ty data, ty má DB. Proto je tato otázka chybně položená. Není problém v "STROJ versus VÝVOJÁŘ", problém je v tom, jaké možnosti má stroj na úrovni ORM vrstvy - a že kdybys chtěl ty problémy překonat, tak bys musel do té ORM vrstvy nutně zabudovat i celou databázi.
No a pak jsou informace, které prostě stroj (přinejmenším v dnešním stavu AI) získat prostě nemůže. To, co si od takového ORM představuješ je defakto schopnost programovat, a ta jestli je principiálně vůbec možná (asi jo), tak je úplně někde jinde, než co dneska umíme.
Jak píše Pavel: i SQL databáze, která řeší jednoduché a matematicky snadno popsatelné problémy relační algebry, řeší u každého přístupu jen pár vhodných strategií - a i tam občas selhává. A ty bys chtěl vlastně po ORM něco, co by umělo ne volit jednu strategii z pár "napevno zadrátovaných", ale které by umělo algoritmizaci. Jasně - teroreticky to asi možný je. Ale až to budeme umět, tak budeme umět konstruovat androidy - a programátoři přijdou o práci.... :-)

67
Vývoj / Re:Rada při návrhu db tabulek
« kdy: 01. 07. 2021, 13:34:57 »
Citace
vzdy bude cast logiky v aplikaci a jina cast v databazi, nikdy nebude vse v databazi, neznamena to, ze se neco duplikuje.
Neduplikuje se do té doby, než zjistíš, že v nějakých SQL dotazech potřebuješ použít tu logiku, jejíž část je v APP. Protože ji tam prostě nemáš. V takovém případě prostě buďto tu logiku obcházíš (což je budoucí průšvih), nebo ji duplikuješ (což je opět budoucí průšvih).

Třetí - správná cesta - je přesun té logiky do DB, ale to může být netriviální refaktor a klient Tě umlátí, že chceš za z jeho pohledu primitivní úpravu aplikace nehoráznou sumu. Takže to tak neuděláš a volíš jedno z řešení výše... To není teorie, to je praxe...
Nejhorší na tom ale je, že ve větším projektu nevíš jaká logika je v APP a jaká v DB. Takže když chceš pracovat na DB vrstvě, tak prostě nevíš, jestli náhodou neobcházíš nějakou logiku na APP vrstvě. V lepším případě to jsi schopen ověřit kontrolou zdrojových kódů APP popř. projitím dokumentace a stojí Tě to jen nemálo času. V horším případě je dokumentace nekompletní (kdo máte v projektech dokumentaci 100%?) anebo danej kus kódu s danou logikou nenajdeš/špatně pochopíš a vyrobils problém.

Citace
proc bych psal SQL update rucne? Jeste jednou, kazde ORM umi vygenerovat validni batch update dotaz.
Jak píšou kolegové, pokud máš logiku v APP, tak to prostě není možné, protože na APP vrstvě je aplikační logika postavená nad ORM a tedy ji ORM nevidí a neumí použít.
Leda, že bys psal APP logiku ve vrstvě pod ORM jako nějakou konfiguraci ORM - jenže v čem? Nějaký "user-friendly" deklarativní způsob nebude ani vzdáleně turingovsky úplný, a tedy v něm většinu APP bussines logiky prostě nenapíšeš. A jakýkoli složitější jazyk? Pak je otázka, proč vymešlet kolo: pokud to bude komplexní, tak to nebude o tolik jednodušší než SQL, aby to ospravedlnilo veškeré nevýhody z toho plynoucí (další jazyk v projektu, problémy vzniklé mapováním toho jazyka na SQL atd... atd....).

Jako teoreticky si dokážu představit ORM, které by bylo např. v Pythonu, a kde by definice objektů byla napsaná tak, že by se z ní automaticky vytvářely PL/Python stored procedury, ale takový ORM imho neexistuje a napsat něco takovýho by byla hodně netriviální věc.
Navíc, takový přístup by vlastně nebyl nic jiného, než dublování funkcionality, o kterém píšu více, jen díky "strojovému generování" s menším rizikem desynchronizace implementací.

68
Vývoj / Re:Rada při návrhu db tabulek
« kdy: 30. 06. 2021, 12:15:06 »
A.P.Hacker:Asi si nerozumíme. Samozřejmě, pokud uděláš ORM turingovsky úplný, tak s ním vyjádříš jakékoli SQL. Ale - omlouvám se, že se opakuju - kde máš bussines logiku?
  • Pokud v databázi, tak to není ORM. ORM je object relation mapping. Pokud máš bussines logiku v DB, tak máš objekty v databázi. To, na co je mapuješ vlastně nejsou "objekty", nemají na APP rovině logiku a objekt tvoří data+logika. V takovém případě podle mne opravdu nejde o ORM, ale o QueryBuilder. Který je samozřejmě užitečný a potřeba.
  • Pokud v APP, tak máš problém s jakýmikoli hromadnými operacemi. Např. primitivní nastavení vlastnosti: když uděláš "UPDATE cars SET color = 'green'", ale v APP logice budeš mít u některých aut zákaz je nazelenit, tak to rozbiješ, protože tu APP logiku rozbiješ.
Situaci, kdy se používá mix přístupů výše jsem už komentoval.

69
Vývoj / Re:Rada při návrhu db tabulek
« kdy: 30. 06. 2021, 01:10:28 »
Citace
V 1 mohu mít taky dost logiky v DB a používat custom SQL dotazy,
To jde a zpravidla se to tak dělá. Ale to má své velké problémy. Co když chci udělat jako "custom SQL dotaz" update dané vlastnosti, která ovšem je "ztrigerovaná" nikoli v DB, ale v APP? Nebo co když chci jen udělat custom select podle dané vlastnosti, ale ta je ve skutečnosti na APP vrstvě nějak předefinována?

V případě malého projektu, kde se lidé "osobně domluví co bude kde", tak to jde nějak udržet. Ale s  růstem projektu se je podle mne třeba dohodnout, na které úrovni funguje bussines logika - jestli na APP nebo na DB vrstvě, a respektovat to. Lezení pod tuto dohodnutou úroveň je pak "ugly hack". Tzn. jakmile mám nějakou část logiky v APP, tak bych neměl jen tak "mírnix týrnix" lézt bokem do databáze.

Ne, že by takovou app (kde se bokem leze) nešlo "ukočírovat" - jde to, a asi nemálo lidí to tak dělá. Ale s příbývající komplexitou se pak člověk nevyhne dublování funkcionality na APP a na DB vrstvě - a i s tím spojenými chybami, když se ty implementace "rozjedou" (anebo prostě nejsou napsány 100% shodně).

70
Vývoj / Re:Rada při návrhu db tabulek
« kdy: 29. 06. 2021, 12:23:58 »
Jak to tady čtu, tak se mi zdá, že pojem ORM je přetížený. Může mít podle různých diskutujících dva dosti odlišné významy:

1) "Full ORM" - něco, co umožní existující "programming language" objekty uložit transparentně do databáze. V tomto případě je bussines logika v aplikaci, DB je storage.

2) "query builder" - něco, co umí "databázové objekty" nějakým způsobem "hezky" zpřístupnit v aplikaci. Bussines logika je tady v DB

To jsou dva naprosto odlišné přístupy, ač základ "ORM" je u nich stejný: bijekce mezi "objekty v DB" a v aplikační vrstvě. A každý má své problémy.

U 1 jsou vešekré problémy s tím, že pokud nestačí výkon ORM a dělají se např. dávkové updaty, obchází se bussines logika. 2 je použitelné, ale zas logikou v DB spousta lidí neumí pracovat a tedy je to finančně drahé (alespoň pro některé typy projektů).

Další věc je, že málokdy je to řešení čistě 1 nebo čistě 2. To právě vede k tomu směšování význam těch dvou povahou dosti odlišných ORM. A je pravda, že to částečně řeší problémy zmíněné výše, ale vzniklá schizofrenie je snad ještě větší problém: v jednu chvíli člověk tvrdě narazí na to, že nejde udělat tlustá čára mezi logikou v APP a v DB - a z toho plyne nemožnost něco dělat efektivně, vyšší riziko chyb atd. atd.

71
Vývoj / Re:Rada při návrhu db tabulek
« kdy: 26. 06. 2021, 20:59:05 »
BoneFlute:
Je trivka? Potkal jsem se s tím, že jeden dotaz jsem napsal asi deseti způsoby - unionem vevnitř, unionem venku, pomocí OR, pomocí materializované CTE, jednou byla podmínka tady, jednou ekvivalentní ale jiná tam, jednou se použilo DISTINCT ON, jednou radši window funkce, jednou GROUP BY atd. atd.... Moc si nedokážu představit, jak by takové hinty vypadaly....

 Moc nevěřím, že by šel napsat ORM tak, aby opravdu uměl uživatelsky pochopitelně  pokrejt a generovat opravdu všechny možnosti vyjádření toho samého dotazu, a přitom byl pořád jednoduchej a elegantní. Věřil bych, že jde napsat něco, co pokreje většinu běžně používanejch technik, ale že by opravdu obsáhnul 100% vyjadřovacích schopností SQL bych byl dosti skeptickej.
Co si dokážu představit je query builder, který to zvládne, a kterým nakrmím nějaký ORM. Ale nikoli něco, co mne od SQL odstíní. Ale třeba se pletu...

72
Vývoj / Re:Rada při návrhu db tabulek
« kdy: 25. 06. 2021, 15:18:02 »
Citace
Vývoj aplikací vaším způsobem jsem byl nucen dělat roky a vracet se k tomu nechci ani myšlenkou.
Ale já přeci nechci, abys to vyvíjel po mém. Já se Tě ptám, jak takováto data uložíš po svém. Teda jaký přístup použiješ v NoSQL databázích, které tu hájíš jako "jediný správný způsob".

Ten příklad totiž přesně ukazuje, že stromová struktura má své limity, a že některá data do ní nejde dostat tak, aby byly univerzálně použitelné. Což znamená v případě, kdy existuje dobré stromové zjednodušení, práci při analýze navíc, a v případě kdy neexistuje, horší výkon výsledného řešení (anebo nějakou formu denormalizace a duplikace dat navíc, což přidělá práci).Což bys pochopil, kdybys místo výmluv tu výzvu vzal a nad řešením se zamyslel. Takto mám pocit, že se snažíš odpovědi vyhnout, protože nevíš, jak bys rozumně odpověděl.

Btw. - ne, určitě si nevyvíjel věci po mém. Zaprve neexistuje "po mém" - já narozdíl od Tebe netvrdím, že existuje "jeden správný způsob". A zadruhé, kdybys opravdu dělal skutečný (nazvěme to třeba) SQL-vývoj, tak bys věděl některé věci (např. o PL/SQL), které jsi evidentně nevěděl. Působíš na mne, jako by Tě v nějaké firmě nutili dělat v SQL, aniž by Tě naučili alespoň základní věci kolem něj - a že jsi z toho byl (vcelku oprávněně) frustrovanej - a tak je pro tebe cokoli, co Tě od SQL odstíní (ORM, NoSQl,....) "výhra". To ale není chyba SQL, ale chyba té firmy, kdes dělal....



Citace
Ví, který záznam v kterém formátu ukládá a naopak čte, podle toho rekonstruuje doménový model v paměti. Mimoto si sama řeší kontrolu dat a konzistenci (to musí bez ohledu na DB), takže p*cat se s tím ještě v DB netřeba. Jakékoliv změny tedy znamenají zapracování práce s novým formátem do doménového modelu
A po takových deseti změnách formátu je z databáze i kódu guláš, kdy v db jsou uloženy záznamy v deseti verzích, z kódu je nečitelný guláš počítající s deseti různými formáty záznamu, a nedej bože, jestli je třeba udělat větší refaktoring struktury, pak mám polovinu záznamů daného typu támdle (např. předměty pod učitelema) a polovinu úplně jinde (např. "nad učitelema"), což vede k velmi "efektivnímu" čtení takto po databázi "rozsypanejch" dat.

Citace
konzistenci (to musí bez ohledu na DB), takže p*cat se s tím ještě v DB netřeba
Vzhledem k tomu, v jakém stavu jsou často DB, kde se řeší konzistence dat jak na klientu, tak na serveru, tak se obávám, že to je teorie nestřetávající se s realitou. Možná jsi geniální člověk, který nikdy neudělal chybu a druhou kontrolu nepotřebuje. Pak se ovšem smiř s tím, že jsi na světě jediný, a že Tvý kolegové chyby dělat budou. Mraky chyb je i v databázích, kde je doublecheck na klientovi i na serveru. Natož když jednu z nich odstraníš.

Citace
To samé v RDB znamená upravit schéma
A? Schéma "v hlavě" upravit musíš tak jako tak - i v sql i v nosql databázi. A napsat k němu dokumentaci (v NoSQL o to podrobnější, že Ti schází struktura tabulky, která ji částečně může nahradit). Vyplivnout úpravu schématu do SQL kódu je oproti tomu už detail.
Citace
(nedej bože předělávat procedury a ladit je
Zatímco v Tvém řešení musíš upravit procedury tak, aby počítaty se záznamy v starém i novém formátu, v SQL řešení stačí je upravit pouze na nový formát. To je jednodušší úkol, nikoli složitější. Že ve svém řešení nemáš prodcedury? Ale máš. Akorát je máš nikoli v DB, ale na klientovi, což je - pokud umíš pracovat s DB - vlastně úplně jedno. Viz např.
https://www.pgadmin.org/docs/pgadmin4/development/debugger.html






Kit:
Citace
Samozřejmě nejprve udělám selekci i projekci, abych dostal jen ta data, která potřebuji.
Ale to je problém slepice nebo vejce. Těžko uděláš projekci a selekci, když neznáš strukturu a nevíš, co a jak projektovat a strukturovat.

Jako jo, není výjimka, že se nějaké "listové atributy" (tam, kde se dají data aspoň nějak zestromovatět) ukládají v RDBS např. do JSONu a tam pak je Tvůj postup dobře použitelný, ale IMHO to rozhodně není univerzální model na to, jak pracovat s daty v nějaké aplikaci.

73
Vývoj / Re:Rada při návrhu db tabulek
« kdy: 25. 06. 2021, 14:19:20 »
SB:
To si asi nerozumíme. Ale když nenapíšeš v čem, tak to působí, že si radši ani rozumět nechceš :-)
Vezmu stejný příklad jako jsem psal: učitele a předměty ve škole. V SQL to namodeluju jednoduše a existuje pouze jeden způsob, který dodržuje pravidla: tabulka učitelů, tabulka předmětů, a vazební tabulka X učí Y.
Jak toto namodeluješ v dokumentové databázi? Jako kolekci učitelů, kde každej bude mít pod sebou seznam "učených předmětů"? Jako kolekci předmětů, kde každej bude mít pod sebou seznam učitelů, co je učí? Nebo jako dvě nezávislé kolekce, kde v každém prvku každé kolekce bude seznam odkazů na prvky té druhé kolekce (X učí Y a Y je učen X)?  Nebo jinak?
Jaké konkrétní řešení zvolíš a proč? A je Tebou zvolené řešení jediné "správné", nebo bys jindy volil jiné?

 
Citace
Kit měl asi na mysli PL/SQL
To IMHO neměl. Navíc se pleteš. Jednak PL/SQL i PL/PgSQL např. jak struktury, tak seznamy umí, viz např.
https://docs.oracle.com/cd/A84870_01/doc/java.816/a81354/oraoot2.htm
https://www.oracletutorial.com/plsql-tutorial/plsql-varray/
jednak např. v Postgresu klidně můžeš psát stored procedures třeba v Pythonuhttps://www.postgresql.org/docs/9.0/plpython.html
Citace
jakákoliv práce se seznamy znamená opakované čtení dat z tabulek.
Což jednak není pravda (viz výš), jednak (např. díky temporary tables atd...) ani opakovaný select vybraných dat nemusí být žádný problém.

Ty furt cpeš SQL do pozice jednoduchého jazyka na primitivní selekty, jako znáš z dokumentovejch databází. Čím více osekáš SQL (a návazné technologie), tím to samozřejmě líp zapouzdříš do nějakého ORM, aniž by to bylo omezující. To je sice jeden z možných usecase pro SQL (kde jsou případy, kdy tento přístup bude lepší než NoSQL - kvůli univerzálnějšímu způsobu uložení dat a s tím spojenou schopností DB optimalizovat plány a číst data z DB efektivně - ovšem také případy, kdy bude NoSQL podstatně lepší volba) - ale zbytečně tím házíš mnoho z možností, které SQL nabízí, do kanálu.




Miroslav:To bych podepsal. A ještě bych přidal, že bohužel dosti často majitelé Audi haněj letadla, že je to neflexibilní řešení, a Ti co létají haněj Audi, že jsou drahé. A to zpravidla Ti, co třeba nikdy tím letadlem neletěly, takže nevidí jeho výhody a jen nevýhody - a naopak.

74
Vývoj / Re:Rada při návrhu db tabulek
« kdy: 25. 06. 2021, 13:01:01 »
Jasně, ale i insertovací pohledy a pohledy vůbec je věc, kterou používá (a teda i umí efektivně použít) jen malá část lidí. Ale jinak samozřejmě, to jsou nástroje, kterejma se v SQL dají krásně zastřít změny DB, což je jedna z výhod SQL řešení.

Citace
a teprve v aplikaci hledám, jak ji mám zpracovat.
Možná nerozumím tomu, jak to myslíš, ale nedokážu si představit, jak z velký databáze tímto způsobem dostaneš hledaná data efektivně. Když se zase vrátím k tomu příkladu s předměty a učitely, kde můžu mít jak kolekci učitelů, kde každej má pod sebou předměty, nebo kolekci předmětů, kde každej má pod sebou učitele, tak si nedokážu představit, jak bez znalosti konkrétní struktury z toho vytáhnout např. seznam (unikátních) předmětů, aniž bych např. zkoušel obě možnosti (což znamená vydličky v kódu), nebo stáhnul "celou db" a pak to v ní "naslepo" (oni třeba ty předměty mohou být pověšeny ještě pod třídama atd....) hledal objekty typu předmět.

75
Vývoj / Re:Rada při návrhu db tabulek
« kdy: 25. 06. 2021, 11:53:57 »
Jo, nacpat co nejvíce bussines logiky do DB je hodně dobrá cesta. Pak se dá samozřejmě dá měnit databázi aplikaci "pod rukama", aniž by si ta vůbec všimla. Ale to už jsme hodně daleko od NoSQL databází, a taky to vyžaduje člověka, co něco umí - pro "běžnýho prací prášek" jsou stored procedure sprostý slovo.

Traversování stromu popř. nějaké wildcardy v XPath věc řeší, ale to je IMHO spíše na jednorázové zpracovávání dat (importy a podobně). Nedokážu si představit (rozumně výkonnou) aplikačku s nějak rozumně velkou databází, která nespoléhá na pevné umístění dat, ale každou entitu hledá kdekoli v stromové struktuře. Zas jsme u toho, že každej postup se hodí někde...

Stran: 1 ... 3 4 [5] 6 7 ... 68