This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2017-02-09
Channels
- # beginners (55)
- # boot (173)
- # clara (3)
- # cljs-dev (10)
- # cljsjs (3)
- # clojars (11)
- # clojure (110)
- # clojure-austin (5)
- # clojure-berlin (13)
- # clojure-chicago (2)
- # clojure-dusseldorf (3)
- # clojure-france (24)
- # clojure-italy (4)
- # clojure-portugal (1)
- # clojure-russia (60)
- # clojure-serbia (8)
- # clojure-spec (150)
- # clojure-uk (129)
- # clojurescript (87)
- # core-logic (1)
- # cursive (75)
- # datavis (1)
- # datomic (75)
- # devcards (4)
- # dirac (17)
- # emacs (50)
- # events (2)
- # hoplon (9)
- # jobs (4)
- # jobs-discuss (37)
- # lein-figwheel (3)
- # luminus (5)
- # off-topic (54)
- # om (9)
- # om-next (5)
- # onyx (10)
- # perun (11)
- # protorepl (11)
- # quil (2)
- # rdf (2)
- # re-frame (14)
- # reagent (58)
- # ring (13)
- # ring-swagger (10)
- # rum (52)
- # spacemacs (8)
- # test-check (10)
- # untangled (17)
- # yada (34)
Собственно поинт был в том что тебе жалко свое время, но не жалко чужого. Это не хорошо
@rmuslimov Ну да, так можно воспринять мой подход к обучению, но я бы не сказал, что мне жалко своё время, скорее мне хочется за меньший промежуток времени узнать больше, чем я смог бы своими силами. Я как никак за неделю потратил на изучение кложуры не меньше 2.5 суток чистого времени
К слову, раз уж о моем коде говорили. Вместо того, чтобы менять структуру данных, я сделал статистику работы программы Поле 160х120. Около 5000 клеток в начале. Время вместе с отрисовкой. Отрисовка занимает от 2 до 15 мс
Вот так увлекательно это выглядит:
@ssesutchenkov ну да. Лайф же! Кгохнеджехог любимую тему задел))
ащпе лучше через 4clojure или hackerrank учить, там после того, как свой костыль заслал можно другие решения посмотреть и сделать выводы
а еще раз в год полезно перерешивать с нуля и сравнивать со своими же решениями - вот где стыд и позор наружу вылазает 🙂
О 4clojurе и hackerrank не знал, спасибо
А пересмотр старых решений это да, всегда и на всех языках так :)
Вопрос про clojure.spec. Если есть обычная функция выдающая число, как ее превратить в генератор для спеки?
Это можно как-нибудь умно без loop'а написать на кложуре? Код на питоне:
def parity_bit(x):
bit = 0
while x != 0:
bit ^= 1
x &= (x - 1)
return int(bit)
У меня получилось только с лупом Выглядит очень плохо
там в оригинале нет какого-то коммента, это то вычисление parity bit, что описано в вики, или это что-то другое, просто криво названное?
http://p-nand-q.com/python/algorithms/math/bit-parity.html - бери любой из оптимизированных и переписывай
Это алгоритм отсюда, вон, снизу на скрине
Мне он понравился
НУУ))) Это разные вещи
Я посмотрел остальные алгоритмы, они завязаны на битности типа, мне не хочется иметь эту зависимость :С
ну вроде совет был вернуться к массивам (читай -- примитивам) а не реализовывать битность на кложе-структурах..
@mike1452 надо оперелить spec с помощью with-spec
и в нем написать кастомный генератор, использующий эту функцию
@kgofhedgehogs #(bit-and (Integer/bitCount %) 1)
Я вот еще про спек. Мне руками придется проверять какая спека подошла для текущего набора данных?
@kgofhedgehogs Нужно сначала посмотреть примитивы языка. На SSE4+ Integer/bitCount
будет скомпилирован в одну ассемблерную инструкцию POPCNT
.
Спасибо!
@a.espolov что значит “руками проверять”? ты определяешь спек, в месте где хочешь проверить вызываешь (s/valid? ::spec-name data)
или (s/explain-data ::spec-name data)
если хочешь получить ошибки, которые можно попарсить
@kishanov Вот у меня набор спек и набор данных. Как узнать какая спека соответствует этому набору данных?
спек - это не тип, он существует сам по себе от данных и магическим образом нигде не биндится на данные, т.е. если ты хочешь иметь что-то типа data.getType()
со спеком так не работает
там, где хочешь проверить, что данные нужной формы - пропускаешь их через s/valid
, s/conform
и проч
Подключаюсь по вебсокетам к сервису подписываюсь на три канала, сообщения это вектор с разным количеством элемнтов и разными типами
ну это тебе server side должен давать какую-то дополнительную информацию, чтобы понять что за данные. не думаю, что существует какая-то технология, которая получает поток разношерстных данных и магическим образом определяет что за данные, не имея дополнительной информации
ну на канал редюсер подцепить, который перебором валидирует/конформит данные, и дальше передает их уже с "тайп хинтом"
есть же (s/or :a ::spec1 :b ::spec2)
оно вроде как раз оно не?
после conform он вернет как раз ключ + conformed value
если я не наврал
вроде работает
user=> (s/def ::a string?)
:user/a
user=> (s/def ::b int?)
:user/b
user=> (s/def ::ac (s/or :a ::a :b ::b))
:user/ac
user=> (s/conform ::ac "aaa")
[:a "aaa"]
user=> (s/conform ::ac 1)
[:b 1]
>ну это тебе server side должен давать какую-то дополнительную информацию, чтобы понять что за данные. не думаю, что существует какая-то технология, которая получает поток разношерстных данных и магическим образом определяет что за данные, не имея дополнительной информации и имя этой магии clojure.spec
@artemyarulin да, ты прав, я забыл что s/or позволяет варианты именовать
ага, можно один api сделать
который будет принимать что угодно (на беке спекой разбирать что пришло) и в ответ получить что угодно, тоже спекой разбирать. Круто же!)
@artemyarulin вот спасибо