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 - Filip Jirsák

Stran: 1 ... 209 210 [211] 212 213 ... 375
3151
Vývoj / Re:Typový system versus unittesty
« kdy: 29. 06. 2018, 07:28:42 »
???? Vůbec nerozumím. Celý tenhle thread je o tom, že mám k dispozici kompilátor, který "něco"(typy) umí, a zda s pomocí toho "něčeho" jsem schopen nějaký další program verifikovat tak, že unit testy potřebovat nebudu. Takže když píšu, že pokud bychom měli kompilátor schopný řešit matematické výrazy, tak to umí i verifikovat řešení kvadratické rovnice. Vůbec nechápu, co s tím má společného,
Kompilátor, který umí řešit matematické výrazy, je jenom knihovna kódu, který programátor používá, ale netestuje. Nic jiného. Kompilátory běžných jazyků například umí zpracovávat základní algebraické výrazy, tj. umí transformovat sčítáí, odčítání, násobení a dělení na instrukce procesoru, umí správně zpracovat prioritu těch operátorů.

Jako chcete říct, že když programátor kompilátoru nesdělí, aby kontroloval kvadratickou rovnici, tak to kompilátor neudělá...?
Ne, chci říct, že kompilátor nezná pojem „kvadratická rovnice“. Ten pojem nijak neplyne z matematického aparátu, ten název tomu dali lidé, klidně by se to mohlo jmenovat třeba „malá rovnice“ nebo „druhá věta“. Jenže lidé to chtějí používat pod názvem „kvadratické rovnice“, takže musí nějaký člověk přijít a kompilátoru vysvětlit, že to, co má tyhle a tyhle vlastnisti, se nazývá „kvadratická rovnice“. A tenhle popis vlastností je to, kde se často dělají chyby a co je nutné testovat. Kvadratickou rovnici dá asi většina programátorů správně, ale dnešní programy obvykle řeší jiné problémy, než jsou přesně definované matematické funkce.

Pořád jde jen o to, že kompilátor dokáže vyřešit jenom to, co má formálně a bezrosporně zadané. Jenže takováhle zadání programátoři obvykle nemají, ostatně je to jejich práce převádět neformální a neúplné zadání popsané přirozeným jazykem do formální a přesné řeči počítačů. V tomhle převodu se dělají chyby a je snaha těm chybám předcházet, mimo jiné i testováním.

3152
Vývoj / Re:Typový system versus unittesty
« kdy: 29. 06. 2018, 07:13:20 »
Ne. Bude v te specifikaci podle ktere se testy vygeneruji.
To už je jenom nepodstatný detail, čemu přesně říkáte „test“. Já říkám „testy“ celé části kódu, která stojí vedle hlavního kódu a je určená pro testování. Vy asi myslíte nějaký konkrétní testovací framework a „testem“ myslíte například jednu jeho funkci. Na principu to ale nic nemění.

3153
Vývoj / Re:Typový system versus unittesty
« kdy: 28. 06. 2018, 21:54:14 »
To prece delat nechci. Ja chci napsat tu specifikaci a pak na to pustit ten generator testu.
Pak tedy nebude ověření správnosti sioučástí typu, ale bude v tom testu.

3154
Vývoj / Re:Typový system versus unittesty
« kdy: 28. 06. 2018, 21:35:57 »
Ten prispevek je prece o generativnim testovani u dynamicky typovaneho jazyka.
Za behu prece nebudu zapinat "typovou" instrumentaci.
Jak zakomponujete ověření správnosti výsledku do konstukce návratového typu, aby se to ověření nedělalo až za běhu, ale už při překladu?

3155
Vývoj / Re:Typový system versus unittesty
« kdy: 28. 06. 2018, 21:28:27 »
Nějak jsem nepochopil, co to má společného s tím, že když naučíme compiler pracovat se symbolickou matematikou, tak pro něj není problém odvodit, že standardní řešení kvadratické rovnice splňuje specifikace požadovanou po té funkci. Je to asi tak na stejné úrovni, jako že ten Liquid haskell je pro (některé) programy schopen dovodit, že výsledkem funkce je neprázdné pole.
Jenom jsem upřesnil, že to, co popisujete, je jenom vytčení něčeho jednoduchého do knihovny nebo kompilátoru, které pak jako programátor používáte už bez testování. To ale není nic nového. Takhle už máte něco implementováno třeba v C kompilátoru nebo standardní knihovně – a ty implementace se zase testují.

Kompilátor, který neví nic o kvadratických rovnicích, ale umí pracovat s matematickými výrazy (nepovažoval bych za vyloučené, že by tím směrem ty idrisy a spol. ohnout šly), je schopen dokázat, že daná funkce tu kvadratickou rovnici řeší.
Ne, kompilátor není schopen dokázat, že daná funkce řeší kvadratickou rovnici. Kompilátor je schopen dokázat, že daná funkce řeší něco, co programátor prohlašuje za kvadratickou rovnici.

3156
Vývoj / Re:Typový system versus unittesty
« kdy: 28. 06. 2018, 18:52:50 »
Myslim, ze u rady problemu je overeni spravnosti vypoctu trivialni kdezto vypocet samotny je slozity.
A kdyz zakomponuju overeni spravnosti do konstrukce navratoveho typu zarucim tim ze nepujde vytvorit navratovy typ obsahujici nespravny vysledek.
Jistě existuje řada takových problémů, ale podle mne se to netýká drtivé většiny problémů řešených dnešními programy. Navíc to ověření správnosti zabere nějaký výkon za běhu – lepší je (obvykle) ověřit správnost v době vytváření programu a za běhu se už jen spoléhat na to, že to prostě je správně.

3157
Vývoj / Re:Typový system versus unittesty
« kdy: 28. 06. 2018, 17:17:34 »
Ale kompilátor může vědět něco o symbolické matematice a nějaké další matematické axiomy ho můžeme naučit.
Ano, některé věci můžeme schovat do knihoven a knihovny klidně do kompilátoru nebo až do procesoru. Ty pak bereme za dané a podle míry jejich složitosti už je ani netestujeme. Programátoři dnes obvykle neprogramují, jak sečíst dvě 32bitová čísla, ale spoléhají na to, že to instrukce procesoru děla správně. Pořád je ale potřeba programátor na to, aby procesoru „vysvětlil“, že když má v jednom registru částku a v druhém registru DPH, cenu s DPH spočítá právě sečtením těch dvou registrů.

A systémy, které umí symbolickou matematiku tady máme a když se jich zeptáme, jestli daný vzoreček řeší kvadratickou rovnici, tak jsou schopny na to dát jasnou odpověď. Ne vždycky (halting problem), ale o to nejde.
Ano, ale k tomu musíme umět tou symbolickou matematikou popsat, co je to kvadratická rovnice. A pokud tomu systému popíšu kvadratickou rovnici jako součet násobku druhé mocniny proměnné a násobku proměnné, tj. zapomenu na to, že v kvadratické rovnici může být také konstanta, ten systém to nijak nezjistí. V systému symbolické matematiky je taková rovnice možná, je to podmnožina kvadratických rovnic. A není to chyba toho systému ani odvozování, je to chyba v převodu mezi reálným světem a formálním jazykem (v tomto případě symbolickou matematikou).

Konec konců, ten příklad s leftPad je moc hezký - copak typový systém ví něco o zarovnávání z leva? Ale dá se mu to vysvětlit.
Ano, naprogramovat se dá leccos, i mnohem složitější věci, než je zarovnávání zleva :-) A jsou různé způsoby, jak to naprogramovat, dá se to naprogramovat imperativně i deklarativně a je to vzájemně převoditelné. Rozdíl není na straně počítače (i když fakticky se nakonec vše převádí na imperativní, protože tak pracují dnešní procesory), rozdíl je na straně lidí – některé věci se nám lépe vyjadřují deklarativně, některé raději vyjadřujeme imperativně.

Ale myslím, že je trošku nepochopení, k čemu typový systém je.
Taky si myslím. Typový systém je jen jiný způsob vyjádření, nic míň, ale ani nic víc.

Jenomže to jde otestovat leda tak, že se napíše specifikace, která bude vypadat přesně stejně. Takže se problém chyby přesune od kódu ke specifikaci a vůbec nic to nevyřeší, jen místo toho, zda kód je správně budeme řešit, jestli specifikace je správně.
Ano, to tvrdím od začátku. Takhle se to ale dá odsouvat do nekonečna, a o správnosti se nedozvíme nikdy nic. Proto se často testuje to, že vezmu něco mnohem jednoduššího, než specifikaci, o čem ale vím, že je to správně, a otestuju jenom tyhle zaručeně správné případy. Tím nezískám odpověď na otázku, zda je to celé správně, ale dozvím se alespoň to, že tam je aspoň něco správně.

IMO typový systém (nebo obecně dokazování) má smysl tam, kde specifikace a kód není totéž. Ale jinak bych zopakoval, že u všech těchto věcí (testy, typy) je vhodné si položit otázku, zda se to vyplatí - a při dobrém využití typů (na doméně, kde to funguje dobře) výhoda těch testů dost klesá, protože těch chyb je tam z principu výrazně méně.
A stejně tak existují domény, kde nesou potřeba žádné složité typy a kde zároveň největší množství chyb vzniká při převodu mezi neformálním zadáním a formálním programovacím jazykem. A tam je zase minimum chyb, které by bylo možné odstranit lepšími typy.

3158
Vývoj / Re:Typový system versus unittesty
« kdy: 28. 06. 2018, 13:07:04 »
Jak nahradim unit test, kdyz chci otestovat funkci pro vypocet kvadraticke rovnice a spletu se ve vzorci?

Typovy system mi moc nepomuze, ne?

Možná by stačilo vypočtené kořeny dosadit do té kvadratické rovnice, což snad půjde také provést v těch typech.
Jenže kompilátor neví nic o kvadratických rovnicích, takže to z typů nijak neodvodí. Ale to je právě ten spor, který tady vedeme – existují určité doménové znalosti, a část z nich je přenesena do kódu, ať už v podobě příkazů nebo pravidel. Jednotkové testy nejsou nic jiného, než snaha nezávislým způsobem ověřit, že jsou ty doménové znalosti přenesené do kódu správně. Vedlejším efektem těchto testů je, že se zkontroluje, zda vůbec dává smysl kód sám o sobě – jestli se třeba nepokouší provádět nedefinovanou operaci (třeba násobení textů nebo dělení nulou). Někteří zde ovšem tento vedlejší efekt testů považují za jejich hlavní a jediný účel, z čehož plyne jejich přesvědčení, že by se jednotkové testy vlastně daly úplně zrušit.

Mimochodem, k představě, že všechny jednotkové testy bude umět vytvořit nějaký automat, je vhodné dodat, že až ten automat bude umět pochopit danou doménu a napsat testy, bude umět naprogramovat i ten výkonný kód.

3159
Software / Re:Se sudo se nepřihlásím na SSH klíčem
« kdy: 28. 06. 2018, 12:14:01 »
Nejjednodušší je zkopírovat si ten jeho klíč do svého domovského adresáře, vykašlat se na zbytečné sudo a ssh pomocí parametru -i říct, že má použít jiný klíč. Případně si můžete dát rovnou do konfigurace ssh klienta, že když se připojuje na konkrétní server nebo s konkrétním uživatelem, má se použít daný klíč.

3160
Server / Re:HTTPS certifikát v interní síti
« kdy: 28. 06. 2018, 11:34:02 »
Navíc pokud nějaké takové zařízení někdo má, tak stejný problém bude mít i s veřejnou CA, která mnohdy nebývá součástí podobných bazmeků.
Řekl bych, že by byla dost smůla natrefit na zařízení, které má nějaký seznam důvěryhodných autorit a nemá mezi nimi Digital Signature Trust Co.

Proč by nevěřili, když to všem distribuuji?
To, že někomu vnutíte, že tomu certifikátu musí důvěřovat, ještě neznamená, že mu sám opravdu chce důvěřovat.

Připomínám, že se tu bavíme o interní komunikaci v rámci firmy, ne k zákazníkům.
Pokud je to nějaká uzavřená síť, ideálně odpojená od internetu, pak to tak může fungovat. Já mám na mysli sítě, které mají i části, kam se mohou připojovat soukromá zařízení (mobily, tablety, notebooky) třeba zaměstnanců nebo návštěv, připojují se tam zaměstnanci ze svých soukromých zařízení přes VPN atd. A zároveň jsou tam interní služby, které jsou v těchto sítích dostupné (wiki, e-mail, adresář).

A nebo prostě moje domácí síť. Kvůli certifikátům pro router, NAS a webkameru nebudu provozovat vlastní CA a řešit distribucí certifikátů na mobily návštěv.

3161
Software / Re:ssh a sudo
« kdy: 28. 06. 2018, 07:49:49 »
sice by (v pripade ze nepouziva oklesteneho primarniho uzivatele) mohl vhodneji pouzit -i /home/tenjinej/.ssh/privatni_klic...
To by neprošlo kvůli právům, pokud je nemá nastavená nějak šíleně. Ale pokud ten klíč jiného uživatele může přečíst (třeba i pomocí sudo), může si ho i zkopírovat k sobě.

U mne v žebříčku toho, co vlastně chce, vede snaha spustit sudo až na vzdáleném stroji. Ale bez reakce Jardy9 můžeme jen hádat, co chce a kde je problém.

3162
Server / Re:HTTPS certifikát v interní síti
« kdy: 27. 06. 2018, 22:14:29 »
Zařízení, které by nepodporovalo import vlastního cert nemáme
Nejde o import vlastního certifikátu, ale o přidání vlastní certifikační autority.

Naopak bych asi nechtěl interní servery, managementy apod. zdůvěryhodňovávat přes letsencrypt apod.
Proč ne?

Interní síť mám pod kontrolou, důvěryhodnost je vysoká, není tedy ani problém vystavovat cert s životností 5 a více let.
Vy té síti asi věříte. Otázka je, zda té vaší autoritě budou stejně věřit všichni uživatelé.

3163
Server / Re:HTTPS certifikát v interní síti
« kdy: 27. 06. 2018, 20:41:38 »
Proč? V dnešní době IaC? Když je někdo odkázán na privátní TLD, není běžné mít PKI zcela (nebo částečně) založenou na  interní kořenové (nebo mezilehlé) CA implementované třeba v Ansible roli? Automaticky generující a podepisující CSRs, automaticky distribuující certifikát této autority? Třeba i včetně generovaného CRL?
Protože dostat do některých zařízení vlastní kořenový certifikát není úplně snadné a už vůbec to nejde přes AD. Vy k tomu přidáváte Ansible, jenže ne všechno jde rozumně automatizovat a ne vždy se to vyplatí. Když mám jediné zařízení takového typu, které má jenom webové klikací rozhraní, nebo jenom nějaký telnet, nebudu řešit automatizované nahrávání certifikátu certifikační autority, abych to pak slavnostně spustil ideálně jednou za životnost toho zařízení. A těch zařízení, která se do sítě připojují ad-hoc, může být velké množství – obrazy virtuálních počítačů, Docker obrazy, mobilní telefony, notebooky… Navíc já teda jako uživatel rozhodně nejsem nadšený, když mi někdo vnucuje, že musím mít v systému jeho certifikační autoritu. „Je to bezpečný, my to používáme jenom ve firmě a podepisujeme tím jenom naše interní domény…“ No jo, ale kdo jim zabrání podepsat tím třeba google.com, třeba omylem?

To mělo smysl, když DV certifikáty byly drahé. Chápu, že to dál provozují tam, kde už to mají zavedené. Ale zavádět to někde dnes? Proč? Velké náklady na zavedení a pak náklady na provoz… To ty automatizační nástroje radši použiju na zajištění obnovy certifikátů od Let's Encrypt.

3164
Odkladiště / Re:parametr v odkazu
« kdy: 27. 06. 2018, 18:24:24 »
Označuje se tím zdroj odkazu – aby bylo možné v analýze návštěvnosti webu odlišit, jestli se uživatel na web dostal např. z reklamy (a ze které), z e-mailového newsletteru, z Facebooku atd.

3165
Software / Re:ssh a sudo
« kdy: 27. 06. 2018, 16:28:00 »
Heslo po vás chce sudo (k lokálnímu uživateli) nebo ssh (ke vzdálenému)? Ale hlavně nevidím žádný smysl takového počínání, když se jen přihlásíte ke vzdálenému serveru, je přece jedno, pod jakým uživatelem jste spustil ssh klienta.

Stran: 1 ... 209 210 [211] 212 213 ... 375