Home
Objective Caml
ocaml@conference.jabber.ru
Понедельник, 21 марта 2011< ^ >
ygrek установил(а) тему: Камль -- http://caml.inria.fr | Логи -- http://chatlogs.jabber.ru/ocaml@conference.jabber.ru/ | Вики -- http://gdsfh.dyndns.org/kamlo/ | Верблюды грязи не боятся! | release crap, enjoy NIH | репортьте баги официальным дилерам | ocaml мёртв, move on | Здесь бывает ermine!!111
Конфигурация комнаты
Участники комнаты

GMT+3
[00:18:47] Typhon вышел(а) из комнаты
[00:21:11] Kakadu вышел(а) из комнаты
[01:08:31] ygrek вышел(а) из комнаты
[02:01:55] Typhon вошёл(а) в комнату
[03:11:08] Typhon вышел(а) из комнаты
[04:31:20] komar вышел(а) из комнаты
[04:32:20] ftrvxmtrx вышел(а) из комнаты: offline
[04:32:38] ftrvxmtrx вошёл(а) в комнату
[06:28:02] f[x] вышел(а) из комнаты
[09:01:14] gds вошёл(а) в комнату
[09:26:07] f[x] вошёл(а) в комнату
[09:33:50] iNode вошёл(а) в комнату
[09:38:01] iNode вышел(а) из комнаты
[09:42:08] iNode вошёл(а) в комнату
[10:26:25] iNode вышел(а) из комнаты: Replaced by new connection
[10:26:25] iNode вошёл(а) в комнату
[10:33:39] ygrek вошёл(а) в комнату
[10:47:31] Sergey Plaksin вошёл(а) в комнату
[11:28:23] <gds> господа, подскажите пожалуйста такую штуку.  Есть человек, у которого есть работающий мозг, только не в сторону компьютеров (с компами -- относительно-грамотный пользователь).  Думаю, как бы обучить его камланию (ну и программированию вообще) (зачем и почему -- другой вопрос, но вдруг чел найдёт в этом свою профессию, а то и небольшой заработок?..).  Пробовал давать SICP -- технических деталей много, а практического результата не густо.  Есть идеи, что бы дать почитать (и какие задачи первыми поставить)?  Камло какое-то не очень дружелюбное в этом отношении -- не labltk же показывать в первую очередь...
Или допилить веб-фреймворк для плевания хтмлом и нехай server-side logic асиливает?..  Хрен его знает, давайте идеи.
[12:10:16] ygrek вышел(а) из комнаты
[12:10:38] ygrek вошёл(а) в комнату
[12:10:44] ygrek вышел(а) из комнаты
[12:13:59] Kakadu вошёл(а) в комнату
[12:40:30] iNode вышел(а) из комнаты
[12:52:10] Typhon вошёл(а) в комнату
[13:01:00] gds вышел(а) из комнаты
[14:17:35] iNode вошёл(а) в комнату
[14:27:58] gds вошёл(а) в комнату
[14:53:29] zert вошёл(а) в комнату
[16:53:36] gds вышел(а) из комнаты
[18:19:43] gds вошёл(а) в комнату
[18:21:24] gds вышел(а) из комнаты
[18:21:29] gds вошёл(а) в комнату
[18:47:16] Kakadu вышел(а) из комнаты
[18:47:22] Kakadu вошёл(а) в комнату
[19:11:24] Kakadu вышел(а) из комнаты
[19:34:36] Sergey Plaksin вышел(а) из комнаты
[20:04:53] Kakadu вошёл(а) в комнату
[20:22:53] komar вошёл(а) в комнату
[20:43:15] avysk вышел(а) из комнаты
[20:49:07] Typhon вышел(а) из комнаты: Replaced by new connection
[20:49:09] Typhon вошёл(а) в комнату
[20:53:27] <Typhon> gds: а цель именно камлать научить? если просто программированию, то можно посмотреть на дружелюбные более языки. + сильно зависит от возраста, пожалуй.
[20:54:44] <Kakadu> Typhon: я против дружелюбных языков. Мне в школе было абсолютно всёравно , что С++, что Паскаль
[20:55:03] <Kakadu> первая книжка была по плюсам - сейчас смотрю и вижу какое это было дерьмо непонятное
[20:55:09] <zert> ерлангию обучи
[20:55:15] <zert> самый простой езык
[20:55:36] <zert> даже после лоботомии можно писать
[20:56:00] <Kakadu> zert: ну вас, вы тут русский не можете выучить и пиарите всем простые языки
[20:56:04] Kakadu троллит
[20:56:11] <Typhon> дружелюбный в смысле наличия библиотек
[20:56:20] <Typhon> с которыми можно делать быстро красивые штуки
[20:56:25] <zert> накой они нужны для обучения?
[20:56:25] <Typhon> это хорошая мотивация
[20:56:34] <zert> на ерланге можно быстро делать красивые сервера
[20:56:54] <Typhon> ну вот если обучить нужно ребёнка 9 лет — то это не ок
[20:56:57] <Typhon> к.м.к.
[20:57:03] <Kakadu> zert: человеку непонятно в чем пафос сервера и ему не будет понятно почему именно ерланг круто для сервера
[20:57:12] <zert> пусть поймёт
[20:57:39] Kakadu думает, что если бы завтра пошел в универ преподавать - то преподовал бы камло
[20:57:47] <zert> всяко красивше, чем гуйнюшки малевать
[20:58:22] <Kakadu> может дать человеку функции к openGL и пускай фрактала мандельбродта кодит?
[20:59:12] <Typhon> рилейтед http://piggymouse.livejournal.com/1698429.html
[20:59:21] <Typhon> (это в случае детей)
[21:03:59] <Kakadu> gds: http://msimuni.wikidot.com/fp
[21:04:16] <Kakadu> Тут задачи кторые мне в универе давали по хаскеллю
[21:04:39] <Kakadu> там не всё, но полный вариант у меня валяется где-то на компе, так как я их делал
[21:04:41] <Typhon> 1. С помощью приема 'завязывания узлом' (tying the knot) опишите бесконечный список lst:
lst = [1, sin 1, sin sin 1, sin sin sin 1, sin sin sin sin 1, … ]
[21:04:44] <Typhon> неинтересно
[21:04:51] <Typhon> если я не занимался программированием :)
[21:05:25] <Kakadu> me не сразу разобрался в этих узлах. а в монадках вообще жо конца не разобрался
[21:05:34] <Kakadu> до*
[21:06:18] <gds> Typhon:
> а цель именно камлать научить?
ну а какие ещё языки есть, чтобы не вырабатывался синдром кодера-обезьянки?  Х-ь?  Кое-чем проще, но его брать при изучении программирования в целом -- это как изучать язык без указателей при изучении системного/низкоуровневого программирования, имхо.  Лисп/схема не особо вкатились, так как по ним я мало могу показать "на пальцах".  Петон мучить == императивщине учить, так как около-функционального там не густо, и типизация печалит.
[21:06:22] <zert> нахера вот детей пичкать всяким погромированием?
[21:06:42] <gds> zert: про эрланг думал, буду думать ещё, идея интересная.
[21:06:57] <zert> я своим лет до 18 погромирование показывать не буду
[21:07:00] <Typhon> с эрлангом по той книжке с картинками может ок пойти для любого уровня :)
[21:07:09] <Kakadu> Typhon: самая интересная задачка там была повернуть список за линейное время
[21:07:21] <gds> мотивация -- да, нужна в первую очередь.
[21:07:29] Typhon может руками перевернуть женщину
[21:07:31] <Typhon> :)
[21:07:42] <zert> а то и двух
[21:07:52] <Kakadu> Typhon: задом наперед)
[21:08:05] <Kakadu> Typhon: а камлом женщину повернуть можешь?)
[21:09:44] <gds> zert: детке больше, чем 18, поэтому всё ок.
[21:09:46] <Typhon> камлом не могу :(
[21:09:53] <Typhon> дистрибутед может попереть
[21:10:03] <Typhon> точнее, может быть ок, если попрёт
[21:11:41] <gds> идеи примерно понятны.  Думаю, может, показать гимп и нехай плагины к нему пишет?  Ну, я про script-fu или как там оно (я вообще не в теме, но вроде что-то такое было).  Ибо уважуха к изобразительному искусству наблюдается.
[21:12:23] <zert> а ты вообще с чего решил, что надо что-то изобразительное писать?
[21:12:44] <zert> я никогда гуй не писал, программирование изучал на численных методах, и тем не менее, тяга к погромированию есть
[21:13:18] <Typhon> картинки это ж не гуй
[21:13:19] <gds> с того, что хоть что-то писать да надо, тренироваться на чём-то, чисто в качестве "вводной".  Чтобы понять, что такое компилятор/интерпретатор, что такое ошибки, что такое переменные/функции.
[21:13:59] <Typhon> численные методы как правило просто переводятся из алгоритма в код — не особо круто :)
[21:14:16] <zert> а ежели детёнку сразу показывать гуй, то он потом и будет одним гуеписанием заниматься
[21:14:51] <Kakadu> gds: может всё-такие какие графические картинки на opengl?
[21:15:07] <gds> численные методы -- необходимо хорошее математическое образование и желание мучить матан, а тут образование скорее смешанное, не чисто техническое.
[21:15:40] <gds> Kakadu: учёл, но там много математики (векторы, матрицы), поэтому пока сомневаюсь.
[21:16:12] <Typhon> мморпг пусть пишет текстовую :)
[21:16:26] <Kakadu> gds: QT animation framework с плавным переходом в маленькие игрушки типа сокобана?
[21:16:50] <Kakadu> gds: но там будет проблема, возможно, слезть с импертаивщины
[21:17:54] <Typhon> кутэ — это же какашка какая-то :)
[21:18:03] <Typhon> надо чтобы если гуй был — был малой частью
[21:18:05] <Typhon> а не целью
[21:18:09] <Typhon> думается мне
[21:18:25] <Typhon> а то действительно, только по формам кидать формы научиться получиться
[21:18:29] <Kakadu> Кто выпустил пещерного тролля?
[21:18:31] <Kakadu> )
[21:18:40] <Kakadu> ОК
[21:18:40] <Typhon> (с мягкими знаками намутил чота, ну да фиг с ним)
[21:18:53] <gds> мморпг -- идея :)  Сам начинал мучить камло в 2000г как раз с этого.
Про animation framework и подобные "конструкторы игр" -- это тоже хорошая идея.  Хотя бы общие принципы.  Пусть и гуй, и императивщина, и даже event-driven везде, но результат виден, и это оправдывает.
[21:19:37] <gds> да, кстати, подскажите, как в окамле культурно кидать формы по формам, а то порой эта функциональность нужна :]
[21:19:46] <Kakadu> gds: попробуй найти книжку про C++Builder Бобровского. Там три примера: калькулятор, игра в кости, и пасьянс.
[21:20:03] <Kakadu> ИМХО, очень для чайников хорошая книжка
[21:20:25] <Kakadu> но императивщина всё-таки
[21:20:49] <Kakadu> там автор задался целью быстро научить писать проги современного вида (формошлепство)
[21:20:53] <gds> эти примеры -- это хорошо.  Их могу и на окамле показать, только гуй для пасьянса не очень хотелось бы реализовывать.
[21:20:53] <Typhon> gds: я не пробовал, но в книжках пишут про Graphics, хз правда, есть ли там визивиги всякие
[21:20:58] <Kakadu> но идеи в коде так же выражены
[21:21:37] ermine вошёл(а) в комнату
[21:21:53] <gds> Graphics это не то совсем, смотрел его.  (вплоть до обёртки с подмножеством его интерфейса, которая умеет рисовать в файл; но это фигня, в pdf умеют уже кидать отрисованное через Graphics.)
[21:21:59] <Kakadu> ermine: привет!
[21:23:43] <ermine> привет-привет
[21:23:49] <ermine> скучно в оффлайне, да
[21:28:23] <Kakadu> gds: твой товарищ - виндузятник?
[21:29:55] <gds> пока да, ибо там есть проблемки с железом, но давно хочу дать ему свежую убунту (по крайней мере, текущую мою убунту, с которой пишу, именно этот человек мне поставил на комп (с моей помощью про старую разбивку диска, но мелочи)).
[21:30:38] <Kakadu> gds: ничего не понял кто тебе ставил бубунту
[21:31:25] <gds> тот чел, которому неплохо бы показать программирование, и которому я дал поиграться с убунтой, раз уж его железки с линуксом не дружат.
[21:34:47] <Kakadu> а, теперь понял
[21:42:48] ftrvxmtrx вышел(а) из комнаты
[21:43:33] <Kakadu> я тут подумал над своей вики и похоже что мне приется написать трансляцию html2wiki полностью руками. Так просто либы к js_of_ocaml не хотят подключаться - любая необъявленная external функция даст знать о себе убив йаваскрипт. Надеюсь, что меня спасет то, что формат html  будет не любой: он генерится совсем рядом, к тому же Jrome Voullion постарался чтобы он был валидным xmleм. Так что думаю, может быть всё обойдется хорошо.
[21:43:41] ftrvxmtrx вошёл(а) в комнату
[21:51:52] ermine вышел(а) из комнаты
[22:08:23] Typhon вышел(а) из комнаты
[22:42:34] <gds> памагице!11  бида-бида.  Есть два ссылающихся друг на друга класса, от обоих делаю inherit до двух своих классов, но добавить методы в class_b (условно) не получается, так как первый класс (class_a) имеет "method virtual methname : sometype -> class_b", и эта "сигнатура метода" получается нерасширяемой.  Если её сделать открытой, "method virtual methname : sometype -> #class_b", то классы-предки не компилируются, "some type variables are unbound in this type", и это в теории можно понять, но не простить.  Что делать -- не знаю.  Наследование нужно, так как есть не только типы, но и функции/поведение, которое хочу реюзать.  Можно было бы через ФП всё решить, но много ручной работы, а классы почти идеально подходят, за исключением этого момента.
Думал параметризовать классы их же типами (сначала описать базовые типы в виде type class_a = < methname : sometype -> class_b ; ... >, затем построить классы на основании этих типов, но какой-то стрёмный подход, и в плане прямолинейности, и в плане успеха всего мероприятия.
В общем, непонятно, причём не "как лучше сделать", а "как вообще хоть как-то сделать".
[22:59:50] <Kakadu> нубский вопрос: какой в камле синтаксис для рекурсивных классов?
[23:01:01] <Kakadu> надо как-то разобраться с ООП от Jerome Voullion
[23:01:43] <Kakadu> gds: вообще я сейчас пытаюсь замоделировать твою ситуацию
[23:03:48] <gds> Kakadu: синтаксис зависит от original/revised, но, в общем, вместо "class class_a = ...  class class_b = ..." указываем "class class_a = ...  and class_b = ...", как и с обычными типами.
Если хочешь, накатаю минимальный пример в revised syntax, если это устроит.  Вдруг свежий глаз найдёт решение..
[23:04:28] <Kakadu> ОК, было бы неплохо
[23:05:25] <gds> вообще, цель -- сделать апи из нескольких классов, для которых было бы верно свойство "если есть код, работающий с базовыми классами, то с наследниками чтобы работал тоже".
[23:05:56] <Kakadu> я так понимаю что если одно дерево наследования, то всё понятно как
[23:06:16] <Kakadu> значит к нас 2 дерева
[23:06:20] <Kakadu> думаем
[23:09:32] <gds> ща пример сделаю, будет понятнее.
[23:10:24] Typhon вошёл(а) в комнату
[23:12:34] <gds> http://paste.in.ua/1944/
[23:15:45] <Kakadu> первое что бросается в глаза. гласс ext_b должен быть подклассом base_b ?
[23:16:47] <gds> пропустил.  ща дополню.
[23:18:30] <gds> ничего не поменялось, http://paste.in.ua/1945/
[23:27:05] <Kakadu> мдя, если новый метод приватный, то всё ОК...
[23:33:30] <gds> о, тоже хотел это проверить.  У меня, вроде бы, получится укатать всё под эту схему конкретно сейчас, но в целом я не достигну цели.  Если будет расширение апи в некоторых частных случаях, то будет жопа.  Может быть можно будет выкрутиться через функции, которые посредством кидания и ловли исключений обходят типизацию, выводя её за границы класса, но это криво.
Есть ещё вариант -- параметризация, но это как-то не айс.
Кстати, если что, "unit -> #base_b" для случая "открытого row type", но он не катит тут, ибо в пределах определения class .. = .. and .. = .. всё должно быть закрыто -- все параметры типов, все объектные типы.
[23:51:50] <Kakadu> gds: в мануале есть подраздел про коершены, где говорится, что подтипизация не бывает неявной...
[23:52:03] <Kakadu> gds: http://caml.inria.fr/pub/docs/manual-ocaml/manual005.html#toc29
[23:52:10] <Kakadu> может это как-то поможет понять...
[23:52:34] <Kakadu> я пока попробую скомпилить что-то типа
http://caml.inria.fr/pub/docs/manual-ocaml/manual005.html#toc29
[23:52:36] <Kakadu> ой
[23:52:45] <Kakadu>   method ma () : < mb : unit->unit; .. >  = (new ext_b : ext_b :> base_b);
[23:53:47] <gds> мы разные вещи понимаем под под под типизацией.  Например, a#methname -- в моём случае это "a" подтипизируется до того, чтобы удовлетворять правилу типизации "имеет метод methname с нужным типом".  Впрочем, манул понятен.
[23:54:05] <Kakadu> в ирке ответили что надо коершены
[23:54:36] <Kakadu> gds: а последнюю фразу я не понял...
[23:55:05] <gds> "мануал понятен", имел ввиду.
[23:56:04] <Kakadu> [23:59] <thelema> DimitryKakadu: you have to downcast if you want to use an ext_b as a base_b: method ma () : < mb : unit->unit; .. >  = (new ext_b :> base_b)
[00:00] <thelema> in general, I would not write "ma: unit -> base_b", as this requires the return type to be *exactly* base_b.  Instead, write ma: unit -> < mb: unit -> unit; ..>
[00:00] <thelema> also, you don't need mutually recursive classes in this example
[23:56:11] <gds> понятно, что нужно coercions, если нужно ограничить типы так, чтобы они были равны.  Мне же надо другое, чтобы наследники могли спокойно иметь больше методов с более глубокими подтипами.
[23:58:09] <gds> в ирке шутят.  2. рекурсивные классы нужны для другого, 1. методы перечислять -- долго, ибо их немало, и никакого реюза.
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!