metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2009-01-26 09:42 am

Кстати, насчет "биндингов"

В дискуссиях о GUI для всяких эзотерических и не очень языков постоянно всплывает тема "биндингов" к ним для QT, GTK и прочего.

Так вот, мое имхо состоит в том, что язык, у которого нет собственной GUI библиотеки - неполноцен в принципе. Вот, к примеру, захочу я расширить функциональность некоего GUIшного контрола или написать свой. Или просто разобраться в тонкостях его работы, типа "когда вызывается такое-то событие". Если GUIшная либа писана на том же языке на котором я работаю, мне не нужно переключать мозг на чужеродный язык и его стиль, чтобы работать с ней. А если нет - начинается всякая хрень, типа самого это биндинга, единственное назначение которого - гонять туда-сюда вызовы между одним и вторым языком.

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

PS: Вообще эта идея меня посетила, когда я думал насчет того, как наиболее естественным образом выглядел бы GUI для Хаскеля. Вообще, проблема сама по себе более общая, чем GUI - я ее для себя сформулировал так "Как хранить/обрабатывать в языке общего назначения некую структуру данных, если этот язык для нее плохо подходит". Обычно делают отдельные структуры/языки для разных предметных областей - SQL для баз, декларативные иерархические описания для всяких GUI-шных и прочих форм, для них отдельные редакторы-дизайнеры.
Вот именно "отдельность" мне и не нравится - что-то раздражает переключать контекст мышления, когда надо к программе приделать GUI, взаимодействие с БД, или печатную форму.
Да и вообще работа с GUI может выражаться в языке каким-нибудь другим, гораздо более естественным для него способом, нежели последовательное создание контролов и чтение/запись их свойств. Тот же Хаскель, по моему мнению, вообще GUI должен генерировать автоматически при компиляции, исходя из информации о типах.

Re: Пофлеймлю :)

[identity profile] vp.livejournal.com 2009-01-26 02:55 pm (UTC)(link)
По первому абзацу все всегда так и делается. По поводу 25 порта тоже никаких проблем. Так все и пишется.

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

Re: Пофлеймлю :)

[identity profile] mend0za.livejournal.com 2009-01-26 03:26 pm (UTC)(link)
Нет ничего хуже многократно повторяющегося и чуть чуть меняющегося кода, сделанного вручную.

Привожу пример из практики - одна девочка (индия, компания CMMI-5) сделала copy-paste 32 раза. В исходном коде была ошибка. Стало 32 ошибки. Сидел и исправлял, нашёл не везде в первый день, во второй тоже не всё.

Что можно автоматизировать - надо автоматизировать. И кодогенерация - отличный метод исключить механические ошибки оператора/кодировщика на массово-однотипных задачах. Юнит-тесты, FSM для сетевых протоколов. К примеру, в samba4 огромное количество кода, отвечающего за протоколы - перенесли в кодогенерацию, чуть ли не до 50% всех исходных кодов.

http://www.nestor.minsk.by/sr/2008/08/sr80803.html - из той же поездки история. Решить задачу чем либо кроме кодогенерации в указанные сроки было невозможно (исполнители не увидели вариантов). Решение получилось прямое и конкретное. Как бы Вы решили эту проблему?

Re: Пофлеймлю :)

[identity profile] vp.livejournal.com 2009-01-26 03:33 pm (UTC)(link)
Пардон, я не про ту кодогенерацию подумал :)
Я подуал про "создать налету скрипт" и послать его на выполнение из системы рунтаймово. Типа такой полуинтерпретатор.

Re: Пофлеймлю :)

[identity profile] mend0za.livejournal.com 2009-01-26 03:41 pm (UTC)(link)
И второго типа мне попадались удачные системы.

Вида - "Тонкий клиент" - "Толстый сервер". Система - универсальный конфигуратор системы, с прицелом на фаервол.

Сервер генерирует код на TCL, передаёт его клиенту. Клиент код выполняет. Сервер на Ruby, клиент естественно на TCL. Ещё есть живые свидетели волшебства.

К сожалению проектировщик системы значительно опережал в развитии как специалист конечных исполнителей. Более того - он даже не предполагал, что его прототип-набросок начнут развёртывать в Production систему. Но работало в итоге неплохо, несмотря на студентов.

Re: Пофлеймлю :)

[identity profile] g-rub.livejournal.com 2009-01-26 03:42 pm (UTC)(link)
У меня такое делается. Себя оправдывает.

В особенности если скрипт состоит из 50-100 вызовов внешней утилиты, незначительно отличающихся лишь параметрами и порядком следования, а вся лаконичная логика, определяющая эти вызовы, задается юзером (т.е. заранее не предсказана) и анализируется двумя уровнями выше.

Re: Пофлеймлю :)

[identity profile] metaclass.livejournal.com 2009-01-26 04:53 pm (UTC)(link)
С кодогенерацией идея хорошая, я сам ее иногда использую. Хотя просто генерировать код меня чем-то бесит, в программе перепутаны строковые литералы, содержащие куски кода и выполняемый код, нету статической проверки правильности типов до генерации.

Re: Пофлеймлю :)

[identity profile] g-rub.livejournal.com 2009-01-26 03:32 pm (UTC)(link)
А я смолкну, чтоб не получить по яйцам от работодателя за рекламу своих проектов в ЖЖ в то время, как должен активно их отлаживать. :)

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

Направление -- регулярная обработка больших объемов данных по произвольным определяемым пользователем алгоритмам.

Re: Пофлеймлю :)

[identity profile] metaclass.livejournal.com 2009-01-26 04:57 pm (UTC)(link)
Забавно. Я от идеи "определяемых пользователем алгоритмов" в своих проектах отказался - нет ни одного пользователя, который бы в такие дебри полез. Но вообще тут да, или кодогенерация или какой-нибудь самодельный птичий язык.

Re: Пофлеймлю :)

[identity profile] g-rub.livejournal.com 2009-01-26 05:03 pm (UTC)(link)
Когда пользователь -- аналитик, то хрен скроешься от определяемых им алгоритмов. :)

Re: Пофлеймлю :)

[identity profile] g-rub.livejournal.com 2009-01-26 03:37 pm (UTC)(link)
>> По поводу 25 порта тоже никаких проблем. Так все и пишется.

Т.е. самостоятельная наколенная реализация SMTP? Зачем?

Re: Пофлеймлю :)

[identity profile] mend0za.livejournal.com 2009-01-26 03:43 pm (UTC)(link)
Потому что дерево уже посадили, сына вырастили.

Только SMTP и священный грааль всех времён - HTTP и остаются. Жизнь так пуста ...

:)

Re: Пофлеймлю :)

[identity profile] vp.livejournal.com 2009-01-26 04:08 pm (UTC)(link)
А чем он страшен? :)

Re: Пофлеймлю :)

[identity profile] g-rub.livejournal.com 2009-01-26 04:10 pm (UTC)(link)
Он не страшен. Он уже реализован.

Re: Пофлеймлю :)

[identity profile] vp.livejournal.com 2009-01-26 04:17 pm (UTC)(link)
Ну, дык и я про что. Он реализован 100 раз в 100 стандартных и нестандартных библиотеках языка, без каких-либо внешних средств. Чем плохо?

Re: Пофлеймлю :)

[identity profile] g-rub.livejournal.com 2009-01-26 04:22 pm (UTC)(link)
Тем, что когда, например, админ этого хоста захочет слать почту не напрямую с него, а через smarthost, либо как-то перекроятся доменные зоны и т.д. и т.п.,
то ему кроме перенастройки собственно почтовой службы на этом хосте понадобится еще всему "нативному" коду докладывать об изменениях. И молиться, чтобы нативный код эти изменения понял и оказался в состоянии реализовать.

Кстати, в том же перле ЕМНИП большинство библиотек по отсылке почты используют в качестве backend-а утилиту mail, что абсолютно правильно.

Re: Пофлеймлю :)

[identity profile] metaclass.livejournal.com 2009-01-26 05:10 pm (UTC)(link)
Хотелось бы послушать что сказали бы "админы" всех наших клиентов, если бы кроме своего софта, еще потащили бы на рабочую систему все утилиты, которые нам пришло в голову использовать.
Но это мы уже опять переходим в область спора "стиль винды" vs "стиль unix". В первом случае монолитный софт с минимум внешних зависимостей является наилучшим выбором, т.к. дает свободу от идиотизма юзеров, "админов", обновлений винды и прочего шлака. В юниксах, видимо, с их стандартизированным подходом, многокомпонентный софт является нормальным. Хотя у меня еще есть подозрение, что в юниксовом случае админы настолько привыкли к зависимостям софта друг от друга, что их это не парит, и заниматься разборками "что сломалось" в зависимостях, для них видимо привычно.

Re: Пофлеймлю :)

[identity profile] g-rub.livejournal.com 2009-01-26 05:26 pm (UTC)(link)
А если сидишь на stable, то в зависимостях ничего не ломается :)
Потому что нужные тебе компоненты системы перед этим несколько лет тестировались пользователями и разработчиками testing-а с гораздо лучшим покрытием, чем ты бы обеспечил в рамках своего проекта и "монолитной" реализации.

Поэтому с точки зрения линуксового админа добавление/удаление любых зависимостей из репозитория создает не больше проблем, чем для админа виндового добавление-удаление стандартных "компонентов системы" под Windows.

А "стороннее" (т.е. в linux-овой терминологии отсутствующее в официальных репозиториях), действительно в систему без крайней нужды тягать не принято. И если уж притянул -- то ты и сопровождаешь, как свой код.

Благо, нужда такая крайне редко возникает. Как правило, репозиториев хватает.

Re: Пофлеймлю :)

[identity profile] metaclass.livejournal.com 2009-01-26 06:09 pm (UTC)(link)
Хех, в "стандартные компоненты" в 2003 винде еще и IIS с ASP.NET входить, так что проблем их удалением можно создать.

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

Re: Пофлеймлю :)

[identity profile] vp.livejournal.com 2009-01-26 05:39 pm (UTC)(link)
ну и что? И чем в этом случае внешняя утилита mail будет себя вести кошернее, чем мой вкомпилированный код? :) Поменялось что-то - поменялась библиотека - новый билд. Остается целостное монолитное решение с гарантированным номером версий, никакого ада библиотек и потом мучений, что "вдруг админ восстановил из загашников старую версию mail которая ему досталась от деда". А админ обязательно так сделает, им скажет, что ваша хреновая система не работает и не шлет почту.

Re: Пофлеймлю :)

[identity profile] g-rub.livejournal.com 2009-01-26 05:54 pm (UTC)(link)
Ребе, в данном случае утилита mail, принимающая стандартные параметры -- ссылка на системный MTA по умолчанию (которым может быть sendmail, postfix, exim -- не наше дело).

Мы занимаемся генерацией писем. Их транспортировкой, как и всех остальных, занимается MTA, настроенный админом. Все что нашему софту надо знать о хосте, где он крутится -- это поле From, которое мы вставим в свои письма (и то необязательно).

А уж админ отвечает за настройку маршрутов почты, mx-ресолвинг и прочие прелести. Нам до этого нет дела. А ему нет дела до деталей нашей реализации.

И если ему завтра скажут "вынести почтовый сервер на отдельный хост, всю почту пустить через него, закрыть 25й порт со всех остальных коробок" -- то он поправит настройки МТА на нашем хосте в одном месте, и еще на n хостах стандартным образом. И после пары пробных писем будет уверен что все теперь ходит как надо и ничего не сломалось.

И ему не придется вести учет каждой апликухи, считающей себя MTA на application сервере. И уж тем более не придется бегать за разработчиками, и умолять их переписать систему в связи с новой настройкой почтовых маршрутов, отказавшись от предположения, что апликейшн сервер всегда смотрит прямо в мир и обратно ресолвится именно по тому самому адресу, который софтина пишет в поле From.

Re: Пофлеймлю :)

[identity profile] vp.livejournal.com 2009-01-26 06:10 pm (UTC)(link)
Идею понимаю и завидую по-белому :)
В моих случая админы - это не добрые феи, которые по зову сердца перестроят системные утилиты, а выжившие из ума ленивые саботажники, которые вполне могут не быть заинтересованы в том, чтобы эта система лучше работала, потому палец о палец не ударят для чего-либо. Или админов вообще может не быть, что случается ровно в 90% случаев всех внедрений. Вот нет его, и все. Потому монолитность софта в большинстве случаев - это упрощение жизни, это подконтрольность версионности и возможность осуществлять этот контроль персоналу с достаточно низкой квалификацией (обслуживание).
Мое видение по опыту такое.. Подтверждается совершенно разными областями народного хозяйства разных стран.

Re: Пофлеймлю :)

[identity profile] mend0za.livejournal.com 2009-01-26 04:20 pm (UTC)(link)
> чем он страшен

1 протокол - легко!
2-3 протокола - намана!
4-8 протоколов - упс, нужно ещё пару студентов
9 и более - где-то здесь нагрянул пушной писец

Дальнейшая поддержка написанного кода. Мы же о промышленном программировании? О минимизации времени, затрат и упрощении поддержки. Сторонние компоненты тем и хороши, что мы не пишем свою ОС для каждого проекта.

Re: Пофлеймлю :)

[identity profile] vp.livejournal.com 2009-01-26 05:37 pm (UTC)(link)
Дык от чего такие страхи? Никто же не предлагает 100% кода писать самому. Речь о том, что это НАТИВНЫЕ библиотеки, в исходниках, которые можно проверить на жаб, змей и червей, и вкомпилировать себе. А потом совершенно спокойно обслуживать и отлаживать. И никакого перехода в другие процессы.

Re: Пофлеймлю :)

[identity profile] g-rub.livejournal.com 2009-01-26 06:08 pm (UTC)(link)
Хм, если это не функциональность типа MTA (как в дискуссии выше) а какие-нибудь безобидные regexp-ы, то если библиотека есть -- почему бы ее и не пользовать.

Другой вопрос что если "нативной" библиотеки нету, но есть надежная и проверенная библиотека на другом языке (как правило, более низкого уровня), то никто не будет изобретать велосипед, париться и писать "нативную", если только это не дает существенного выигрыша в производительности для широкого спектра приложений.

Необходимость "пройти все одним сквозным отладчиком от GUI до драйвера" разработчикам языков программирования и библиотек широкого применения, скажем политкорректно, неочевидна.

Re: Пофлеймлю :)

[identity profile] metaclass.livejournal.com 2009-01-26 05:02 pm (UTC)(link)
Зачем наколенная? Готовая есть, с исходниками. Вот если бы не было - тогда вероятно пришлось бы использовать чужеродные, со всеми их приколами. Вроде "либа зависит от десятка других, определенных версий" или "для ее работы нужна определенная системная локаль". Я на такое насмотрелся, после чего стараюсь не использовать вещи, которые не могу самостоятельно отладить и исправить.