> абстракция «внешний мир»… — чистой воды костыль… вызванный… непременным желанием любой ценой подогнать суровую действительность
Нет. Это, если хотите, часть соглашения о чистых функциях: есть некое внешнее хранилище состояний World, к которому можно обращаться только через монаду IO. Если сильно упростить — то функция, для работы которой монада IO не нужна, которая сама по себе ничего во внешнем мире изменить не способна — считается чистой, и ее можно лениво выполнять, безопасно параллелить итд. Как видите, тут «внешний мир» — хорошая, годная, даже необходимая абстракция.
> считаю радикалов, которые не хотят признать, что ни ФП, ни ООП, ни молоток не являются наилучшими инструментами
На постгри плотно сижу уже несколько лет, еще с 9.2. То, что появляется в новых версиях — просто не оставляет другим SQL-базам шансов, например JSON(B) / индексы по нему. Для очередного немаленького каталога, где у множества категорий товаров множество параметров (типа веса, размеров, цвета, диагонали, типа матрицы итп) можно просто использовать для хранения всего этого зоопарка JSONB в поле — вместо кучи костылей и велосипедов.
Для поиска по параметрам создаются индексы типа таких:
CREATE INDEX goods_width_size_index
ON public.goods
USING btree
((json ->> 'width'::text) COLLATE pg_catalog."default");
и всё, параметры (например цвет, ширину) можно смело использовать прямо в запросе:
SELECT id, title as name,
json->'width' as width,
json->'length' as length
FROM goods WHERE category = '211' AND
json @> '{"color": "red"}' AND -- нужен красный цвет, да
(json->>'width')::int >= 1200; -- и широкий чтобы был!
Хоть и будет справедливо сказать, что я не пробовал Oracle устриц, но подобного я больше нигде не видел.
> накладные расходы планировщика запросов привели к ухудшению производительности на десяток процентов
У меня данные лежат по дням за последний год, каждый день — несколько миллионов записей (грубо говоря, логи траффика). При правильно сделанном индексе (в статье есть пример) запрос цепляет по две-три партиции максимум. Не затруднит вас показать create script?
познайте pg_partman. Вместо заката солнца вручную (что хорошо для понимания как оно внутри работает, но создает ад на продакшене) нужно всего-то дёрнуть три функции.
>1. Инкрементальные дифференциальные билды. Вы ещё кодите, а облако уже компилирует. При этом «вы» — это целая команда может быть.
При засилии скриптовых языков не слишком актуально. Даже если язык компилируемый — то скорее всего уже есть билд-сервер, который уже делает ровно то же самое.
>2. Билды на мощных облачных серверах — быстрее, чем на вашем лаптопе.
См. выше.
>3. Быстрый старт — не нужно 4 часа качать, деплоить и конфигурировать IDE, чтобы попробовать простой hello world. Всё готово сразу — и для разработчиков, и для ПМов, и для QA.
Нормально настроенная (за 4 часа) IDE работает месяцами, если не годами. 4 часа — это доли процента, за это у вас отберут моментальный отклик и полный контроль окружения. Ну если стоит задача быстро писать hello world'ы, тогда конечно. Интересно — а сколько на быстром написании hello world можно заработать?
>4. Легче делиться кодом.
Для этого придуманы и успешно используются VCS.
>5. Не нужно качать SDK.
Выигрывам те же доли процента, только вместо 4 часов — десятки минут.
>6. Не нужно загружать IDE.
А в браузере облачная IDE конечно сразу полностью с момента старта загружено.
> 7. Легче делиться ресурсами. Даже целыми виртуальными машинами.
Не вижу проблем делиться ими сейчас, безо всяких облаков.
>8. Безопасность. Не нужно хранить код на стороне разработчика.
А в чем проблема хранить код на стороне разработчика? Если уж мы подумываем о том, чтобы доверить свой код компании с непонятным TOS?
А как вам такая картинка — релиз нужно выпускать еще вчера, в приёмной уже юрист заказчика с исковым заявлением, код не хранится на стороне разработчика, а облако третий день как лежит? Да, такое бывает, даже у Amazon.
>9. Контроль над кодом.
Когда код у меня локально — я его контролирую лучше всего. В самолёте, в поезде, В Китае…
>10. Легко раздавать — можно сгенерить новое место разработчика по прямому линку. Клик — и ты в проекте.
Снова экономим доли процентов. Минимальное время, за который новый разработчик будет въезжать в более-менее сложный проект, займёт на порядки больше времени, чем разворачивание рабочего окружения.
>11. Улучшенная экосистема плагинов к Eclipse. 4000 уже установленных и ждущих подключения плагинов, маркет плагинов, обсуждение, комментарии, карма плагинов, сливы, ресеты, pay to win.
И все, теперь толко Eclipse? А если я его ненавижу и использую продукты JetBrains или вообще vim?
Hakyll штука конечно же полезная, но гораздо познавательнее было бы почитать про создание блога на yesod, например.
Тем более что блог на очередном сочетании языка и веб-фреймворка — это сейчас такой hello world для веб-программиста :)
Тем не менее — большое спасибо за статью!
Нет. Это, если хотите, часть соглашения о чистых функциях: есть некое внешнее хранилище состояний World, к которому можно обращаться только через монаду IO. Если сильно упростить — то функция, для работы которой монада IO не нужна, которая сама по себе ничего во внешнем мире изменить не способна — считается чистой, и ее можно лениво выполнять, безопасно параллелить итд. Как видите, тут «внешний мир» — хорошая, годная, даже необходимая абстракция.
> считаю радикалов, которые не хотят признать, что ни ФП, ни ООП, ни молоток не являются наилучшими инструментами
А такие вообще встречаются в дикой природе?
«Кнопка Fork справа вверху»
Лично мне проще вызвать pg_dump, т.к. сам я консолью пользуюсь гораздо чаще, чем мышкой.
Для поиска по параметрам создаются индексы типа таких:
и всё, параметры (например цвет, ширину) можно смело использовать прямо в запросе:
Хоть и будет справедливо сказать, что я не пробовал
Oracleустриц, но подобного я больше нигде не видел.У меня данные лежат по дням за последний год, каждый день — несколько миллионов записей (грубо говоря, логи траффика). При правильно сделанном индексе (в статье есть пример) запрос цепляет по две-три партиции максимум. Не затруднит вас показать create script?
(ставит в крон смену дизайна на 1 апреля 2015)
При засилии скриптовых языков не слишком актуально. Даже если язык компилируемый — то скорее всего уже есть билд-сервер, который уже делает ровно то же самое.
>2. Билды на мощных облачных серверах — быстрее, чем на вашем лаптопе.
См. выше.
>3. Быстрый старт — не нужно 4 часа качать, деплоить и конфигурировать IDE, чтобы попробовать простой hello world. Всё готово сразу — и для разработчиков, и для ПМов, и для QA.
Нормально настроенная (за 4 часа) IDE работает месяцами, если не годами. 4 часа — это доли процента, за это у вас отберут моментальный отклик и полный контроль окружения. Ну если стоит задача быстро писать hello world'ы, тогда конечно. Интересно — а сколько на быстром написании hello world можно заработать?
>4. Легче делиться кодом.
Для этого придуманы и успешно используются VCS.
>5. Не нужно качать SDK.
Выигрывам те же доли процента, только вместо 4 часов — десятки минут.
>6. Не нужно загружать IDE.
А в браузере облачная IDE конечно сразу полностью с момента старта загружено.
> 7. Легче делиться ресурсами. Даже целыми виртуальными машинами.
Не вижу проблем делиться ими сейчас, безо всяких облаков.
>8. Безопасность. Не нужно хранить код на стороне разработчика.
А в чем проблема хранить код на стороне разработчика? Если уж мы подумываем о том, чтобы доверить свой код компании с непонятным TOS?
А как вам такая картинка — релиз нужно выпускать еще вчера, в приёмной уже юрист заказчика с исковым заявлением, код не хранится на стороне разработчика, а облако третий день как лежит? Да, такое бывает, даже у Amazon.
>9. Контроль над кодом.
Когда код у меня локально — я его контролирую лучше всего. В самолёте, в поезде, В Китае…
>10. Легко раздавать — можно сгенерить новое место разработчика по прямому линку. Клик — и ты в проекте.
Снова экономим доли процентов. Минимальное время, за который новый разработчик будет въезжать в более-менее сложный проект, займёт на порядки больше времени, чем разворачивание рабочего окружения.
>11. Улучшенная экосистема плагинов к Eclipse. 4000 уже установленных и ждущих подключения плагинов, маркет плагинов, обсуждение, комментарии, карма плагинов, сливы, ресеты, pay to win.
И все, теперь толко Eclipse? А если я его ненавижу и использую продукты JetBrains или вообще vim?
Из именно видео-уроков — запомнилась вот эта серия, настоящий триллер
<irony>Вот как решали подобную проблему в другой компании:</irony>www.youtube.com/watch?v=msXRFJ2ar_E
:> <filename>То же самое с существующим файлом сделает его пустым. Иногда так удобно вручную чистить логи.
Тем более что блог на очередном сочетании языка и веб-фреймворка — это сейчас такой hello world для веб-программиста :)
Тем не менее — большое спасибо за статью!
Как-то так.