<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl">
	<id>https://jak.mazovia.edu.pl/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=IvanPearse05165</id>
	<title>Mazovia - Wkład użytkownika [pl]</title>
	<link rel="self" type="application/atom+xml" href="https://jak.mazovia.edu.pl/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=IvanPearse05165"/>
	<link rel="alternate" type="text/html" href="https://jak.mazovia.edu.pl/index.php/Specjalna:Wk%C5%82ad/IvanPearse05165"/>
	<updated>2026-10-14T15:42:16Z</updated>
	<subtitle>Wkład użytkownika</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://jak.mazovia.edu.pl/index.php?title=%C4%8Cist%C3%BD_k%C3%B3d_v_JavaScriptu:_m%C3%A9n%C4%9B_chyb_d%C3%ADky_mal%C3%BDm_funkc%C3%ADm&amp;diff=1040395</id>
		<title>Čistý kód v JavaScriptu: méně chyb díky malým funkcím</title>
		<link rel="alternate" type="text/html" href="https://jak.mazovia.edu.pl/index.php?title=%C4%8Cist%C3%BD_k%C3%B3d_v_JavaScriptu:_m%C3%A9n%C4%9B_chyb_d%C3%ADky_mal%C3%BDm_funkc%C3%ADm&amp;diff=1040395"/>
		<updated>2026-10-11T19:13:01Z</updated>

		<summary type="html">&lt;p&gt;IvanPearse05165: Utworzono nową stronę &amp;quot;Kontrakty místo kopírování scénář&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Měníte zadání každý týden a vaše testovací pyramida se rozpadá? Nejčastější chybou je držet se u strmých pyramid s důrazem na unit testy, které jsou příliš [http://madk-auto.ru/user/grzegorzwojcik17/ úložné prostory v malém bytě]ázané na implementaci. Jakmile se změní požadavek, přepisujete stovky testů a ztrácíte čas. Řešení není v zahazování testů, ale v přesunu těžišt…&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Kontrakty místo kopírování scénář&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Měníte zadání každý týden a vaše testovací pyramida se rozpadá? Nejčastější chybou je držet se u strmých pyramid s důrazem na unit testy, které jsou příliš [http://madk-auto.ru/user/grzegorzwojcik17/ úložné prostory v malém bytě]ázané na implementaci. Jakmile se změní požadavek, přepisujete stovky testů a ztrácíte čas. Řešení není v zahazování testů, ale v přesunu těžiště.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Uložení klíče patří do transakce spolu s vlastní operací. Pokud nejdřív zapíšete výsledek a pak klíč, může selhat zápis klíče a při opakování vznikne duplicita. Vhodné je použít databázi s unikátním indexem na kombinaci klíče a uživatele. Při souběhu dvou [https://www.biggerpockets.com/search?utf8=%E2%9C%93&amp;amp;term=po%C5%BEadavk%C5%AF požadavků] se stejným klíčem jeden zápis uspěje a druhý dostane konflikt. Tento konflikt se nemá vracet jako chyba 500, ale jako 409 nebo 200 s původním výsledkem. Doba platnosti klíče má být omezená, obvykle hodiny až dny. Příliš krátká expirace dovolí duplicitu později, příliš dlouhá zbytečně plýtvá místem.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Začněte pojmenováním. Proměnná data neříká nic, seznamUzivatelu říká všechno. Funkce process() nutí čtenáře otevřít tělo funkce, vypocitejSlevu() ho pustí dál. Platí přitom jedno pravidlo: pokud název potřebuje komentář, je název špatný. Komentáře mají vysvětlovat proč, ne co. Když vidíte // zvyšujeme o jedna nad i++, komentář jen opakuje kód a [https://adamwisniewski34.bravejournal.net/jak-testovat-chybove-stavy-a-hranicni-hodnoty-u-vstupnich-dat rekonstrukce koupelny krok za krokem] měsíc bude lhát.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Čistý kód v JavaScriptu není o estetice, ale o tom, aby se v něm dalo rychle najít problém a bezpečně měnit chování. Největší zdroj zmatku bývají funkce, které dělají př[https://www.modernmom.com/?s=%C3%ADli%C5%A1%20mnoho íliš mnoho] věcí najednou. Pokud funkce načítá data, upravuje je, zapisuje do globálního stavu a ještě mění DOM, každá změna je riskantní. Rozdělte ji na menší celky, z nichž každý má jednu odpovědnost. Konkrétně: pojmenujte funkci podle toho, co vrací nebo jaký stav vytváří, a pokud název obsahuje spojku „a&amp;quot; (například „nactiAUprav&amp;quot;), je to  rozdělení.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Kde konkrétně ubrat a kde přidat Zaměřte se na testy chování, ne na testy metod. Napište testy, které volají veřejné rozhraní a kontrolují výstup, nikoli vnitřní volání. Tím se vážete na kontrakt, který se mění pomaleji než implementace. Dále zaveďte testovací datové továrny nebo fixtury, které umožní snadno měnit vstupy bez přepisování celých testů. Vyhněte se mockování všeho – přílišné mocky vytvářejí křehké testy, které se rozbijí při každé změně.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Nakonec měřte dobu, kterou trávíte opravou testů po změně. Pokud přesahuje 20 % času vývoje, pyramida je špatně nastavená. Cílem není mít nejvíce testů, ale mít testy, které vydrží změny a přesto odhalí regrese. Přesuňte těžiště do středu pyramidy a udržujte ji plochou.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Pojmenování a předvídatelnost Názvy proměnných a funkcí mají odpovídat tomu, co drží. Vyhněte se zkratkám jako `tmp`, `data2` nebo `x`, pokud nejde o krátký matematický výraz. U booleanů používejte předpony `je`, `ma`, `muze` — čtenář pak nemusí dohledávat, co znamená `true`. Stejně tak se vyhněte „magickým&amp;quot; hodnotám. Číslo 7 v podmínce nic neříká; konstanta `MAX_POKUSU = 7` řekne vše. Když se hodnota použí[https://sub.elfejewelry.com:443/index.php?jepsenkyed562270 úložné prostory v malém bytě]á na více místech, patří do jedné konstanty, jinak při změně zapomenete na jednu z kopií.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Druhým častým problémem je míchání úrovní abstrakce. Na jedné řádce voláte databázi, o pár řádků níže řešíte formátování data a za tím vším se skrývá ruční práce s polem. Držte jednu úroveň: buď funkce skládá jiné funkce, nebo pracuje s konkrétními hodnotami. Pomůže pojmenovávat mezivýsledky. Místo vnořeného výrazu s pěti tečkami si vytvořte proměnnou `aktivniUzivatele` a teprve tu dál zpracujte. Kód se tím prodlouží o dva řádky, ale zkrátí se doba hledání chyby.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Nezapomínejte na chybové stavy. Kód, který předpokládá, že všechno projde, je křehký. Místo tichého `undefined` použijte raný návrat nebo vyhození chyby s jasnou zprávou. Kontrolujte vstupy na začátku funkce, ne uprostřed. Tím se hlavní logika odsadí a čte se jako příběh. Zároveň se vyhněte hlubokému vnořování podmínek; častěji pomůže obrácená podmínka a návrat.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Základem je rozdělit testy podle toho, co ověřují, ne podle vrstvy. Místo poměru 70/20/10 začněte s 30 % unit testů, 50 % integračních a 20 % end-to-end. Unit testy pište jen pro čistou logiku, která se nemění – výpočty, validace, transformace dat. Integrační testy na úrovni API nebo služeb pokryjí interakce mezi komponentami, které se sice mění, ale jejich rozhraní zůstává stabilní. End-to-end testy používejte pouze pro kritické scénáře, které se mění zřídka.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Dále si hlídejte mutace. JavaScript dovoluje měnit objekty předávané do funkcí, což snadno vede k nečekaným vedlejším efektům. Pokud funkce nemá měnit vstup, pracujte s kopií nebo použijte čistý přístup, kdy funkce vrátí novou hodnotu a původní nechá být. U polí a objektů se vyhněte přímému zápisu do parametru, pokud to není záměr.Čistý kód také znamená, že se funkce chová stejně při stejném vstupu, bez ohledu na pořadí volání.&lt;/div&gt;</summary>
		<author><name>IvanPearse05165</name></author>
	</entry>
	<entry>
		<id>https://jak.mazovia.edu.pl/index.php?title=5_chyb,_kter%C3%A9_pot%C3%A1p%C4%9Bj%C3%AD_projekty_s_videem&amp;diff=1039951</id>
		<title>5 chyb, které potápějí projekty s videem</title>
		<link rel="alternate" type="text/html" href="https://jak.mazovia.edu.pl/index.php?title=5_chyb,_kter%C3%A9_pot%C3%A1p%C4%9Bj%C3%AD_projekty_s_videem&amp;diff=1039951"/>
		<updated>2026-10-11T19:02:10Z</updated>

		<summary type="html">&lt;p&gt;IvanPearse05165: Utworzono nową stronę &amp;quot;Ukládání tokenu na klientovi je častý zdroj problémů. Prohlížečová aplikace by měla přístupový token držet v paměti a obnovovat ho pomocí refresh tokenu v HttpOnly cookie s atributy Secure a SameSite. Vyhněte se localStorage – je zranitelný vůči XSS. U mobilních aplikací použijte bezpečné úložiště (Keychain, Keystore). Při odhlášení nebo změně hesla nezapomeňte invalidovat refresh token na serveru, i když přístupový token…&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ukládání tokenu na klientovi je častý zdroj problémů. Prohlížečová aplikace by měla přístupový token držet v paměti a obnovovat ho pomocí refresh tokenu v HttpOnly cookie s atributy Secure a SameSite. Vyhněte se localStorage – je zranitelný vůči XSS. U mobilních aplikací použijte bezpečné úložiště (Keychain, Keystore). Při odhlášení nebo změně hesla nezapomeňte invalidovat refresh token na serveru, i když přístupový token still platí do své expirace.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Filtry musí být explicitní a indexovan&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Doba platnosti tokenu má být krátká – řádově minuty až hodiny. Pro delší sezení používejte refresh token, který je uložen bezpečně (HttpOnly cookie, nikoli localStorage) a lze ho jednorázově zneplatnit. Claims jako role nebo oprávnění neberte jako absolutní pravdu, pokud se mohou změnit během platnosti tokenu. Buď je ověřujte proti databázi, nebo zvolte kratší expiraci. Do payloadu nikdy nedávejte citlivé údaje (hesla, rodná čísla, čísla karet) – payload je pouze podepsaný, ne šifrovaný, takže si ho kdokoli přečte.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Offsetové stránkování (?page=5&amp;amp;size=50) je jednoduché na implementaci i pochopení pro klienta. Problém je v tom, že databáze musí nejprve odskočit prvních N řádků a teprve pak vrátit výsledek. U stránky 10 000 to znamená načíst a zahodit statisíce řádků. Další komplikací je nestabilita: pokud mezi dvěma požadavky přibude nebo ubude záznam, klient uvidí duplicity nebo naopak položky přeskočí. Offset se hodí pro malé sady, administrační výpisy nebo tam, kde je potřeba skákat na konkrétní stránku.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;První zásadní chyba je chybějící zadání. Nestačí říct „chceme video na web&amp;quot;. Je nutné napsat, co má divák po zhlédnutí udělat, kde se video přehraje, jestli bude se zvukem, s titulky, nebo bez nich, a jak dlouhé má být. Bez toho se dodavatel i zadavatel rozcházejí v představách. Praktický krok: sepište jednostránkové zadání s cílem, cílovou skupinou, místem nasazení a maximální délkou. Teprve pak se řeší kamera, herci nebo animace.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Nakonec pamatujte, že odhad je predikce, ne slib. Čím více se ho snažíte přesně dodržet, tím větší je riziko, že budete tlačit na kvalitu nebo na lidi. Lepší je mít transparentní plán s jasnými předpoklady a pravidelnou revizí. Pokud se odchylky opakují, hledejte systémovou příčinu – třeba příliš velké úkoly, nedostatek času na analýzu nebo nerealistické tempo. Odhadování se zlepšuje jen praxí a zpětnou vazbou.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Volba open source licence není formalita na konci vývoje. Licence určuje, co smíte s kódem dělat, jak ho můžete kombinovat s jinými komponentami a jaké povinnosti vzniknou tomu, kdo software dále šíří. Pokud se licence řeší až při vydání, často se ukáže, že část kódu nelze použít vůbec, nebo že by projekt musel změnit licenci celý. Kontrola licencí má proběhnout dřív, než do repozitáře přibude první závislost.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;JWT (JSON Web Token) je kompaktní způsob, jak bezstavově ověřovat požadavky na API. Token se skládá ze tří částí oddělených tečkou: hlavičky, payloadu a podpisu. Hlavička určuje algoritmus (např. HS256 nebo RS256), payload nese tzv. claims – obvykle identifikátor uživatele, roli, čas expirace (exp) a případně další metadata. Podpis zajišťuje integritu: pokud se payload změní, podpis přestane platit. Server token při každém požadavku pouze ověří podpisem a zkontroluje expiraci, takže nepotřebuje ukládat session.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Odhadovat čas v softwarových projektech je obtížné, protože vývoj je tvůrčí proces. Přesto existují postupy, které snižují riziko velkých odchylek. Prvním krokem je rozložit práci na malé části – ideálně na úkoly, které zaberou maximálně jeden den. Velké celky jako „napojení na databázi&amp;quot; nebo „návrh architektury&amp;quot; jsou příliš hrubé a jejich odhad bývá nepřesný. Rozkladem získáte lepší představu o jednotlivých činnostech a snáze odhalíte skrytou práci.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Mezi typické chyby patří: absence kontroly exp, nbf a iss, příliš dlouhá platnost, podepisování slabým klíčem, ukládání tokenu do URL (dostane se do logů) a chybějící revokace. Dále opomenutí omezení počtu požadavků na obnovení tokenu nebo nezvládnuté souběžné obnovy. Testujte scénáře, kdy token vyprší, je podepsán jiným klíčem nebo obsahuje pozměněné claims. Bezpečnost stojí na správné konfiguraci knihovny, krátké expiraci a obezřetném zacházení s klíči i s úložištěm na klientovi.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Proč se vyplatí odhadovat v rozsazích, ne v bodech Místo jednoho čísla používejte rozsah – optimistický, realistický a pesimistický. U každého úkolu odhadněte, jak dlouho potrvá, když půjde vše hladce, když narazíte na běžné překážky, a když se objeví vážný problém. Výsledný plán postavte na pesimistickém scénáři, případně na kombinaci, která zohlední rizika. Tím předejdete slibování nerealistických termínů, které vedou k přesčasům a chybám.&lt;/div&gt;</summary>
		<author><name>IvanPearse05165</name></author>
	</entry>
	<entry>
		<id>https://jak.mazovia.edu.pl/index.php?title=U%C5%BCytkownik:IvanPearse05165&amp;diff=1039949</id>
		<title>Użytkownik:IvanPearse05165</title>
		<link rel="alternate" type="text/html" href="https://jak.mazovia.edu.pl/index.php?title=U%C5%BCytkownik:IvanPearse05165&amp;diff=1039949"/>
		<updated>2026-10-11T19:02:09Z</updated>

		<summary type="html">&lt;p&gt;IvanPearse05165: Utworzono nową stronę &amp;quot;Autor blogu dílnou i obývákem sází na osvědčené tipy. Sdílím zde, jak skloubit funkčnost s teplem domova. Nejraději hledat cesty, jak si usnadnit život.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor blogu dílnou i obývákem sází na osvědčené tipy. Sdílím zde, jak skloubit funkčnost s teplem domova. Nejraději hledat cesty, jak si usnadnit život.&lt;/div&gt;</summary>
		<author><name>IvanPearse05165</name></author>
	</entry>
</feed>