Home
OCaml (aka Objective Caml), а также прочие ML'и, F#, Coq, etc
ocaml@conference.jabber.ru
Четверг, 29 августа 2013< ^ >
f[x] установил(а) тему: OCaml / ОКэмл / Камль -- http://ocaml.org/ | Камло - http://camlunity.ru/ | Верблюды грязи не боятся! | release crap, enjoy NIH | репортьте баги официальным дилерам | ocaml мёртв и тормозит, move on | stdlib only? - ССЗБ | Fight FUD with fire | Мойте руки перед чатом | KEEP CAML AND CURRY ON | F#, Coq - де-факто онтопик
Конфигурация комнаты
Участники комнаты

GMT+4
[00:20:31] Kakadu вышел(а) из комнаты
[00:28:36] ermine вышел(а) из комнаты
[00:44:43] ForNeVeR вышел(а) из комнаты
[02:42:27] Zbroyar вышел(а) из комнаты
[06:10:43] f[x] вошёл(а) в комнату
[10:06:42] f[x] вышел(а) из комнаты
[10:07:14] zinid вошёл(а) в комнату
[10:38:51] dicu вышел(а) из комнаты
[10:56:43] ermine вошёл(а) в комнату
[11:34:04] f[x] вошёл(а) в комнату
[12:29:10] Typhon вошёл(а) в комнату
[12:36:21] Typhon вышел(а) из комнаты
[12:36:31] Typhon вошёл(а) в комнату
[12:51:57] Kakadu вошёл(а) в комнату
[13:59:39] ForNeVeR вышел(а) из комнаты: Replaced by new connection
[13:59:47] ForNeVeR вошёл(а) в комнату
[13:59:53] ForNeVeR вышел(а) из комнаты
[14:00:16] ForNeVeR вошёл(а) в комнату
[14:05:57] <gds> подскажите, вендовый Unix что-то предоставляет для эмуляции юниксовых сигналов?
[14:07:11] <f[x]> в смысле эмуляции?
[14:26:22] <gds> ну, можно ли в виндовой программе работать с сигналами через Unix?
[14:26:34] <gds> послать сигнал, принять сигнал.
[14:26:44] <gds> виндовая -- сборка под mingw.
[14:26:46] <f[x]> нет
[14:27:04] <gds> понял, полезно, на сигналы рассчитывать не буду.
[14:36:25] f[x] вышел(а) из комнаты
[14:48:35] komar вошёл(а) в комнату
[14:58:10] n06r1n вошёл(а) в комнату
[14:58:43] <n06r1n> всем привет. Вот уж не думал что по ocaml есть русскоязыные конференции
[14:58:58] f[x] вошёл(а) в комнату
[14:59:05] <gds> а вон оно как оказалось.
[14:59:37] <n06r1n> ага, ну это здорово если честно. Английский не в совершенстве знаю.
[15:00:13] <n06r1n> Я ньюфаг просто в ocaml, да как и в функциональщине вообще
[15:04:19] <gds> тут тебе помогут, если будут вопросы.
[15:05:16] <n06r1n> ну вот и славно.
[15:05:52] <gds> а ещё советую походить по ссылкам из топика чата.
[15:05:53] <n06r1n> Вообще ocaml применяется в каких-нибудь коммерческих проектах? Имеется в виду в российских?
Только про echo знаю
[15:06:37] <ADEpt> не-российские не подойдут? ну ладно тогда ...
[15:06:48] <gds> ну, я на работе применяю, но оно закрытое всё.
[15:07:45] <n06r1n> просто в вакансиях ocaml-программисты не требуются я смотрю
[15:25:40] Zbroyar вошёл(а) в комнату
[15:29:03] <gds> а хотя чо это я.  Всё, что не содержит бизнес-логики, я опубликовал на битбакете под gpl или чем-то подобным.
А насчёт вакансий -- ну да, мало кому нужны.  С другой стороны, не всякая работа является "офисной", бывает возможно выбрать любой инструмент для реализации.
[15:31:22] <ADEpt> и если знать английский, то вакансий таки есть
[15:31:44] <ADEpt> (какое-то количество, и думается мне больше, чем на русском)
[15:32:20] <n06r1n> ну да, за рубежом вакансий должно быть больше.
[15:37:45] <gds> поэтому вместо окамла надо учить английский!11
[15:37:55] <Zbroyar> :-)))
[15:38:11] <gds> или мову, если Zbroyar откроет вакансию.
[15:38:21] <Zbroyar> n06r1n: … ты неправильную конфу выбрал, ищи конфу по английскому ;-)
[15:38:49] <Zbroyar> gds: я новичков не беру
[15:39:04] <gds> а седомудых берёшь?
[15:39:15] <Zbroyar> если открою вакансию - ты об этом первый узнаеш, поверь ;-)
[15:40:21] <gds> если вакансия будет интересной -- буду рад.
(кстати, принимаю предложения не только от Zbroyar, но в ближайшие пару недель активно впрячься не смогу.)
[15:40:57] <Zbroyar> gds: "интересной" - понятие относительное
[15:41:14] <n06r1n> Zbroyar: ну я читаю оф. конфу по окамлю.
[15:41:20] <Zbroyar> На фоне твоего кока я с трудом могу представить задачи, которые тебя заинтересуют.
[15:41:43] <Zbroyar> По крайней мере я пока софт для атомных электростанций не пишу :-)
[15:42:19] <gds> Zbroyar: да.  И интересность очень субъективна.  Я её нахожу даже в задачах, кажущихся унылыми.  У меня странное понятие интересности.  А кококо -- конечно, интересно, но, тем не менее, кучу других интересных вещей делаю на окамле.
[15:42:37] <Zbroyar> n06r1n: у тебя слишком сложный ник. Рандомом выбирал?
[15:44:22] <n06r1n> Zbroyar: Ну почти. Я использовал генератор рандомных никнеймов. Но там ники полностью читаемы.
Затем я специально усложнил его цифрами. Фишка в том что человек хорошо запомнит тот ник, на котором спотыкается при чтении. Приходится читать его как бы неправильно
[15:44:27] <n06r1n> это можно сказать такая фишка
[15:45:06] <gds> например, один из текущих хобби-проектов -- персистентные структуры данных (в файлике хранятся, но не тупо сериализуются полностью).  Там указатели, транзакции, сборка мусора, интриги и расследования.  Кстати, кому интересно, подключайтесь.  Но частным образом.  Пока закрыто, но потом под гпл, как станет понятно, что оно "взлетает".
[15:45:37] <Zbroyar> n06r1n: если захочеш новую фишку, рекомендую dd if=/dev/random count=1 bs=10 2>/dev/null | openssl base64 | head -c 10; echo
[15:45:38] <gds> "нобрин".  вот тебе и прочтение, и запоминание.
[15:46:48] <n06r1n> ношрин, ногрин, энношрин
[15:46:53] <n06r1n> такое я уже слышал
[15:46:56] <aleksey> gds: а персистентными обычно другое называют
[15:47:04] <n06r1n> то что ты предложил это совсем нечитаемо
[15:48:18] <gds> aleksey: есть два понимания.  Первое твоё, второе http://en.wikipedia.org/wiki/Persistence_%28computer_science%29
[15:48:35] <Zbroyar> n06r1n: а ты раз 20 запусти подряд и выбери что-то читаемое ;-))))))
[15:48:42] <aleksey> A persistent data structure is not a data structure committed to persistent storage, such as a disk; this is a different and unrelated sense of the word "persistent."
[15:49:24] <aleksey> gds: назови их on-disk, что ли
[15:50:25] <Zbroyar> gds: круто. У тебя там какая-то реальная задача или просто ради удовольствия?
[15:56:38] f[x] вышел(а) из комнаты
[16:07:08] gds вышел(а) из комнаты: Replaced by new connection
[16:07:09] gds вошёл(а) в комнату
[16:07:24] <gds> Zbroyar: "один из текущих хобби-проектов"
[16:10:19] <gds> aleksey: почитал статью по моей ссылке?  в общем, "persistent data structures" я это дело обзывать не буду, назову "persistence", согласно цитате "persistence refers to the characteristic of state that outlives the process that created it".
потому что я в камловики назвал их on-disk data structures, и что, три года не занимался ими.  А теперь назвал их так, и в свободное время занимаюсь.  Видишь, какой прогресс!
[16:11:54] <Zbroyar> gds: хобби не исключает реальную задачу :-)
[16:13:14] <gds> да, раньше были реальные задачи, где это было бы в тему.  И будут, уверен.  Поэтому пока просто хобби-проект, но приветствую примеры того, где это будет полезно.
Потягаться с реляционками, реализовав btree, или с носикель, реализовав хеш-таблицу -- вот не знаю прямо, с чего начать.
[16:21:30] dicu вошёл(а) в комнату
[16:49:37] f[x] вошёл(а) в комнату
[18:16:40] <n06r1n> задача вот
Найти один из иксов квадратного уравнения, используя partial application. Фишка в том, что в формуле ax^2+bx+c=0 с-фиксированное число. и предлагается сначала вызвать функцию и указать с, а потом вызвать еще раз и указать a и b.
Код я накарябал такой вот:
let compc c = 4.0 *. c;;
let ab a b c=  (((-.b) +. sqrt ( (b *. b) -. (c *. a))) /. 2.0 *. a);;
let r c =
let compc' = j c in
  fun a b -> ab a b compc'
[18:17:59] <n06r1n> проблема в том что когда второй раз вызываю, x не выводит
[18:18:31] <gds> я тут не вижу вывода x.
[18:20:23] <n06r1n> ну по идее в конце должно вывестись же
[18:21:00] <Zbroyar> n06r1n: не должно
[18:22:17] <gds> я бы пошёл таким путём:
let x1full c a b = <одно из решений>
let x1myc = x1full 123.456
printf "x1 = %f\n" (x1myc 12. 34.)
но какая-то искусственная задача
[18:22:34] <Zbroyar> n06r1n: компы вообще делают только то, что им говориш явно :-)
[18:22:52] <Zbroyar> а у тебя нигде явно вывод x не прописан
[18:22:53] <gds> тут, может, дело в том, что запускается в топлевеле.  внезапно понял.
[18:23:04] <Zbroyar> А, блин
[18:23:15] <Zbroyar> ;; кагбе намекали
[18:23:19] <gds> дада
[18:23:28] <Kakadu> А зачем выводить одно из решений?  пару надо сразу возвращать
[18:24:00] <gds> если по-честному, но (float * float) option
[18:24:25] <Kakadu> почему option?
[18:24:56] <Zbroyar> Kakadu: а ти хочеш комплексы возвращать?
[18:25:04] <Zbroyar> ;-)
[18:25:13] <Kakadu> Меня научили что у квадратного уравнения всегда два рещения
[18:25:26] <Zbroyar> Kakadu: хреново учили
[18:25:28] <Kakadu> Zbroyar: :)
[18:25:43] <Kakadu> Не, наоборот, хорошо
[18:25:47] <Zbroyar> ;-)
[18:26:23] <Kakadu> А давайте предлохим человеку алгоритм бухбергера пописать?)
[18:26:34] <Zbroyar> Ну ладно, но тогда ответ на твой вопрос "почему option" звучит как "потомучто float"
[18:26:44] <Kakadu> там на хабре когда-то х-е решение выкатывали
[18:27:00] <Zbroyar> Kakadu: тссс… у него даже квадратные уравнения пока не получаются
[18:27:17] <Zbroyar> n06r1n: еще раз: твой код не может работать в принципе.
[18:27:28] <Zbroyar> n06r1n: ну или ты привел его не полностью
[18:29:41] <Kakadu> let eval c =
  fun a b ->
    let d = ... in
    if d >0 then (....; Some (...,...))
    else ...
[18:29:53] <Kakadu> Вот в таком стиле напиши, n06r1n
[18:35:39] <n06r1n> эм, это не рабочий пример, а задачка из книги по ocaml, который должен показать как работает partial application. Не знаю как правильно перевести это
[18:36:02] <n06r1n> дело в том что очевидный вывод сделать можно, но это будет нечестно. По-идее я его еще не прошел
[18:36:16] <n06r1n> код весь исполняется в интерпретаторе, поэтому проблемы с выводом нет
[18:37:44] <n06r1n> поэтому и один из иксов. лишь.
[18:40:36] <n06r1n> вот отрывок из книги описывающий задание
[18:40:38] <n06r1n> http://pastebin.com/vU46i5tp
[18:41:05] <n06r1n> Извините, я отойду минут на 20. Обязательно прочту ответы.
[18:41:31] <Kakadu> У меня тут непонятки по поводу
let ab a b c=  (((-.b) +. sqrt ( (b *. b) -. (c *. a))) /. 2.0 *. a);;
[18:41:56] <Kakadu> там вроде -бэ +/- корень из дискриминанта
[18:42:14] <Kakadu> который, вообще-то, b^2-4ac
[18:42:25] <Kakadu> и всё надо делать на 2а
[18:42:37] <Kakadu> а человек умножает на а, а не делит
[18:42:56] Kakadu вспоминает профессора, который ругался, когда мы не ставили как надо скобочки
[18:45:08] <n06r1n> еще раз повторяю. Я нахожу один из иксов
[18:58:41] <Kakadu> неправильно ты его находишь
[18:59:19] <Kakadu> математика не так работает
[19:00:52] <gds> n06r1n: ключевое слово: приоритет арифметических операций.  Если не поймёшь после пары минут обдумывания -- сообщи, расскажу.
[19:26:35] <n06r1n> ок. То есть проблема в порядке?
[19:27:45] <n06r1n> я просто специально изолировал операции, чтобы точно порядок не нарушить
[19:28:54] <n06r1n> меня еще вот смущает что с типом float мороки много. Практически везде пришлось добавить точки
[19:34:49] <gds> проблема в том, что a /. b *. c парсится как (a /. b) *. c
[19:37:15] <gds> разные операторы для разных типов -- это такая фишка.  Если в основном работаешь с float, можно переопределить операторы так, чтобы "без точек" работали с float.  Сейчас "матан" пишу, так и сделал, а целочисленные переопределил на +. , -. , удобнее стало.  Если захочешь переопределить -- сообщи, есть простой способ (он в камловики изложен).
[19:40:46] zinid вышел(а) из комнаты
[19:44:57] ForNeVeR вошёл(а) в комнату
[19:47:50] Typhon вышел(а) из комнаты
[19:49:15] <n06r1n> эм, я наверное чего-то не понял, но вот смотри
# 2.0 *. (3.0 /. 4.0);;
- : float = 1.5
# (2.0 *. 3.0) /. 4.0;;
- : float = 1.5
[19:49:29] <n06r1n> порядок операций роли не играет
[19:49:53] <Kakadu> ты попробуй вначале поделить, а потом умножить
[19:49:57] <n06r1n> и даже
# 2.0 *. 3.0 /. 4.0;;
- : float = 1.5
[19:50:40] <Kakadu> 2. / 3. * 4. = 2.6666666666666
[19:51:12] <n06r1n> ох лол, машинная арифметика?
[19:51:26] <Kakadu> правила математики
[19:52:01] <Kakadu> и я это не копипастил, в уме делил
[19:52:02] <gds> n06r1n: ты не понял.  У тебя в примерах деление было последним.  Сделай его первым и посмотри на результаты.  Это реально правила, но арифметики.
[19:54:24] <n06r1n> слушай, а можешь подсказать как подключить открыть файл интерпретатором и пошагово пройти по нему?
[19:55:04] <Kakadu> #use
[19:56:33] <f[x]> ermine: я тут собираюсь пакеты для sulci в opam позапихивать
[19:57:27] Kakadu вышел(а) из комнаты: Logged out
[19:58:43] <gds> #use не пошагово.  А пошагово из файла интерпретатор не умеет.
[20:00:32] <f[x]> #trace есть
[20:02:24] <n06r1n> погодите, это директивы для компилятора или что?
[20:03:24] <gds> это для интерпретатора.  который "топлевел", он же "repl".
[20:29:24] <ermine> f[x]: да вроде все они были в opam, хотя не помню уже - json-wheel, json-static, dbm, ulex, sqlite3
[20:29:34] <f[x]> эти да
[20:29:38] <f[x]> я про твои либы :)
[20:29:55] <ermine> ой
[20:30:09] <f[x]> только релизы непонятно где, поэтому привязываюсь к github tarball урлам
[20:30:35] <ermine> а они были?
[20:30:37] <f[x]> и в treap тэгов вообще нет :(
[20:30:45] <f[x]> наверное не было :)
[20:30:52] <f[x]> я это у тебя хотел спросить
[20:31:29] <f[x]> я просто задумываю одну внутреннюю интеграцию с jabber'ом
[20:32:12] <ermine> а я вот уже давно не камлила, только говядинилась
[20:32:25] <ermine> говядина вкуснее чем верблюжатина
[20:34:22] <ermine> и даже давно не обновляла опам, вообще всё заржавело уже
[20:34:55] <f[x]> :(
[20:38:01] <ermine> в камле слишком много ручной работы и мало библиотек, вообще опам запоздал лет на N, и наверняка даже сейчас не все собирается
[20:39:00] <ermine> а еще достали нерекурсивные рекурсии
[20:39:29] <ermine> в общем достала академота
[20:39:43] <f[x]> так ты теперь в ынтырпрайзы подалась?
[20:41:13] <ermine> на быдлоязык, в котором почти всё мутабельно, синтаксис проще, всё рекурсивно, автоматическое скачивание интернета и его сборка
[20:42:10] <f[x]> по описанию звучит как армагеддон
[20:42:20] <f[x]> вот опам скачивает все интернеты
[20:42:21] <ermine> плюс js_of_ocaml - это для лысых академиков, оказывается, сам javascript вполне достойный язык и на нем удобно программировать
[20:42:23] <f[x]> и мне это не нравится
[20:42:33] <f[x]> учитывая что проверка только по md5 и то опциональная
[20:42:42] komar вышел(а) из комнаты: Logged out
[20:42:51] <f[x]> и кэши скачиваний не делает почему-то ..
[20:43:17] <f[x]> приехали!
[20:43:44] komar вошёл(а) в комнату
[20:43:57] <f[x]> > javascript вполне достойный язык
вот как же нужно было довести человека академотой, а?
[20:44:11] <ermine> говядина просто сама видит импорты, которые пишутся в виде урлов в гитхуб
[20:44:27] <ermine> плюс нормальный неймспейс
[20:44:37] <f[x]> ermine: это просто ужас в чистом виде, дистилированный
[20:45:00] komar вышел(а) из комнаты: Replaced by new connection
[20:45:00] komar вошёл(а) в комнату
[20:45:05] <f[x]> нормальный неймспейс это хорошо, да
[20:45:29] <ermine> дадад, я же женщина, мне подавай только готовый инструмент с одной кнопкой ВКЛ/ВЫКЛ
[20:45:41] <ermine> а не кучу разноцветных кнопочек
[20:46:08] <f[x]> зато их можно расставлять по-всякому, и развешивать в гирлянды (но работать всё равно не будет)!
[20:46:52] <ermine> компьютер не должен быть сложнее чем швабра
[20:48:09] <ermine> мужик придумал арифмометр не для того чтобы расставлять на нем кнопки по-разному
[20:49:10] <f[x]> товарищи! ахтунг!! в то время как кок бороздит просторы вконтактега, в нашем чате идёт оголтелая швабрификация арифмометров!!!
[20:49:56] <f[x]> а ещё в erm_xmpp тесты не опциональные
[20:50:15] <f[x]> патчи присовывать или сразу форкать?
[20:52:05] <ermine> какие тесты?
[20:52:58] <ermine> кстати в говядине более удобные встроенные тест-юниты
[20:54:22] <ermine> в этом плане писатели plan9 не ошиблись, они сделали говядину, а не верблюжатину
[20:58:12] n06r1n вышел(а) из комнаты
[20:59:25] <f[x]> в erm_xmpp в _oasis описаны бинарники тестов и они собираются по дефолту
[20:59:39] <f[x]> из-за чего xmpp тянет больше зависимостей чем нужно для самой либы
[20:59:56] <f[x]> готов запатчить :)
[21:02:42] <ermine> вроде они ж собираются если ставился флаг тестов, который по умолчанию не ставится
[21:03:10] <f[x]> как-то так : http://paste.in.ua/8635/
[21:03:28] <f[x]> угу, только это надо явно указывать..
[21:03:49] <ermine> хм, флага не видно
[21:05:29] <f[x]> патч выше кинул
[21:10:07] <ermine> а что ты там добавил?
[21:10:14] <ermine> да вот наложила и чота не вижу
[21:11:19] <ermine> а, в .rej вылилось
[21:13:47] <f[x]> упс
[21:13:53] <f[x]> я на тэг накладывал
[21:13:55] <f[x]> аргз
[21:15:30] <f[x]> вообщем уже закостылял патчем в опам
[21:17:21] <ermine> погодь, я везде вставила BUild$
[21:17:46] <ermine> этого было достаточно?
[21:18:17] <f[x]> да, и перегенерить
[21:18:45] ermine опасливо подумала про ржавый оазис
[21:20:12] <ermine> хм, странный вывод
[21:20:14] <f[x]> отправил https://github.com/OCamlPro/opam-repository/pull/1023
[21:20:38] <f[x]> остальное завтра
[21:20:47] <ermine> а не, нормально
[21:20:51] <f[x]> бб
[21:21:38] <f[x]> opam install sulci - это ведь круто будет, только не знаю как твои юзеры об этом узнают.. :)
[21:22:06] f[x] вышел(а) из комнаты
[21:29:16] <ermine> да дерганий могло быть меньше, в говядине же можно обойтись без оазисов и опамов, рекомендую
[21:29:21] <ermine> в общем запушила
[21:39:39] Zbroyar вышел(а) из комнаты: Replaced by new connection
[21:39:46] Zbroyar вошёл(а) в комнату
[23:39:10] komar вышел(а) из комнаты: Logged out
[23:45:20] Zbroyar вышел(а) из комнаты
[23:51:10] komar вошёл(а) в комнату
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!