Fork me on GitHub
#clojure-russia
<
2016-01-03
>
shinych00:01:27

=> (+ 0.1 0.2) 0.30000000000000004

pacman06:01:19

потому что арифметика с плавающей точкой. кстати из-за такой вот шняги float и double нельзя применять в финансовых расчетах

pacman07:01:20

user> (+ 0.1M 0.2M) ;; => 0.3M

pacman07:01:01

во так как бы надо, чтобы тип был с фиксированной точкой

mike_ananev09:01:43

Всем привет! Вчера все-таки написал на уровне hello-world приложение на связке ClojureScript/Reagent/Bidi/Immutant (+ websockets). Я никогда не писал UI поэтому дело идет тяжело. Возникло несколько простых вопросов: 1. Весь JS запаковывается в итоге в 1 файл. А как сделать так, чтобы у меня было несколько JS для разных частей приложения? Понятно, что если я пользователь, то подгружать админскую часть в том же JS наверно не правильно. 2. Можно ли сделать страницу логина в JS части? То есть введенные в браузере логин и пароль отправляются на сервер, например по websocketaм, где проверяются, после чего сессия становится аутентифицированной? Пока я видел примеры, где на hiccup+clojure делается страница логина. 3. Какой учебник порекомендуете почитать по основам UI, чтобы дальше в экосистеме Clojure было понятно, что писать? Честно говоря, после server-side программирования небольшой сплит-браин испытываю.

artemyarulin09:01:33

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

zharinov09:01:55

А ещё, есть хороший блог http://tonsky.livejournal.com

artemyarulin10:01:51

мож кто видел уже но в ClojureScript вот это всегда true:

(= (hash {:a (rand) :b (rand)})
   (hash {:a (rand) :b (rand)}))

mike_ananev10:01:22

@artemyarulin: спасибо! про модули не знал. блог tonsky читаю. вопрос 2 снят - сейчас пересматриваю видос от lispcast про web разработку, стало понятно

gordon10:01:31

@artemyarulin а чем это вызвано? я про rand

artemyarulin10:01:09

(hash 0.123123) -> 0

artemyarulin10:01:35

от любого числа меньше нуля

artemyarulin10:01:55

хотя неа, тьфу. Дробная часть просто откидывается

gordon10:01:30

интересно, конечно, по-моему это косяк

gordon10:01:01

хэш-функция не должна так работать

gordon10:01:55

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

artemyarulin10:01:37

ага, я спросил на CLJS канале - может кто знает чо. Если не - то создам тикет в жире

gordon11:01:13

@artemyarulin: я тут глянул, там нигде нет никаких причин http://dev.clojure.org/jira/browse/CLJS-435 https://github.com/clojure/clojurescript/commit/61455e64f58a07706c9b5ecebc9247bf085f7df1 В clojure для даблов используется java-реалиция (как ни странно): https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/Numbers.java#L1063 Вот описание работы hashCode: http://docs.oracle.com/javase/7/docs/api/java/lang/Double.html#hashCode%28%29 само собой тут ни о каком floor речи не идет То же самое другими словами: http://stackoverflow.com/a/9650824/666135

artemyarulin11:01:16

О, спасибо за информацию. Я просто погуглил тоже чутка как сделать int hashCode в JS и по быстрому нашел тока костыли в виде привидения к строке и потом от нее.

artemyarulin11:01:42

но вообще бага да

gordon11:01:10

бага — ладно, я переживаю, что ей три года)

artemyarulin11:01:26

Пошли Нолену патч, я думаю он будет тока рад. У меня боюсь времени счас совсем нету

gordon11:01:08

ок, найду время на выходных

artemyarulin12:01:16

ну что за печаль - кложары все так-же лежат, ничо не зарелезишь 😞

artemyarulin12:01:12

о, с пятого раза получилось пропихнуть

linuccio12:01:39

Хм… Я думал из за тогого, что я только что добавил зеркало)

linuccio12:01:43

http://clojars.org реп работает? Или зеркало тормозит тоже?

mike_ananev12:01:37

@artemyarulin: в соседнем англоязычном канале посоветовали добавить в project.clj строчку :mirrors {#"clojars" {:name "tcrawly" :url "https://clojars-mirror.tcrawley.org/repo/"}}

linuccio12:01:43

В project не знаю, но в ~/.lein/profiles.clj добавить зеркало и всё работает

linuccio12:01:13

Правда, иногда read time out бывает на зеркале

artemyarulin12:01:39

Дада, спасибо. На выход то оно работает худо/бедно - мне на вход надо, новый релиз сделать либы

artemyarulin19:01:01

@gordon:

dnolen [5:20 PM] 
<@U0BNDGFPS>: right, the question is how to detect floating point efficiently. Conversion to strings is out of the question. this conversation is better for <#C07UQ678E>
так что если будешь делать эту багу с hash - запости туда для начала

artemyarulin19:01:35

о, можно посмотреть если дробное, то взять целую и дробную часть, дробную привести к целому (домножить на 10^x). Потом уже посчитать оба хеша и далее уже их перемножить или что еще сделать. Хотя почти уверен будут проблемы с числами рядом с максимальным и дробными отличающимися на 0.0000000000001

gordon20:01:21

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

artemyarulin20:01:10

ага, возможностей там нет. Можно посмотреть как оно там у google closure, но я по быстрому нашел тока всякие md5 и прочие crypt штуки. Scala.JS посмотрел быстро - у них один глобальный счетчик и на каждый новый скаловый объект они его тупо инкрементируют, что конечно мега костыль

artemyarulin20:01:47

можно посмотреть какие другие языки/платформы - GWT, хаскели всякие для жс

artemyarulin21:01:30

Я чота не понимаю - почему lein cljsbuild once иногда не перекомпилирует в итоге жс? Т.е. я понимаю да, что файлы не поменялись и я например только поменял project.clj, но можно как-нить эту хрень выключить? всякие clean-targets добавил, но вроде толку нет

artemyarulin21:01:48

дошло - lein clean && lein cljsbuild once

artemyarulin23:01:27

я тут показывал гифочки кросс-платформенной разработки под андроид/иос/браузер вместе с ом-нектом. Наконец допилил lein template для жаждущих попробовать самому: https://github.com/artemyarulin/om-next-cross-platform-template . Фидбек вери велкам