qnikst

21 мая 2018, Гатчина, Россия

# Понедельник 49 твитов

Здравствуйте, эту неделю ведущим @backendsecret
буду я - Вершилов Александр. Я работаю во французской
фирме Tweag I… twitter.com/i/web/status/9…

14:32

На этой неделе я бы хотел поговорить про некоторые
наши решения, как там устроен backend, наши лучшие практики (воз… twitter.com/i/web/status/9…

14:33

В очередной раз просто продавать Haskell аудитории, мне не хочется, но боюсь, что я буду. Поэтому я специально
не б… twitter.com/i/web/status/9…

14:33

Предварительная программа такая:
Понедельник - вступление, знакомство
Вторник - удаленая работа, проблемы и плюсы.… twitter.com/i/web/status/9…

14:33

Я не уверен, что смогу удержаться в соотвествии с заявленной программой, да и неделя должна выдасться нагружженной. Но я все же постараюсь.

14:34
@backendsecret Кто этот герой что протащил хаскель в прод?

В отечественных, где я работал это был @voidlizard. В зарубежных - это был Peter Braam создатель файловой системы l… twitter.com/i/web/status/9…

14:43

Сначала пару слов о том, где работаю. Tweag I/O это большая по меркам Haskell, но маленькая по общим меркам компан… twitter.com/i/web/status/9…

16:43

Tweag I/O - “software innovation lab”. Мы занимаемся тем, что консультируем, протопитируем решения, помогаем сформи… twitter.com/i/web/status/9…

16:43

Проекты в очень разных областях от софта для выскопроизводительных кластеров, до работы с био-фармакологическими ко… twitter.com/i/web/status/9…

16:44

Несмотря на то, что говорят: "для работы с Haskell PhD не нужно", у нас почти все разработчики PhD, несколько с MS… twitter.com/i/web/status/9…

16:44

Haskell оказывается в удобном положении, на нём можно достаточно быстро прототипировать решение, но главное, если п… twitter.com/i/web/status/9…

16:44

Кроме Haskell у нас используется C (но без отдельных проектов на нём), OCaml(Coq), Python (в NLP проектах), Java (в… twitter.com/i/web/status/9…

16:45

Мы пытаемся в силу возможностей поддерживать экосистему языка и сам язык. Сделали расширения языка static pointers,… twitter.com/i/web/status/9…

16:45

Все это не (анти-)реклама,а пояснение в каком окружении приходится работать и как оно соотносится с привычными фирм… twitter.com/i/web/status/9…

16:47
@backendsecret «Я пишу на Хаскелье и прекрасно себя чувствую»
16:55
@backendsecret Был уверен, что static pointers это Well-Typed, но сейчас смотрю, вы действительно вместе с ними сто… twitter.com/i/web/status/9…

WellTyped поскольку они стояли у истоков и статьи про CloudHaskell и помогли нам при реализации. twitter.com/_bravit/status…

17:07

Теперь немного про себя. Начал свою карьеру я неожиданно с позиции junior C. В одной фирме в моем родном городе рев… twitter.com/i/web/status/9…

18:52

На старших курсах подрабатывал PHP разработчиком в мелкой фирме в СПБ. Главным бонусом от работы было то, что я мог… twitter.com/i/web/status/9…

18:52

Совершенно неожиданно на просторах lj и juick.com появилась вакансия на Erlang/Haskell. Хорошо было т… twitter.com/i/web/status/9…

18:52

На этой работе и паре следующих были веселые проекты, где код на Haskell управлял RFID считывателями и турникетами;… twitter.com/i/web/status/9…

18:52

Потом умудрился попасть в Parallel Scientific, где работал над eDSL компилирующемся в код для FGPA под руководством… twitter.com/i/web/status/9…

18:52

К слову, Parallel Scientific - а точнее теперь Braam Research (peterbraam.com) сейчас работают над проекта… twitter.com/i/web/status/9…

18:52

В промежутках между всем этим делом, я старался участовать в haskell-overlay в Gentoo. Делать доклады на @fprog_spb и @ruHaskell .

18:52

После такого представления, наверное, можно будет и к более интересным вещам переходить. Но если, по какому-то из п… twitter.com/i/web/status/9…

18:52

И ещё давайте ради интереса, голосование. Выкладывает ли ваша фирма проекты в opensource

18:55
@backendsecret Мы тут всех спрашиваем, но, похоже, так до сих пор и не поняли, что такое монада? :D

Монада в Haskell это средство для создания вычислений с побочными эффектами, которые зависят от результатов другого… twitter.com/i/web/status/9…

19:22

На самом деле тут три вопроса:

19:22

3 вопрос самый толковый, самый лучший ответ это метод Демидовича - решать кучу задач, научиться видеть этот паттерн… twitter.com/i/web/status/9…

19:22
@krems5 @backendsecret pic.twitter.com/it10dwmZfI

Да, ладно хороший вопрос, я думаю его можно спрашивать у всех ведущих, даже не имеющих отношения к Haskell. Возможн… twitter.com/i/web/status/9…

19:28
@backendsecret думаю так лучше) от автора, что ввел их в хаскель homepages.inf.ed.ac.uk/wadler/papers/…

Из вступления

> The concept of a monad, which arises from category theory, has been applied
by Moggi to structure… twitter.com/i/web/status/9…

19:45

Раз зашла речь о StaticPointers, то расскажу о них немного больше. В Haskell есть фреймворк distributed-process (a… twitter.com/i/web/status/9…

20:14

Изначально cloud haskell был описан в статье microsoft.com/en-us/research…
В той реализации для передачи замыканий исполь… twitter.com/i/web/status/9…

20:14

Поддержку этого расширения мы и делали, когда при разработке большого проекта с использованием Cloud Haskell встрет… twitter.com/i/web/status/9…

20:14

Тут можно сделать несколько интересных заметок:
* в Haskell бывают интересные проекты
* бывает что в статьях уже… twitter.com/i/web/status/9…

20:14

Вместо haskell-distributed.github.io , я должен отправлять людей читать главу в книге Simon Marlow… twitter.com/i/web/status/9…

20:14
@backendsecret на второй доклад вот эта ссылка лчше — сразу со слайдами ruhaskell.org/posts/talks/20…
20:19
@backendsecret Монада - controlflow, которого мы не заслужили (не помню чьё)
21:03

Вот в рамках дня знакомства история одного моейго фейла. На первой работе, у меня был достаточно интересный опыт, к… twitter.com/i/web/status/9…

21:41

Протокол был закрытый, но reverse engineer-нутый. Мне дали спецификацию и я радостно бросился в бой. День два спус… twitter.com/i/web/status/9…

21:41

Но вместо того, чтобы получить похвалу (и деньги), я получил проверку общения с реальной железкой, где начиная с ка… twitter.com/i/web/status/9…

21:41

Следующие две недели я провел за разбором проблем и исправлением.
В итоге оказалось, что не считая всяких багов в… twitter.com/i/web/status/9…

21:41

Юношеский максимализм был силен, я был ужасно разочарован этим событием, и злился, огрызался и пытался доказать, чт… twitter.com/i/web/status/9…

21:41

В постановке задачи, особенно исследовательской, могут быть ошибки, спецификации могут быть неточными и неправильны… twitter.com/i/web/status/9…

21:41

Конечно, эта проблема решается, например, с помощью waterfall моделью разработки, но редкая компания имеет достаточ… twitter.com/i/web/status/9…

21:41
@backendsecret 0. Зачем использовать монады?

Но вопросы 2 и 3 даже по отдельности покрывают вопрос. twitter.com/1101_debian/st…

22:53
@backendsecret Звучит как «колхозная доктрина».

Даже не знаю с "колхозной доктриной" в целом, если имеется ввиду оная за авторством @afiskon я был крайне несогласе… twitter.com/i/web/status/9…

23:23

eax.me/kolkhoz-doctri… ссылка доктрину, для тех, кто не слышал.

23:24
@backendsecret О, наконец-то ссылки, а не махание руками!
Спасибо :)

Если подобные ссылки подходят, то есть ещё dl.acm.org/citation.cfm?i… (очень дружелюбная статья Philip Wadler);
и… twitter.com/i/web/status/9…

23:27

# Вторник 58 твитов

Раз уж зашел разговор про колхозную доктрину, то можно ещё поговорить про следующий этап работы и опыт работы на PH… twitter.com/i/web/status/9…

0:23

Так же я хочу заметить, что я работал на нём в эпоху перехода от PHP 4 к 5, в ту пору когда из framework-ов был раз… twitter.com/i/web/status/9…

0:23

Тем не менее PHP интересен тем, что там очень активны любители экстремальной “колхозной доктрины”. PHP язык позволя… twitter.com/i/web/status/9…

0:23

Использование sql запросов среди вывода - пожалуйста, MVC - слишком сложно, валидация входящих данных - сложно, уб… twitter.com/i/web/status/9…

0:23

Война против best practices была очень активная - нам код читать, а как было - привычнее; будет работать быстрее на… twitter.com/i/web/status/9…

0:23

Удивительно, но 10 лет спустя, аналогичные проекты все живут, и в независимых местах. И если в данном случае пара… twitter.com/i/web/status/9…

0:23

В итоге вокруг вырастают целые колхозные экосистемы. Вроде и работает, но плохо поддерживаемо. И если аккуратно исп… twitter.com/i/web/status/9…

0:23

При этом это не проблема конкретных языков. И в прогрессивных проектах легко решат не делать заумный PAXOS, а делат… twitter.com/i/web/status/9…

0:23

Поэтому, когда я увидел доктрину, вспомнил ту бездну, которая была вокруг. И несмотря на то, что доктрина и не приз… twitter.com/i/web/status/9…

0:23

При этом близкие принципы KISS; make it work, make it fast; поиск MVP, а не разбегание по фичам; конечно остаются верны.

0:23
@backendsecret рабочая переписка на французском?)

Рабочий язык - английский. Французский можно увидеть, только на нерабочих *-fr чатах в слаке или услышать на совеща… twitter.com/i/web/status/9…

0:29
@backendsecret еще тут
ruhaskell.org/posts/theory/2…
ruhaskell.org/posts/theory/2…

действительно, не стоит забывать посты на родном языке :) twitter.com/xgrommx/status…

1:11
Действительно, что тут странного, захотел писать на Хаскеле — написал, работодатель оплатит twitter.com/backendsecret/…

Тут наверное, какой-то сарказм, не могли бы вы поподробнее раскрыть его.
Ну и чтобы два раза не вставить, среди пер… twitter.com/i/web/status/9…

1:15
Тем не менее PHP интересен тем, что там очень активны любители экстремальной “колхозной доктрины”. PHP язык позволя… twitter.com/i/web/status/9…

Чтобы не появлялось недоразумений, я уточню, что описанное свойство языка негативное, т.к. он поощряет "плохие" с т… twitter.com/i/web/status/9…

1:29
@backendsecret Распространенность языка как бы намекает, тут даже доказывать ничего не нужно.

К слову о том, как надо доказывать утверждения.. Про гарантии, которые статические типы и в частости Haskell дают п… twitter.com/i/web/status/9…

2:09

В целом у нас и интерактивные доказатели теорем используются, но я их не умею на том уровне, чтобы про них писать,… twitter.com/i/web/status/9…

2:13
@backendsecret Никогда не понимал людей, которые сидят в своем джава мирке и кричат, что другие языки не нужны. А т… twitter.com/i/web/status/9…

Не думаю, что кто-либо кричит это серьезно. Обычно настолько сильные утверждения даются в шуточном контексте. twitter.com/izeigerman/sta…

8:53
@backendsecret @theaspect @cblp_su Касательно HH - вообще не показатель наличиния вакансия в рамках Haskell. Обе ра… twitter.com/i/web/status/9…

Да, Reddit, Twitter, рассылка haskell-cafe - основные инсточники информации о вакансиях. twitter.com/ChShersh/statu…

9:07
@backendsecret Недавно был такой хороший блог-пост:

stackbuilders.com/tutorials/hask…

Действительно неплохой пост. twitter.com/ChShersh/statu…

9:09
@backendsecret Вы удивитесь, но современный PHP (современные практики) позволяет сделать быстро, с минимальными уси… twitter.com/i/web/status/9…

Не удивлюсь, о чем я и написал во вступлении в историю. Практически в любом языке можно написать хорошо и можно нап… twitter.com/i/web/status/9…

10:18

В разных языках это решается по разному, в некоторых - порогом вхождения, в других - простой хороших решений, в мол… twitter.com/i/web/status/9…

10:18

Я не считаю себя в праве выдавать суждение о том, что лучше. Главное, что язык это инструмент и для программисто ва… twitter.com/i/web/status/9…

10:18
@backendsecret Имхо наезды на ПХП, можно сравнить с наездами на Автомат Калашникова. Мол раз он прост в использован… twitter.com/i/web/status/9…

Я не хотел наезжать на PHP, но раз вы просите объяснить аналогию, то PHP позволяет африканскому крестьянину стрелят… twitter.com/i/web/status/9…

10:59

Не знаю какой процент, я давно покинул ту область, но раньше таких людей было много. Приношу, извинения, хорошим п… twitter.com/i/web/status/9…

11:00

Даже если это лишь историческое наследие - оно есть. Историческое наследие можно наблюдать и для Haskell, например,… twitter.com/i/web/status/9…

11:00
@5minphp @backendsecret Лул, ну каждый "программист" должен поругать пыхыпы. Это уже закон.
11:02
@backendsecret @5minphp К чему скромности? Можно начинать с твита "Пхп - говно, я использую <мой язык>" и сразу фолловеры попрут.

Прошу заметить, что я ни разу не говорил, что PHP плохая технология. Я бы попросил не пытаться добавлять мне то, чт… twitter.com/i/web/status/9…

11:08
@backendsecret Никто не говорит, но думает же

> А что подумал Кролик - никто не узнал. Потому что он был очень воспитанный.

Так что оставим это решать всем само… twitter.com/i/web/status/9…

11:19

Ну что закончим тему PHP и постепенно перейдем к заявленной на сегодня.
Или ещё написать забавный случай произошед… twitter.com/i/web/status/9…

11:19
@backendsecret Очень странно слышать такое. Я достаточно внимательно читал КД и могу сказать что она отличается от… twitter.com/i/web/status/9…

Если КД описывать, как использование минимальных достаточных средств для достижения целей, а цель - это рабочий про… twitter.com/i/web/status/9…

11:52

Работаю удаленно, дома, никаких средств для контроля ни скриншотов, включенной камеры, прочих радостей upwork. Но… twitter.com/i/web/status/9…

13:26

Для коммуникации между используется slack и google meet при pair programming. Парное программирование весьма поощря… twitter.com/i/web/status/9…

13:26

Для больших обсуждений и вопросов требующих внимания - внутренняя рассылка, там же подписки на рассылки opensource… twitter.com/i/web/status/9…

13:26

От всех коммуникаций сохраняются логи не возникает вопросов, что кто-то, что-то не так запомнил и всегда можно верн… twitter.com/i/web/status/9…

13:26

Из проблем: может не хватать личного общения, всех этих разговоров у кофемашины и прочего. Мы так даже теряли хорош… twitter.com/i/web/status/9…

13:26

Как работаете вы?

13:52

Для удаленщиков, если у вас есть хорошие рецепты, как сохранить work/life-balance, не сойти с ума и не запороть проект - пишите, ретвитну.

14:03
@backendsecret Начал работать удалённо с 2009 года, а с 2013 в принципе забыл, что такое офис.

Не хватает ли общен… twitter.com/i/web/status/9…

14:17
@backendsecret Мы с сео проекта пару раз в неделю выходим в антикафе, обычно это какая-нибудь среда и пятница с переходом в бар
14:22
@backendsecret У меня несколько фишек:
14:22
@backendsecret Выключаю все средства рабочей коммуникации ровно в 18:00. Проблем нет :)
14:22
@kdeveloper_ru @f2f5d19e583tr61 @backendsecret пыха - отличный выбор. шансов, что пыхарь ничего полезного не сделае… twitter.com/i/web/status/9…

я не знаю как это прокомментировать, поэтому просто ретвитну : ] twitter.com/karbonio/statu…

14:28
@backendsecret Офис + удаленка: имеется в виду по разным дням разделяется в работе на одну компанию?

Да, но можно доопределить, если надо. twitter.com/uhbif19/status…

14:52
@postgred @backendsecret Работать только в специально отведенном рабочем месте.
Спортзал.
Иногда ходить погулять :)
15:20
@backendsecret отдельный кабинет, работать только в рабочее время.
15:20
@backendsecret 1. бег по утрам.
15:41
@backendsecret А что насчет удаленки из коворкинга?

зарубежные коллеги так и делают, я живу в достаточно небольшом городке, где коворкинги плохо представлены. На само… twitter.com/i/web/status/9…

17:23

Для поддержания командного духа, вовлечённости и усиления коммуникаций между отделами у примерно раз в неделю пров… twitter.com/i/web/status/9…

17:51
@backendsecret Дожить до сорока и перейти на удалёнку. Да, ещё просто быть вменяемым ;)
17:51
@backendsecret Есть хороший рецепт. Если хочется сохранить work/life balance, то надо просто устроиться на работу в… twitter.com/i/web/status/9…
18:06
@backendsecret Это где то начало 2000х?
19:31
@backendsecret Почему никто не пишет о том, чтобы найти контракт на 6 рабочих часов например? :)

У меня контракт не ограничивает меня снизу, только сверху :/ итого нельзя проработать 24 часа 7 дней в неделю + ноч… twitter.com/i/web/status/9…

20:17
@backendsecret Почему никто не пишет о том, чтобы найти контракт на 6 рабочих часов например? :)
20:17
@backendsecret Выхожу ночью на тренинг, мне норм
20:45
И ещё давайте ради интереса, голосование. Выкладывает ли ваша фирма проекты в opensource

Тем временем подоспели результаты вчерашнего голосования.
Выводы - ну хорошо, что третий пункт всего лишь 4%. С дру… twitter.com/i/web/status/9…

21:03

И ещё про удаленную разработку, часто замечаю, на совещаниях не хватает доски, своя маркерная с направленной на неё… twitter.com/i/web/status/9…

21:10
@backendsecret есть же сенсорные мониторы давно уже

Как обладателю сенсорного монитора мне его не хватало, плюс у всех должен быть. А в вас есть успешный опыт замещени… twitter.com/i/web/status/9…

21:19
@backendsecret Мне помогает работа до определенного времени, стараюсь не разбивать работу на разное время дня, а де… twitter.com/i/web/status/9…
23:40

# Среда 38 твитов

@backendsecret Посещать) Я спрашиваю, потому что, как мне кажется, всякого рода митинги это не самый лучший инструм… twitter.com/i/web/status/9…

Не эти вопросы не затрагиваются, мотивация - неявно следствие. На семинарах рассматриваются технические проблемы/в… twitter.com/i/web/status/9…

10:21
@backendsecret А сколько примерно народу присутствует? А если никто не вызвался? Или все работают над неинтересными… twitter.com/i/web/status/9…

Большинство разработчиков ~15. Никто не вызвался - пропускается, но вообще обычно темы есть. Если все работают над… twitter.com/i/web/status/9…

10:35

Ну, что нужно начинать новый день, и наконец-то переходить к бекенду? Я постараюсь рассказать о технологиях и некот… twitter.com/i/web/status/9…

12:38

Из больших backend проектов, над которыми я работал это high availability система для специализированного HPC класт… twitter.com/i/web/status/9…

12:38

Начну с кластера. Там была написана система, которая собирает информацию с кластера и управляет жизнью хостов, спас… twitter.com/i/web/status/9…

12:38

Для написания фреймворка использовался Cloud Haskell, свой графовый интерфейс к leveldb, PAXOS для контроля за тем,… twitter.com/i/web/status/9…

12:38

Штука не быстрая (но и не должна быть), обрабатывала порядка тысяч сообщений в секунду, но так было в основном из-з… twitter.com/i/web/status/9…

12:38

К сожалению, из этого проекта почти ничего не попало в opensource, разве что мы стали меинтейнерами Cloud Haskell.… twitter.com/i/web/status/9…

12:38

Поскольку проект это сильно распределенная система со строгими требованиями к констентности, то нужно было очень вн… twitter.com/i/web/status/9…

12:56

Помимо обычных юнит тестов, которые все используют, и сетевой библиотеки, которая поддерживала инъекцию ошибок, зап… twitter.com/i/web/status/9…

12:56

Смысл планировщика - увеличить вероятности гонок за данными и уметь выдать план, с помощью, которого можно переигра… twitter.com/i/web/status/9…

12:56

Создается тред планировщик, все конкурентные действия регистрируются в нём и тред блокируется. Как только происходи… twitter.com/i/web/status/9…

12:56

Такая техника (только для более широкого класса используется в библиотеке) dejafu.readthedocs.io/en/latest/ . Связанное виде… twitter.com/i/web/status/9…

12:56

Верификация проводилась при помощи построения моделей в promela/spin spinroot.com/spin/whatispin… . Для этого для важных… twitter.com/i/web/status/9…

12:56

С такой верификацией есть несколько сложностей, покрыть все случаи или построить очень точную модель - тяжело, поэт… twitter.com/i/web/status/9…

12:56

Вообще интересную статью про формальную верификацию можно прочитать тут blog.acolyer.org/2017/05/29/an-…

12:56

Ну и на закуску, сама верификация в promela/spin выявила 0 (ноль) багов.
Но! Несколько было выявлено и исправлено п… twitter.com/i/web/status/9…

12:56
@backendsecret читатели делятся на 2 категории - хаскеллисты и люди которые вообще не представляют как на хаскеле п… twitter.com/i/web/status/9…

Одна из последних книг: manning.com/books/get-prog…

Обзор книг от @_bravit medium.com/@_bravit/%D0%B…

Про concurrency (m… twitter.com/i/web/status/9…

13:07

Русскоязычные сообщества:

Англоязычные: r/haskell и haskel… twitter.com/i/web/status/9…

13:07

Это если изучать и для себя, если сразу с места в карьез для рабочего проекта, я бы посоветовал все же или иметь че… twitter.com/i/web/status/9…

13:07
Советую консультантов: Well-Typed, FPComplete… Хм, кто-то же ещё был, не могу вспомнить… twitter.com/backendsecret/…

Dirt Cheap Haskell возможно? monadfix.io

Хотя про все это я планировал в пятницу подробнее написать. twitter.com/_bravit/status…

13:14

Что хочется сказать тот проект, если вдруг вам нужно использовать более-менее специлизованное решение, например key… twitter.com/i/web/status/9…

15:37

Например, мы начали работу с hackage.haskell.org/package/acid-s… это база данных для Haskell программ, позволяющая туда складыв… twitter.com/i/web/status/9…

15:37

Но оказалось, что не все важные для нас свойства сохраняются. В итоге оставалось или самим начинать поддерживать би… twitter.com/i/web/status/9…

15:37

В итоге остановились на leveldb со своим интефейсом.

15:37

В том большом проекте есть сишная часть, наполовину в kernel наполовину в user space. Доходили слухи, что рассматри… twitter.com/i/web/status/9…

16:15
@dshevchenko_biz @aelaau @backendsecret Классная книга. Захватывает. А если вдобавок посмотреть парочку докладов на… twitter.com/i/web/status/9…
16:51

Еще интересный опыт это было использование Cloud Haskell. Как я уже слишком много раз писал это такой Erlang. Такие… twitter.com/i/web/status/9…

19:29

В такой модели создаются актеры, у которых есть свое локальное состояние, глобальное имя, и возможность посылать и… twitter.com/i/web/status/9…

19:29

Такая модель была популяризована в массах в Erlang. Аналогичные решения есть и в других языках Akka - (Java/Scala);… twitter.com/i/web/status/9…

19:29

В каждом из них есть свои особенности, например, CloudHaskell позволяет использовать локальные примитивы для конкур… twitter.com/i/web/status/9…

19:29

В целом подобная модель удобна если вы хотите программировать систему "в целом". Т.е. в одном месте описывать, как… twitter.com/i/web/status/9…

19:29

Часто удобнее проектировать систему как набор отдельных независимых сервисов, работающих по общему протоколу. В это… twitter.com/i/web/status/9…

19:29
Часто удобнее проектировать систему как набор отдельных независимых сервисов, работающих по общему протоколу. В это… twitter.com/i/web/status/9…

Кстати сам Erlang интересен, особенно за счёт паттернов реализованных вокруг него. Переизобретать же Erlang в други… twitter.com/i/web/status/9…

19:40
@backendsecret true story
понатащать кафку везде 🧓

kafka, zmq, rabbitmq, gprc в общем, все что душа (и требования проекта) пожелает, ещё и с payload-ом в каком-нибудь… twitter.com/i/web/status/9…

21:00

Да если про Haskell, его use-cases, библиотеки и экосистему и все что вы хотели, но боялись спросить - то спрашивай… twitter.com/i/web/status/9…

22:24
@backendsecret Можно ли писать на нем бизнес-приложения с нуля? Ну то есть, скорость разработки на C# vs. Haskell

Мне тяжело сравнить, поскольку я не писал на C#. В сравнении с Java мне на Haskell писать удобнее и быстрее. Исключ… twitter.com/i/web/status/9…

23:31

Случайный факт: средние размеры команд, которые пишут продукты с нуля на Haskell 3-5 человека, при существенно боль… twitter.com/i/web/status/9…

23:31

# Четверг 49 твитов

@backendsecret Сколько монад в среднем требуется для создания бизнес-приложения на Haskell?

Одна, но большая! twitter.com/4e6/status/999…

0:00
@backendsecret правда ли что на обложке альбома Pink Floyd "Dark Side of the Moon" изображена профункторная призма?

В теории категорий не разбираюсь, а по типам похожа! twitter.com/OhTheAnguish/s…

0:12

Что-то слишком тихо и спокойно, тогда поговорю про системы типов. На всякий случай оговорюсь, если я привожу какую-… twitter.com/i/web/status/9…

0:33

Часто возникает вопрос, а почему Haskell, ведь есть прекрасные языки как OCaml, или тот же C#, или Adga/Idris/Coq,… twitter.com/i/web/status/9…

0:33

Если отбросить вопросы экосистемы и рассматривать языки в изоляции, то получается, что в Haskell очень экспрессивна… twitter.com/i/web/status/9…

0:33

Чем система типов мощнее, и тем больше ограничений в ней можно выразить, тем сложнее изменять код. В итоге гипотети… twitter.com/i/web/status/9…

0:33

С одной стороны из-за выводов типов (отсутсвующих в теорем пруверах) он позволяет программировать как на безтиповом… twitter.com/i/web/status/9…

0:33

Он гораздо беднее языков с зависимыми типами, но мы же тут про прод, где далеко не все эти фичи нужны, а если нужны… twitter.com/i/web/status/9…

0:33

Классы типов же позволяют гораздо быстрее прототипировать код, по сравнению с модулями в OCaml/ML, и убирают много… twitter.com/i/web/status/9…

0:33
@backendsecret Как отлавливают мемори лики? Часто ли приходится использовать Template Haskell? Много ли в транзитив… twitter.com/i/web/status/9…

Memory leaks отлавливают valgrind, но их получить слишком тяжело. С thunk leaks из-за ленивости, приходится использ… twitter.com/i/web/status/9…

0:39

В зависимостях наверное много, но на это особенно не обращаешь внимание пока настоящий embedded не делаешь, тем бол… twitter.com/i/web/status/9…

0:39

Последнее не знаю, посадить злого ревьювера, который если не понял паттерн за 3 секунды - реджектил бы код. Да и са… twitter.com/i/web/status/9…

0:39
@backendsecret Вот в JS есть промисы с приходом async/await ими стало удобно пользоваться. Как я понимаю, промис -… twitter.com/i/web/status/9…

Ну не знаю, вроде в Haskell лицо человечнее, если не пугаться начала, во всяком случае более общее.

Если я правиль… twitter.com/i/web/status/9…

0:46

Из близкого по интерфейсу и духу это
hackage.haskell.org/package/async-…
позволяет запустить асинхронное вычисление и работать… twitter.com/i/web/status/9…

0:46
@backendsecret Какой момент тебе показался самым сложным при изучении Haskell и/или на чём обычно спотыкаются новички?

Сложно сказать, раньше стандартные монады, но быстро прошло. Сейчас уметь эффективно пользоваться линзами, до сих п… twitter.com/i/web/status/9…

0:48
Memory leaks отлавливают valgrind, но их получить слишком тяжело. С thunk leaks из-за ленивости, приходится использ… twitter.com/i/web/status/9…

Метод #1:
Ограничить размер стека треда `-k1k` или меньше и ловить исключения.
neilmitchell.blogspot.ru/2015/09/detect…
Метод #2:
Со… twitter.com/i/web/status/9…

1:05
@backendsecret @musuk Это первое(отправка в фон и работа с результатом через then\catch), а вот async/await уже даю… twitter.com/i/web/status/9…

Браузерозависима в данном случае реализуется браузером в соотв со спецификацией. В Haskell отправка в фон это прост… twitter.com/i/web/status/9…

1:13

полноценным аналогом будет:
```
async $ do
html <- getRandomPonlyFooArticle
md <- hget(...)
marked md
```… twitter.com/i/web/status/9…

1:13

Цитата (с кавычками) говорящая о том, что монады в общем-то излишняя вещь

"Обратите внимание, как то, что в Haskel… twitter.com/i/web/status/9…

1:31
@backendsecret По поводу "умных" однострочников, проблемы выразительности/вербозности, есть отличная статья на Hask… twitter.com/i/web/status/9…
10:18
@backendsecret Для меня первой большой сложностью были трансформеры. Сейчас всё ещё тяжело воспринимаю код с испол… twitter.com/i/web/status/9…
10:19
@vitaminniy @backendsecret Серверная часть - без проблем. Причём типами тебе так ограничивают возможность свернуть… twitter.com/i/web/status/9…
13:16

Да, надо отметить, что в одном из первых постов написал, что работал над edsl для генерации и эмуляции VHDL, так в… twitter.com/i/web/status/9…

13:22
@ikkeps @backendsecret 1) Утечки очень просто не создавать.
2) Нет.
3) Заметно, особенно в web-части.
4) Да пиши ск… twitter.com/i/web/status/9…
14:22

Ну а теперь к более приземленным вещам. Другой большой проект, где мы сначала консультировали, потом дополнили кома… twitter.com/i/web/status/9…

15:33

Проект этот довольно интересный, одна кодовая база может работать как в локальной версии на мелком компе, так и в o… twitter.com/i/web/status/9…

15:33

Поскольку в проекте используются разные полноценные ЯП то важной задачей является как изоляция кода системы от кода… twitter.com/i/web/status/9…

15:33

Вся эта радость запускается с помощью kubernetes, используется postgres, lmdb, servant. К сожалению состояние библи… twitter.com/i/web/status/9…

15:33

Тут важно, что если используются решения вроде k8s очень желательно попадать в их usecase, так, например, workbook… twitter.com/i/web/status/9…

15:33

Поскольку мы используем k8s, то нужно собирать докер контейнеры для сервисов, но просто собирать докер контейнеры с… twitter.com/i/web/status/9…

15:51

Бонусом идет то, что на рабочем компьютере рабочее окружение получается одной командой и опять же повторяемое, силь… twitter.com/i/web/status/9…

15:51
@backendsecret Ваше решение можно встраивать к себе в продукт?

Нет, внешний сервис, сейчас можно в него импортировать данные, что-то прогнать и экспортировать. В я надеюсь протол… twitter.com/i/web/status/9…

16:50
@backendsecret Можете уточнить что значит не является правильным k8 сервисом?

Обычно под k8s сервисом предполагаются сервисы, которые можно горизонтально расширять, переносить с узла на узел в… twitter.com/i/web/status/9…

17:32
@backendsecret То есть рабочее окружение поднимается каким-нибудь докер-композом, а конфигурация (контейнеры) для н… twitter.com/i/web/status/9…

Да, только kubernetes и что там внутри вместо docker compose.
Я всегда боялся в инфраструктурные файлы лезть, там с… twitter.com/i/web/status/9…

18:52

На всякий случай, какие проблемы у докера:

20:24

2. Если сервисов много, мо можно собрать себе зоопарк дистрибутивов, со каждый со своими security заплатками, обнов… twitter.com/i/web/status/9…

20:24

4. Все билд тулы остаются в истории контейнера, итого, решением является экспорт без истории и импорт.

20:24

Вот все эти проблемы автоматически решает nix. Сборка может зависеть от многих артефактов; есть единый базовый дист… twitter.com/i/web/status/9…

20:24

В дополнение к этому разработчики могут получают возможность устанавливать пакеты из build-cache без их пересбоки/с… twitter.com/i/web/status/9…

20:24
@backendsecret А как же билд слои?

Билд слои накладываются один на другой и должны образовывать линейную структуру, а не дерево. Т.е. с ними две пробл… twitter.com/i/web/status/9…

20:52
@sergueyz @backendsecret Тогда мне не до конца понятны преимущества, может я бегло читал про хаскель, и не до конца… twitter.com/i/web/status/9…

Тут есть 3 размерности:

20:59

Тут новые типы вводятся 1-2 строками, за счет deriving механизма можно не писать бойлерплейт с реализациями методо… twitter.com/i/web/status/9…

20:59
@backendsecret Параметризованные типы - что-то типа дженериков? Или ошибочно сравнивать?

Ошибочно, но есть очень близкие моменты. Вобще дженерики это про параметрический полиморфизм, т.е. полиморфизм, при… twitter.com/i/web/status/9…

21:11

Например в Haskell, создание списка из n одинаковых элементов
```
replicate :: Int -> a -> [a]
replicate 0 _ = []
r… twitter.com/i/web/status/9…

21:11

В java, например, generic можно рассматривать как параметр типа, хотя основное их свойство это то, что написано выш… twitter.com/i/web/status/9…

21:11

Наверное тут примеры не очень удачные, но после пары вопросов, я удачные смогу привести.

21:11
@backendsecret В голову не приходят вопросы из практической области применения. Самое странное то, что чем больше ч… twitter.com/i/web/status/9…

Ну разница только в том, что на функциональных можно успешно писать в функциональном стиле (for some definition of… twitter.com/i/web/status/9…

22:17
@backendsecret Docker squash не используете?

Нет, за ненадобностью, остальные проблемы же оно не решит.
Но функция полезная, согласен. twitter.com/avoidik/status…

22:23
На этой неделе Вы ведете аккаунт разработчика бэкенда, Вам и отвечать :) twitter.com/backendsecret/…

Что такое функциональное программирование, я не знаю как сформулировать, чтобы не докопались, что или не достаточно… twitter.com/i/web/status/9…

22:24

# Пятница 105 твитов

@backendsecret С каждым новым автором всё больше хочется отписаться, чтобы не читать всякую ересь. Времени спорить просто нет.

Тем временем читатели тут подписчики раздают неплохие советы про продуктивность. twitter.com/egigoka/status…

1:14
@backendsecret А какие проблемы добавляет nix?

На мой взгляд самая большая проблема это то, что придется учить язык менеджера пакетов. Он очень простой, но чтобы… twitter.com/i/web/status/9…

9:16
На мой взгляд самая большая проблема это то, что придется учить язык менеджера пакетов. Он очень простой, но чтобы… twitter.com/i/web/status/9…

Кстати, на мой взгляд эта сложность есть и в других "простых" языках. Несмотря на то, что основная часть языка вес… twitter.com/i/web/status/9…

9:18
@backendsecret > Несмотря на то, что основная часть языка весьма замкнута и изучается за 5 минут, до эффективного… twitter.com/i/web/status/9…

Меня больше пугает, то что на каждый чих нужно лезть в сорцы пакетов, чтобы знать какие полезные функции уже есть.… twitter.com/i/web/status/9…

9:33

Пятничная банальность:

10:15

Для каждого проекта (будь то полный продукт или своя библиотека) необходимо очень точно понимать MVP (minimal viabl… twitter.com/i/web/status/9…

10:15

Другая проблема это yak shaving. Появившийся в MIT в 2000. Yak shaving это когда вы делаете какую-то бесполезную не… twitter.com/i/web/status/9…

11:50

Если вы это замечаете, то нужно остановиться и задуматься, а есть ли более короткая и правильная дорога к цели? А з… twitter.com/i/web/status/9…

11:50

Ссылка на оригинальное письмо в рассылке projects.csail.mit.edu/gsb/old-archiv… и нетехническую трактовку sethgodin.typepad.com/seths_blog/200…

11:50
@vitaminniy @backendsecret В процессе создания HTML невозможно открыть транзакцию в БД.

Можно открыть транзакцию и… twitter.com/i/web/status/9…

11:56
Если вы это замечаете, то нужно остановиться и задуматься, а есть ли более короткая и правильная дорога к цели? А з… twitter.com/i/web/status/9…

Т.е. если вы замечаете, что вы стрижете зубра, то нужно перепроверить, что вы действительно это делаете, потому, чт… twitter.com/i/web/status/9…

12:05

Для проектов тут похожая ситуация как с feature creep, бесконечный рефакторинг; интересные, но не нужные функции; д… twitter.com/i/web/status/9…

12:05
@sergueyz @vitaminniy @backendsecret Почему нельзя открыть транзакцию и создавать HTML одновременно? Почему нельзя… twitter.com/i/web/status/9…

Можно, но тогда есть опасность, что при рефакторинге, переиспользовании кода, появятся неожиданные доступы к базе т… twitter.com/i/web/status/9…

12:18

Прилежанием и усидчивостью можно добиться похожего эффекта, но удобнее, когда работу делает компилятор, в том числе… twitter.com/i/web/status/9…

12:18

Например, игры с "перемешивание битов" в си будет выглядеть на порядок читаемее и удобнее, чем в Haskell, да и рабо… twitter.com/i/web/status/9…

12:18
@kleschby @vitaminniy @backendsecret Потому, что создание HTML может "кинуть исключение" (или любой другой побочный… twitter.com/i/web/status/9…
12:47
@sergueyz @backendsecret @kleschby @vitaminniy Тут я бы отметил что здесь внезапно врывается ленивость и io всё рав… twitter.com/i/web/status/9…

Не совсем так, есть Lazy IO, которого есть плюсы и минусы. И тогда действительно если вернуть какой-нибудь Lazy.Byt… twitter.com/i/web/status/9…

13:33

iteratee, pipes, conduit, machines - вот, все эти ребята, они позволяют записывать pipe-line обработки данных в ком… twitter.com/i/web/status/9…

13:33
@sergueyz @kleschby @vitaminniy @backendsecret Эм... Может, я чего-то не понимаю, но механизм RAII в С++ существует… twitter.com/i/web/status/9…

Если я верно понимаю (С++ не мой конёк, он слишком сложный) механизм RAII позволяет инкапсулировать работу с ресура… twitter.com/i/web/status/9…

13:50

Это очень хорошие и полезные свойства, но они не покрывают все возможные эффекты, за которыми хочется наблюдать. Ко… twitter.com/i/web/status/9…

13:50

Так же RAII обрубает stream-fusion и deforestation оптимизации. Хотя в С++ наверняка можно сделать их при помощи ит… twitter.com/i/web/status/9…

13:50

Но основная проблема тут, то что С* разрешает использовать любые эффекты везде, т.е. можно писать проект удовлетвор… twitter.com/i/web/status/9…

13:50

Единственный способ это обойти это писать не программу, а структуру даннных и потом её интепретировать. Если не сч… twitter.com/i/web/status/9…

13:50
@sergueyz @kleschby @vitaminniy @backendsecret Я боюсь, тут вы немного не правы. Компиляторы конкретно C++ научилис… twitter.com/i/web/status/9…

Vector fusion позволяет удалять промежуточные структуры данных даже в более сложных ситуациях. Например, тут… twitter.com/i/web/status/9…

14:00
@backendsecret RAII - это чисто плюсовый (ну, не только, но в основном) механизм, позволяющий делать автоматический… twitter.com/i/web/status/9…

Но если мы говорим про ресурсы, то там скорее всего есть сайд эффекты (IO), если рассмотреть тривиальный код: `with… twitter.com/i/web/status/9…

14:09

Но можно написать:
withFile fname openMode (\handle -> return handle)
Этот код вернёт handle за границы где он вали… twitter.com/i/web/status/9…

14:09

И в Haskell есть возможности исключить подобные ситуации используя регионы (гарантия как и в RAII если система тип… twitter.com/i/web/status/9…

14:09

Товарищи, а давайте не ссориться к комментариях. Я не хочу с трибуны врываться туда споры, т.к. окажусь на какой-ни… twitter.com/i/web/status/9…

14:14

Давайте я расскажу немного, как планировал про ситуацию с Haskell на рынке. На Российском рынке на Haskell пишут… twitter.com/i/web/status/9…

15:03

Hexresearch (@voidlizard) пионеры Haskell в России.
@typeableIO (@rufuse) - бизнесы, авиабилеты всякие
@GetShopTVtwitter.com/i/web/status/9…

15:03

Если кого забыл, можете отписаться, я ретвитну.
Практически у всех этих фирм были доклады об историях успеха, причи… twitter.com/i/web/status/9…

15:03

В целом в мире консультанстких контор больше, самые известные это FPComplete, Well-Typed и конечно же Tweag I/O. Я… twitter.com/i/web/status/9…

15:03

Использование консультаций достаточно сильно распространено за рубежом. Часто встречаются или большие фирмы, у кого… twitter.com/i/web/status/9…

15:03

Самая сложная часть Haskell это инфраструктура IDE и вот это все, о чем каждый раз поднимается огромный спор. И биб… twitter.com/i/web/status/9…

15:03

С другой стороны это может быть плюсом, так выбранное готовое и популярное решение может не подходить под проект и… twitter.com/i/web/status/9…

15:03

Но для задач встречающихся в бекенде и связи с популярными технологиями библитеки есть, и главное их часто можно ис… twitter.com/i/web/status/9…

15:03

Ещё есть проблема это поддержка Windows, несмотря на то, что это Tier 1 технология по поддержке, состояние RTS и ко… twitter.com/i/web/status/9…

15:03
@_bravit @backendsecret Опять монады?

В этот раз монады только в первый день были и то 2-3 сообщения!

Сергею точно есть что рассказать и интересно. Во… twitter.com/i/web/status/9…

15:21
@backendsecret На самом деле, интересно было бы послушать, почему «последние лучше» ну или хотя бы чем они отличаются в общих чертах :)

1. Дешевле, 2. Более разнообразный опыт, 3. Лучше языковое покрытие.
Утрировано WT ближе к тому, что будем делать д… twitter.com/i/web/status/9…

15:23
@NikitaYVolkov metrix.ai — умный таргетинг в рекламе, data science (Никит, поправь, если я неправ) twitter.com/backendsecret/…

Вроде фирма не отечественная, но разрабочтики наши. (Могу быть не прав). twitter.com/crazy_fizruk/s…

15:24
@backendsecret @serokell @typeableIO Мы консалтим!

На российском рынке высокая конкуренция, если вы хотели но боялись сделать отдел из монадоводов^W использующих. То… twitter.com/i/web/status/9…

15:33
@backendsecret меня в with-семантике любого языка всегда волноввл вопрос - а что делать, если возникло исключение и… twitter.com/i/web/status/9…

Это уже зависит от библиотеки и того api которое они предоставляют, если можно более подробно описать порядок проис… twitter.com/i/web/status/9…

15:34

Про те места, где не надо использовать Haskell.

16:08

3. Писать очень низкоуровневый код. Например в ядро. Тут все писать можно, но возможно придётся выкинуть часть безо… twitter.com/i/web/status/1…

16:08

Так делают в касперском, при помощи DSL Ivory ivorylang.org/ivory-tools.ht… , его сделали Galois Inc (U.S. фирма работающ… twitter.com/i/web/status/1…

16:08
@backendsecret Надо как-то выделить отсюда @haskellsecret и меряйтесь там С сколько хотите.
16:12

К последнему опросу, помимо yak shaving и feature creep, стоит внимательно следить, за случаями false dilemma. Ког… twitter.com/i/web/status/1…

16:15

С latency ситуация интересная, проблема в том, что в RTS Haskell есть GC. Сам по себе GC - не плохо, он амортизируе… twitter.com/i/web/status/1…

16:59

Так же GC может давать плюсы как компактификация кучи, и полностью убирать проблемы ownership, и как следствие необ… twitter.com/i/web/status/1…

16:59

Тут возникает вопрос, что такое "быстрее". Без определение этого утверждение выше бесмысленно. У нас есть 2 размерн… twitter.com/i/web/status/1…

16:59

В Haskell GC ориентирован под большой throughput, т.е. как можно скорее освободить как можно больше. Это решение по… twitter.com/i/web/status/1…

16:59

Есть разные решения проблемы - использовать другие алгоритмы для GC, например как в go, итеративные GC. Но они не д… twitter.com/i/web/status/1…

16:59

Конкрурентные GC с локальными кучами без шаринга, там можно надеяться, что буффера хватит на обработку запроса, а п… twitter.com/i/web/status/1…

16:59

Ещё можно страдать, этот выбор и предоставляет Haskell. Нужно понимать, что время GC пропорционально кол-ву живых о… twitter.com/i/web/status/1…

16:59

Компактные регионы представляют область в heap как один объект, он удаляется когда никто не ссылается над подобъект… twitter.com/i/web/status/1…

16:59
Про те места, где не надо использовать Haskell.

Теперь, что же делать если у вас Java/Scala, но вы любите Haskell. И хотите его использовать, в общем-то вместо Has… twitter.com/i/web/status/1…

17:26

Например у нас есть inline-java hackage.haskell.org/package/inline… Данная библиотека позволяет писать код на java прямо внутри… twitter.com/i/web/status/1…

17:26

Таким образом у нас на spark кластере запускаются задачи написанные на Haskell. Получается достаточно удобно.

17:26

Тут в одном из тредов произошла дискуссия, в которой затронули и прошлись по нескольким интересным темам:

17:52

Могу описать подробно про каждую в отдельном треде. Можно будет все обсудить и спросить не смешивая разные вопросы… twitter.com/i/web/status/1…

17:52
Тут в одном из тредов произошла дискуссия, в которой затронули и прошлись по нескольким интересным темам:

Ленивое I/O. Это такой интересный и сильно ругаемый pattern в Haskell. В нем есть функция unsafeInterleaveIO :: IO… twitter.com/i/web/status/1…

18:07

readString hld = do
x <- hRead hdl buffer -- прочитали
if x == 0 then return []
else do next <-… twitter.com/i/web/status/1…

18:07

Этот код будучи вызван сразу же вернём список прочитанных строк, само же IO будет вызываться по мере потребления, и… twitter.com/i/web/status/1…

18:07

Но с методом есть проблемы:

18:07

Так что тут компромисс - простой код, против опасностей при использовании. Решение потоковые библиотеки, которые по… twitter.com/i/web/status/1…

18:07
@backendsecret Может лучше где-нибудь в блоге чтобы не потерялось?

В блоге тоже надо, но я не умею быстро писать посты. В итоге это растягивается на недели и отнимает уйму времени.… twitter.com/i/web/status/1…

18:09
Тут в одном из тредов произошла дискуссия, в которой затронули и прошлись по нескольким интересным темам:

Контроль за эффектами. Это то, про что писал @sergueyz (могу не точно передать). Haskell людят за то, что мы можем… twitter.com/i/web/status/1…

18:17

Частичные результаты, недетерменизм, работа с базой данных, вот все это. Полезно это тем, что смотря на типы, мы по… twitter.com/i/web/status/1…

18:17

Программист может ошибиться, устать быть плохой день, и пропустить проблему, но компилятор устойчив к таким проблем… twitter.com/i/web/status/1…

18:17

В C++ есть отличные инструменты, позволяющие сделать много проверок, и тьюринг полные шаблоны, можно даже написать… twitter.com/i/web/status/1…

18:17

RAII решает другую проблему, и как я понял резкий на неё привел к сильному недопониманию друг друга у читателей.

18:17
Тут в одном из тредов произошла дискуссия, в которой затронули и прошлись по нескольким интересным темам:

Про RAII было чуть раньше, я наверное повторюсь. А deforestation возможна в языке контролирующем эффекты. Это оптим… twitter.com/i/web/status/1…

18:25

Такой код и прочую математику удобно переписывать из книг как есть и работать с мат объектами, при этом если оставл… twitter.com/i/web/status/1…

18:25

Можно описать через потоки/генераторы, тогда работа будет в ограниченной памяти. Это менее удобный интерфейс и огра… twitter.com/i/web/status/1…

18:25

Эта штутка подходит и для задач бекенда вот интересный доклад youtube.com/watch?v=kGa78H… в котором техника описывается… twitter.com/i/web/status/1…

18:25
@backendsecret ну вот вы сделали несколько таких jar-ников, а потом там что-то нужно поправить\добавить, это только… twitter.com/i/web/status/1…

Хаскелистов не так и мало как кажется, и найти такого проще и дешевле, чем найти хорошего Senior Java developer. Ну… twitter.com/i/web/status/1…

19:02
@backendsecret можно ли сделать вывод из этого твита, что хорошему хаскелисту будут платить меньше, чем хорошему джависту?)

Да можно, только нужно поточнее сформулировать. Примерно как: выские зарплаты среди Java разрабочиков будут выше, ч… twitter.com/i/web/status/1…

19:10
@backendsecret @mattspring0 А что на счёт Eta (eta-lang.org)? Если что, я «ненастоящий сварщик», просто любопытно

Это, наверное, самый лучший проект в направлении компиляции Haskell в JVM байткод. Но этот проект застрял на древне… twitter.com/i/web/status/1…

19:41
@backendsecret Погодите, но ведь если у вас Scala и вы хотите вместо нее использовать хаскель, то вы явно что-то неправильно делаете :)

Scala это drug gateway to Haskell, так что все правильно. twitter.com/YuriyBogomolov…

19:53
@jbaruch А надо ли?

Подоспели результаты опроса, оказалось, что неводольных Haskell нету... я удивлен. twitter.com/backendsecret/…

20:36
@backendsecret Про Typed Holes ещё напиши.

wiki.haskell.org/GHC/Typed_holes не знаю даже что тут писать, в местах где непонятно какой тип, можно написать _ или имя нач… twitter.com/i/web/status/1…

20:40
@sergueyz @_bravit @backendsecret А на хх сколько вакансий на хаскель тоже 2?

Ну вот те фирмы что я писал в РФ, где-то раз в неделю появляются на reddit/haskell-cafe. Не сравнимо с Java, но лет… twitter.com/i/web/status/1…

21:29

Ну что, конец недели, пятница вечер, в последние минуты обновлен прод, у всех есть сок (или прочие напитки) и еда… twitter.com/i/web/status/1…

21:44
@backendsecret А язык должен быть сложным?

Язык должен быть выразительным. Здесь очень сложный разброс, например, nix - очень простой язык, но писать на нём с… twitter.com/i/web/status/1…

21:47

Простота вхождения в язык, конечно важна но ещё важно удобство выражения своей мысли, её свобода и возможность её ограничения.

21:47

Так вот, про паттерны. Утверждение №1: паттерны полезная штука, которая позволяет декомпозировать задачу на блоки,… twitter.com/i/web/status/1…

21:55

Но при этом при в универе, когда их касались, в книгах, статьях в интернете, даже в обсуждениях тут, когда начинают… twitter.com/i/web/status/1…

21:55

И это несказанно удивляет. Парадигма, которая (в устах апологетов) утверждает, что дает оконченное описание мира о… twitter.com/i/web/status/1…

21:55
@backendsecret Дивёрсити, сексизм и объективизм наше фсе!

Я в этом не разбираюсь -- они не типизируются. twitter.com/AstarothAst/st…

21:59

В функциональной парадигме зашли с другой стороны. Начали с математики, ТК. Т.е. у нас есть чистые функции, с котор… twitter.com/i/web/status/1…

22:11

Большинство паттернов это фунции. Или свойства объектов. Хотим билдер сделать, знаем что билдеры можно объединять (… twitter.com/i/web/status/1…

22:11

Ура - у нас кончилось искусство. Есть структура - проверили свойства - чему соотвествует, получили ещё много свойст… twitter.com/i/web/status/1…

22:11

На практике, все сложнее, на самом деле Haskell достаточно далеко до математичности, и есть только некоторое прибли… twitter.com/i/web/status/1…

22:11

Сейчас уже появляются и "бизнес" паттерны, со свойствами паттернов ООП. Т.е. некоторые базовые строительные блоки о… twitter.com/i/web/status/1…

22:11
@backendsecret Дядь Саш, а эт... альтернативы-то есть? Чтоб хотя бы мастерство, а лучше наука?

Есть, но академиков не любят, слишком далеки они от народа. twitter.com/skv_nskv/statu…

22:12

Интересная мысль Aditya Siram в докладе про ATS:
многие говорят, что изучение ЯП делает вас более хорошим программ… twitter.com/i/web/status/1…

22:24

цитатка:
But the secret of good writing is to strip every program to its cleanest components. Every word that serve… twitter.com/i/web/status/1…

22:40

Извиняюсь за английский, не хотелось портить переводом. Но мне кажется, что цитата весьма забавно, особенно с учето… twitter.com/i/web/status/1…

22:42
@backendsecret Ну так вот оно и получается, что и там, и там, всё зависит от выбранного подхода. И в условном haske… twitter.com/i/web/status/1…

Пайплайн это наверное соотвествует корутинам в С++ (если я правильно понимаю, что это такое. На высокоуровневых ком… twitter.com/i/web/status/1…

23:09

Каждый из блоков может: await - ждать результа апстрима, yield - отдавать кусок downstream, return - возвращать рез… twitter.com/i/web/status/1…

23:09

Кстати, в предыдущий выпуск когда были хаскелисты, спрашивали, как будет выглядеть сервер на Haskell, я тогда для п… twitter.com/i/web/status/1…

23:15

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

23:15
цитатка:
But the secret of good writing is to strip every program to its cleanest components. Every word that serve… twitter.com/i/web/status/1…

Кстати, цитата из книги On Writing Well: The Classic Guide to Writing Nonfiction и к программированию отношения не… twitter.com/i/web/status/1…

23:43

# Суббота 21 твит

@frank_snijder @backendsecret Если говорить о Common Lisp, то там очень богатая система типов и одна из лучших реал… twitter.com/i/web/status/1…

Разве в лиспе есть типы? Та вещь которая существует во время компиляции, на ней делаются проверки и генерация кода.… twitter.com/i/web/status/1…

9:17
@frank_snijder @backendsecret Если говорить о Common Lisp, то там очень богатая система типов и одна из лучших реал… twitter.com/i/web/status/1…

Безотносительно отсутствия типов, лисп является тем языком, который точно стоит посмотреть. twitter.com/svetlyak40wt/s…

9:19

В выходные, я не так активен за телефоном/компом, все же отдых семья и все это. Так что извиняюсь если не очень быстро отвечать буду.

11:36

Я понял, что забыл поговорить про ещё одну техническую тему. Технический долг и как вы с ним боретесь. Даже с идеал… twitter.com/i/web/status/1…

11:44

В одном из проектов, страдающего от feature creep и легаси кода доставшегося от предыдущих разрабочиков, у нас была… twitter.com/i/web/status/1…

11:44

Cleanup crew - переходящая роль. Разработчик на этой роли не набирает себе много задач на спринт оставляя 50-75% вр… twitter.com/i/web/status/1…

11:44

Так как роль переходящая то все делатели новых фич быстро понимают, что не стоит растить долг, да и разные досаждаю… twitter.com/i/web/status/1…

11:44

Делитесь историями и практиками решения проблем с техническим долгом у вас и я ретвитну.

11:45
@backendsecret Вопросы по определению технического долга: 1. Считается ли ТД то что не нужно было раньше, а сейчас… twitter.com/i/web/status/1…

пол ТД понимаются различные быстрые, но в целом неверные решения, так отсутствия проверок, недостаточно общие алгор… twitter.com/i/web/status/1…

12:28
@backendsecret Можно ещё кое-что добавить. В новой верcии GHC только что была завершена фича, которая также подскза… twitter.com/i/web/status/1…
12:58
@backendsecret Сначала копить его, а потом продать вместе со стартапом
13:45
@backendsecret Программный инкремент из трёх двухнедельных спринтов. Одна неделя одного из спринтов полностью посвя… twitter.com/i/web/status/1…
14:52
@backendsecret Однажды решил применить кайдзен и каждый день (грубо говоря) разгребал какие-то старые проблемы на п… twitter.com/i/web/status/1…
16:08
Техдолга не существует.
16:08

Сегодня я хотел поговорить про комьюнити и все такое, но совсем замотался. Побробую все же набросать небольшой тред… twitter.com/i/web/status/1…

23:31

Итак, зарубежное Haskell комьюнити представлено в email рассылке Haskell-cafe mail.haskell.org/mailman/listin…, реддите r/ha… twitter.com/i/web/status/1…

23:44

Из живых российских комьюнити есть очень пересекающиеся @ruHaskell (в гиттер) и сообщество в телеграмм канале haske… twitter.com/i/web/status/1…

23:44

Плохой идеей правда будет начинать общение с троллинга или стандартных вопросов, а используется ли Haskell в продак… twitter.com/i/web/status/1…

23:44

Так же у хаскелистов есть странная привычка говорить факты о других ЯП. Вот типа там так, а там так, и нет этого. П… twitter.com/i/web/status/1…

23:44

В рамках сообществ продовятся митапы, в Москве обычно в лаборатории Касперского (спасибо @cblp_su) , в Питере в рам… twitter.com/i/web/status/1…

23:44

В целом по миру помимо научных конференций можно выделить Haskell Exchange в Лондоне, и хакатоны в Цюрихе, Мюнихе,… twitter.com/i/web/status/1…

23:44

# Воскресенье 6 твитов

@backendsecret > стандартных вопросов, а используется ли Haskell в продакшене...впечатление, что в каналах сидят в… twitter.com/i/web/status/1…

Просто зачастую надоело, т.к. обычно, особенно если вопрос задан в общей форме, а не что-то конкретное, то это марк… twitter.com/i/web/status/1…

0:04
@backendsecret Вы исключение, среди хаскелистов что я видел; ещё @graninas, тоже приятный собеседник.
Остальные, и… twitter.com/i/web/status/1…

silent majority vs vocal minority. Вторыек обычно сильнее запоминаются, и чаще встречаются вне основного сообщества. twitter.com/skv_nskv/statu…

0:24

Боюсь, что сегодня снова будет не до компа; да и надо бы разгрести то, что накопилось за неделю. Поэтому хочу заран… twitter.com/i/web/status/1…

11:35

Спасибо @dcromster за приглашение, и читателям за вопросы, комментарии, дискуссии. Хоть я и не хотел очень много го… twitter.com/i/web/status/1…

11:35

С вами на этой неделе был Александр Вершилов (@qnikst). "Подписывайтесь, ставьте лайки". Если кому интересен Haskel… twitter.com/i/web/status/1…

11:35
@backendsecret После завершения работ над продуктом, договариваюсь с генеральным, что требуется время на рефакторин… twitter.com/i/web/status/1…
15:24

other