Fork me on GitHub
#clojure-russia
<
2016-04-19
>
narmaru03:04:40

https://clojurians.slack.com/archives/clojure-russia/p1461010742000168 было же, доморощенные пхп фреймверки в 2000, кажется

pacman07:04:02

@dottedmag: Зато код всех лиспов читается просто ПО ПРАВИЛУ БУРАВЧИКА. Без всяких сложных синтаксических неоднозначностей.

artemyarulin07:04:05

репл как понимаю появился лет 50/40/30? для лисперов ведь да? Прикиньте как у них бомбило - все компилируют, каждый раз пересобирают все приложение, а у них репл прям вау, ан нет - популярность лиспа уходила на нет, компиляция не проблема, подумаешь пару минут подождать

pacman07:04:42

так они лиспов наплодили

pacman07:04:55

как сабак, для каждой фигни свой лисп

dottedmag07:04:15

Что вы так привязались именно к лисповому REPL'у? Smalltalk - 1972. Perl - 1987. Tcl - 1988. Python - 1991. Lua - 1993. Ruby - 1995.

artemyarulin07:04:35

о фега какое все старое simple_smile

pacman07:04:44

дремучее

dottedmag07:04:00

Я вот смотрел видео Сиерры и думал "а в Smalltalk'овом IDE это всё решено 100500 лет назад".

dottedmag07:04:50

Причём решено радикально: текстовый вид кода -- это просто вьюшка в объектном хранилище.

pacman07:04:03

так все давно уже решено математиками... если капнуть. Все эти ФП, лямбды... исчисления всякие..

dottedmag07:04:22

Начинаешь редактировать функцию -- checkout, сохраняешь - checkin, с синтаксической проверкой.

dottedmag07:04:51

Version control, встроенный в среду разработки. 1980 год. Unix с тех пор так и не добился такой степени интеграции.

dottedmag07:04:22

А, я ещё забыл FORTH, где репл появился в 1970

dartov07:04:19

Господа, а кто-то пишет на кложуре под Apache Spark?

andrewboltachev08:04:02

Всем привет. Может быть кто-то подскажет, как можно класс в стиле ES2015 отнаследовать в ClojureScript'е? Хочу использовать фейсбуковский Relay прямо из ClojureScript'а, а там различные классы а-ля Relay.Route

andrewboltachev08:04:47

(сами классы уже babel'ом скомпилены в нормальный JS конечно)

dottedmag08:04:51

Ещё бы понять, что такое "нормальный JS"

andrewboltachev08:04:03

эх... ну, стало быть ES5 simple_smile

andrewboltachev08:04:50

но я имел ввиду такой, который можно выдать средствами ClojureScript'а

fxposter09:04:10

smalltalk - это круто, но “вещь в себе”. если бы это можно было как-то интегрировать во что-то другое simple_smile

fxposter09:04:36

хотя Gilad Bracha до сих пор тащится )

serce09:04:59

Может уже было, скоро в наших краях "не булшит" конфа по js http://holyjs.ru/, рантаймы included

az12:04:32

ребят, при работе с PG message type 0x54 arrived from server while idle

dottedmag12:04:54

PG = поцгрес?

dottedmag12:04:09

Или Пол Грэхэм? troll

petr.myain12:04:01

Предлагаю обсудить вот эту статью: http://martintrojer.github.io/beyond-clojure/2016/04/19/beyond-clojure-prelude

seryh12:04:27

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

az12:04:47

@dottedmag: ну ты же понял, ну

fxposter12:04:53

да, почему нет simple_smile

az12:04:56

PostgreSQL 9.4

seryh12:04:11

хотелось бы посмотреть на примеры кода на clojure который может потечь. там же иммутабельность и все дела

seryh12:04:21

чтоб знать подводные камни

fxposter12:04:55

1. работа с java 2. atom/ref/agent simple_smile

seryh12:04:04

ну это очевидные вещи

seryh12:04:10

за ними просто следить

seryh12:04:19

канеш если интеропа в джаву мало

fxposter12:04:19

с одной стороны - да

fxposter12:04:33

с другой стороны - они такие же, как и в остальных языках

fxposter12:04:46

в java ты тоже специально течь не начинаешь

fxposter12:04:54

случайно где-то о чем-то забыл

fxposter12:04:13

в кложурке с atom-ом может быть абсолютно аналогично

dottedmag12:04:14

И IO t-пометки на функциях нет, чтобы внимательно присматриваться к тому, что может течь, а что - нет.

dottedmag12:04:45

Это в тему той статьи.

fxposter12:04:47

IO уже не модно

fxposter12:04:56

Eff - вот что модно simple_smile

dottedmag12:04:28

О, спасибо за это ключевое слово.

fxposter12:04:40

это из purescript

fxposter12:04:58

у них там кроме этого еще и несколько типов этих Eff

artemyarulin12:04:16

@petr.myain: 1) Стандартно про типы - уже тут обсуждалось 2) Наезд на UI что мол сложно - дак так и есть. Тут уже не язык, а либы и идеи типо redux/elm/om решают 3) nullExceptions - хз, чота я не видел проблем

artemyarulin12:04:52

Подписался на чувака, посмотрим что он предложит. Но там вариантов не так много и все уже известны - все эти OCaml/F#/PureScript/Elm/…. . Философия другая там, даже не то чтоб репл - а data driven, лисп сам по себе и прочее, хз. Я тоже ищу этот beyond clojure, но найти пока не могу(

petr.myain12:04:59

а что за Typed Racket - есть в нём смысл или слишком маргинально?

artemyarulin12:04:18

core.typed калька с него на сколько я помню

Roman Liutikov12:04:02

Вопрос. Как продать ClojureScript? Вот с Clojure все понятно: канкарренси, dsl, возможность использовать библиотеки Java. А на фронте CLJS как-то неубедительно выглядит. Для многих функциональщина и иммутабельность не аргумент. Хотелось бы указать на практические преимущества перед JS. Типа: вот здесь CLJS отлично подойдет, а вот здесь он нам не нужен.

andre12:04:52

ClojureScript нужно вместе с Clojure продавать simple_smile

fxposter12:04:47

> Вот с Clojure все понятно: канкарренси, dsl, возможность использовать библиотеки Java. поверь, это тоже неубедительно в большинстве ситуаций 😄

andre12:04:14

Вот с Clojure все понятно: канкарренси, dsl, возможность использовать библиотеки Java, компиляция в JS

Roman Liutikov12:04:09

@andre: это грустно, но я согласен simple_smile

Roman Liutikov12:04:35

@fxposter: блин. наверное эт потому, что я с Clojure не особо. Больше с cljs

Roman Liutikov12:04:05

Значит без Clojure в CLJS нету смысла?

artemyarulin12:04:33

нене, вот это точно нет

artemyarulin12:04:19

вот возьми CLJS на мобильных с RN - там у полтора человека бек на кложуре

artemyarulin12:04:49

core.async - офигенно же. om-next это React/Immutable/GraphQL/Relay только лучше

artemyarulin12:04:17

figwheel прям ах, мало у кого такое есть (не путать с live-reload)

artemyarulin13:04:01

Google Clousure - advanced compilation, стандартная библиотека (того чего так не хватает миру JS) из коробки

Roman Liutikov13:04:57

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

andre13:04:02

кстати как там figwheel с RN ? везде запускается норм? помню на хэнгауте там как то сыро все было чтоли

Roman Liutikov13:04:17

@andre: в re-natal работает отлично

artemyarulin13:04:06

@andre: Это я показывал на хенгауте, неа, просто руки у меня кривые были simple_smile Сча все пучком

Roman Liutikov13:04:31

@artemyarulin: чет я не понял вот это simple_smile > вот возьми CLJS на мобильных с RN - там у полтора человека бек на кложуре

artemyarulin13:04:00

ну я имел ввиду что народ юзает CLJS без кложуры на бекэнде

a.espolov13:04:42

бля постоянно такая хрень

artemyarulin13:04:44

ааа, еще забыл - CLJS на ноде работает

a.espolov13:04:46

бек без кложуры

a.espolov13:04:16

но теперь и фронт у меня без кложуры

a.espolov13:04:26

и фу на ангуляре

Roman Liutikov13:04:27

я пробовал cljs на ноде. не особо simple_smile

a.espolov13:04:50

@roman01la: а в чем разница?

a.espolov13:04:01

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

a.espolov13:04:08

+ ньюнсы хост платформы

Roman Liutikov13:04:11

@a.espolov: да, вот эти ньюансы, потом трансит впиливать в тот же Express. В целом все это смотрится стремнее на ноде, чем на фронте

artemyarulin13:04:21

а чо не особо да? Даж фигвил работает, у меня один проектик есть под CLJS, дак я тесты на ноде запускаю, девелоплю в хроме, а в продакшене код уже под RN

artemyarulin13:04:46

дак не надо экспесс - надо брать и портировать ring trollface

a.espolov13:04:48

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

a.espolov13:04:59

была либа транзита под платформу бекенда

Roman Liutikov13:04:54

а что, есть у кого-нибудь серверный cljs в проде?

a.espolov13:04:13

если не ошибаюсь кто то здесь юзал подобное решение

artemyarulin13:04:56

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

artemyarulin13:04:07

не взлетело

Roman Liutikov13:04:25

@artemyarulin: Соловьев-style 😄

andre13:04:55

@potapenko: вот кстати киллер фича RN , live-coding, я кстати Джошу скидывал ваш опенсорс, но он не отреагировал, он же компилятор допилил, так что вполне мог попробовать прикрутить ваш лайвкодинг, ой как не хватает там его, я теперь прям задумался попробовать уйти на RN , т.к. у нас сейчас две версии кода , на AS и на JS, переписать все на cljs

potapenko13:04:28

у меня это была одна из причин clojure/RN

potapenko13:04:48

а, туда simple_smile

andre13:04:52

да, в Air пересобирать apk чтобы посмотреть на устройстве ой как парит, по 5 мин компилица деплоица

Roman Liutikov13:04:04

В RN на JS тоже сделали горячую перезагрузку, но она падает через раз

potapenko13:04:17

мы как раз и пилили AIR-livecoding для этоого

Roman Liutikov13:04:19

Собственно как и в Webpack

potapenko13:04:36

фигвил хорошо работает, висит неделями

potapenko13:04:49

рефрешить только нужно приложение иногда

potapenko13:04:59

после серьезного падения

potapenko13:04:19

@andre: обращайся если что с RN, рекомендую все же Reagent, там все просто

a.espolov13:04:59

@potapenko: re-natal юзаешь для создания скелета приложения? или om-next-cross-platform-template?

andre13:04:25

а почему не rum? сегодня 8я версия вышла оптимизированая

potapenko13:04:56

re-natal - да

potapenko13:04:11

а потому что re-natal simple_smile и в целом все получается очень лаконично и кратко

misha13:04:13

@roman01la: а мне как раз кажется, что cljs проще чем clj продавать. js же пздц лютый, в жаве хоть статик тайпинг как контр-аргумент, а у жс абсолютно никаких

potapenko13:04:29

единственное телодвижение обернуть (адаптировать) JS-ные компоненты

potapenko13:04:38

это одна строка на компоенент

Roman Liutikov13:04:31

@misha: JS разработчики еще более лютые, религия simple_smile

artemyarulin13:04:10

да неа, вон ангулярка тащит с собой TypeScript, вроде двигается

misha13:04:32

мне кажется, что найти хорошего жс программиста - очень сложно

misha13:04:05

слишком много школоты или тех, что осилил бы, но марать руки не хочет kappa

misha13:04:15

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

artemyarulin13:04:53

в этом типа и фишка - все теже костыли но зато типо-безопасные 😄

misha13:04:07

говорю же: полумеры )

misha13:04:29

@artemyarulin: есть такой вопрос, точнее жалоба

misha13:04:59

падает оффлайн билд RN на айфоне на вот этой строке:

misha13:04:22

2016-04-19 15:02:01.516 [error][tid:com.facebook.React.JavaScript] undefined is not an object (evaluating 'React.DOM.input')
2016-04-19 15:02:01.527 [fatal][tid:com.facebook.React.RCTExceptionsManagerQueue] Unhandled JS Exception: undefined is not an object (evaluating 'React.DOM.input')
2016-04-19 15:02:01.528 wn[4530:2684397] *** Terminating app due to uncaught exception 'RCTFatalException: Unhandled JS Exception: undefined is not an object (evaluating 'React.DOM.input')', reason: 'Unhandled JS Exception: undefined is not an object (evaluating 'React.DOM.i..., stack:
<unknown>@67:9401
n@1:617
n@1:346
t@1:283
<unknown>@86:5384

misha13:04:38

@roman01la: и ты глянь, пожалуйста.

Roman Liutikov13:04:41

@potapenko: у меня был затык с анимациями. Использовал react-motion. Для него приходилось по два раза делать reactify-component и create-element. красота hiccup сразу пропадает

potapenko13:04:20

да, в этом смысле тут гемор

misha13:04:53

я понимаю, что вы не по rumу, но на фигвильном билде и в симуляторе - всё ваще ок. думаю, что нужно где-то какой-нибудь aot написать или порядок импортов поменять/оптимизации повыключать в xcode

potapenko13:04:58

еще минус - нельзя сделать метод для внешнего контейнера

potapenko13:04:08

я решил это сделав пару простых оберток на JS

a.espolov13:04:31

я походу самый черный

potapenko13:04:38

вот кстати хорошая либа которая почти все решает https://github.com/oblador/react-native-animatable

Roman Liutikov13:04:47

@potapenko: это как? > еще минус - нельзя сделать метод для внешнего контейнера

a.espolov13:04:27

вот по гайду re-natal запускается апп в ios эмуляторе с ошибкой Application FutureApp has not been registered

a.espolov13:04:39

@potapenko: так всегда должно быть?

artemyarulin13:04:11

@misha: Чота знакомое, но убей не помню

potapenko13:04:23

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

potapenko13:04:57

пришел к простому решению - сделал JS ный контейнер, который имел все один метод но отоборажался через CLJS

potapenko13:04:02

но не сильно это парит в целом

potapenko13:04:05

это мелочи

misha13:04:09

@a.espolov: тебе наверное нужно что-то типа

(def root (my-root-component))
(def app-registry (.-AppRegistry js/React))
(.registerComponent app-registry "my app" (fn [] root)))
или написать, или проверить, что оно исполняется

potapenko13:04:49

хм, и что это даст?

potapenko13:04:15

reactify-component дает вполне рабочий для JS компонент

potapenko13:04:25

его можно отдавать JS-ному компоненту

potapenko13:04:42

вопрос именно в кастомном методе, который Reagent не позволяет сделать

misha13:04:06

регистрировать нужно только рутовый компонент, если ты об этом @potapenko

a.espolov13:04:23

@misha: так это апп из теплейта)

potapenko13:04:38

@misha я не понимаю simple_smile ты про регистрацию аппы? да, такой код есть

misha13:04:38

ну может сломал кто темплейт

misha13:04:20

@potapenko: я не в твой тред отвечаю, но подумал, что ты отвечаешь в мой simple_smile

potapenko13:04:48

reactify-component тут решает, он сделает компонент, в re-natal кстати так и выглядит

misha13:04:22

@potapenko: а на счет кастомного метода: тебе нужно "просто" заэкстендить класс реактовский? я тоже не нашел как это сделать. интеропом не получилось что-то

potapenko13:04:54

create-class

potapenko13:04:03

там можно добавить даже миксины

potapenko13:04:18

но собственный метод пропадет

potapenko13:04:08

нужно попробовать 0.6 alpha, по умолчанию re-natal использовал более древний, может сейчас заработает

misha13:04:50

у меня ромовским build-class тоже не получилось. но там даже миксины не с родным RN классом не померджились

a.espolov13:04:20

@potapenko: у тебя легко запускается приложение созданное ре-наталом?

misha13:04:45

@a.espolov: у меня еще такое перед регистрацией есть:

(set! js/window.React (js/require "react-native"))

a.espolov13:04:04

@misha: да эта строчка есть

misha13:04:01

@a.espolov: а ты случаем не андроид запускаешь?

artemyarulin13:04:14

уверен? trollface

misha13:04:04

did you try to turn it off and on again? kappa

potapenko13:04:02

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

a.espolov13:04:37

да какой кэш?

a.espolov13:04:43

я его только сгенерил

potapenko14:04:16

а… а чего пишет?

potapenko14:04:43

npm install? simple_smile

fxposter14:04:56

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

fxposter14:04:14

писал какой-то чувак

fxposter14:04:17

академик

fxposter14:04:26

потом смог части этого выпилить в либу

fxposter14:04:26

смотрю, проект заглох

niquola14:04:24

А ты про коэрсинг :)

niquola14:04:31

Yesql такого не делает - это самому нужно - https://github.com/niquola/clj-pg/blob/master/src/clj_pg/coerce.clj

sasha14:04:38

нет, я чуть-чуть не про это, ну в общем померещилось, показалось что с хранимыми процедурами есть проблема, но нет simple_smile

rmuslimov18:04:19

Коллеги, посоветуйте решение - у меня есть задача слить в мемкеш какое-то весьма большое кол-во ключей ( положим 1e5-1e6 ), собственно что можно посоветтовать чтобы сделать это быстро

rmuslimov18:04:33

тот же spyglass умеет только set и тот блокирующий

rmuslimov18:04:42

set_multi не умеет, подлец

rmuslimov18:04:27

собственно можно разбить на куски например по 1000 и загонять через pmap

rmuslimov18:04:33

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

rmuslimov18:04:01

может есть вариант сделать что то побыстрее?

fxposter18:04:07

если это разово - то какая разница?

rmuslimov18:04:32

не понял вопроса

rmuslimov18:04:52

задача сделать этот метод быстрее

rmuslimov18:04:18

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

Kira Sotnikov18:04:18

а у кложи есть библиотека которая русский в транслит загоняет?

Kira Sotnikov18:04:55

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

niquola18:04:47

Бежишь по символам и собираешь новую

niquola18:04:55

Строка вроде seq

Kira Sotnikov18:04:03

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

Kira Sotnikov18:04:38

я тут бота написал для телеграма на кложе ._.

Kira Sotnikov18:04:32

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

pacman18:04:03

както давным давно делал

pacman18:04:07

брал у яндекса

pacman18:04:15

вроде работало нормально на сайтах

pacman18:04:30

я тогда только начинал на кложуре чтото писать

rmuslimov18:04:15

hey, используйте code snippets пожта

pacman18:04:36

это как?

pacman18:04:46

ща поправлю подскажите

rmuslimov18:04:39

там у слак клиента есть +

rmuslimov18:04:48

там опция Create a snippet

dottedmag18:04:06

И если вставить код, то появляется поцыя "create a snippet" в углу.

Kira Sotnikov18:04:44

pacman: о спасибо

rmuslimov18:04:25

👍 спасибо

pacman18:04:35

вот, дошло до колхозника как сниплеты лепить.. В

Kira Sotnikov18:04:47

pacman: а если там будут заглавные буквы?

pacman18:04:58

ну добавьте

pacman18:04:05

мне они ненужны были

pacman18:04:15

я ссылки так для вебстраниц генерил

Kira Sotnikov18:04:25

работает

pacman18:04:44

несовсем

Kira Sotnikov18:04:48

ты мне сэкономил 8 часов жизни

pacman18:04:12

короче только одно

pacman18:04:18

у яндекса есть таблица

pacman18:04:23

вот я с нее слизывал

pacman18:04:44

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

pacman18:04:56

я по одному на глаз выбирал

Kira Sotnikov18:04:07

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

pacman18:04:08

потому как делал для гугла.. думал что тот поймет

pacman18:04:38

незнаю... это 2 с лишним года назад было

pacman18:04:05

над поискать, там короче искал транслитерацию и была страница. там несколько таблиц было для транслитерации

pacman18:04:12

одна из них от яндекса

pacman18:04:05

вот тут чтото подобное

pacman18:04:05

вот кажись оно

pacman18:04:09

там и МВД

pacman18:04:12

и яндекс

pacman18:04:16

и другие

Kira Sotnikov18:04:43

о круто!

pacman18:04:43

тут если делать чисто кирилица -> латиница то проще конечно мап сделать

pacman18:04:53

а не arry-map

pacman19:04:03

просто я хотел универсальности. и иметь несколько таблиц транслитерации которые буду в функцию подставлять ну както так, но дальше не пошло... так что не пинайте за код.. это было 2 года назад. я еще 4clojure решал тогда

andmed19:04:47

@lowl4tency: факт известный -- стандартов транслитерации несколько

Kira Sotnikov19:04:07

andmed: я просто достаточно недавно в разработчиках )

Kira Sotnikov19:04:52

скажите, а как понять что у меня не так? => (refresh) Exception Circular dependency between herman.core and herman.core clojure.tools.namespace.dependency.MapDependencyGraph (dependency.clj:89)

andmed19:04:14

та я вобщем тоже. но вот щ тут точно неправильное

rmuslimov19:04:05

@lowl4tency: код пожта в студию

rmuslimov19:04:35

ну хотя бы herman.core

rmuslimov19:04:48

гистом

d-side19:04:41

А можно просто верхнюю ns-форму, из неё должно быть очевидно, по идее.

rmuslimov19:04:51

читал, ага - в закладки, хороший пост

Kira Sotnikov20:04:02

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

Kira Sotnikov20:04:15

30 минут бился головой

misha20:04:38

@lowl4tency: "спецсимволы" - это ты про сёркулар депенденси?

Kira Sotnikov20:04:52

misha: не, это у меня проект перестал запускаться )

misha20:04:39

а, а зависимости починил?

misha20:04:18

у тебя либо модуль сам себя импортирует, либо а импортирует b, а b - a

misha20:04:47

либо круг даже шире, a-b-c-a...

misha20:04:22

(ns herman.core
  (:use herman.core)
kappa

d-side20:04:22

(ns herman.core
  (:use herman.core)
?

Kira Sotnikov20:04:34

а это откуда вообще взялось ._.

misha20:04:39

убери вторую стрку

Kira Sotnikov20:04:52

спасибо, глаз замылился похоже

Kira Sotnikov20:04:59

заработало

Kira Sotnikov20:04:14

ура мне не надо рестартовать репл

Kira Sotnikov20:04:18

у меня одного слак стал тормозить?

dottedmag21:04:30

@lowl4tency: У меня такое было однажды, когда слак был в браузере. Я взял standalone app и полегчало. А теперь опять в браузере не тормозит.

Kira Sotnikov21:04:53

а у меня стандалоне

Kira Sotnikov21:04:08

я уже и перегружал

rmuslimov22:04:50

возможно компьютер нужно перезагрузить simple_smile