clojure-hungary

onetom 2022-10-14T07:36:16.332009Z

ez a FlowStorm dolog nagyon igeretesnek tunik: https://youtu.be/A3AzlqNwUXc probalta mar valaki? nekem pont le kellett nyomoznom egy performance issue-t a hetekben. probaltam megfogni ezekkel a cuccokkal, de korulmenyes volt:

thunknyc/profile             {:mvn/version "0.5.2"}
  org.clojure/tools.trace      {:mvn/version "0.7.11"}
ezek a namespaceik:
[profile.core :as prof :refer [profile]]
    [clojure.tools.trace :as trace]
ugyh vegulis az async-profiler segitett:
com.clojure-goes-fast/clj-async-profiler    {:mvn/version "1.0.0"}
de gyanitom h a FlowStorm-al meg hatekonyabb lett volna a vadaszat.

πŸ‘€ 1
sb 2022-10-14T17:42:49.531609Z

Igen, ez elegge jonak tunik. Foleg, hogy ki lehet menteni az aktualis lepes statuszat a repl-be.

sb 2022-10-14T17:43:18.545199Z

Ez nalam a flow-test volt. Eleg jo, sot... Koszi, hogy megosztottad errol lemaradtam! πŸ™‚

πŸ‘ 1
onetom 2022-10-14T14:29:56.009449Z

btw, epp azon morfondiroztam, h h lehetne clojure stilusban irni javascriptet. elso 5let az volt, h extra fuggveny argumentek, default ertekekkel szimulalnak a local binding-okat:

const P = x => (console.log('?', x), x) // Probe

console.log('Defining f...')
const f = (
  arg_1,
  // let:
  local_1 = P(2),
  local_2 = arg_1 + local_1 + 1
) => ({arg_1, local_1, local_2})

console.log('Calling f(1)...')
console.log(f(1))

console.log('Accidental local override...')
console.log(f(1, 10))
aztan rajottem h egy primitive segedeszkozzel tudok olvashatobb IIFE-t (https://developer.mozilla.org/en-US/docs/Glossary/IIFE) csinalni:
const Let = bindings => bindings()

console.log('Defining g...')
const g = arg_1 =>
  Let((local_1 = P(2),
       local_2 = arg_1 + local_1 + 1) => ({
    arg_1, local_1, local_2
  }))

console.log('Calling g(1)...')
console.log(g(1))
ami mar kb ugy nez ki, mint az elisp, pl πŸ™‚
(let ((variable value)
      (variable value)
      …)
  body…)

πŸ‘ 1
onetom 2022-10-14T14:35:03.809449Z

nyilvan nem idiomatic JS, ami hatrany, viszont az elony az, h ilyen stilussal nagyobb valoszinuseggel ir az ember funkcionalis kodot...

onetom 2022-10-14T14:39:24.101299Z

hasznaljuk pl a https://wappler.io -t, amiben van egy AppConnect nevu reactive JS framework, ami hasonloan a Vue.js -hez, reaktiv objektumokba csomagolja az adatokat. viszont olyan verbose, h mar meguntam es csinaltam hozza egy kis illesztest, amitol clojure-osebben megkozelitesu lehet a kod:

const merge = (o1, o2) => ({...o1, ...o2})
const deref = (dmx_var) => dmx_var?.dmxComponent?.get('value')
const reset = (dmx_var, val) => (dmx_var?.dmxComponent?.set('value', val), val)
const swap = (dmx_var, f, ...args) => reset(dmx_var, f(deref(dmx_var), ...args))
es igy tudok olyat irni pl, h:
reset(user,
    merge(
      decode_id_token(id_token()),
      merge(profile_defaults, user_profile)))
ami mar szinte clojure πŸ™‚

sb 2022-10-14T14:42:46.885039Z

holnap Γ­rok @onetom

πŸ‘ 1