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

Stran: [1] 2
1
porovnám to s náklady na mojí životní/rodinnou "vizi", tak se nějak nemohu dopočítat.

Co mám dělat?

přehodnoťte svou životní vizi, nebudete litovat...

všechno nečeká blízko, tak nelítej nízko... ;-)

2
Vývoj / Re:Knihovna C++ pro práci se sítí
« kdy: 11. 10. 2023, 20:58:13 »
asio

Tu je vysvetlenie s príkladmi riešení od callbackov až po korutiny C++20

Talking Async Ep1: Why C++20 is the Awesomest Language for Network Programming
https://www.youtube.com/watch?v=icgnqFM-aY4

Existuje aj druhá časť.

3
Nebol by som taký skeptický. Kedysi dávno som niečo podobné vo Worde robil a dalo sa to zvládnuť.

Už si to detailne nepamätám, ale mal som tuším šablónu so štýlmi, na ktorej boli všetky dokumenty založené.

Pri otvorení dokumentu sa štýly načítavajú zo šablóny, a aktualizuje sa zobrazenie. Neviem už, či je to tak predvolené alebo to treba niekde zapnúť.

Môže sa stať, že niekto štýly nebude rešpektovať, alebo k nim niečo pridá. To sa dá odstrániť kávesovou skratkou a vrátiť sa do formátu podľa štýlu.

Okrem toho je vo worde možnosť vyhľadávania a nahradzovania nielen textu, ale aj formátu, dajú sa vyhľadávať a nahradzovať štýly, myslím, že aj priamy formát za štýly. V kombinácii s vyhľadávaním špeciálnych znakov je to celkom silný nástroj.

No a potom je tam možnosť napísať si makro, na opakované operácie, na ktoré vyhľadávanie a nahradzovanie nestačí. Tuším bola aj možnosť záznamu podľa toho, čo používateľ robí a potom to upraviť v editore.

4
Studium a uplatnění / Re:Co dělat v C++?
« kdy: 16. 06. 2023, 10:37:14 »
Áno, sú tu rady typu používaj Rust alebo používaj čokoľvek iné ako C++, to je tu typické.

Asi k tomu bude nějaký důvod.

Ako napríklad neschopnosť alebo neochota odpovedajúcich držať sa v kontexte položenej otázky?

Kontext je definovaný technológiou, oblastiami záujmu, časovými možnosťami a zámerom nájsť si zamestnanie. A potom ďalej v diskusii zámerom ďalej neštudovať.

Takže, ktorý bežne používaný softvér napísaný v Ruste je rozšírený vo vymenovaných oblastiach záujmu do tej miery, že firmy, ktoré ho vyvíjajú, prijímajú juniorov?

Ja v otázke naozaj nikde nevidím systémový softvér alebo softvér z oblasti bezpečnosti.

A ten odkaz na CAD v Ruste? Nechcem nikoho zhadzovať, ale podľa môjho skromného názoru je iba malá šanca, že ten projekt bude niekedy dokončený. Aj keď uvažujeme o tej minimalizovanej podobe, do ktorej autor dospel, keď pochopil, že v pôvodnom rozsahu to nedokončí. A o jeho rozšírení si ilúzie nerobím už vôbec. Ani keby bol projekt dokončený v pôvodnom rozsahu.

Na druhej strane, ktoré široko používané CAD aplikácie majú API v C++? Všetky?

No a keďže mám osobnú skúsenosť s tým aké komplikované je doviesť firmy ako Autodesk alebo Dassault Systemes k tomu, aby rozšírili alebo aspoň opravili správanie API, aby fungovalo tak, ako je deklarované v dokumentácii, tak si ani nechcem predstaviť aké márne by bolo požadovať API v Ruste.

A myslím, že v ostatných vymenovaných oblastiach to bude podobné.

Ja osobne proti Rustu nič nemám. Môže to byť pekný jazyk. Na nejaké veci. A na nejaké iné veci nemá zmysel sa ním vôbec zaoberať. Zvlášť ak ide o platformu, kde pre Rust nie je API. Pričom ale je v C++.

5
Studium a uplatnění / Re:Co dělat v C++?
« kdy: 15. 06. 2023, 18:06:46 »
...je naozaj nutné učiť sa ho správnym spôsobom a nezapadnúť do historických postupov, ktoré v jazyku ostávajú z dôvodov spätnej kompatibility....
Oni totiz vsichni vsechno zacali vyvijet prave vcera, a tudiz v naprosto vsech projektech vubec nejsou desitky let kodu ... specielne pak v oborech, o ktere tazatel jevi zajem ...

O embedded záujem nemá. To je asi jediná sada platforiem, kde nemusí existovať moderný prekladač.

Pre všetky ostatné platformy si každý musí spočítať, či sa mu viac vyplatí držať sa na prekladači pred C++11 a písať kód prekonaným spôsobom alebo investovať do toho, aby sa pri zostavení dal použiť moderný prekladač a aby sa dal kód písať súčasným a odporúčaným spôsobom.

Učením sa v kontexte mojej odpovede som myslel učenie sa s cieľom byť schopný niečo vytvoriť na zelenej lúke.

A fakt sa nepúšťajme do debát, že zorientovať sa v cudzom rozsiahlom kóde je tiež náročné. Áno, je, ale iným spôsobom, tam to vyplýva z rozsahu, komplexnosti, previazanosti, atď., ale je to iné ako vytvoriť niečo nové tak, aby to bolo súčasné a idiomatické. To by bola diskusia na úplne inú tému.

6
Studium a uplatnění / Re:Co dělat v C++?
« kdy: 14. 06. 2023, 16:32:06 »
Áno, sú tu rady typu používaj Rust alebo používaj čokoľvek iné ako C++, to je tu typické.

Odhliadnúc od vymenovaných oblastí záujmu sa mi ako zaujímavé miesto pre C++ javí napríklad Bloomberg.

Čo sa C++ ako takého týka, tak je naozaj nutné učiť sa ho správnym spôsobom a nezapadnúť do historických postupov, ktoré v jazyku ostávajú z dôvodov spätnej kompatibility.

Základné kľúčové slovo pre hľadanie kníh a článkov je "modern". Tým sa myslia veci po C++11, kde ale vývoj rozhodne nezastavil, to skôr naopak.

Okrem kníh a článkov existujú aj odporúčania spravované kľúčovými členmi komunity:
https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines

A potom veľké množstvo prednášok. Dajú sa použiť ako inšpirácia pre to kam sa chce človek dostať.

Tu je napríklad ako sa dajú elegantne kombinovať moderné veci:
https://www.youtube.com/watch?v=yUIFdL3D0Vk

Tu zas veľmi pekné video o asynchrónnych programoch s autorom knižnice asio:
https://www.youtube.com/watch?v=tTTzpK6LDMk   

Je to tak trochu porovnávacie video toho istého autora na tú istú tému po asi 10 rokoch a celkom pekne ukazuje vývoj jazyka. Pôvodné video je spomenuté na začiatku. Je k tomu aj zdrojový kód, tak sa to dá celkom pekne študovať.

7
c/c++ se zivim, ale kdyz si mam udelat nejakou utilitku a chci si pohrat, tak jdu do go, chci se go poradne naucit.
ale furt je to primarne pro zabavu.

A nestálo by za to naučiť sa poriadne radšej C++? ;-)

8
Vývoj / Re:Je Rust jazyk budoucnosti?
« kdy: 01. 12. 2022, 15:45:12 »
Tyhle diskuse me vzdy bavi a pritom odpoved je jasna. Fortran a LISP.

Ešte si dovolím doplniť editor: https://youtu.be/qzC5H5xrr-E?t=55


9
Vývoj / Re:Lifetime static/global/heap-allocated objektu v C++
« kdy: 02. 08. 2022, 11:55:28 »
Ja vedel ze C++ je slepa cesta :) jen si hezky onanujte, vy uber-programatori.

Na vse ostatni staci takovy jednodychy on-demand generator:

Citace
typ *single() {
  static typ *instance;
  if (!instance) instance = &new typ();
  return instance;
}

To céčku je naozaj nutné kontrolovať, či statická premenná vo funkcii bola inicializovaná?

V C++ nie je, jednoducho to prebehne iba pri prvom volaní a platí to aj pre tú alokáciu pamäte.

A od C+11 je to aj thread-safe...

10
Vývoj / Re:Ako sa naucit rozmyslat?
« kdy: 05. 07. 2022, 22:53:58 »
To je dobrá otázka. Ako sa naučiť rozmýšľať, to neviem, ale ako sa naučiť rozmýšľať o písaní softvéru je celkom dobre popísané v knihe How to Design Programs - https://htdp.org/. Už som to tu písal (a určite to ešte niekoľkokrát napíšem), podľa mňa je to asi najlepšia kniha pre začínajúcich programátorov. A to asi preto, lebo neučí písať programy, ale navrhovať ich a rozmýšľať o nich. Rozhodne odporúčam prečítať si aspoň úvod, tam je to pekne vysvetlené - čo, ako a prečo.

Kniha je písana vyslovene na výuku, je v nej použitých niekoľko programovacích jazykov, alebo možno skôr niekoľko úrovní programovacieho jazyka z jednej rodiny, a znalosti sa dajú jednoducho preklopiť do skutočného jazyka z tej rodiny jazykov.

Trochu neštandardné je, že popisuje funkcionálny prístup k programovaniu, ale v tejto dobe sa k tomu aj tak značne vraciame, lebo je to jednoducho vzhľadom na aktuálne dostupné platformy výhodné, pretože, veľmi zjednodušene povedané, sa pri tom musíme starať o menej vecí a tým sa o napísanom programe ľahšie rozmýšľa, a okrem toho, tieto princípy vo veľkom prenikajú aj do iných jazykov, tak to nie je žiadna nevýhoda.

A čo sa toho rozmýšľania týka, tak kniha sprevádza cez niekoľko úrovní problémov, ktoré sa v programárorskej praxi vyskytujú a popisuje ako ich riešiť a to jednotným spôsobom, pričom centrálnom myšlienkou je podľa mňa receptúra návrhu, podľa ktorej sa dá postupovať a ktorá sa pre jednotlivé zvyšujúce sa náročnosti trochu rozširuje aj s nejakou základnou šablónou pre funkcie.

No a čo sa týka náväznosti na matematiku, tak tým vlastne autori začínajú, keď ako minimum, ktoré asi každý pozná, odkazujú na aritmetiku s číslami, a potom ju vlastne rozširujú na "aritmetiku textov" a "aritmetiku obrázkov", potom pridajú funkciu, atď.

11
Nechcem nikoho poučovať, ale táto forma štúdia sa mi javí ako krajne nešťastná, a neefektívna, lebo vlepený kód odpovede pravdepodobne povedie iba k ďalšíemu miešaniu konceptov, prípadne vynechaniu základu, ktorý súvisiace koncepty spojuje.

Na začiatku by možno stálo za to zamyslieť sa nad tým, ako sa ten syntaktický cukor volá oficiálne.

V origináli je to range-based for loop, teda cyklus for založený na rozsahoch.

Loop, for, based sú asi jasné pojmy, takže kľúčové slovo pre ďalšie hľadanie a štúdium musí byť range.

Takže tie "objekty, ktoré obsahujú iterátor" majú pevne definovaný názov a v skutočnosti neobsahujú iterátor jeden, ale dva.

Jeden z nich je začiatok nejakého rozsahu, druhý jeho koniec (alebo niečo, čo sa dá za koniec považovať).

Najskôr sa rozsahy objavili asi v rámci knižníc boost, potom to značne rozvinul Eric Niebler v samostatnej knižnici, a nakoniec je to súčasťou C++20 ako jedna z niekoľkých veľkých vecí, ktoré boli do jazyka pridané.

Celkovo teda možnosti sú dve, buď to riešiť priamo iterátormi, čo je klasické riešenie, alebo použiť range, ktorý ich bude obsahovať, čo je moderné riešenie.

Okrem toho, C++, vzhľadom na jeho rozsiahlosť, históriu siahajúcu 40 rokov do minulosti a kvantá kódu, ktorý sa musí dať stále preložiť, nie je iba jazyk ako taký, ale aj sada odporúčaní, ktoré časti jazyka používať na písanie nového kódu, aby to bolo v súlade s tým, čo členovia normalizačného výboru zamýšľali.

A už minimálne 20 rokov je jedným z nich odporúčanie nepoužívať holé cykly, ale štandardné algoritmy. Síce neviem, či je to niekde napísané, ale dovolím si povedať, že sa to týka aj cyklu for založeného na rozsahoch.

Pretože čitateľovi stačí čítať názvy algoritmov a ich náväznosti a vie, čo sa v kóde deje, pričom čítanie tela cyklov vyžaduje hlbšie sústredenie na pochopenie.

Takže, riešenie založené na iterátoroch použije štandardný algoritmus na filtrovanie, ktorý berie iterátor začiatku rozsahu (v kontajneri alebo kdekoľvek) odkiaľ sa má kopírovať, iterátor konca a jednoduchú funkciu alebo (od C++11) lambdu vyhodnocujúcu jednotlivý element.

Výsledok by bol v štandardnom kontajneri a bol by spracovaný opäť štandardným algoritmom, v tomto prípade algoritmom kopírovania, ktorý opäť berie iterátor začiatku (zdroja), iterátor konca (zdroja) a iterátor na miesto kam sa majú jednotlivé elementy skopírovať

Tento musí byť vo forme výstupného iterátora, teda vlastne "ukazovateľa" na miesto, kam sa zapíše prvý kopírovaný element.

Najjednoduchšie sa kopíruje do kontajnerov, keďže ich iterátory zvyčajne vyhovujú požiadavkám kladeným na výstupné iterátory.

Navyše, algoritmus kopírovania predpokladá, že od miesta, kam sa zapíše prvý kopírovaný element existuje toľko elementov, koľko sa kopíruje.

Pokiaľ táto podmienka nie je splnená, je možné zabezpečiť, aby sa elementy do kontajnera vkladali za letu, teda počas kopírovania jednotlivých zdrojových elementov, a to sa robí tak, že do algoritmu kopírovania sa ako miesto pre prvú kopírovanú položku zadá cieľový kontajner obalený adaptérom, vo forme vkladacieho iterátora.

Lenže v zadaní je výstup do štandardného výstupného prúdu, teda nie do kontajnera, takže sa nepoužije vkladací iterátor, ale iterátor výstupného prúdu, ktorý zabezpečí kompatibilitu s požiadavkami algoritmu, teda je vo forme výstupného iterátora.

No, a konečne sa dostávame k rozsahom. Tie tiež majú svoje štandardné algoritmy, len ako vstup neberú jednotlivé iterátory, ale kompletný rozsah, ktorý obsahuje iterátor svojho začiatku aj iterátor svojho konca.

A aby sa to písalo ešte jednoduchšie, tak už od rozsahov knižnice boost sa dajú písať konštrukcie, kedy jednotlivé algoritmy je možné zreťaziť použitím operátora |, čím vzniká veľmi elegantný zápis nie nepodobný kolone príkazov ako ich má UNIX, alebo aj PowerShell. A určite to preniká aj do iných jazykov.

Ale s týmto sme sa už v tomto fóre stretli, a to konkrétne tu: https://forum.root.cz/index.php?topic=23399.0

Čo iba potvrdzuje môj dojem z prvého odstavca tohto príspevku.

No a na záver: už v rozsahoch knižnice boost bolo možné triviálne vytvoriť rozsah z dvoch iterátorov a osobne nevidím dôvod, aby táto možnosť nebola aj v štandardnej knižnici C++20.

12
Vývoj / Re:Jaký jazyk bych se měl učit?
« kdy: 01. 06. 2022, 10:18:04 »
... Kdyby jejich integrační testy používaly danou část rozhraní, rozbily by se, ale bohužel, to nebyl ten případ.

Otázka je, či by si uvedomil, že sa testy rozbili kvôli tomu, že zmenil verejné rozhranie alebo či by tie testy upravil, aby úspešne prebehlo zostavenie.

Možno by to skôr chcelo jasný proces pri kontrole potvrdzovania zmien v súboroch, ktoré sú súčasťou verejného rozhrania vrátane nejakého varovania.

13
Vývoj / Re:Jaký jazyk bych se měl učit?
« kdy: 30. 05. 2022, 16:31:36 »
...ale občas se stane, že někdo omylem rozbije interface v minor verzi

Nechcem vŕtať, ale ako sa dá rozbiť rozhranie omylom? :-)

S ohledem na přísnou typovost jazyka je to zpravidla opravdu lehké odhalit, aniž by se rozbil kód v produkci.

Ani teraz nechcem vŕtať, ale prečo teda na to neprišli, kým to nevydali?

14
Vývoj / Re:Jaký jazyk bych se měl učit?
« kdy: 26. 05. 2022, 14:41:08 »
How to Design Programs síce nie je na báze Haskellu, ale Lispu. Teda Scheme. Vlastne Racketu... […] kniha vyučuje vývoj programov na báze funkcionálneho programovania
To je záslužné, ale je to vhodné pro úplné začátečníky?

Je to vhodné hlavne pre úplných začiatočníkov. Pokročilí si môžu povedať, že vysvetľované koncepty už poznajú a môžu sa pri tom možno trochu nudiť, pokiaľ teda nemajú skúsenosť, že aj tak sa môžu naučiť niečo nové alebo inak zasadené do kontextu, ako to dovtedy poznali.

Navyše majú vlastné vývojové prostredie, ktoré obsahuje REPL pre rýchly prieskum a aj analýzu kódu pre vysvetlenie, čo sa v ňom deje.

Myslené tak, že prostredie dokáže znázorniť ako postupne sú jednotlivé zložené výrazy vyhodnocované a prečo majú taký výsledok aký nakoniec majú.

Navyše kniha nejde smerom, že vysvetľuje jednotlivé štruktúry jazyka a potom hľadá použitie, ale uvádza aké problémy sa pri písaní programov vyskytujú, od najmenšej zložitosti po vyššiu, vždy prednesie príklad, analyzuje ho a ponúkne na jeho riešenie vhodný prostriedok.

15
Vývoj / Re:Jaký jazyk bych se měl učit?
« kdy: 26. 05. 2022, 10:17:26 »
K mojej predchádzajúcej odpovedi:

Vôbec som neriešil situáciu, že by som mohol odpovedať niekomu, kto už pogramovať vie a iba hľadá ďalší jazyk, v ktorom by sa mohol uplatniť na trhu. Riešil som sitáciu, že nevie programovať vôbec.

K niektorým príspevkom vyššie:

Python ale nie je jazyk na výuku, je to jazyk na programovanie. A na výuku sa iba používa. Asi kvôli tomu, že je vo svojich základoch jednoduchý. Je ale otázka, či python ako taký vznikal s dôrazom na výukový proces a či pri jeho návrhu boli zohľadnené špecifiká tohto procesu, prípadne, či súbežne s návrhom jazyka vznikal aj výukový proces.

Jazyky na výuku programovania pritom ale existujú. Napríklad v mnou vyššie odkazovanej knihe How To Design Programs je popísaných niekoľko takýchto jazykov, počínajúc jazykom pre začiatočníkov, cez jazyk pre pokročilých až po jazyk použiteľný v produkcii.

Niekomu sa to môže zdať byť na hlavu, ale čo som si všimol, tak reálmym jazykom sa často vyčíta, že s tým ako dozrievajú, postupne majú všetko, čo sa dá a potom sa v tom nedá vyznať a je to hlavne problém pre začiatočníkov.

K Haskellu:

OSN vlastne nebol ani náhodou tak ďaleko, ako by sa mohlo zdať. How to Design Programs síce nie je na báze Haskellu, ale Lispu. Teda Scheme. Vlastne Racketu... Ale to je pre toto použitie úplne jedno.

A áno, kniha vyučuje vývoj programov na báze funkcionálneho programovania, ako jedného z možných prístupov k programovaniu, pričom iný z možných prístupov, ktorý je asi prevládajúci, teda imperatívne programovanie, bolo v druhom vydaní vypustené, ale to vôbec nevadí. Naopak, môže to byť skôr plus.

Pretože, ako už niekto vyššie spomenul, funkcionálne prístupy dlhodobo prenikajú do všetkých jazykov. Jenoducho sa pre aktuálne podmienky, kedy máme veľké množstvo výpočtových jadier a tým veľké množstvo činností vykonávaných "súčasne", ukázali byť v niektorých aspektoch vhodnejšie a jednoduchšie na rozmýšľanie o tom, čo sa to v programe vlastne deje, ale hlave o tom, čo sa v ňom diať nemôže a nie je to preto nutné riešiť ani to nemôže spôsobovať problémy.

A pokiaľ sa človek naučí funkcionálne vyriešiť všetko, tak keď potom v iných jazykoch potrebuje funkcionálne riešiť iba niečo, a som presvedčený, že do takej situácie sa v modernej dobe dostane, lebo bude chcieť používať vlastnosti jazyka, ktoré pre neho budú výhodné, tak iba použije podmnožinu toho, čo už vie.

Techniky funkcionálneho programovania majú v súčasnosti uplatnenie všade. Či už je to JavaScript, Java, asi najpoužívanejšia hračka na moderné weby, ktorá sa volá React, alebo v technológie, ktoré bežia pod tým ako ReactiveX, atď.

Dokonca aj v najmenej populárnom jazyku na tomto fóre, teda v C++, u ktorého sa nemôžem ubrániť dojmu,  že je provažované za absolútny protiklad dobrých jazykov, a o ktorom by to asi nikto, kto v ňom nepíše, možno nepovedal, sa dajú techniky funkcionálneho programovania úspešne používať, a sú autoritami odporúčané už minimálne dve dekády.

A keď sa napríklad zamyslíme nad tým kedy začala v C++ naozajstná revolúcia, odhliadnuc od STL Alexandra Stepanova, tak to bolo podľa mňa v roku asi 2001, keď Andrei Alexandrescu vydal Modern C++ Design, kde v jadre základných stavebných prvkov knižníc používa techniky, pri ktorých je už z prvých kapitol tej knihy jasné, že sa musel veľmi dobre orientovať v Lispe.

Takže jednoducho, veci sa prelínajú a keď sa niečo človek principiálne dobre naučí, bude to vedieť použiť aj inde.

Stran: [1] 2