Fork me on GitHub
#clojure-russia
<
2016-03-15
>
az05:03:04

@nicola: цифры на слайдах что означают? deb - 10 DokerHub - 9 pip - 5 rpm - 4 maven - 3 nexus - 3 artifactory - 3 кол-во голосов?

Kira Sotnikov08:03:44

{:body {:status "ok", :count 3, :count_total 1005, :pages 335, :posts [{:id 11223, :url ""} {:id 11197, :url ""} {:id 11189, :url ""}]}, :content-type :application/json, :content-type-params {:charset "UTF-8"}, :headers {"Server" "nginx/1.4.6 (Ubuntu)", "Date" "Tue, 15 Mar 2016 08:14:38 GMT", "Content-Type" "application/json; charset=UTF-8", "Transfer-Encoding" "chunked", "Connection" "close", "X-Powered-By" "PHP/5.5.9-1ubuntu4.14"}, :orig-content-encoding nil, :request-time 1551, :status 200, :trace-redirects [""]}

Kira Sotnikov08:03:00

вот есть такой выхлоп от запроса, как отсюда выдрать url все?

Kira Sotnikov08:03:13

меня смущает что там внутри вектор

Kira Sotnikov08:03:58

кхм через -> получилось )

kronos_vano08:03:23

(map :url (get-in var [:body :posts]))

kronos_vano08:03:25

например

Kira Sotnikov08:03:25

(map :url (-> posts :body :posts ))

Kira Sotnikov08:03:33

вот мой вариант

Kira Sotnikov08:03:00

оказывается без get-in вложенные нельзя структурки

Kira Sotnikov08:03:24

спасибо

Kira Sotnikov08:03:42

а можно сказать (let [ x abc y (str x cde)])?

kronos_vano08:03:36

почему просто не попробовать в repl ?

Kira Sotnikov08:03:26

быстрее спросить )

artemyarulin08:03:21

я кстати замечал что многие фигвил например юзают тока как live reload. Даже в доке для него nrepl находиться в advanced разделе и это печально. Главная же как раз фича кложуры (и вообще лиспов как понимаю) это именно репл

artemyarulin08:03:19

к стыду своему я тоже первые пол года может с CLJ|CLJS так и работал, компилировал как дурак чтоб посмотреть результаты( А счас репл месяцами висит, прям такой кайф simple_smile

Kira Sotnikov08:03:25

я репл еще не освоил нормально 😞

Kira Sotnikov08:03:41

я третий день программирую на кложе

artemyarulin08:03:45

дада, оно не сразу приходит, хоть и по мне является главной фичей.

Kira Sotnikov08:03:55

я умом понимаю что я тарчу много времени

artemyarulin08:03:59

ааа ну тада да

Kira Sotnikov08:03:17

и что репл прям нужен, но мне нужно сначала понять как все это работает )

Kira Sotnikov08:03:34

причем функции я сначала делаю в репле, но я не умею подгружать код

Kira Sotnikov08:03:40

и не умею в репл на ремоуте

Kira Sotnikov08:03:05

нельзя короче, не видит он вариаблу

Kira Sotnikov08:03:18

Unable to resolve symbol: wp_uri in this context

artemyarulin08:03:21

дада, надо просто сесть и разобраться и самое главное прочувствовать. Многие из-за репла слезть потом с кложуры именно не могут:)

Kira Sotnikov08:03:33

потому что я дурак и напсиал разные перменные )

Kira Sotnikov08:03:15

ну и еще я думаю каждый должен пройти свой путь

Kira Sotnikov08:03:09

кому-то проще долго читать доки и потом сразу писать красиво

Kira Sotnikov08:03:17

а кто-то долго собирает грабли как я)

Kira Sotnikov08:03:44

я называю свой метод Clojure Crash Course

artemyarulin08:03:45

Народ, вроде была какая функция для аналога

(first (filter #(< 4 %) (range 10)))
т.е. filter + first?

artemyarulin08:03:02

найти первое совпадение т.е. во

artemyarulin08:03:52

типа (some #(when (< 4 %) %) (range 10))

artemyarulin08:03:11

ну чота тоже не красиво simple_smile

oxgrouby08:03:58

позвольте узнать, а как вы красоту измеряете?

kronos_vano08:03:59

судя по доке лучше нету, если нужно ==var то можно (some #{var} coll)

artemyarulin08:03:40

по количувству букв и % simple_smile

artemyarulin08:03:32

ну ладно, оставлю пока filter + first

kronos_vano08:03:46

some + when мнеьше буков

Kira Sotnikov09:03:36

если не похоже на перл то красиво )

oxgrouby09:03:23

как по мне так красота - мера измерения скорости чтения кода. Перл вполне себе красивый если быстро читается

kronos_vano09:03:53

перл очень быстро читается, буковок то мало,... Только нихера не понятно

oxgrouby09:03:03

ну, скорость чтения(понимания) не знающего язык, и знающего находятся в обратной зависимости

artemyarulin09:03:26

в тред врывается APL:

life←{↑1 ⍵∨.∧3 4=+/,¯1 0 1∘.⊖¯1 0 1∘.⌽⊂⍵}

Kira Sotnikov09:03:18

я опять с глупым вопросом

Kira Sotnikov09:03:31

вот есть функция, принимает 2 аргумент

Kira Sotnikov09:03:43

как мне натравить ее на массив через map или apply?

Kira Sotnikov09:03:01

(map func (list) arg2)

Kira Sotnikov09:03:35

как-то так, то есть функция должна принять каждый элемнет списка и один и тот же аргумент как второй аргумент

larhat09:03:21

partial, #()

Kira Sotnikov10:03:51

larhat: а есть дока по map+partial с примерами

Kira Sotnikov10:03:55

что-то не могу сообразить

andfadeev10:03:01

(map (partial + 1) [1 2 3])

Kira Sotnikov10:03:21

то есть списко должен быть вторым аргументом

larhat10:03:06

ну это типа сигнатура такая у map : функция последовательность

andfadeev10:03:13

(defn f [a1 a2] (+ a1 a2)) (def f2 (partial f 1))

andfadeev10:03:30

но проще вкурить доку про partial

Kira Sotnikov10:03:59

в репле с партиал заработало, спасибо

Kira Sotnikov10:03:08

(= message "/last3") (do (map (partial sendMessage chat-id) (wordpress/get-last 3))) 

Kira Sotnikov10:03:23

в репле работает, а в нерепле нет ._.

Kira Sotnikov10:03:49

я криво условие написал?

andfadeev11:03:45

map ленивая + не стоит туда функцию с сайд эффектом передавать

andfadeev11:03:12

есть doall doseq dorun

Kira Sotnikov11:03:10

оу точно

Kira Sotnikov11:03:15

спасибо

Kira Sotnikov11:03:50

надо заботать в чем ленивость )

Kira Sotnikov11:03:55

но лень ))

malch11:03:58

@lowl4tency: ты лениво заботай!

malch11:03:58

(future (learn!))

Kira Sotnikov11:03:20

япримерно все так и ботаю )

Kira Sotnikov11:03:27

понадобилось -> заботал

Kira Sotnikov11:03:34

не нужно - не ботаю)

Kira Sotnikov11:03:27

к слову посуду я мою тоже лениво

artemyarulin11:03:02

да ты прям создан для хаскеля - там все лениво в ленивой степени 😄

Kira Sotnikov11:03:29

elisp clojure и хаскель не слишком много зараз?)

Kira Sotnikov11:03:04

(doseq [uri (wp/get-last 3)] (tg/sendMessage chat-id uri))

Kira Sotnikov11:03:12

получилось даже покрасивее

Kira Sotnikov11:03:21

только один хер не работает ._.

Kira Sotnikov11:03:43

даже через doseq

Kira Sotnikov12:03:48

(condp = message
    "/last" (doseq [uri (wordpress/get-last 3)] (sendMessage chat-id uri))
NFO: Webhook recieved message:  {:update_id 885805652, :message {:message_id 211, :from {:id 169913372, :first_name Kirill}, :chat {:id 169913372, :first_name Kirill, :type private}, :date 1458043242, :text /last}}

Kira Sotnikov12:03:43

другие команды работают, но там проще пинг понг например

Kira Sotnikov12:03:05

где мой сайд эффект (

Kira Sotnikov12:03:52

если весь апп в репле пускать (core/-main) то все работает ._.

Kira Sotnikov12:03:22

а если запускать через lein with-profile app trampoline run -m app.core то нет

Kira Sotnikov12:03:55

в уберджаре такая же фигня ._.

andmed13:03:49

а какой порядок вычисления функции: копируется тело процедуры, разворачивается целиком и запускается на выполнение? есть оптимизация такого "разворачивания"? промежуточные стейты на уровне компилятора/интерпретатора? совсем не понимаю техники

andmed13:03:57

что на эту тему можно посмотреть из доступного

andmed13:03:26

в смысле, пониманию simple_smile

fxposter14:03:19

(sendMessage chat-id uri) что возвращает-то?)

Kira Sotnikov14:03:25

fxposter:

=> (tg/sendMessage 169913372 "uri")
Mar 15, 2016 10:21:07 AM herman.api.telegram invoke
INFO: {:status 200, :headers {Server nginx/1.6.2, Date Tue, 15 Mar 2016 14:21:07 GMT, Content-Type application/json, Content-Length 211, Connection close, Access-Control-Allow-Origin *, Access-Control-Allow-Methods GET, POST, OPTIONS, Strict-Transport-Security max-age=31536000; includeSubdomains}, :body {"ok":true,"result":{"message_id":268,"from":{"id":180395064,"first_name":"Bigvill Samara","username":"bigvillbot"},"chat":{"id":169913372,"first_name":"Kirill","type":"private"},"date":1458051667,"text":"uri"}}, :request-time 259, :trace-redirects [], :orig-content-encoding nil}

Kira Sotnikov14:03:10

Запалил все токены)

fxposter14:03:49

(let [a (tg/sendMessage 169913372 "uri”)] nil)

fxposter14:03:55

выполняет то что нужно?

Kira Sotnikov14:03:49

(let [a (tg/sendMessage 169913372 "uri”)] nil)
         #_=>

Kira Sotnikov14:03:02

Я кажется нашел

Kira Sotnikov14:03:07

(let [uri (str (cfg/config :wordpress-uri) "/get_recent_posts?include=url&count=" 3 )] (doseq [ post (-> (client/get uri {:insecure :true :as :auto}) :body :posts)] (-> :url post )))
nil

Kira Sotnikov14:03:53

это кусок get-last

Kira Sotnikov14:03:05

и он возвращает нил который передается в sendMessage

Kira Sotnikov14:03:16

кстати, а в кложе есть типа pep8?

andfadeev14:03:34

заюзай схему чтоб не было таких проблем

Kira Sotnikov14:03:17

какую схему?

andfadeev14:03:44

это я про то что nil пришел

Kira Sotnikov14:03:49

спасибо посмотрю

Kira Sotnikov14:03:10

блин все равно не работает ;(

andfadeev14:03:48

значит не все баги разгреб

Kira Sotnikov14:03:14

еще бы научиться дебажить )

andfadeev14:03:57

да тут никто не дебажит

Kira Sotnikov14:03:59

(for [ post (-> (client/get uri {:insecure :true :as :auto}) :body :posts)] (-> :url post )))

Kira Sotnikov14:03:26

вот этим я выгребаю из апишечки линки

Kira Sotnikov14:03:43

но на выходе тут не лист?

fxposter14:03:35

ну вот

fxposter14:03:42

for возвращает lazy seq

andfadeev14:03:44

из for lazyseq вроде

fxposter14:03:16

но по-моему это уже ненормальная кложура simple_smile

Kira Sotnikov14:03:21

doseq вовзращает nil 😞

Kira Sotnikov14:03:18

Спасибо!

delaguardo16:03:37

вот это можно с натяжкой назвать PEP8 для clojure - https://github.com/bbatsov/clojure-style-guide

rmuslimov17:03:51

> да тут никто не дебажит А что не дебажат? Я тут попробовал cider-debug золотая вещь особенно с последним cider-enlighten-mode

abtv18:03:59

Парни, а как вы тестируете cljs? Этим https://github.com/bensu/doo ?

Kira Sotnikov19:03:54

(defn get-last [count]
  (let [uri (str (cfg/config :wordpress-uri) "/get_recent_posts?include=url&count=" count)
    response (client/get uri {:accept :json :insecure :true :as :auto})]
    (println (str "AAAAAAAA " uri response ))
     (println ( get-in response [:body :posts]))))
NFO: 169913372 /last
AAAAAAAA  200, :headers {"Server" "nginx/1.4.6 (Ubuntu)", "Date" "Tue, 15 Mar 2016 18:59:03 GMT", "Content-Type" "application/json; charset=UTF-8", "Transfer-Encoding" "chunked", "Connection" "close", "X-Powered-By" "PHP/5.5.9-1ubuntu4.14"}, :body "{\"status\":\"ok\",\"count\":3,\"count_total\":1007,\"pages\":336,\"posts\":[{\"id\":11255,\"url\":\"\/1"}]}", :request-time 325, :trace-redirects [""], :orig-content-encoding nil, :content-type :application/json, :content-type-params {:charset "UTF-8"}}
nil
Mar 15, 2016 2:59:03 PM herman.api.telegram invoke
INFO: nil

Kira Sotnikov19:03:19

почему get-in не роботает? 😞

fxposter19:03:54

потому что body - строка

fxposter19:03:01

неужели не видно?)

malch19:03:34

тебе нужно прочитать json чем-то

Kira Sotnikov19:03:45

а почему с репла оно работало?

malch19:03:05

не верю simple_smile

Kira Sotnikov19:03:33

SEVERE: Caught exception  clojure.lang.PersistentArrayMap cannot be cast to java.lang.String

Kira Sotnikov19:03:45

я же показывал выше

malch19:03:50

если ты один и тот же код в repl и не в repl запускаешь, то должно работать одинаково

malch19:03:01

в 99% случаев

Kira Sotnikov19:03:14

Работает по разному

fxposter19:03:21

работает одинаково

fxposter19:03:26

значит это не один и тот же код

Kira Sotnikov19:03:26

из репла я получаю сообщение даже в телеграм

fxposter19:03:29

у тебя там строка

fxposter19:03:39

ты в консоли видишь что у тебя там строка

Kira Sotnikov19:03:41

я делал целиком в репле запускал весь апп

Kira Sotnikov19:03:52

и получал ответ

Kira Sotnikov19:03:00

а когда запускаю убрджар то не получаю )

fxposter19:03:12

ты и сейчас получаешь ответ. но body это строка

leov19:03:56

господа

leov19:03:11

у кого-нибудь есть веб-приложение на кложе с сервер-сайд реакт рендерингом?

leov19:03:30

1. если да, то оно использует сервер-сайд рендеринг внутри джаваскрипт рантайма, или нет?

Kira Sotnikov19:03:07

fxposter: понятно, а как мне починить то что json не читается? )

Kira Sotnikov19:03:21

SEVERE: Caught exception clojure.lang.PersistentArrayMap cannot be cast to java.lang.String

fxposter19:03:34

где этот код?

leov19:03:37

2. несколько оффтопик - кто-нибудь планирует починку библиотеки hiccup, чтобы она перестала клеить строки и это не приводило к (hiccup.page/html5 [:html [:body "Hi!</html>"]]) xss-уязвимостям?

malch19:03:07

если вкратце

fxposter19:03:13

это сервер

fxposter19:03:16

нужен клиент

malch19:03:20

аа, сорри

Kira Sotnikov19:03:30

(println ( get-in (json/read-str response) [:body :posts]))))

malch19:03:32

ну тогда напрямую

fxposter19:03:40

org.clojure/data.json

Kira Sotnikov19:03:01

[clojure.data.json :as json]

Kira Sotnikov19:03:06

вот у меня

malch19:03:12

у тебя весь response - map

fxposter19:03:24

;; Coerce as json (client/get "http://site.com/foo.json" {:as :json}) (client/get "http://site.com/foo.json" {:as :json-strict}) (client/get "http://site.com/foo.json" {:as :json-string-keys}) (client/get "http://site.com/foo.json" {:as :json-strict-string-keys})

fxposter19:03:31

доки clj-http

malch19:03:16

(:posts (json/read-str (:body response)))

malch19:03:21

что-то вроде

fxposter19:03:12

clj-http сделает это само

Kira Sotnikov19:03:17

ну у меня :as :auto было

Kira Sotnikov19:03:33

поменял на :as :json все равно read-str выдает ту же ошибку

Kira Sotnikov19:03:51

не понял про сделает само

fxposter19:03:56

КАКОЙ read-str

fxposter19:03:07

если ты уже парсишь через :as :json?

fxposter19:03:20

;; Coerce as json

fxposter19:03:27

(client/get "http://site.com/foo.json" {:as :json})

Kira Sotnikov19:03:37

Ну а что вы мне тогда говорите что мне нужно распарсить джесйон

fxposter19:03:42

в :body будет map, а не строка

fxposter19:03:11

наверное потому что ты постишь код?

fxposter19:03:12

response (client/get uri {:accept :json :insecure :true :as :auto})]

fxposter19:03:17

где тут :as :json?

Kira Sotnikov19:03:47

поправил )

malch19:03:45

@lowl4tency: маленький совет - проверяй в репле, какой класс у чего-нибудь

malch19:03:55

тогда не ошибешься

Kira Sotnikov19:03:38

господа, вы гении

Kira Sotnikov19:03:57

fxposter malch спасибо )

malch19:03:09

да это все с опытом приходит, не беспокойся

Kira Sotnikov19:03:15

Полдня головой бился )

Kira Sotnikov19:03:07

РАБОТАЕТ

Kira Sotnikov19:03:13

всем чмаке

artemyarulin19:03:03

@abtv: Дада, doo няшный. Не уверен что есть что-либо кроме него

abtv21:03:20

спасибо