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.


Témata - BoneFlute

Stran: [1] 2
1
Vývoj / git, merge --no-ff a rebase
« kdy: 16. 05. 2021, 16:25:05 »
Ahoj.

Používám následující postup:
Mám branch master, ze které buildím produkční verzi aplikace. Z ní mi vychází něco jako verze branch, například v1.0. Z ní vychází feature branch, například v1.0-foo.
Vždycky, když mám feature branch (v1.0-foo) hotovou, tak ji mergnu do verze (v1.0) s přepínačem --no-ff. Když mám hotovou verzi, tak ji mergnu do master, opět s přepínačem --no-ff. Díky tomu tam mám pěkné kolejničky, které mi ty commity seskupují.

Mám problém s tím, že když rebasuju master do v1.0, a následně do v1.0-boo, v1.0-foo, tak mi ty kolejničky zmizí. Jako celkem chápu proč to je. A znám řešení - prostě musím všechny feature rebasnout, a zmergnout znova. Ale je to dost pracný, a přijde mi to trochu blbý.

Nevíte jak na to? Jak to dělat lépe?

Cíl je, abych tam měl kolejničky, rebasovat a mít méně práce.

Díky moc.

2
Vývoj / Haskell, ExistentialQuantification, forall
« kdy: 31. 03. 2021, 15:50:31 »
spinof z https://forum.root.cz/index.php?topic=24432.120

Každopádně můj fokus je momentálně na tomto: https://amulet.works/
To vypadá celkem zajímavě.
Když by si se nudil a napadl tě nějaký pěkný demonstrativní příkládek, zlobit se nebudu.
Příklad čeho? Určitě není problém, jen to pls upřesni.
forall patří do skupiny kvantifikačních typů. Takové to každý, žádný. Potuď mi teorie ok. Ale zatím mi nedochází, k čemu v praxi to může být dobré? Myslím tím nějaký vulgární praktický příklad.

Příklad s monádama: Monáda Maybe je dobrá k tomu, když chceš vrátit hodnotu nebo chybu. Užitek: Maybe je generická. Tudíž nemusíš řešit NullObject pro každý svůj vlastní typ. Díky tomu, že je to generické, můžeš udělat takovou tu věc (neznám názvosloví), kdy řadíš Maybe za sebou a nemusíš řešit rozbalení, zabalení. Máš to otypováné, tudíž se ti nemůže stát, že ti uteče nějaká větev programu, protože ty nemůžeš hned pracovat s tou hodnotou, ale musíš ji nejdřív vybalit... A podle signatury hned poznám, zda mi to vrací číslo, či číslo nebo chybu. A tak.

Jiný příklad s třídama. Třídy nedefinují typ, ale povinnost mít správnou funkci, funkce. A tím mi to rozvazuje ruce, že já nemusím řešit co je to za objekt, jeho strukturu, nedejbože jméno, ale má implementované ty funkce? To mi stačí, stejně víc nepotřebuju.

A prostě by se mi líbil nějaký příkládek pro forall. Abych věděl, že "jo ahaá, takže já si tenhle kousek kódu můžu zjednodušit na..."
Haskell má několik rozšíření, přičemž v každém znamená forall něco trochu jiného. IMHO nejpraktičtější je jeho použití v existenčních typech, například:
Kód: [Vybrat]
data Explosive = forall x. Exploder x => Expl xTímto způsobem se dá zbavit explicitního typového parametru, takže pak můžu mít seznam typu [Explosive], třeba [Expl Landmine, Expl Torpedo, Expl Turkey].
Co značí to Exploder?

Takže analogicky:
Kód: [Vybrat]
data Err = forall x. Maybe x => Just x
apply :: [Err] -> String
apply xs = ...
apply [Just "text", Just 42, Just True]
?

Přidám otázku: Dokážeš popsat tu ideu existenčních typů?
Exploder je nějaká třída, třeba s funkcemi explode a defuse. Ve svém příkladu akorát dosaď za Maybe nějakou třídu (a Just bych přejmenoval na nějaký unikátní konstruktor hodnot), pak to bude přesně ono.


Kód: [Vybrat]
{-# LANGUAGE ExistentialQuantification #-}

data Person = Person String String

x = Person "John" "Dee"
x2 = Person "Jan" "Marek"
x3 = 42

data Printable = forall x. Show x => x

instance Show Person where
    show (Person name surname) = "name: " ++ name ++ ", surname: " ++ surname

format :: [Printable] -> String
format xs = concat $ map show xs

main = do
    putStrLn $ format [x, x2, x3]

Pokud jsem to dobře pochopil, tak si nevím rady s tím data Printable = forall x. Show x => x. Když to zkouším podle typů, tak se mi to celé rozpadne. Evidentně špatně chápu nějaký princip.

3
Vývoj / Trait a konstruktor
« kdy: 18. 12. 2020, 00:25:06 »
Zdravím. Měl bych tu zase něco z akademického programování.

Předpokládejme nějaký supr jazyk. A chceme tam mít podporu traitů - aby nedocházelo ke zneužívání dědičnosti. Takže například:

Kód: [Vybrat]
trait A {
    private int id;
    public int getId() { return this.id; }
}
trait B {
    private string name;
    public string getName() { return this.name; }
}

class Foo {
    use A;
    use B;
}
Otázka zní, jak hodnoty z těch traitů inicializovat? A navíc můžeme předpokládat, že třída komponující traity by neměla mít právo přistupovat k privátním členům.

Určitě nechceme settery, potřebujeme konstruktor, abychom měli kontrolu nad stavem objektu. Jak tento problém řešit?

Děkuji za příspěvky, ať už z reálných jazyků, nebo klidně pouhá úvaha.

4
Software / Zálohovací nástroj
« kdy: 11. 10. 2020, 00:35:37 »
Zdravím.

Můžete prosím doporučit nějaký šikovný zálohovací nástroj/systém (linux, debian, příkazová řádka).

Moje představa je, že si zaregistruju v cronu, že se má každý den zálohovat tato a tato databáze, tento a tento adresář, připojit disk, překopírovat, odpojit disk. (Zatím neuvažuju rozdílové zálohy - teď jsem se s nimi dost spálil, takže snad jindy.)

Vypadá to celkem jednoduše, takže by to mohl být triviální script. Ale třeba existuje nějaké už hotové řešení, které by bylo lepší než co si ubastlím sám.

Díky za podněty.

5
Vývoj / Naivní závislostní typ (úvaha)
« kdy: 14. 11. 2019, 22:09:42 »
Mějme hypotetický jazyk s hypotetickým typovým systémem.

Mějme typ Numeric reprezentující všechna reální čísla, a pak následující kaskádu typů:

Numeric > Int > Age > Young
Numeric > PositiveUnzeroNumeric
Kde Age je rozsah 0 - 255, Young 0 - 19, PositiveUnzeroNumeric rozsah 1 - MAX_INT

Máme funkci pro dělení:
Kód: [Vybrat]
div a b = a / b
A dáme jí takovouto typovou signaturu:
Kód: [Vybrat]
div :: Numeric -> PositiveUnzeroNumeric -> Numeric
Šlo by to? Šlo by tímto způsobem na úrovni typového systému zabránit dělení nulou? Možná ne, ale zajímalo, jestli by se k tomu někdo zkušenější mohl vyjádřit. Protože třeba:

Kód: [Vybrat]
calculate :: Numeric -> Numeric -> Numeric
calculate a b = a `div` (b - 3)
calculate 9 6 -- 3
calculate 9 3 -- divide zero
se IMHO nepřeloží.

Jaké to může mít úskalí?

6
Vývoj / Uváznutí v Aktor systému
« kdy: 14. 10. 2019, 19:50:10 »
Zdravím.

Zkouším si jednoduchý Aktor systém. Celkem mi to jakože pěkně funguje, ale trošku jsem se zasekl na uváznutí.

Předpokládejme dva aktory A a B.
A -> B: kolik je hodin
B -> A: 19:41
A -> B: supr, díky
B -> A: není zač
A -> B: ok
B -> A: ok
A -> B: ok
B -> A: ok
A -> B: ok
B -> A: ok
A -> B: ok
...

Mohl by mi tu někodo poradit, jak se něco takového řeší? Třeba v Erlangu, systému Akka, nebo dalších?

Nechce se mi spoléhat na to, že ten aktor bude napsán správně. Rád bych tomu dodal alespoň základní ochranu. V "normálním" kódu se to dá trochu statistickou analízou podchytit. Na druhou stranu mé znalosti problematiky jsou omezené, a tak třeba existuje nějaké jednoduché řešení které dokáže víc.

Předem dík.

7
Ahoj.

Mám Fedoru 27, a aplikaci Gnome Soubory (Nautilus). Kde je defaultní chování, že když dám začnu psát, tak mi to začne vyhledávat a filtrovat. Celkově spokojenost, ale chtěl bych trochu jiné chování.

Aby to hledalo jen v aktuálním adresáři a nikoliv v podadresářích.
Případně, aby mě to hodilo na patřičný soubor či adresář.

Zkoušel jsem volby a klávesové zkratky ale na nic jsem nearazil. Snad jsem jen něco přehlédl.

Díky za pomoc.

8
Sítě / Zlobí SMTP na Seznamu
« kdy: 19. 10. 2018, 13:51:25 »
Zdravím.

Mám korektně nastavený smtp email (apple mail) na smtp.seznam.cz. Je to dozajista dobře, protože na jiné síti to funguje. Jen u mě doma to nejde odeslat, a hlásí mi smtp jako offline. Poskytovatel internetu se zapřísahá, že nic nefiltruje. Když se připojím přes hotspot na mobilu, tak to funguje. Takže problém je zřejmě jen u toho jednoho poskytovatele a jen u smtp - imap je v pohodě.

Můžete mi prosím poradit, jak mohu postupovat? Koho se zeptat, a kde začít?

Děkuji!

9
Odkladiště / Sháním židli
« kdy: 15. 09. 2018, 15:35:54 »
Zdravím.

Sháním židli, která vydrží když se na ní budu houpat. Nepotřebuju ergonomickou ani s kolečkama. Jen nesmí podemnou povolit.

Jsem spíše štíhlejší, tak do 80Kg, ale různě se na ní vrtím a kroutím a hlavně houpu. A ta kovová co mám to prostě nevydržela :-)

10
Vývoj / Apple Cocoa bez XCode
« kdy: 12. 09. 2018, 21:28:32 »
Zdravím.

Nevíte někdo o nějaké knihovně, tutoriálu, něčem, kde bych mohl vytvářet okýnkové aplikace pro macos a ios bez použití xcode a jeho UIBuilderu? Nevadí mi swift, ale chtěl bych to vytvořit a přeložit čistě pomocí příkazové řádky. Něco jako http://zetcode.com/wxpython/firststeps/

Možná je to jednoduché a jedná se jen o mou neznalost. Ale zatím umí vytvořit aplikaci jen v gtk/qt, což se mi na mac moc nezamlouvá.

Předem dík.

11
Vývoj / Více instancí gettextu
« kdy: 31. 07. 2018, 15:07:18 »
Zdravím.

Máme klasický gettext.

Existuje nějaký způsob, jak mět dvě instance pro dva různé jazyky? Tedy abych mohl v jednom obsahu vypsat anglicky i česky zároveň? Samozřejmě bych chtěl ty jazyky zvolit.

12
Vývoj / Syntaxe Haskell funkce
« kdy: 11. 07. 2018, 01:46:40 »
Ahoj.

Mějme funkci (třeba v Haskellu):

Kód: [Vybrat]
foo a = a + 1
Existuje nějaký zajímavý důvod, proč je ten argument před rovnítkem?

Mám totiž takovouto úvahu:
Pokud symbolu přiřazuju hodnotu:
Kód: [Vybrat]
a = 1
b = "text"
c = True
tak v případě funkce přiřazuju lambdu:
Kód: [Vybrat]
foo = \a -> a + 1
Díky za odpovědi.

13
Vývoj / Typový system versus unittesty
« kdy: 17. 06. 2018, 23:39:32 »
Zdravím.

Dospěl jsem k nezdravému přesvědčení, že jednotkové testy nejsou potřeba máte-li kvalitní typový systém.

(Teď samozřejmě neřeším který jazyk a zda něco takového má.)

Zajímalo by mě, můžete zkusit uvést nějaký příklad konstrukce, na kterou je nutné napsat test, protože typem to podchytit nejde?

Díky.

14
Vývoj / Formální verifikace podle typu na rozsah
« kdy: 01. 05. 2018, 00:57:43 »
Zdravím.

Mějme takovouto funkci v blíže neurčeném jazyku podobném haskellu:
Kód: [Vybrat]
fn s : String 0 40 -> String 4 20 =
    if (Str.len s) < 2 then
        "default"
    else
        Str.sub s 20
Čtěte to prosím jako "funkce fn má jeden parametr typu String který je minimálně nula znaků dlouhý, a maximálně 40; a vrací String, který je minimálně čtyři znaky dlouhý a maximálně 20.

A mě by zajímalo, jak má nebohý typový systém odvodit, že ta funkce je špatně?

(Tak jasně, můžu na to pustit testy, ale já bych rád zůstal jen u typů a formální verifikace.)

Díky.

15
Vývoj / Curryfikované funkce v Haskellu
« kdy: 01. 05. 2018, 00:44:27 »
Zdravím.

Už u několika tutoriálů k minimálně dvoum jazykům se mi stalo, že tam autor zdůrazňoval skutečnost, že funkce
Kód: [Vybrat]
multThree 3 5 9 se převede na
Kód: [Vybrat]
((multThree 3) 5) 9.

Jako já s tím nemám problém. Curryfikování je fajn věc, a umím to použít. Ale proč je to zdůrazňováno, že "Každá funkce v Haskellu bere oficiálně pouze jeden parametr."? Bych to bral jako implementační detail a basta. Škoda slov, ne?

Nebo to má nějaký zajímavý efekt, který mi uniká?

Stran: [1] 2