Текстовый юникс-вей vs запросы к БД.
Mar. 17th, 2010 07:48 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Когда
vitus_wagner в очередной раз толкает у себя в ЖЖ глобальные идеи на тему "как нам обустроить IT" там всегда всплывает ключевым аспектом unix-way в его аспекте "используем множество мелких программ, увязывая их через текстовый ввод-вывод".
Я же постоянно там на это отвечаю, что счетаю нужным увязывание сделать строго типизированным, чтобы быть уверенным, что это дело не поломается, когда в какой-нибудь мелкой утилите поменяют формат ввода или вывода.
И там же у
vitus_wagner как-то было обсуждение, как этот подход скрестить с GUI-программами, потому что у них другая модель, не текстовый ввод-вывод, а ожидание событий от пользователя.
Вот сейчас сижу смотрю на свою почту в Mozilla Thunderbird и понимаю, что мне не хватает там возможности сделать запрос типа "все непрочитанные письма из всех ящиков с сортировкой по дате и отметками к какому из проектов оно относится".
Т.е. если по хорошему, то в любой гуманной проге работающей со большими объемами структурированных данных, подобно реляционной(не обязательно, главное наличие схемы/типов/структуры) БД, должна быть вкручена некая консоль с REPL, где можно было бы на ходу пилить запросы, сохранять их для будущего использования, итд.
Я в самодельном фреймворке, на котором основано несколько штук наших оперденей, сделал похожую вещь - она уже 5 лет используется на полную катушку, вплоть до того, что можно разрабатывать новый функционал вообще не открывая средства разработки - прямо в рабочей проге. (про одну из возможностей Firebird на которой это построено, будет отдельный пост).
Сейчас в бзодотнетовском варианте хотелось бы сделать то же самое, только еще более навороченное, с запоминанием промежуточных результатов, итд (похоже на натуральный REPL, типа GHCi или F# консоли), но это надо мозг расшевеливать будет сильно.
Т.е. основная идея: текстовый unix-way это конечно очень хорошо, но хочется статической типизации.
![[livejournal.com profile]](https://www.dreamwidth.org/img/external/lj-userinfo.gif)
Я же постоянно там на это отвечаю, что счетаю нужным увязывание сделать строго типизированным, чтобы быть уверенным, что это дело не поломается, когда в какой-нибудь мелкой утилите поменяют формат ввода или вывода.
И там же у
![[livejournal.com profile]](https://www.dreamwidth.org/img/external/lj-userinfo.gif)
Вот сейчас сижу смотрю на свою почту в Mozilla Thunderbird и понимаю, что мне не хватает там возможности сделать запрос типа "все непрочитанные письма из всех ящиков с сортировкой по дате и отметками к какому из проектов оно относится".
Т.е. если по хорошему, то в любой гуманной проге работающей со большими объемами структурированных данных, подобно реляционной(не обязательно, главное наличие схемы/типов/структуры) БД, должна быть вкручена некая консоль с REPL, где можно было бы на ходу пилить запросы, сохранять их для будущего использования, итд.
Я в самодельном фреймворке, на котором основано несколько штук наших оперденей, сделал похожую вещь - она уже 5 лет используется на полную катушку, вплоть до того, что можно разрабатывать новый функционал вообще не открывая средства разработки - прямо в рабочей проге. (про одну из возможностей Firebird на которой это построено, будет отдельный пост).
Сейчас в бзодотнетовском варианте хотелось бы сделать то же самое, только еще более навороченное, с запоминанием промежуточных результатов, итд (похоже на натуральный REPL, типа GHCi или F# консоли), но это надо мозг расшевеливать будет сильно.
Т.е. основная идея: текстовый unix-way это конечно очень хорошо, но хочется статической типизации.
no subject
Date: 2010-03-17 08:19 pm (UTC)В PowerShell MS так и сделала.
no subject
Date: 2010-03-18 05:42 am (UTC)Правда примеры там скорее игрушечные...
mail
Date: 2010-03-18 05:43 am (UTC)no subject
Date: 2010-03-18 06:39 am (UTC)аналогично.
во многих прогах очень чешется не тыкать много раз мышкой в разные места, а просто натайпать сделай мне то и то.
недавний типичный пример: мр3-плеер на базе мозиллы, довольно интересный, но сильно не хватает в нём клавиатурной навигации и вызов комманд из консольки.
no subject
Date: 2010-03-18 08:11 am (UTC)Что делать при текстовом увязывании более-менее понятно, если "мелкой утилите поменяли формат ввода или вывода" (с чего бы, кстати?)
Что делать в строго типизированном случае, если поменяли строгие типы, понятно тоже - ничего не делать. Потому что бестолку.
http://plumqqz.livejournal.com/11502.html
no subject
Date: 2010-03-18 09:47 am (UTC)А так оно сломается при сборке у нас, что гораздо проще поправить, чем копаться в мегабайтах логов с продакшена без возможности посмотреть, что же там у пользователей на самом деле происходит.
no subject
Date: 2010-03-18 09:59 am (UTC)Вот у нас есть команда, выдающая в stdout список файлов. Мы ее решили тайком отрефакторить, поменяв без объявления войны вид ожидаемой выдачи. Все разлетелось, как выяснилось при тестировании.
А в другом проекте тоже есть команда, выдающая список объектов типа "элемент списка файлов". Мы ее решили тайком отрефакторить, поменяв без объявления войны тип "список элементов списка файлов" на "список элементов списка обыкновенных файлов". Все разлетелось, как выяснилось при тестировании.
Что-то не могу найти различий. Общее есть, а различий - нет.
no subject
Date: 2010-03-18 11:19 am (UTC)no subject
Date: 2010-03-18 11:40 am (UTC)В скриптах одно из основных преимуществ -- это возможность позднего связывания компонентов. В какой момент времени вы предлагаете делать проверку типов?
no subject
Date: 2010-03-18 11:59 am (UTC)no subject
Date: 2010-03-18 12:21 pm (UTC)К тому же eval и ему подобные вещи станут невозможны.
no subject
Date: 2010-03-18 07:02 pm (UTC)no subject
Date: 2010-03-19 10:44 am (UTC)Версионирование интерфейса происходит и без того достаточно редко, а версионирование реализации (багфиксы) имеют слабое отношение к такому же для интерфейсов. Иногда бываит, но чаще нет.
no subject
Date: 2010-03-18 12:03 pm (UTC)no subject
Date: 2010-03-18 12:14 pm (UTC)no subject
Date: 2010-03-18 12:48 pm (UTC)no subject
Date: 2010-03-18 10:00 am (UTC)-================<;>~
Date: 2010-03-18 08:35 pm (UTC)Текстовый блок предваряется MIME-заголовком.
Точно так-же сложные объекты путешествуют из приложения в приложение в OS Plan9.
Сканер /dev/scanner -> image/png -> OCR -> multipart MIME (image/png+ text/plain) -> Text processor
Всё через пайпы которые юзер зацепляет не в командной строке, а милой менюшке, стандартной для любого приложения.
no subject
Date: 2010-03-19 12:43 pm (UTC)Господи, мы-то столько времени отрывали все эти бэкдор-консольки, а тут их опять возрождают.
no subject
Date: 2010-03-19 12:52 pm (UTC)no subject
Date: 2010-03-19 02:23 pm (UTC)no subject
Date: 2010-03-19 02:29 pm (UTC)no subject
Date: 2010-03-19 02:43 pm (UTC)