Fork me on GitHub
#clojure-russia
<
2016-01-22
>
wwall09:01:00

Всем привет. Подскажите есть ли какая стандартная функция которая бы при каждом вызове возвращала бы целое число увеличенное на 1? Надо счетчик организовать

prepor09:01:46

а seq не подойдет? ) range

wwall09:01:14

не понял. как seq тут использовать?

prepor09:01:01

не иметь состояния столь явного

prepor09:01:20

но если нааадо, то (defn counter [] (let [i (atom 0)] #(swap! i inc)))

wwall09:01:42

криво видимо объяснил. Смотри - у меня есть функция разбивающая тектс на токены. Теккстов может быть много, надо перенмеровать каждый токен. То есть сделать так что бы было уникальное число для каждого токена

wwall09:01:05

то есть надо где-то вне функции токениации хранить счетчик токенов

wwall09:01:51

вот такое - (def counter (atom 1)) (defn counter [] (swap! counter inc)) подходит, но что-то не нравится

prepor09:01:01

что тебе не нравится? )

wwall09:01:38

да вот глобальная переменная и не нравиться

rmuslimov09:01:05

ну а если так как нибудь (defn create-counter [] (let [i (atom 0)] (fn [] (swap! i inc) @i)))

rmuslimov09:01:24

(def counter (create-counter)); (counter); (counter); etc...

seryh10:01:33

чет на хабре никто даж не осветил выход clojure 1.8

artemyarulin10:01:30

дак как то слабенький релиз, да и хабр тока темой го против пхп интересуется simple_smile

seryh10:01:27

ну direct linking я так понял сделали кложу еще шустрее, вполне себе богоугодное дело

seryh10:01:43

да и репл в jar файле тож имеет крутые преспективы

artemyarulin10:01:00

дак кто смотрел - на скок шустрее?

seryh10:01:31

вот, былоб круто на хабре статейку с бенчмарками

artemyarulin10:01:12

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

last.khajiit10:01:36

хабр давно не торт

rm15:01:32

а как вы одновременно в связке lein + figwheel настраиваете доступ к clj и cljs реплам?

rm15:01:51

а то сделал один раз (browser-repl), а обратно никак

niquola15:01:19

Я два емакса открываю ;)

turtle15:01:18

У меня древнее ClojureScript приложение перестало работать на новых браузерха. Грусть-пичаль.

seryh15:01:07

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

turtle15:01:39

Со старыми проблем нет. simple_smile

turtle15:01:49

Всё работает, как и работало. А новые не работают.

seryh15:01:04

а какие ошибки скомпиленый js сыпет?

seryh15:01:56

я вот еще не определился на чем буду писать новые фронт проекты. толи redux+react толи cljs с реагентом

seryh15:01:34

и то и то фкусно, а пока довольствуюсь тысячами легаси кода на ES5 и бекбоне

seryh15:01:34

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

turtle15:01:10

Ошибки - какая-то констуркция перестала работать.

turtle15:01:19

Пришлось перекомпиливать проект свежим кложурскриптом.

be915:01:44

коллеги-фронтендеры говорили про angular 2. что он якобы столь же быстр, как и react

potapenko15:01:42

потому что там есть shadow dom

be915:01:24

ну вот, значит и бомж в стартап возьмёт

potapenko15:01:27

Я недавно со ангулара слез - главная причина не производительность. Нормально с производительностью, тем более там появился одноразовый байндинг.

seryh15:01:17

мне не нравится в ангуляре что это большой черный ящик, фиг поймешь что там и как работает

seryh15:01:26

реакт выглядит в этом плане намного лучше

seryh15:01:37

больше контроля дает над приложением

seryh15:01:44

более прозрачно все

seryh15:01:13

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

seryh15:01:54

у меня в проекте js шаблоны проходят предобработку на беке для локализации через gettext, как такую систему портировать на шаблоны реакта хз даже

potapenko16:01:27

главная причина почему народ слезает с angular - это angular 2 simple_smile

potapenko16:01:56

точнее typescript, я по той же причине. классов наелся.

mike_ananev16:01:57

@rm: посмотри на конфиг моего проекта для связки Idea + Cursive https://github.com/middlesphere/hello-criwt

mike_ananev16:01:21

сначала один repl запускаешь, например для jvm части

mike_ananev16:01:42

как загрузится первый, тогда запускаешь второй репл

mike_ananev16:01:13

и во втором репле вводишь

mike_ananev16:01:14

;(use 'figwheel-sidecar.repl-api) ;(start-figwheel!) ;(cljs-repl)

mike_ananev16:01:56

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

rm16:01:02

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

rm16:01:08

это же nrepl по идее

mike_ananev16:01:35

не, просто в идее запускаешь репл - через edit configurations это настравивается

mike_ananev16:01:08

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

mike_ananev16:01:39

потом второй репл переводишь в режим clojurescript / figwheel вышеобозначенными командами

rm16:01:01

так слишком просто :) зато сработает

rm16:01:03

еще бы вим научить евалить в нужные реплы. С кложей он справляется, а с cljs чота, кажется, нет

mike_ananev16:01:42

emacs вроде тоже с 2мя реплами умеет работать

rmuslimov18:01:36

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

artemyarulin18:01:33

прожил пол года с ангуляром - большего говно сложно представить. Магия, блядский $digest already in progress, подход all-in, когда все из коробки (вау!), а поменяю как я вот это (=хер). Надстройка JXS с нормальной поддержкой map/filter/reduce в шаблонах в Реакте это благо. Без JXS - один фиг map/reduce/filter, смотрите reagent/om/etc. Подход ангуляра2? А давай ты заюзаешь наш маленький уютненький язык со своими шлю, тьфу, штуками для итерации и шаблонизации: <li *ngFor="#hero of heroes">{{hero.name}}

andfadeev18:01:08

@rmuslimov: есть clj-refactor и cljr-add-project-dependency https://github.com/clojure-emacs/clj-refactor.el

andfadeev18:01:06

подскажите ктонить в призматик схема можно сделать проверку что у меня как минимум один элемент в коллекции?

rmuslimov18:01:40

@andfadeev: по-моему эта штука просто идет в project.clj и там добавляет надпись про dependency

rmuslimov18:01:49

с реплом она не связана вроде

andfadeev18:01:01

нет конечно

andfadeev18:01:11

подгружает либу в рантайм

rmuslimov18:01:27

хм, хорошо я попробую - спасибо

andfadeev18:01:50

незачто

rmuslimov18:01:41

да, ты прав

rmuslimov18:01:59

интересно в cljs реплом она справится?

andfadeev18:01:04

да я знаю) я же юзаю ее)

andfadeev18:01:10

без понятия

andfadeev18:01:19

я тока на clojure пока

potapenko19:01:42

Ангуляр хороший, он меня кормил два года. спасибо ему. Но! Реакт лучше! Особенно он лучше с Clojure. Точка.

az20:01:39

всем привет

az20:01:50

в слаке есть коната постгры?

az20:01:54

или вообще DBA

az20:01:04

как я понял не всех туда пустят

az20:01:06

обидно

az20:01:27

@rm: давай сегодня ты будешь великим DBA

rm20:01:48

я так себе dba

rm20:01:54

но ты можешь попробовать

az20:01:57

а то я @nicola начал дёргать, а он видать спит

az20:01:18

короче история такая … az [11:01 PM] тут? [11:02] короче тут у нас с посонами спор возник, оби стороны агрятся и доказыают свою точку зрения [11:02] нужен авторитет, который научит молокососов правильно пограмировать [11:02] сегодня это ты) [11:04] вопрос такой, как правильно делать составной индекс точнее какой порядок столбцов в состовном индексе правильный. например если есть таблица пользователей со столбцами пол и возраст, то при создании индекса нужно делать его по [пол, возраст] или [возраст, пол] ?

rm20:01:59

о, это я знаю

rm20:01:44

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

rm20:01:45

az: понял?

az20:01:59

да как-то он жидинько всё поясняет там

az20:01:06

типа и так и так можно

rm20:01:09

ну епта. Если ты сделаешь индекс [пол, возраст], то sql не сможет использовать этот индекс, если ты будешь искать только по возрасту

az20:01:16

Если делаешь так, то вот такой запрос плохо работает, а если так так, то такой. А мне то нужен "идеальный" случай - пол возраст, выборка сразу по двум столбцам.

az20:01:32

Ну да да, это всё понятно.

rm20:01:50

а в чем вопрос?

az20:01:52

Ну вопрос не в том, что я не смогу сделать с индексом, а в том какой индекс "правильнее" [пол, возраст] или [возраст, пол].

rm20:01:59

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

rm20:01:25

если разницы в производительности нет

az20:01:38

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

az20:01:35

И якобы в последнем случае кол-во переходов/сравнений в разы больше.

az20:01:48

Есть статья http://ruhighload.com/post/%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0+%D1%81+%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D0%B0%D0%BC%D0%B8+%D0%B2+MySQL которая утверждает обратное, но мои личные тесты показывают, что автор пиздит.

az20:01:01

никому верить нельзя

rm20:01:08

ну заюзай explain

rm20:01:13

заодно нам расскажи

rm20:01:21

и вообще, может в pg иначе

az20:01:27

explain заюзал https://gist.github.com/zinenko/88dd04efd576286fb81b мой вариант почти в два раза быстрее

az20:01:21

но это я тестил на миллионе записей, посоны упёрлись рогами, добавили ещё девять милионов записей и показали, что аксиома эскобара в данном случае работает

az20:01:36

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

az20:01:36

rm [11:30 PM] а чем определяется правильность? [11:31] если разницы в производительности нет выходит есть, в производительности и предположительно в размере индекса

rm20:01:50

> аксиома эскобара Думаю, чо за аксиома, а это, оказывается, "шо то хуйня, шо это хуйня"

az21:01:58

Ну да 😀