• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    LITTLELIScala, Clojure, Groovy... Polyglot development with JVM
    Scala, Clojure, Yeti
    Kotlin, Ceylon

    Graalvm - polyglot virtual machine and runtime
    rozbalit záhlaví
    SATAI
    SATAI --- ---
    RUDOLF: Uz existuje pouzitelna SICP mutace pro Clojure nebo si to prekladas ze Scheme do Clojure?
    REDGUY
    REDGUY --- ---
    RUDOLF: A proc to vsechno nenapises rovnou v clojure? Co ziskas tema skriptama? Na SQL mas hned nekolik prima knihoven, md5 pocitat neni problem... proc si pridelavat praci s komunikaci mezi clojure a shellem? Data, vyjimky, stav, to vsechno musis predavat tam a zpatky, coz mi prijde jako desnej oser...
    RUDOLF
    RUDOLF --- ---
    Zdar, ve volným čas zkouším clojure. Poslouchám sicp, rozečtl jsem living clojure, nahodil ring+compojure+hiccup a zkusil na to narvat bootstrap. A cajk, na tom funkcionálního programování moc není, cítím se jak začínající phpkář:-)

    Každopádně bude to appka s web UI do práce, takovej data management. DBS bude obsahovat soubory v úložišti, metadata jako md5, zda už byli ingestovaný do jinýho systému apod. Appka bude validovat jestli jsou správný soubory ve správný složce, jestli je tam správná struktura adresářů, jestli jména souborů odpovídají patternu, jestli souhlasej nově vygenerovaný md5 apod. Na výstupu člověk uvidí jestli sesložky zelenaj, nebo jestli oranžoví a něco tam nesedí, či vysloveně rudej průser. Ty data byli od r. 2001 manažovaný ručně, tak je třeba zjistit různé formální nekonzistence. Plus je třeba držet statistiku kolem těch souborů.

    Teď mi připadá jako dobrý nápad, že ta moje appka bude jen managovat různý bash skripty. Tj. tlačítkem pustím tenhle skript, ať mi aktualizuje md5 a výstup v appce narvu do databáze, ať je tam timestamp kontroly s md5. Appka porovná záznamy, všechno cajk a ukáže se datum poslední kontroly + půjde rozkliknout historii přechozích kontrol.

    No a potřeboval bych poradit, jak nejlépe komunikovat mezi mojí aplikací a bashovýma skriptama. Případně mi říct, že na to jdu špatně a měl bych to řešit jinak:-)
    MARASAN
    MARASAN --- ---
    pisete nekdo Clojure ve VIMu?
    Pripojim-li se na REPL a v nem se objevi vyjimka - v mem pripade "java.io.IOException: Broken pipe" na TCP - tak mi vim zmrzne a nevim, co dal, co muzu delat. Da se to njak resit?
    LUDWIG_
    LUDWIG_ --- ---
    neco jako node.js pro JVM:

    http://vertx.io
    REDGUY
    REDGUY --- ---
    A at sem napisu taky neco uzitecnyho: pokud to jeste nahodou nevite, tak Light Table = rozkos.
    Light Table
    http://www.lighttable.com/
    REDGUY
    REDGUY --- ---
    LITTLELI: Nehledam, tomu se nedavaji (explicitni) dvojice.

    Co me (iracionalne) irituje je, ze ty funkce rikaji "Do tyhle, v mym pripade prazdny mapy nastrkej tyhle (ruznym zpusobem specifikovany) hodnoty a vrat mi vysledek". Co my chybi je funkce, ktera rika "Z tehle hodnot udelej novou mapu". A to navic tak, aby ty hodnoty byly zadany jako vektor dvouprvkovejch (k/v) vektoru.

    Ale jak rikam, to je jen moje OCD 8)
    LITTLELI
    LITTLELI --- ---
    a protože jsem slepej, že...
    ClojureDocs - clojure.core/assoc-in
    http://clojuredocs.org/clojure_core/clojure.core/assoc-in
    LITTLELI
    LITTLELI --- ---
    já sem možná natvrdlej, ale lepší bejt za troubu hned, nehledáš tohle?
    ClojureDocs - clojure.core/assoc
    http://clojuredocs.org/clojure_core/clojure.core/assoc
    REDGUY
    REDGUY --- ---
    LITTLELI: Diky, ale spatne jsem se vyjadril, myslel jsem vylozene funkci v clojure.core, ktera bere (jen) seq of pairs a vraci mapu. Ale taky dobry 8)
    LITTLELI
    LITTLELI --- ---
    REDGUY: zkusim :)

    (apply array-map (flatten [[:k1 1] [:k2 2] [:k3 3]]))
    REDGUY
    REDGUY --- ---
    Jakej je oficialni zpusob, jak v clojure udelat mapu ze sequence dvouprvkovejch vektoru [key value]?

    Delam to (into {} [[:k1 1] [:k2 2] [:k3 3]]), ale prijde mi to takovy osklivy, tim ze tam je ta prazdna mapa na zacatku. Fakt na to neni nejakej dedikovanej "konstruktor", nebo jsem ho jen prehlidl?

    (ano, je to prkotina, ale to ze me mluvi moje OCD. Diky za toleranci 8) )
    SATAI
    SATAI --- ---
    SATAI
    SATAI --- ---
    Vysel Ceylon 1.0
    Ceylon: Ceylon 1.0.0 is now available
    http://ceylon-lang.org/blog/2013/11/12/ceylon-1/
    LUDWIG_
    LUDWIG_ --- ---
    Java JIT compiler inlining | Julien's tech blog
    http://techblug.wordpress.com/2013/08/19/java-jit-compiler-inlining/

    "The morale of this story is that I made my code faster by adding a method call." - jinymi slovy ty extra metody, co Scala a spol. chrchli v bytekodu, nejsou uplne na skodu.
    ANT_39
    ANT_39 --- ---
    REDGUY: Neco se pise tady.
    REDGUY
    REDGUY --- ---
    Aaaaargh.

    Oukej, vzdavam se. Je nejaka mnemotechnicka pomucka, jak si v clojure zapamatovat rozdil mezi (dorun ...) a (doall ...)? Pokazdy to musim jak kokot hledat. Tj. vim jakej ten rozdil je. Jen z hlavy nevim ktera je ktera.
    REDGUY
    REDGUY --- ---
    ESORIMMER: Diky, skvelej clanek. Asi to nakonec udelam tak, ze ty funkce budou brat explicitni kontext jako parametr, ale budu je definovat makrem ktery ke kazdy z nich vygeneruje variantu, ktera si ho vezme z nejake vhodne var. Cili se budou volat bude (nejaka-funkce ctx arg1 arg2 ...) nebo (nejaka-funkce* arg1 arg2). Docela se mi libi ta moznost pouzit specialni znak v jmenu funkce jako vizualni indikator ze je necim specificka, je to kratky na psani a pritom zcela prehledny. Navic to makro muze zaroven v ne-hvezdickovy variante generovat pre-assert ze prvni argument je opravdu kontext, aby byla jasna diagnostika kdyz se nekdo prepise... musim rict ze se mi Clojure libi cim dal tim vic 8)
    ANT_39
    ANT_39 --- ---
    ESORIMMER: reseni 3 se misty pouziva v glibc (printf vs. fprintf, strtok vs. strtok_r, asi dalsi). Clojure neznam, ale tipuju, ze ta bezkontextova funkce se smrskne na jednoradkovy wrapper kolem te hlavni, a s duplikaci kodu v zasade neni problem. Maximalne s duplikaci API.
    ESORIMMER
    ESORIMMER --- ---
    REDGUY: Osobně bych volil přístup 1. Není to takovej "voser", jak se zdá na první pohled a má to několik výhod: a) je to jednoduchý b) management toho kontextu není v režii knihovny, ale volající aplikace, což může být důležitý c) je to nejvýkonnější řešení d) dobře se to testuje (viz např. ring).

    ^dynamic pro tyhle účely vypadá lákavě, ale má hromadu "drobných" problémů. Některé zmiňuješ, další čekají za rohem.

    řešení 3 vede k tomu, že budeš pálit čas vymýšlením, jak se zbavit duplikace kódu a udržovat všechno (včetně oprav a refaktoringu) aktuální

    Pro vysvětlení od povolanějšího můžu doporučit k přečtení tohle (vč. komentářů):

    On the Perils of Dynamic Scope | Digital Digressions by Stuart Sierra
    http://stuartsierra.com/2013/03/29/perils-of-dynamic-scope

    Všecky varianty se tam v zásadě probírají...
    REDGUY
    REDGUY --- ---
    ANT_39: Jo, tim usetrim to probublavani skrz svoje funkce. Ale porad budu muset vsude psat (api-function1 *conn* ...), coz je mirnej vopruz, ja bych chtel aby ten 99% pripad byl totalne painless. Zatim mi asi nejlepsi varianta prijde proste pro kazdou funkci mit dve varianty, jednu s a jednu bez explicitniho kontextu (a ta to bude brat z *conn*), coz, jestli chapu spravne defn, by nemel bejt problem...
    Kliknutím sem můžete změnit nastavení reklam