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 - registrovany_ava

Stran: 1 ... 4 5 [6] 7 8 ... 12
76
Odkladiště / Re:Prodej Excel spreadsheetu
« kdy: 03. 12. 2020, 07:18:11 »
Tak ve statnim uz nikdo neumi ani v Excelu a tabulky si kupuji od part-time zamestnancu? Nepredpokladam, ze ta tabulka bude vyzadovat VBA backend, takze slecna mozna obarvi zahlavi a udela filtry. Nehlede na to, ze na evidenci uz by byla urcite vhodnejsi nejaka databaze.. Vam to nikomu neprijde divne? Rad bych se mylil, ale tudy se ztraci nase penize z dani  :)

Slečna narozdíl od tebe v tom výzkumáku pracuje, takže ví co a jak by tam bylo potřeba udělat. Ostatním děkujeme za příspěvky a rady.

77
Odkladiště / Prodej Excel spreadsheetu
« kdy: 02. 12. 2020, 14:41:30 »
Kamarádka se na mě obrátila s dotazem, obracím se na znalejší.

Pracuje na malý úvazek ve výzkumáku, kde nicméně příští rok nebude dost peněz na lidi, ale budou peníze na materiál (zní to bláznivě, ale není to k diskuzi). Napadlo ji, že by jako svůj přínos institutu, kde je docela platná a oblíbená, vytvořila spreadsheet, který by pomáhal s evidencí vzorků, a ten výzkumáku prodala za materiálové peníze, šéf by proti tomu asi nic neměl. Ráda by znala odpověď na dvě otázky, které možná zní naivně, ale zjistil jsem že na ně vlastně s jistotou nedovedu odpovědět.

1. Je možné prodávat .xls vyrobené v Excelu z Microsoft Office jen tak, samostatně, nejsou nějaké potíže např. s licencemi Office atp.?

2. Může to ona, nepodnikatel, obyčejná osoba, nějak výzkumáku prodat, nebo by si musela zařídit živnost, popř. to udělat přes prostředníka (což bych byl asi já, mám živnost na výrobu SW)? Jedná se o prodej v řádu nízkých desítek tisíc Kč.

78
Vývoj / Re:Rekurze v Javě (i jinde)
« kdy: 22. 11. 2020, 06:42:05 »
Scala to obchází pomocí tzv. trampolíny: https://free.cofree.io/2017/08/24/trampoline/

Trampolína není nic Scala-specifického, Scala žádnou automatickou trampolínozaci AFAIK nedělá, článek co odkazuješ vypráví o tom jak si rekurzivní funkci ztrampolínovat ručně. Tail rekurzivní funkce (tedy i tu co jsem uvedl já) Scala převádí sama na obyčejnou smyčku (jak je vidět i z bajtkódu co jsem postnul), obecné rekurzivní funkce se volají obyčejně přes zásobník.

No to je zajímavé, matně jsem si pamatoval, že to dělá automaticky (a netvrdil jsem, že to je specifické pro Scalu). Třeba tady píšou: However, to support TCO, Scala uses a well-known technique called a trampoline. Z čeho jsem tu informaci kdysi čerpal a jak to tam formulovali, už si nepamatuju.

Možná šlo fakt o tohle.

Jo, on ten článek asi myslí tu "podporu ve Scale" právě tak, že je ve standardní knihovně implementace trampolíny, která je m****a (nemusí se tu to slovo vyskytnout v každé druhé diskuzi :-), tudíž ji lze ve Scale narozdíl od většiny mainstreamových jazyků vyjádřit, a ještě má syntaktickou podporu pro snadné vytváření díky for comprehension.

79
Vývoj / Re:Rekurze v Javě (i jinde)
« kdy: 22. 11. 2020, 06:16:06 »
Scala to obchází pomocí tzv. trampolíny: https://free.cofree.io/2017/08/24/trampoline/

Trampolína není nic Scala-specifického, Scala žádnou automatickou trampolínozaci AFAIK nedělá, článek co odkazuješ vypráví o tom jak si rekurzivní funkci ztrampolínovat ručně. Tail rekurzivní funkce (tedy i tu co jsem uvedl já) Scala převádí sama na obyčejnou smyčku (jak je vidět i z bajtkódu co jsem postnul), obecné rekurzivní funkce se volají obyčejně přes zásobník.

No to je zajímavé, matně jsem si pamatoval, že to dělá automaticky (a netvrdil jsem, že to je specifické pro Scalu). Třeba tady píšou: However, to support TCO, Scala uses a well-known technique called a trampoline. Z čeho jsem tu informaci kdysi čerpal a jak to tam formulovali, už si nepamatuju.

Možná šlo fakt o tohle.

No úplně pro jistotu jsem to ještě zkusil, https://scalafiddle.io/sf/J2aN2OT/0:

def a(x: Int): Int = if (x == 0) {x} else {1 + a(x - 1)}
println("Finished")

a(100000)

přeteče (volání `a` není v tail pozici).

Tak možná se o tom ve Scale kdysi uvažovalo, nebo tam mají chybu, nevím. Každopádně díky za zajímavé odkazy. scala.util.control.TailCalls jsem ani neznal.

80
Vývoj / Re:Rekurze v Javě (i jinde)
« kdy: 21. 11. 2020, 18:53:38 »
Technická poznámka pro zajímavost: nepokračování bloku kódu může způsobit nejen výjimka, ale i nekonečná rekurze. Např. Scala má typ `Nothing`, který se typicky používá jako typ výsledku funkce, která nikdy neskončí.
Znamená to, že to Scala překládá do jiného bajtkódu, než je volání funkce? Tj. neukládá se volání na zásobník a může to být skutečná nekonečná rekurze?

Scala to obchází pomocí tzv. trampolíny: https://free.cofree.io/2017/08/24/trampoline/

Trampolína není nic Scala-specifického, Scala žádnou automatickou trampolínozaci AFAIK nedělá, článek co odkazuješ vypráví o tom jak si rekurzivní funkci ztrampolínovat ručně. Tail rekurzivní funkce (tedy i tu co jsem uvedl já) Scala převádí sama na obyčejnou smyčku (jak je vidět i z bajtkódu co jsem postnul), obecné rekurzivní funkce se volají obyčejně přes zásobník.

81
Vývoj / Re:Pár otázok na C++
« kdy: 21. 11. 2020, 08:25:18 »
Pokud chceš prostě spojit 100000 řetězců do jednoho, největší potíž při naivním přístupu  budou podle mě realokace, které se budou vyskytovat vždy když po nějakém počtu přidaných řetězců přeteče kapacita kontejneru, do kterého to sázíš (u std::string určitě, jak je interně implementovaný stringstream si nejsem jistý). Pokud ty spojované řetězce znáš předem, předalokuj si string s kapacitou takovou, aby se tam všechny vešly. Jestli je předem neznáš, zkus použít nějakou specializovanou strukturu jako je třeba rope.

A samozřejmě  benchmarkovat, benchmarkovat, benchmarkovat. S tím ti ale v C++ poradit nedovedu.

82
Vývoj / Re:Rekurze v Javě (i jinde)
« kdy: 20. 11. 2020, 18:36:53 »
Technická poznámka pro zajímavost: nepokračování bloku kódu může způsobit nejen výjimka, ale i nekonečná rekurze. Např. Scala má typ `Nothing`, který se typicky používá jako typ výsledku funkce, která nikdy neskončí.
Znamená to, že to Scala překládá do jiného bajtkódu, než je volání funkce? Tj. neukládá se volání na zásobník a může to být skutečná nekonečná rekurze?


Tak jsem z toho ten bajtkód dostal:

public scala.runtime.Nothing$ x();
  Code:
     0: goto          0

A CPU to žere, předtím jsem to nějak blbě pustil.

83
Vývoj / Re:Rekurze v Javě (i jinde)
« kdy: 20. 11. 2020, 18:22:26 »
def notImplemented: Nothing = throw new RuntimeException("Not implemented")
Kód: [Vybrat]
???

Jasně, rozepsal jsem to jen z didaktických důvodů.

84
Vývoj / Re:Rekurze v Javě (i jinde)
« kdy: 20. 11. 2020, 18:21:39 »
Technická poznámka pro zajímavost: nepokračování bloku kódu může způsobit nejen výjimka, ale i nekonečná rekurze. Např. Scala má typ `Nothing`, který se typicky používá jako typ výsledku funkce, která nikdy neskončí.
Znamená to, že to Scala překládá do jiného bajtkódu, než je volání funkce? Tj. neukládá se volání na zásobník a může to být skutečná nekonečná rekurze?

Asi narážíš na

def x: Nothing = x

Do bajtkódu jsem se nedíval. Zkusil jsem to pustit a zásobník nepřetéká. Scala v omezené míře (https://www.scala-exercises.org/scala_tutorial/tail_recursion) převádí tail rekurzi na smyčku (dokonce je možné funkci přidat anotaci @tailrec, která říká, že u funkce se očekává, že je tail rekurzivní, a pokud by nebyla, je to compile error). V tomhle  případě je ale překladač asi ještě chytřejší, protože při spuštění to ani nežere CPU, možná (ale opravdu jen spekuluju) prostě to vlákno zaparkuje a hotovo.

85
Vývoj / Re:Rekurze v Javě (i jinde)
« kdy: 19. 11. 2020, 10:10:07 »
Předpokládám že asi bude mít v paměti uložené kde skončil a po vykování toho celého bloku se tedy vrátí zpět. Je to možné?

Jasně, vykonávaný program má na zásobníku uložené, odkud byla která metoda vyvolaná, a po jejím skončení se vrátí na to místo, rekurze nerekurze. Tvůj semínkový algoritmus mi připadá při rychlém přelétnutí v pohodě, jen by ti při velkém obrázku mohl přetéct zásobník: https://www.tutorialcup.com/interview/stack/recursion.htm

86
Vývoj / Re:Rekurze v Javě (i jinde)
« kdy: 19. 11. 2020, 10:03:04 »
..Blok kódu se provádí vždy celý od začátku do konce, přerušit jeho provádění může jenom výjimka...

Technická poznámka pro zajímavost: nepokračování bloku kódu může způsobit nejen výjimka, ale i nekonečná rekurze. Např. Scala má typ `Nothing`, který se typicky používá jako typ výsledku funkce, která nikdy neskončí. Implementovat takovou funkci lze jako

def x: Nothing = {
  throw new RuntimeException("Nevratim se")
}

nebo i

def x: Nothing = {
  x
}

Tento typ má docela praktické použití. Jde o typ, který nemá žádnou hodnotu, tj. nelze vytvořit instanci tohoto typu, a je podtypem všech ostatních typů, takže ho lze použít na libovolném místě (v kovariantní pozici) místo jiného typu. Můžu tedy udělat např.

def notImplemented: Nothing = throw new RuntimeException("Not implemented")

val x: Int = if (podmínka) {
 1
} else{
 notImplemented
}

a překladačem to v pohodě projde.

87
Vývoj / Re:Rekurze v Javě (i jinde)
« kdy: 19. 11. 2020, 09:35:33 »
smazáno

88
Vývoj / Re:Rekurze v Javě (i jinde)
« kdy: 19. 11. 2020, 09:35:05 »
Citace: Standa Blábol link=topic=23869.msg340254#msg340254
Nesmysl, na stejne urovni rekurze se spusti se vsechny metody, nebo zadna.

Máš pravdu, taky mi to došlo hned po postnutí a už jsem svůj příspěvek opravil :-)

Přemýšlím, čím mi ten kód přijde tak matoucí, a asi tím, že aby ta rekurze byla netriviální (tj. `podmínka` se nevyhodnotila vždy jako `false`) a zároveň někdy skončila, musí `metoda1` nebo `doSomething` nějak měnit vnitřní stav a `podmínka` se na ten stav při vyhodnocování odkazovat (což mi přijde ošklivé, i když v nějakém specifickém kontextu to může být dobré řešení). Nebo vás napadá nějaká implementace `podmínka` a `metoda1`, která by se neodkazovala na stav (což dělá třeba `podmínka` u příspěvku Standy Blábola, která je implementovaná jako instanční proměnná), byla netriviální a zároveň někdy skončila? Zas tolik jsem tomu přemýšlení nedal, třeba mi uniká něco očividného..

89
Vývoj / Re:Rekurze v Javě (i jinde)
« kdy: 19. 11. 2020, 09:19:42 »
Citace: Standa Blábol link=topic=23869.msg340254#msg340254
Nesmysl, na stejne urovni rekurze se spusti se vsechny metody, nebo zadna.

Máš pravdu, taky mi to došlo hned po postnutí a už jsem svůj příspěvek opravil :-)

90
Vývoj / Re:Rekurze v Javě (i jinde)
« kdy: 19. 11. 2020, 09:15:03 »
1. Když píšeš že "to ale funguje v podstatě přesně tak jak bych chtěl. ", tak se mi zdá, že už máš nějaký funkční kód. V takovém případě je asi lepší postnout sem ten, ať neřešíme něco co je třeba jinak.

2. Když už máš funkční kód, doporučuju ti prokrokovat si ho v debuggeru, to ti v tom udělá jasno.

Jinak dejme tomu, že se ti zavolá doSomething(x,y); metoda1(x+1,y). Rekurzivní volání metoda1 si uvnitř něco dělá, představ si že je to blackbox a rekurzi úplně odmysli. Až tenhle blackbox skončí a vrátí se, prostě se spustí další řádek, tedy metoda1(x-1,y); a chová se úplně stejně, rekurze nerekurze. Až (jestli) někdy skončí, zavolá se další řádek...

Stran: 1 ... 4 5 [6] 7 8 ... 12