IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Alesh
Tvůrce
Avatar
Alesh:11.9.2020 22:32

Jsem samouk, v podstatě trochu programovat jsem se naučil až tady na stránkách a to v Javě a C#. Zajímalo by mě, jak se řeší určité věci, o které bych se chtěl do budoucna pokusit.

Zkusil jsem: Není, co zkoušet, musí poradit zkušenější. ;-)

Chci docílit:

  1. Už jsem došel k výpisu do XML souboru a čtení z něj (serializace resp. deserializace). V ukázkových příkladech se vypisuje do souboru jen jeden typ objektu. Jak ale řešit situaci, kdy do něj potřebuji nacpat ještě nějakou "hlavičku"? Prostě měl bych třeba nějakou objednávku, v ní položky. Položka by byl objekt s x atributy, položky pak dám do nějaké kolekce a tu do souboru vypíše a pak ji s něj i načtu, to umím, to je jasný. Jenže já bych tam chtěl mít ještě jakousi "hlavičku", pro případ objednávky by to byly údaje o celé té objednávce (datum, číslo atd.)
  2. Pak by mě zajímalo, když bych měl nějakou aplikaci s různými typy uživatelů, pro jednoduchost mějme jen "admin" a "uživatel". Admin spravuje uživatele, zakládá je, maže atd. Ale kdo spravuje adminy?
Editováno 11.9.2020 22:33
 
Odpovědět
11.9.2020 22:32
Avatar
Odpovídá na Alesh
Michael Škrášek:11.9.2020 22:55

Zkusim předat svůj názor:

  1. Nic nebrání tomu, abys měl objekt (př. Objednávka), který bude obsahovat další objekty (jako Hlavička, Položky atd ...) a pak serializovat celý objekt Objednávka.
  2. Můžeš tam mít superuživatele, třeba každá MySQL databáze má uživatel root, který má přístup ke všemu (administrace uživatelů ...)
Nahoru Odpovědět
11.9.2020 22:55
"I choose a lazy person to do a hard job. Because that person will find an easy way to do it. " Bill Gates
Avatar
Alesh
Tvůrce
Avatar
Odpovídá na Michael Škrášek
Alesh:11.9.2020 23:11

ad 1) jo, to bude asi řešení, jen si neumím představit, tu strukturu toho XML, i když na druhou stranu mě to trápit nemusí, když to bude fungovat serializace/de­serializace, takže asi tak. ;-)
ad 2) jo, to mě taky napadlo, předpokládám, že tento superadmin je je jeden. A fyzicky to může být víc osob, které se mění v čase bez toho, aniž by se vytvářel nový superadmin, protože neexistuje typ uživatele, který by superadmina mohl vytvořit, protože superadmin je ten nejvyšší. Pokud je to tak, jak se to řeší prakticky, ten superadmin se přihlašuje nějakým heslem a to je někde uloženo v trezoru na papírku, když náhodou ten aktuální superadmin "zemře"? Rozumíš, jak to myslím?

 
Nahoru Odpovědět
11.9.2020 23:11
Avatar
Tadeáš Burda
Brigádník
Avatar
Odpovídá na Alesh
Tadeáš Burda :12.9.2020 7:43

Skusim sa pridat aj ja :-P
1: To bych asi uz neriesil cez XML aby to nebylo tak sprasene, ale z databazu. Napr ta tvoja objednavka by byla v jednej tabulke a byla by vazana na objekty v druhej tabulke ktere by reprezentovali ty produkty. Potom by sis nasel tu 1 objednavku a nechal v kolekcii vypisat vsetky jej produkty. Obejdenavka by mnela v sebe vsetky tie atributy a vlastnosti + by si byla vazana na konkretne produkty
2: Ak ta chapem spravne tak ti ide oto aby si mnel v appke uzivatelu z urcitima pravomocama, nato sa pobuziva v .NET Identity Roles. Ucti su vsetky rovnake ale ne kazdy ucet moze mnet niaku priradenu rolu. Takze ti jak programator/ super admin si vitvoris prvi ucet a priradis si rolu pomenovanu superadmin :-P Pototom v tej tvojej appke mozes nad urcitima metodam, triedama, pages a pod nastavit kto do moze pouzivat, tjs role. No a napr na registorvani uzivatelu nastavis ze to moze robit len superadmin. Potom mozes nastavit pro superadmina napr to ze on priraduje role k uctom, vytvara nove role a tak. Dam ti nato odkaze, kukni to mozno ti to povi vic: odkaz na db vazby a identiy roles

 
Nahoru Odpovědět
12.9.2020 7:43
Avatar
Alesh
Tvůrce
Avatar
Odpovídá na Tadeáš Burda
Alesh:12.9.2020 10:22

Ad 1) ano, toto mě taky napadlo, jenže ono se nejedná o objednávky, pouze jsem to použil jako příklad struktury, a pro tento konkrétní případ, pro který to potřebuji, to potřebuji mít řešené tak, že uživatel bude mít k dispozici formulář, něco si tak nakliká a pak by měl mít možnost si práci sám pro sebe uložit k sobě na disk a pak případně opět ze svého disku načíst. Podle mě to tedy bude ukládáno do nějakého souboru, jiná možnost asi není, ne?
Ad 2) Já nevím, jestli tě chápu a jestli ty chápeš mě. :-) Prostě někdo je v daný okamžik ten superadmin (který je jen jeden) a jak se zajistí to, že když "umře", že tu jeho roli může někdo převzít.

 
Nahoru Odpovědět
12.9.2020 10:22
Avatar
Tadeáš Burda
Brigádník
Avatar
Odpovídá na Alesh
Tadeáš Burda :12.9.2020 13:38

1- db mozes mnet aj useba na disku, 2 - no tak to sa nechapeme :-D

 
Nahoru Odpovědět
12.9.2020 13:38
Avatar
Alesh
Tvůrce
Avatar
Odpovídá na Tadeáš Burda
Alesh:12.9.2020 17:05

Jasně, ale to bys musel iniciovat její vytvoření při prvním uložení ze strany uživatele. Já vím, že v C# se dá vytvořit jakýsi soubor, co funguje jako db, ale to už zas je podle mě komplikovaná konstrukce, protože v podstatě i třeba z důvodu sdílení, bys pro každý save, bys vytvářel nový db soubor. Takhle, i přes mojí chabou znalost mi přijde, že by se to mělo exportovat a importovat z nějakého "txt" souboru.

 
Nahoru Odpovědět
12.9.2020 17:05
Avatar
David Vlček
Člen
Avatar
Odpovídá na Alesh
David Vlček:22.10.2020 10:13

Ahoj.
k té 1. - nevím oč jde, že máš problém s XML, ale napadá mě teda že například nechceš aby do souboru mohl někdo nahlížet, pročto neukládat jako binární soubor? Pukud tam budeš mít ve formuláři nějaký klikátka a combo boxy, tak velikosti jsou jasně dané, pokud tam uživatel vypisuje nějaký tex, nastav pevnou délu řetězce třeba na 1000 znaků. Potom si nastavíš přesnou strukturu načítání a ukládání a máš vyřešeno.
k té 2. - no nevím co se ti na superuser účtu nezdá. pokud ztratíš heslo, můžeš to vyřešit obnovou emailem, ta hesla se někde ukládají, většinou asi právě v db jako hash, ale já to třeba řeším hashem v binárce, na projektu na kterém teď dělám. Pokud obnova emailem, nebo nějakým externím nástrojem, neexistuje, tak potom jedině čistá instalace aplikace :) Jako největší hloupost mi přijde přihlášení napsat natvrdo do aplikace, ale mohl bys to tak udělat, pokud aplikaci budeš distribuovat, nakódit si svůj superúčet přímo do aplikace, někde skrytě, třeba nějaký klikátko na obrazovce about, kam nikdo normálně nechodí, a když bude potřeba vytvořit nového admina, tak přes toto. Heslo můžeš mít ty, a další kdo kdo to bude spravovat a zajišťovat podporu, Takové heslo potom nikdy neztratíš, protože ho máš napsané ve zdrojáku :) Určitě by se dalo vymyslet víc možností, ale už by to byly asi nesmysly.

Nahoru Odpovědět
22.10.2020 10:13
Nevěřím, že každý dokáže všechno co chce. Věřím ale, že by to měl zkusit.
Avatar
Alesh
Tvůrce
Avatar
Odpovídá na David Vlček
Alesh:22.10.2020 11:12

ad 1) Nemám problém s XML, jen jsem v první chvíli nepochopil, že by to šlo udělat tak, jak navrhuje kolega v první reakci v tomto vlákně. Binární soubor nepotřebuji, svým způsobem mi vyhovuje, když to bude "záložně" čitelné v textovém editoru.
ad 2) Ale jo, nemám problém se superuserem, jen mi není jasné, jak s ním pracovat. Asi to popisuji blbě, tak to zkusím ještě jednou. Mám tři typy uživatelů - běžný uživatel (editor - doplňuje údaje do tabulky), admin (zpracovává doplněné údaje, nahrává nová data apod.) a pak je nějaký ten superadmin (vytváří adminy apod.). Tenhle konkrétní případ, co popisuju, je jen Excelová tabulka + VBA, uživatelé a admini hesla nepotřebují, protože se identifikují pomocí uživatelského jména, kterým se přihlašují do PC, které mají přidělené a rozhodně ho nemůžou měnit, čili pro tento účel zabezpečení víc než dostatečné. Pak tu jsem já, jako ten superadmin. Já samozřejmě mám heslo k tomu VBA kódu (což samozřejmě není nic neprolomitelného, ale o to až tak nejde). A ten můj dotaz je, kdybych prostě "umřel", tak jak udělat to, aby mohl být vytvořen nový superadmin, bez mého zásahu. Jak se to jako principiálně řeší?

 
Nahoru Odpovědět
22.10.2020 11:12
Avatar
David Vlček
Člen
Avatar
Odpovídá na Alesh
David Vlček:22.10.2020 15:07

aha, takže se bude přihlašovat tím jaký firemní účet je přihlášený, chápu to dobře? Tak potom bych se nebál, ke každému účtu má přístup IT firmy, a ti heslo nepotřebují, mají tedy přístup i k tobě jako superuserovy.

Nahoru Odpovědět
22.10.2020 15:07
Nevěřím, že každý dokáže všechno co chce. Věřím ale, že by to měl zkusit.
Avatar
Alesh
Tvůrce
Avatar
Odpovídá na David Vlček
Alesh:22.10.2020 15:30

Asi jsem neměl uvádět ten konkrétní případ, protože takhle to řešit nejde. Moje Excel aplikace, která řeší jen jakýsi "malý lokální problém" je zcela mimo rozlišovací schopnost IT firmy. Ta dá uživatelům přístupové jméno a tím to ve vztahu k mé aplikaci končí. V mé aplikaci pak uživatel "Alesh" je superadmin a v tuto chvíli jsem jediný a de facto není důvod, ani moc možnost mít dalšího superadmina. Já furt nechápu, resp. nevím, jak se řeší ta situaci, kdy ten jediný superadmin "zemře". Jako kdo nastaví toho nového, jak se tato úloha obecně řeší.

 
Nahoru Odpovědět
22.10.2020 15:30
Avatar
Bugmaster
Člen
Avatar
Odpovídá na Alesh
Bugmaster:22.10.2020 21:08

Máš nevhodný axiom "superadmin může být je jeden".

To jako proč?

Co mám zkušenost, tak obvykle funguje nějaká variace tohoto:

  • Uživatel - nějaký základní práva
  • Admin - může dělat nějaký akce, který uživatel nemůže. Nemůže ale vytvářet další adminy.
  • Superadmin - může vytvářet a rušit další adminy i superadminy.
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
22.10.2020 21:08
Avatar
Alesh
Tvůrce
Avatar
Odpovídá na Bugmaster
Alesh:22.10.2020 21:32

Ok, rozumím, tohle mi dává hlavu a patu. ;-)

 
Nahoru Odpovědět
22.10.2020 21:32
Avatar
David Vlček
Člen
Avatar
Odpovídá na Alesh
David Vlček:28.10.2020 11:33

Promiň, asi ti nedokážu pomoct.

Nahoru Odpovědět
28.10.2020 11:33
Nevěřím, že každý dokáže všechno co chce. Věřím ale, že by to měl zkusit.
Avatar
Alesh
Tvůrce
Avatar
Odpovídá na David Vlček
Alesh:28.10.2020 12:02

To nevadí, už poradil kolega. :-)

 
Nahoru Odpovědět
28.10.2020 12:02
Avatar
Alesh
Tvůrce
Avatar
Alesh:8.11.2020 18:08

Ještě bych měl jeden nový dotaz. Pokud chci udělat vícejazyčnou aplikaci, tak to se dělá jak? Konkrétně mi jde především o přepínání textů v WPF aplikaci (popisy tlačítek či jiných prvků, error zprávy atd.). Je tu někde o tom článek, třeba i v jiném programovacím jazyce, jde mi o pochopení principů a nerad bych znovu vynalézal kolo, protože by bylo určitě hranatý. :-)

 
Nahoru Odpovědět
8.11.2020 18:08
Avatar
Karel Stehlík:16.11.2020 7:02

Vedle C# jsi uváděl i Javu a tam je to, alespoň v Android Studiu, extrémně jednoduché. Na práci s texty se u projektu vytvoří soubor strings.xml, který se nachází v res/values. Do tohoto souboru se pak ukládají veškeré texty jednotlivých komponent, které nejsou napsány "na tvrdo", čemuž se AS brání zobrazením warningu a snahou donutit programátora, uložit řetězec právě do strings.mxl, což je snadné a AS tě navede.
Pak stačí s použitím strings.xml napsat celou aplikaci a soubor strings rozkopírovat do adresáře values se speciálním příznakem pro konkrétní prostředí (tedy values-cs pro češtinu, values-en pro angličtinu, values-de pro němčinu atd.) a v těchto nových souborech jen přeložíš řetězce do zvoleného jazyka. Samotná složka values bude obsahovat soubor strings.xml defaultního jazyka.

Zde je pár tipů:
tady
tady
nebo tady

Funguje to parádně a na google toho najdeš tuny... :)

 
Nahoru Odpovědět
16.11.2020 7:02
Avatar
Alesh
Tvůrce
Avatar
Odpovídá na Karel Stehlík
Alesh:20.11.2020 23:26

Díky, předpokládám, že to ale není obecné řešení, resp. nevím, jak by se dalo implementovat třeba do C#. Prostě potřebuji spíš obecný princip.

 
Nahoru Odpovědět
20.11.2020 23:26
Avatar
Alesh
Tvůrce
Avatar
Alesh:20.11.2020 23:43

A ještě jeden dotaz bych měl. Pokud v databázi potřebuji uložit řadu informací různého typu, které spolu nijak nesouvisí, a zároveň u každého údaje potřebuji jen jednu hodnotu, která se pouze přepisuje, tak to se řeší jak?

 
Nahoru Odpovědět
20.11.2020 23:43
Avatar
Bugmaster
Člen
Avatar
Odpovídá na Alesh
Bugmaster:21.11.2020 0:22

Smím-li se zeptat; co se snažíš vyřešit?

 
Nahoru Odpovědět
21.11.2020 0:22
Avatar
Alesh
Tvůrce
Avatar
Odpovídá na Bugmaster
Alesh:21.11.2020 0:56

Jo, asi vymejšlím kraviny, ale přeci i taková věc může nastat, ne? :-) Řekněme, že se jedná např. o jakési datum platnosti všech dat v té databázi. Nebo bych třeba chtěl mít uloženou návštěvnost (jedno jediné číslo, které se pouze inkrementuje). To pro každou takovou jednotlivou položku by se měla udělat vlastní tabulka s jediným záznamem, který se aktualizuje?

 
Nahoru Odpovědět
21.11.2020 0:56
Avatar
Bugmaster
Člen
Avatar
Odpovídá na Alesh
Bugmaster:22.11.2020 16:26

Já jsem se neptal proto, že bych si myslel, že řešíš kraviny. Jen typicky je třeba znát kontext. Cest k cíli často vede více.

Ad platnost dat:
To si moc neumím představit. Zatím vždy jsem se setkal spíš s platností pro jednotlivé záznamy (jako např.: tenhle záznam ceníku platí pro tohle období).

Ad návštěvnost:
Pokud jde o návštěvnost webový stránky, tak bych se to nesnažil řešit vlastními prostředky. Spíš bych nasadil nějaký Google Analytics (jestli to ještě existuje stále se to tak jmenuje) nebo něco podobného.
Pokud to chceš řešit vlastními prostředky, tak záleží jak podrobný chceš míš data.

  1. Úplně to nejjednodušší řešení je to, co navrhuješ - mít tabulku s intovýnm polem návštěvnost, který UPDATem navyšuješ.
  2. O něco podrobnější může být řešení, kde máš tabulku, ve který počítaš návštěvnost za jednotlivý dny (primární klíč by tam bylo datum).
  3. Asi nejkomplexnější je ke každému requestu na stránku skladovat informace jako: z jaké IP a kdy přišel, user agent, requsetovaná URL a ideálně nějaký session id (aby se dala rozlišit návštěva od zobrazení). Tyhle data pak můžeš dálě nějak zpracovávat a vydolovat si, co tě nepadne. Tohle je ale to, co dělá právě Google Analytics...

Teorericky můžeš vytvořit tabulku, kde se dvouma sloupečkama pro klíč a hodnotu (sloupecek s klicem by pak byl zaroven prim. key). Tomuhle řešení bych se ale snažil vyhnout. Vidím na tom dva problémy:

  1. Hodnota bude muset být zřejmě nějaký varchar. Tím se tam můžou dostat nevalidní data (string na místě, kde očekáváš int apod).
  2. Podkopová to logiku relačních databází. Moje zkušenost je taková, že vždycky je nevhodný používat sw jinak, než pro co byl navržen.
 
Nahoru Odpovědět
22.11.2020 16:26
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 22 zpráv z 22.