<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.it-core.eu/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=IlanaI8523131</id>
	<title>IT-Core - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.it-core.eu/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=IlanaI8523131"/>
	<link rel="alternate" type="text/html" href="https://www.it-core.eu/wiki/index.php?title=Special:Contributions/IlanaI8523131"/>
	<updated>2026-08-21T23:52:09Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://www.it-core.eu/wiki/index.php?title=Jak_realisticky_odhadovat_d%C3%A9lku_softwarov%C3%BDch_projekt%C5%AF&amp;diff=140862</id>
		<title>Jak realisticky odhadovat délku softwarových projektů</title>
		<link rel="alternate" type="text/html" href="https://www.it-core.eu/wiki/index.php?title=Jak_realisticky_odhadovat_d%C3%A9lku_softwarov%C3%BDch_projekt%C5%AF&amp;diff=140862"/>
		<updated>2026-08-21T17:52:04Z</updated>

		<summary type="html">&lt;p&gt;IlanaI8523131: Created page with &amp;quot;Git sám o sobě je jen nástroj. Skutečná hodnota se objeví až ve chvíli, kdy celý tým sdílí stejná pravidla práce s větvemi, commity a revizemi. Bez jasného workflow vzniká chaos: konflikty se řeší ukvapeně, historie se stává nepřehlednou a nasazování do produkce je riskantní. Základním kamenem je proto dohoda na jednom modelu, který všichni dodržují.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Nezapomínejte ani na konzistenci. Zvolte si jeden styl (např. uvozovky, středn...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Git sám o sobě je jen nástroj. Skutečná hodnota se objeví až ve chvíli, kdy celý tým sdílí stejná pravidla práce s větvemi, commity a revizemi. Bez jasného workflow vzniká chaos: konflikty se řeší ukvapeně, historie se stává nepřehlednou a nasazování do produkce je riskantní. Základním kamenem je proto dohoda na jednom modelu, který všichni dodržují.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Nezapomínejte ani na konzistenci. Zvolte si jeden styl (např. uvozovky, středníky, odsazení) a dodržujte ho v celém projektu. Pomohou [http://jslt28.com/home.php?mod=space&amp;amp;uid=3708372 úložné prostory v malém bytě]ám nástroje jako formátovače, které styl sjednotí automaticky. A když píšete cykly, zkuste raději metody jako `map`, `filter` nebo `forEach` – jsou čitelnější než klasický `for` a častěji vedou k menšímu množství chyb.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Code review by mělo být povinné a rychlé. Ideálně do 24 hodin, jinak se práce zablokuje. Recenzent se zaměřuje na logiku, čitelnost a na to, zda změna skutečně řeší daný úkol. Nenechte se unést stylem a drobnostmi – to odvádí pozornost. Pokud narazíte na větší problém, rovnou to napište do komentáře a nechte autora opravit. Po schválení slučte větev pomocí merge commitu, který zachovává kontext celé větve.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Až je práce hotová, nemažte staré větve hned po sloučení. Nechte je ještě pár dní, ale označte je jako uzavřené. Pokud se objeví chyba, můžete se k nim vrátit. Když si tým zvykne na tato pravidla, ušetř[https://discover.hubpages.com/search?query=%C3%ADte%20hodiny íte hodiny] času, které by jinak padly na řešení konfliktů a na dohady, kdo co měl udělat jinak. Pravidelná revize workflow po každém větším projektu pomůže odhalit [http://muhaylovakoliba.1gb.ua/user/lukaszwisniewski23/ slabá místa] a upravit proces podle aktuálních potřeb.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Jednoduchý test může vypadat takto: def test_soucet(): assert 1 + 1 == 2. Když test spustíte, pytest zobrazí přehledně, kolik testů prošlo a kolik selhalo. Pokud test selže, vypíše podrobnosti o tom, kde a proč k selhání došlo. Tím získáte rychlou zpětnou vazbu. Pro lepší organizaci můžete testy rozdělit do více souborů a složek – pytest automaticky prohledává všechny soubory odpovídající vzoru test_*.py nebo *_test.py.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Nejprve je potřeba pytest nainstalovat. To provedete příkazem pip install pytest v terminálu. Po instalaci vytvořte soubor s názvem test_example.py. Název musí začínat nebo končit slovem test, aby pytest soubor automaticky našel. V tomto souboru definujte funkce, jejichž názvy také začínají test_. Uvnitř funkcí použijte běžné assert pro ověření výsledku. Pytest pak spustíte příkazem pytest v adresáři s testem.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Asynchronní operace, jako je načítání dat z API nebo zápis do databáze, přinášejí do Reduxu vrstvu složitosti, která se dříve nebo později projeví na stavu aplikace. Nejčastější chybou je ukládání všech mezistavů, chyb a odpovědí do jednotlivých polí, což vede k rozsáhlým a nepřehledným reducerům. Řešením je zavést si jednotný vzor, který pokryje běžné stavy – čekání, úspěch a selhání – a ten pak použít pro všechny asynchronní akce.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Praktickým doporučením je vytvořit si vlastní malou knihovnu – sadu funkcí, které obalují vaše API volání a vracejí akce pro všechny tři stavy. Tím se izolujete od konkrétní implementace a usnadníte si testování. V komponentách pak stačí zavolat jedinou funkci, která se postará o dispatch všech potřebných akcí. Tím se snižuje počet řádků kódu a zvyšuje čitelnost.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Na závěr: čistý kód je běh na dlouhou trať. Nejdřív to bude vyžadovat vědomé úsilí, ale brzy se z toho stane zvyk. Až příště budete chtít „rychle&amp;quot; něco spáchat a přejmenovat proměnnou na `x`, vzpomeňte si, že číst se to bude mnohokrát častěji než psát. Investice do čitelného kódu se vám vrátí dřív, než čekáte.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Začít s vývojem pro Android není otázka talentu, ale správného postupu. Nejdříve si nainstalujte oficiální vývojové prostředí, které vám umožní psát kód, spouštět emulátor i ladit aplikace. Po spuštění vytvořte nový projekt s prázdnou aktivitou – to je základní obrazovka, kterou uživatel uvidí. Systém vám vygeneruje soubory s rozložením a logikou, ale nepokoušejte se hned vše přepsat. Projděte si strukturu, pochopte, kde se definuje vzhled a kde chování, a teprve poté začněte dělat první změny.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Základním krokem je rozdělení projektu na malé, nezávislé úkoly. Místo odhadu celého modulu „fakturace&amp;quot; odhadněte jednotlivé kroky: návrh databáze, API endpointy, formuláře, testy. Každý úkol by měl být dostatečně malý na to, aby jeho odhad nepř[https://sonnik.nalench.com/user/kamilwisniewski42/ esáhl pár] dní. U větších celků hrozí,  na skryté závislosti. Doporučuji použít techniku „t-shirt sizes&amp;quot; nebo Fibonacciho posloupnost (1, 2, 3, 5, 8...), která nutí přemýšlet v relativních velikostech, ne v přesných hodinách.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Komentáře používejte střídmě. Dobrý kód se komentuje sám – stačí výstižné názvy. Komentář pište, až když vysvětlujete proč, ne co. Například proč je zvolený tento algoritmus nebo proč se čeká časový limit. Pokud komentář popisuje, co dělá další řádek, je to zbytečnost. Místo toho kód upravte tak, aby byl jasný sám o sobě.&lt;/div&gt;</summary>
		<author><name>IlanaI8523131</name></author>
	</entry>
	<entry>
		<id>https://www.it-core.eu/wiki/index.php?title=Jak_spr%C3%A1vn%C4%9B_zabezpe%C4%8Dit_API_pomoc%C3%AD_JWT_token%C5%AF&amp;diff=140711</id>
		<title>Jak správně zabezpečit API pomocí JWT tokenů</title>
		<link rel="alternate" type="text/html" href="https://www.it-core.eu/wiki/index.php?title=Jak_spr%C3%A1vn%C4%9B_zabezpe%C4%8Dit_API_pomoc%C3%AD_JWT_token%C5%AF&amp;diff=140711"/>
		<updated>2026-08-21T17:38:55Z</updated>

		<summary type="html">&lt;p&gt;IlanaI8523131: Created page with &amp;quot;Výběr open source licence je jedním z nejdůležitějších rozhodnutí, které jako vývojář uděláte. Licenční podmínky určují, jak mohou ostatní váš kód používat, upravovat a šířit. Špatná volba může vést k právním problémům nebo k tomu, že váš kód skončí v projektu, s jehož filozofií nesouhlasíte. Než začnete hledat konkrétní licenci, položte si základní otázky: Chcete, aby každý mohl kód použít bez omezení, nebo ch...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Výběr open source licence je jedním z nejdůležitějších rozhodnutí, které jako vývojář uděláte. Licenční podmínky určují, jak mohou ostatní váš kód používat, upravovat a šířit. Špatná volba může vést k právním problémům nebo k tomu, že váš kód skončí v projektu, s jehož filozofií nesouhlasíte. Než začnete hledat konkrétní licenci, položte si základní otázky: Chcete, aby každý mohl kód použít bez omezení, nebo chcete, aby úpravy zůstaly otevřené?&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Na závěr si ověřte, že každý akční krok má smysl pro celý tým, ne jen pro někoho. Pokud někdo navrhne „nový plugin do našeho nástroje&amp;quot;, zeptejte se, jak to pomůže ostatním a co to obnáší za práci navíc. Dobrá retrospektiva končí tím, že každý rozumí, co se bude dít dál a proč. A hlavně – dodržte to. Nic nezabije důvěru v retrospektivu rychleji, než když se naplánované kroky nikdy neuskuteční. Struktura je jen nástroj, ale bez pravidelného vyhodnocování zůstane prázdnou formalitou.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Migrace databáze mezi dvěma odlišnými systémy není jen kopírováním dat. MySQL a PostgreSQL se liší v datových typech, chování transakcí, syntaxi SQL i v přístupu k indexům. Nejčastější chybou bývá spoléhat na automatické nástroje bez předchozí analýzy schématu. Než začnete, zmapujte si všechny tabulky, pohledy, triggery a uložené procedury. Zvláštní pozornost věnujte sloupcům typu ENUM, které PostgreSQL nepodporuje nativně – převeďte je na text s CHECK omezením nebo na samostatnou číselníkovou tabulku.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Jak začít měřit pokrytí smysluplně Základem je vybrat správný nástroj, který umí měřit pokrytí podle řádků, vět a podmínek. Pro jazyky jako Python se nabízí standardní knihovna pro měření, pro JavaScript existují nástroje zabudované přímo do testovacích běhů. Nejdůležitější je měřit pokrytí na úrovni jednotkových testů, ale také integračních testů – kombinace obojího dá lepší obrázek. Spusťte testy s měřením při každém běhu, ne jen občas, abyste měli aktuální data. Ukládejte výsledky do reportu, který si tým může prohlížet v rámci CI.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Dalším častým problémem je rychlý skok k řešení dřív, než je problém dobře pochopen. Když se objeví podnět typu „pravidelně nám padá testovací prostředí&amp;quot;, zeptejte se „jak často&amp;quot;, „kdy&amp;quot; a „co to způsobuje&amp;quot;. Teprve s fakty můžete navrhnout smysluplné opatření. Pokud nemáte data, klidně si naplánujte, že příští sprint budete sledovat četnost výpadků a podle toho se rozhodnete. Strukturovaná zpětná vazba totiž není o rychlých opravách, ale o tom, abyste příště dělali méně chyb.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Při návrhu rozhraní API se dnes JWT tokeny staly standardem pro ověřování požadavků. Jejich hlavní výhodou je bezstavovost – server si nemusí pamatovat relaci, protože veškeré potřebné informace jsou přímo v tokenu. Tento přístup usnadňuje škálování služeb, ale vyžaduje důslednou implementaci. Bez správného nastavení se totiž JWT snadno stane slabým místem celé aplikace. Než token začnete používat, věnujte pozornost třem klíčovým oblastem: podepisování, expiraci a přenosu dat.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Prvním krokem je volba algoritmu pro podpis. Vždy používejte asymetrické podepisování, například algoritmus RS256. Tím zajistíte, že token podepíše pouze autorizační server a ostatní služby si pouze ověřují podpis pomocí veřejného klíče. Nikdy nepoužívejte symetrický algoritmus HS256, pokud nemáte jediný server a plnou kontrolu nad sdíleným tajemstvím. Pokud dojde k úniku tajemství, útočník může podepsat libovolný token. U asymetrického přístupu je riziko omezeno na kompromitaci soukromého klíče, který je uložen jen na jednom místě.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Pokrytí začíná být užitečné, když ho používáte k hledání děr v testech, ne jako cíl sám o sobě. Dobrý postup je analyzovat report po každém větším refaktoringu – pokud pokrytí kleslo, pravděpodobně jste změnili chování, které testy nekontrolovaly. Naopak pokud pokrytí roste, ale počet chyb se nesnižuje, je to známka, že testy nejsou kvalitní. Sledujte také pokrytí u nově přidaných částí kódu – to je nejcennější ukazatel, protože starý kód může mít vysoké pokrytí, ale už netestuje to podstatné.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Retrospektiva týmu často sklouzne do frází jako „bylo to dobré&amp;quot; nebo „příště to zkusíme líp&amp;quot;. Bez struktury se ale ztrácí podstata – konkrétní situace, fakta a návrhy na změnu. Vyzkoušejte strukturovanou zpětnou vazbu, která dává každému členu prostor mluvit o tom, co opravdu ovlivňuje jeho práci. Klíčem je rozdělit reflexi na tři jasné oblasti: co fungovalo, co nefungovalo a co s tím uděláme.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Nejčastější chyby při výběru licence Jednou z nejčastějších chyb je použití licence bez pochopení jejích podmínek. Například GPL je silný copyleft a pokud ji použijete v knihovně, může to odradit komerční vývojáře, kteří by jinak váš kód rádi využili. Naopak u API nebo malých utilit je permisivní licence často výhodnější. Dalším problémem je kombinování licencí – pokud do projektu přidáte kód pod GPL a váš hlavní kód je pod MIT, celý projekt může být ovlivněn. Vždy si ověřte kompatibilitu použitých knihoven.&lt;/div&gt;</summary>
		<author><name>IlanaI8523131</name></author>
	</entry>
	<entry>
		<id>https://www.it-core.eu/wiki/index.php?title=User:IlanaI8523131&amp;diff=140710</id>
		<title>User:IlanaI8523131</title>
		<link rel="alternate" type="text/html" href="https://www.it-core.eu/wiki/index.php?title=User:IlanaI8523131&amp;diff=140710"/>
		<updated>2026-08-21T17:38:49Z</updated>

		<summary type="html">&lt;p&gt;IlanaI8523131: Created page with &amp;quot;Váš průvodce dílnou i obývákem žije už dlouho. Sdílím zde, jak skloubit funkčnost s teplem domova. Nejvíc mě baví ukazovat chytrá řešení, která zvládne každý.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Váš průvodce dílnou i obývákem žije už dlouho. Sdílím zde, jak skloubit funkčnost s teplem domova. Nejvíc mě baví ukazovat chytrá řešení, která zvládne každý.&lt;/div&gt;</summary>
		<author><name>IlanaI8523131</name></author>
	</entry>
</feed>