Fork me on GitHub
#clojure-russia
<
2016-03-24
>
misha06:03:21

утречко. а подскажите, как кошерно/дёшево touch'нуть атом? (reset! a @a)?

nicola06:03:19

Вызови его через java interface.

misha06:03:21

а еще точнее: датаскриптовую бд (которая, впринципе, тоже атом)

misha07:03:39

(def a (atom nil))

 (time (dotimes [n 1000000]
        (reset! a @a)))
"Elapsed time: 35.820000 msecs"

(time (dotimes [n 1000000]
        (cljs.core/-notify-watches a @a @a)))
"Elapsed time: 59.255000 msecs"

(time (dotimes [n 1000000]
        (let [v @a]
          (cljs.core/-notify-watches a v v))))
"Elapsed time: 46.700000 msecs"

 (time (dotimes [n 1000000]
        (reset! a @a)))
"Elapsed time: 31.740000 msecs"

nicola07:03:18

Нет разницы ;)

dottedmag08:03:58

Господа, а подскажите рабочий клиент для Google Cloud? Пока что интересно только Storage.

nicola10:03:46

Или обертка над java

dottedmag11:03:37

@nicola: http-kit - это топор и карта ближайшего лесного массива место туалетной бумаги :)

dottedmag11:03:43

Я пробую jclouds, посмотрим, что выйдет.

roman01la11:03:16

Всем привет 👋:skin-tone-2: Недавно запустил сайт https://clojurescript.ru/, что бы было где почитать на русском.

roman01la11:03:56

сейчас занимаюсь переводом шпаргалки https://github.com/clojurescript-ru/cljs-cheatsheet может кому-нибудь будет интересно помочь с этим. Ну и в целом набросать полезных ресурсов.

dottedmag14:03:23

Что я выяснил. jclouds -- это ахтунг. Руками ходить в Google Cloud Storage вполне возможно, но там OAuth2, и это геморрой.

delaguardo14:03:07

для oauth2 есть чесьма крутая либа - https://github.com/scribejava/scribejava

andfadeev14:03:52

передам авторам)

dottedmag14:03:28

@delaguardo: Выглядит неплохо, но, кажется, только для 3-legged OAuth (сервер/сервер/юзер), а для сервисных аккаунтов там нет.

dottedmag14:03:57

Впрочем, я уже покопался в коде гугловой питоньей библиотеки для OAuth -- для сервисных аккаунтов всё очень просто.

prepor14:03:58

@dottedmag: а расскажи зачем им oauth? почему не api-key просто?

dottedmag14:03:24

@prepor: Ну как я могу рассказать, зачем гугловые инженегры решили, что им нужен только OAuth? Решили, и всё тут.

prepor14:03:12

dottedmag: ну возможно ты понимаешь мотивацию. потому что с моей точки зрения это мудачество полнейшее. но раз гугл, то может я чего не понимаю

dottedmag14:03:13

Впрочем, не страшно. Вместо генеряченья API key гугл даёт .json'ку, которую можно подпихнуть утилите.

dottedmag14:03:14

@prepor: Не знаю. Подозреваю, что для стандартизации: если делать отдельный API key, то нужно опять реализовывать scopes, authorization и прочую байду, которая в OAuth есть всегда.

nogenhat14:03:03

у cloud есть нормальная token based аутентификация. https://dl.dropboxusercontent.com/u/2440979/Screen%20Shot%202016-03-24%20at%205.52.49%20PM.png

dottedmag14:03:52

@nogenhat: Это где такой список можно увидеть?

dottedmag14:03:07

В API Manager -> Credentials не видно. В Permissions - тоже.

nogenhat14:03:42

@dottedmag: AI Manager -> Credentials. Create credentials. API key -> Server key

dottedmag14:03:44

@nogenhat: "API keys do not grant access to any account information, and are not used for authorization."

nicola15:03:09

OAuth 2 прост

nicola16:03:57

У них наверно JWT?

nicola16:03:57

Ага посмотрел - JWT!

antonshwab16:03:01

Привет. В кложур вакансиях часто требуется java. Плюс по самой java много вакансий для джуна (больше чем для clojure :) ) Подкиньте хороших книг по Java, пожалуйста, буду изучать. Глаза разбегаются.

nicola16:03:44

а книги - какойнить дефинитив гайд или спека simple_smile

antonshwab16:03:38

Типа без книг пойдет, если основы знаешь? Ну хорошо)

nicola16:03:34

Книги нужны - но по java наверно придется с десяток прочитать и есть спека - скучаная, но полная

nicola16:03:52

google: best java books simple_smile

antonshwab16:03:35

А почему вообще требуется java для clojure? Понятно, что интероп, но ведь для этого, наверное, не нужно прям детальное знание java и опыт плотной работы с ней. Может кложа как-то интегрируется с джавопроектами?

nicola16:03:30

в более менее серьезном проекте - постоянно будешь в java лазать - это фича, а не проблема

antonshwab16:03:15

Ясно. А у Clojure CLR такой же потенциал?

antonshwab16:03:51

Или Clojure CLR так же широко не будет использоваться?

nicola16:03:54

дотнетчики народ стабильный, долбят свой C# в MS Studio и ничего им не нужно (у них F# есть и тот не используют)

artemyarulin16:03:33

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

razum2um17:03:10

а есть тут кто скажет что поменялось в class-loading в jdk8? я вот тут https://github.com/ninjudd/classlojure/blob/master/src/classlojure/core.clj#L81L86 убрал этот ужас, просто вернул result и все работает даже с не java core classes

nicola17:03:33

@prepor - а давай ты на hangout про http://druid.io расскажешь?

razum2um17:03:51

в jdk7 это не работает изза CompilerException java.lang.reflect.InvocationTargetException,

nicola17:03:18

@razum2um: а зачем тебе класс лоадер?

razum2um17:03:25

т.е. в jdk8 я вполне удобно работаю с 2мя объектами от классов разных версий и думаю, что тут что-то не чисто

prepor17:03:56

@nicola: так чего там рассказывать, оно ж мейнстрим уже почти )

nicola17:03:20

как устроенно? как используешь?

rmuslimov17:03:20

+1 за друид, я честно говоря, не слышал никогда

rmuslimov17:03:47

наверное потому что с jvm мало приходилось сталкиваться

rmuslimov17:03:18

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

rmuslimov17:03:33

например hazelcast or apache ignite

robotector18:03:16

ребята, а как можно передать jvm-опции, если запускаешь приложение через lein trampoline run? добавил :jvm-opts ["-Xmx1g"] в project.clj, но через ps aux у запущенного процесса этой опции не вижу вовсе

prepor18:03:44

а должно быть видно!

prepor18:03:07

@nicola: ну можно рассказать ) но я типа просто обычный юзер

nicola18:03:14

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

prepor18:03:59

тот, кто не запустил, еще не юзер )

nicola19:03:32

публикую аннонс?

artemyarulin19:03:16

эх, у меня на работе дождались когда я свалю в отпуск и заявили что все два сервиса на кложуре будут выпелены и переписаны на го. Не взлетело... https://www.youtube.com/watch?v=tIdIqbv7SPo Ain't no sunshine when she's gone. Only darkness every day

razum2um19:03:18

1) ты был единственным кто понимал? 2) а если вкратце - о чем сервисы, сколько строк хотя бы

artemyarulin19:03:51

1) Есть еще пара кложуристов, но в других командах 2) Да обычные умные прокси по сути - пришел запрос, дернул другие два, результаты смержил. 800 строк со всеми тестами

artemyarulin19:03:53

мне об этом сказали еще пару месяце назад, но я думал у меня будет время хоть чутка в проде подержать кложуру пока переписывают, но нет. “Не нужное - не нужно”(с)

az19:03:17

@artemyarulin: дождись пока они уйдут в отпуск и перепеши их сервисы на кложуру troll

artemyarulin19:03:56

го придется читать - у меня на него аллергия simple_smile

az19:03:02

или чего уж там, гулять так гулять, сразу на ocaml

rmuslimov20:03:24

@artemyarulin: так а позиция - “уже написано, уже работает” не работает?

andmed20:03:28

@artemyarulin: да, это обидно

artemyarulin20:03:59

чота не прально написал - кложуристы есть, но они ноду и го пилят, мои 2 сервиса были единственными на кложуре в конторе. @rmuslimov: Именно! Микро сервисы же, HTTP же, готово же, но нэт. Там конечно причина не столько кложура - разработку нового направления решили просто перенести в US, ну и заодно на го переписать, чтоб без скобочек...

rmuslimov20:03:27

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

andmed20:03:58

"Заодно" как со штатами связано. Да увели

rmuslimov20:03:04

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

rmuslimov20:03:11

пиши новый на кложе simple_smile

rmuslimov20:03:41

мол, тот то был успешный и тут все сделаем быстро

artemyarulin20:03:11

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

artemyarulin20:03:28

хз, второй раз будет уже тяжелей протащить

rmuslimov20:03:13

да, грустно конечно

rmuslimov20:03:22

ну только из чата не удаляйся simple_smile

artemyarulin20:03:18

да неа, вы чо, я в кложуру влюблен по уши и переключусь на свои проекты просто 😄

rmuslimov20:03:42

а где у вас в штатах офис?

rmuslimov20:03:14

скинь адрес я им шину проткну simple_smile

artemyarulin20:03:29

😄 😄 😄

andmed20:03:43

Lol. Посадят там все серьезно

artemyarulin20:03:48

спасибо за поддержку, они себя сами с этим го отлично угробят 😛

rmuslimov20:03:00

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

andmed20:03:18

Вот я тоже удивлен, что за повод

rmuslimov20:03:28

несколько больших компаний, несколько стартапов

rmuslimov20:03:30

поблизости

rmuslimov20:03:35

странно что не поддержали

artemyarulin20:03:13

контора большая - должен быть один язык на все случаи. Бек на го, фронт на жс, усе

rmuslimov20:03:10

видимо CTO олдскульный

artemyarulin20:03:49

да ну их...

abtv20:03:02

@artemyarulin: печальная история... и ты теперь тоже на го будешь писать?

artemyarulin20:03:36

@abtv: Неа, я его не люблю и все понимают как я буду писать на том что я не люблю (= никак). Скорее всего либо вернусь на ObjC (то еще говно) либо буду на JS писать, там хоть можно функциональщину. Посмотрим как пойдет, ну если нет то ближе к осени можно будет начать смотреть что-нить на кложуре, у нас как раз пол года назад zalando в город приехал, у них кложура/скала/жава.

abtv20:03:59

А ObjC лучше Go?

artemyarulin21:03:52

Каждый раз когда меня спрашивают на сколько ужасен ObjC я всегда скидываю свой любимый вопрос на SO http://stackoverflow.com/questions/6720191/reverse-nsstring-text Оттуда один из ответов:

SString *myString = @"abcdefghijklmnopqrstuvwxyz";
NSMutableString *reversedString = [NSMutableString stringWithCapacity:[myString length]];

[myString enumerateSubstringsInRange:NSMakeRange(0,[myString length]) 
                             options:(NSStringEnumerationReverse | NSStringEnumerationByComposedCharacterSequences)
                          usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
                            [reversedString appendString:substring];
                        }];
и первый комент к ответу: I like this one. Very elegant. Каждый раз ржу 😄

artemyarulin21:03:29

так что нет, не лучше simple_smile

dottedmag21:03:55

Ну вот как так? Вместо того, чтобы полезный код писать, патчу библиотеку.

dottedmag21:03:52

Крипто-API в жаве ужасно.

abtv21:03:02

@artemyarulin: а почему бэк на го, а не ноде? еще удобнее же, один язык только.

prepor21:03:14

@nicola: ну давай )

artemyarulin21:03:08

ну нода счас везде у нас, вот с нее слезают и перекатываются на го. ибо + типы + скейлится лучше

abtv21:03:35

я, кстати, на джаве недавно стал писать параллелльно с clojure. сначала плевался, а потом даже понравилось, когда начал стримы использовать, хоть что-то simple_smile

abtv21:03:46

может это временно

artemyarulin21:03:03

там же вроде стримы надо конвертить все время туда и сюда?

artemyarulin21:03:15

ну т.е. массив в стрим, потом обратно

abtv21:03:02

ну да, но это сильно лучше, чем было. как на C# прямо 😆

rmuslimov21:03:22

а что за стримы, почему пришлось переезжать в джаву?

rmuslimov21:03:34

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

abtv21:03:11

просто проект изначально был на java. clojure отдельно, java отдельно

abtv21:03:06

стримы - это способ юзать map, filter, etc в java. там этого, похоже, не было до JDK 8 simple_smile

abtv21:03:20

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

abtv21:03:29

я в последнее время даже нашел плюс в том, что приходится и на java писать. круто же, что могу и то и это simple_smile

abtv21:03:47

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

abtv21:03:10

ну должно же быть в этом Go хоть что-то хорошее даже для Clojure разработчика. думаю там тот же CSP реализован эффективнее

rmuslimov21:03:03

core.async например simple_smile

artemyarulin21:03:50

с го для меня главная проблема что я не смогу функциональщину там. map|filter|reduce могут быть реализованы тока если все приводить к interface (к верхнему Object по нашему). immutable нет опять же

prepor21:03:41

@abtv: можешь котлин юзать

prepor21:03:46

и классы "кратко", data-классы на который вполне себе ADT, и выводилки типов, и еще всякие приятности, но при этом 1в1 в яву мапится в обе стороны, включая всякие аннотации

prepor21:03:55

если уж надо на яве писать

abtv21:03:10

@prepor: кстати, да, мне может и подойти. а в целом котлин как-то уж поздно появился, думаю переход будет не быстрым

abtv21:03:34

@artemyarulin: совсем нельзя функциональщину? там, наверное, просто больше кода и не так удобно. Я вот, например, в Rust немного разочаровался. Ну т.е. все вроде ок, но очень медленно код пишется. Кому-то может и надо, но мне проще на Clojure/Java. По крайней мере пока.

prepor21:03:35

@abtv: тебе переходить никуда не надо, можешь прям миксить по жесткому и постепенно перетаскивать.

abtv21:03:15

о, круто

rmuslimov21:03:00

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

rmuslimov21:03:24

сорри, если вопрос глупый, я совсем не знаком

abtv21:03:10

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

prepor21:03:14

киллер фичи нет, в этом киллер фича )

prepor21:03:07

если скалу можно воспринимать как улучшенную яву + ОЙ ОЙ ОЙ ТАЙП КЛАССЫ, МАКРОСЫ, ИМПЛИСИТЫ, ЧЕРВИ, то вот в котлине просто улучшенная ява, а второй части нет.

abtv21:03:02

ну да, сначала это кажется круто, а потом наступает похмелье simple_smile

abtv21:03:20

и начинаешь писать на джаве опять simple_smile

abtv21:03:23

а котлин - современная джава. я даже не побоюсь сказать, такой типа C# в мире JVM

prepor21:03:54

у сишарп есть фшарп )

prepor21:03:01

и фстар пилится )

abtv22:03:31

на F# писал, правда месяца два всего, крутой язык. потом я ушел с него на скалу, потому что была переносимая. спасибо за F*, не знал simple_smile

abtv22:03:08

не видел больше ни одного программиста в живую, кто бы на F# писал, большинство моих знакомых (кто пишет под MS) C# устраивает полностью

abtv22:03:42

а так с F# ситуация как у Артема была - на нем никто больше не хотел писать

artemyarulin22:03:09

и это печально. F# выглядит очень круто (по сравнению с С#)

abtv22:03:18

@prepor: а ты на Ocaml/F* пишешь, хотя бы для pet projects?

prepor22:03:53

фстар академический же совсем ) фшарп норм, но там нет самых главных фишек млей: модулей, функторов, объектов и классов окамловых.

prepor22:03:37

у меня на окамле есть проектик один, которым у нас весь прод задеплоен https://github.com/prepor/condo/. + щас эксперимент делаем по переводу куска прода на окамлик, посмотрим simple_smile

abtv22:03:43

как Ocaml по сравнению с Clojure? я понимаю, что они разные, но все же? @prepor

prepor22:03:13

Да. они совсем разные ) Это два моих любимых языка. Если их сравнивать, то это надо уходить в глубокий анализ разницы подхода статической типизации и динамической и этих языков, как лучших их представителей. Я пока боюсь не осилю 😉

abtv22:03:30

Хорошо тебе - продакшен на нескольких любимых языках simple_smile

dottedmag22:03:06

Господа, а что делать, если я попатчил библиотеку X и положил её к себе на clojars, а использую я библиотеку Y, которая использует библиотеку X.

dottedmag22:03:12

Как-нибудь override зависимости можно сделать?

dottedmag22:03:27

Не считая "попатчить Y и положить её тоже к себе на clojars"

rmuslimov22:03:41

говорят в лейне есть опция

dottedmag22:03:49

У меня бут

rmuslimov22:03:17

придется переписывать тогда

rmuslimov22:03:45

извините, увлекся simple_smile

prepor22:03:19

2. в твоем случае лучше 😉

dottedmag22:03:51

@prepor: Ну да, я уже сделал.