Fork me on GitHub
#clojure-russia
<
2016-08-26
>
andre05:08:47

@romul потрясающе

comerc07:08:34

@artemyarulin: у тебя есть ник на Хабре?

artemyarulin07:08:47

эм, неа, нету

artemyarulin08:08:05

хм, своеобразно

user=> (clojure.string/replace "asd" "" "1")
“1a1s1d1”

artemyarulin08:08:49

хотя по ходу из жвм ноги растут, кложура не особо причем https://github.com/clojure/clojure/blob/722e023ea00b27a47b11afc29fa7fe0a282696f4/src/clj/clojure/string.clj#L101-L108

seryh08:08:18

ну это скорее даже фича чем баг )

seryh08:08:28

в js еще более странно

"abc".replace("", "1") => "1abc"

artemyarulin08:08:30

да вишь по ходу оно везде странно себя ведет питон "abc".replace("","1”) -> ‘1a1b1c1' ruby "abc".sub!("","1”) -> “1abc"

seryh08:08:35

интересно что будет в ClojureScript

artemyarulin08:08:02

тоже возвращает "1a1b1c1"

kronos_vano08:08:24

@artemyarulin sub меняет первое вхождение

kronos_vano08:08:26

тебе нужен gsub

artemyarulin08:08:42

аа, подвели знания руби да)

artemyarulin08:08:06

а дак и в жс вроде тоже этот снипет первое вхождение заменит нет?

seryh08:08:49

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

artemyarulin08:08:28

(.replace "abca" "a" "1”) => “1abca” так что тока первое ага. По ходу “1a1b1c” канонично 🙂

kronos_vano08:08:07

"abc".replace((new RegExp("", "g")), "1")

kronos_vano08:08:17

the same with js

kronos_vano08:08:49

//g у меня не завелось

artemyarulin08:08:58

ну тогда ок, я просто не в курсе значит был)

artemyarulin08:08:02

всем спасибо)

comerc09:08:08

Просто отличная по формату статья - план погружения в Om.Next https://juxt.pro/blog/posts/course-notes-2.html @andre @romul @chort409 давайте замутим перевод! 🙂

andre09:08:17

можно разбить на несколько статей , по дням

comerc09:08:27

@seryh: вот мои записки по задачкам 🙂

seryh09:08:35

я как то разбирался с core.async, по этим болгарским заметкам ) https://github.com/fmi/clojure-lectures/blob/e9aead137a25f3b01ba7b14d8949fe1e63b222e7/lectures/14-core-async.lecture

seryh09:08:56

на которые случайно наткнулся

comerc10:08:41

а я так понял, что мне core.async не пригодится в om.next 🙂 но с удовольствием почитал бы твою статью - сравнение core.async с go-рутинами

comerc10:08:15

@seryh: как материал для статьи https://juxt.pro/blog/posts/course-notes.html

seryh10:08:53

я core.async в бою уже как год использую кстате. обработка от ~70 GSP/глонасс устройств с машинок

comerc11:08:52

котаны! похоже, это будет первая статья про Om.Next на русском языке помогайте с переводом, пажаласта! https://github.com/comerc/How_to_build_an_Om_Next_Remote/blob/master/article.md

comerc11:08:14

@andre @romul ^^ добавил вас колабораторами

andre11:08:46

я бы попереводил, мне понравилось

romul11:08:21

@comerc: ok, я на выходных посмотрю )

seryh11:08:34

не какой убер ) 70 устройств. провинциальный автопарк

comerc11:08:01

видимо я погорячился, что core.async не нужен в om.next https://github.com/comerc/How_to_build_an_Om_Next_Remote/blob/master/article.md#coreasync-on-the-front-end это @artemyarulin сбивает прицел 🙂

comerc11:08:16

@seryh кстати говоря, какой-то отечественный конкурент использует Clojure.

comerc11:08:36

вроде бы wheely

kronos_vano11:08:12

там маленький кусочек на нем несвязанный с основным бизнесом

kronos_vano11:08:16

но если придет чувак туда с кложей вай нот

comerc11:08:38

вот бы перевести всё это богатство https://habrahabr.ru/post/194032/

potapenko11:08:52

@comerc скажу как будет.

andre11:08:35

надо подключать Рахима . он любит такие вещи переводить, и делает это достаточно неплохо

comerc11:08:50

какой ник?

andre11:08:30

Люблю переводить и озвучивать интересные и полезные видеоролики.

comerc11:08:43

да-да, он светится мощно на Хабре

artemyarulin11:08:30

Как вы разошлись с переводами - может реально вам отдельную комнату сделать? Накидаете туда интеграций со всякими гитхабами чтоб пулл реквесты не пропускать с правками, а тут в шапке канала сделать линку на новый канал?

comerc11:08:02

@andre вот это тоже Рахим сделал, видимо https://www.youtube.com/watch?v=r0TWL5L7RE0

andre11:08:19

не, это открытый урок от Kilgort'а, не знаю кто это

artemyarulin11:08:36

@comerc Что думаешь про отдельную комнату?

seryh11:08:16

го , я создал #clojure-russia-offtop

andmed11:08:40

о. я бы попробовал себя в переводе

artemyarulin11:08:11

Не знаю кто тут админ, но может в шапку добавит кто ссылку на новый канал Обсуждения переводов <#C259XLPRD|clojure-russia-offtop>

andre11:08:34

о блин шапка 🙂

andmed11:08:50

так перевод кложи нет, что я упустил?

andre11:08:54

два канала оказывается есть еще)

artemyarulin12:08:20

@andmed перевод статей про кложуру и мир рядом с ним ага. Ребята тут уже перевели и запостили https://habrahabr.ru/post/308228/ и вот должны скоро выложить https://circleci.com/blog/rewriting-your-test-suite-in-clojure-in-24-hours/

andmed12:08:35

и это оффтоп?

andmed12:08:44

я переводил ранее, не технической направленности

artemyarulin12:08:26

оффтоп слишком громко сказано да. Просто обсуждения статей идет порою бурное, но не всем присутствующим это может быть интересно, поэтому я предложил вынести в отдельный канал

a.espolov12:08:23

@artemyarulin: если не ошибаюсь ты нашел решение для выполнения ajax запросов пачкой с ожиданием ответа на все запросы, что что вроде promise'ов

a.espolov12:08:34

не подскажешь как называется либа?

a.espolov12:08:20

ага она, так она для моей задачки покатит?

artemyarulin12:08:05

ну она чисто с промисами, про хттп она ничего не знает

a.espolov12:08:36

глупый вопрос был, это из доков видно)))

artemyarulin12:08:57

у меня свои врапперы есть на коллбеках https://github.com/artemyarulin/koh/blob/master/http/transport_client.cljs и на ними уже обертка промеса на 10 строк https://github.com/artemyarulin/koh/blob/master/http/http_p.cljc ну а дальше уже сможешь сам делать как в доке

(let [p (p/all [(http “")
                (http “")])]
  (p/then p (fn [[result1 result2]] …)

artemyarulin12:08:36

т.е. можешь тоже самое сделать по быстрому для своего кейса, там все кристально просто)

comerc12:08:56

@andre: Рахим ответил > Да, тоже очень люблю это выступление (и почти все остальные доклады Рича Хикки), и эту штуку хочется перевести, но ух, большой и сложный, конечно. Надеюсь, когда-нибудь дойдут руки, тут прям несколько дней понадобится.

maxp13:08:12

Подскажите, уважаемые! Если у вас есть последовательность сообщений, которые надо обрабатывать через определенное количество миллисекунд, то что бы вы посоветовали?

seryh14:08:17

ну или каналы в core.async

maxp14:08:46

сейчас поясню, что хочется

maxp14:08:28

допустим у меня есть 10 сообщений, первое хочется отправить прямо сейчас, второе через 100 мс, третье через 500 мс и т.д.

maxp14:08:18

ну и прикол в том, что может случиться неоторое событие, из-за котрого третье сообщение надо будет отправить реньше/позже

maxp14:08:03

то есть хочется какую-то управляемую очередь с таймстампами

maxp14:08:00

Думается мне, что должено быть что-то готовое для этого, типа вот такого - http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/DelayQueue.html

seryh14:08:44

с core.async кажется вполне удобно можно сделать. передавать вектор с очередью в виде

[{:delay 300 :post <obj>} ...]
и обрабатывать с Thread/sleep

seryh14:08:25

правда кто то тут рассказывал что каналы в core.async лучше не блокировать, так как закончится зарезервированный тредпул

seryh14:08:32

но если будет один канал на обработку то норм

maxp14:08:37

там 10 нитей всего

maxp14:08:43

или что-то около того

kronos_vano14:08:50

можно взять препорский twarc

maxp14:08:48

о! точно, что-то он писал про квартз, помнится

maxp14:08:21

тут у меня получается прикол в том, что sleep делать нельзя

maxp14:08:35

так как состояние очереди может измениться

seryh14:08:13

интересная задачка

maxp14:08:37

то есть, скажем есть у меня пул воркеров

maxp14:08:48

они сидят все на одном канале

maxp14:08:04

тяную оттуда сообщения и обрабатывают

maxp14:08:34

но вот вдруг случается конфуз и одно из сообщений надо обработать через секунду,

maxp14:08:57

но если конфуз рассосался раньше, то обработать раньше.

maxp14:08:49

городить для таких случаеы timeout каналы и ставить пачкой в alts ?

maxp14:08:12

ведь если я руками закрою timeout канал, то он сработает раньше ?

seryh14:08:53

поидеи сработает

misha14:08:31

а что за юзкейс ты так хочешь решить?

seryh15:08:26

timeout канал же работает как парковка. а не как блокировка всего потока

a.espolov15:08:18

коллеги

a.espolov15:08:02

юзаю cljs-http на бекенде включенны cors запросы дергаю авторизацию приходит ответ с куками, но при последующих запросах они не используются

a.espolov15:08:55

если бекенд на clojure все ок

a.espolov15:08:22

если же на python'e в моем случае, то фиг там

dottedmag16:08:57

Так с какой стороны не работает-то?

a.espolov18:08:43

@niwinz: привет. Использую promesa, вот пример (let [p (p/all [(do-some-io) (do-some-other-io)])] (p/then p (fn [[result1 result2]] (do-something-with-results result1 result2)))) Так все понятно как это работает, но как быть если в (do-some-io) и (do-some-other-io) передается call-back который и возвращает результат?

a.espolov18:08:09

в частности использую cljs-http для вызова rest api

a.espolov20:08:12

Да все оказалось просто)

niwinz20:08:50

@a.espolov you should define a new function that promisify the other that expects callback

niwinz20:08:52

something like

niwinz20:08:04

(defn do-some-io-promosified
  []
  (p/promise (fn [resolve reject]
               (do-some-io resolve))))

niwinz20:08:44

(def do-some-io-promisified (p/promisify do-some-io))