
Мио
06.07.2018
18:30:38
кто нибудь занимался поисками двумерных таблиц подходящих параметров в потоке данных?

Sergey
06.07.2018
19:46:41

Мио
06.07.2018
20:42:44
есть большой файл а в нем таблицы. с примерно похожей структурой но разными значениями.
надо определить такие таблицы

Google

Vadim
06.07.2018
20:50:08
Что за формат?

Sergey
06.07.2018
20:54:53

Мио
06.07.2018
20:55:21
да, пока решается регулярками + фильтр по результатам
но хочется готового решения

Aleh
06.07.2018
21:13:32

Sergey
06.07.2018
21:13:46

Aleh
06.07.2018
21:15:10
Чтобы сделать query builder надо ж не просто настоящие генетики завезти, а еще всякие операторы для работы с ними, всякие Pick, Omit, еще mapped types

Sergey
06.07.2018
21:17:31

Aleh
06.07.2018
21:17:48

Sergey
06.07.2018
21:17:49
тут хотя бы что-то лучше чем psalm сгодилось бы

Aleh
06.07.2018
21:18:04
Kotlin?)

Sergey
06.07.2018
21:19:07
ну то есть как по мне проблема тулов типа psalm/phan/phpstan - неверный подход к поиску компромисов на ложно-позитивные случаи (типа "не ну люди в 99% случаев проверяют есть файл или нет, и только потом file_get_contents юзают, накой проверять на false. Или накой проверять getType(): Type на нул, есть же hasType который 99% людей дернут.

Google

Sergey
06.07.2018
21:19:52
ну то есть тула не должна идти на компромисы, но должна предоставить точку расширения для умных "подавителей" ошибок
хочешь - будет как у psalm, а хочешь - будет режим паранойи

Aleh
06.07.2018
21:20:31

Sergey
06.07.2018
21:21:06
я про тайпинги примитивные

Aleh
06.07.2018
21:21:30

Sergey
06.07.2018
21:21:36
ну и опять же можно сделать точку расширения
которая позволит для array_map свой вывод типов мутить
да, будет по итогу раз так в 3-4 медленнее чем psalm. но зато гибко и более точно

Aleh
06.07.2018
21:22:34

Sergey
06.07.2018
21:22:42

Aleh
06.07.2018
21:22:55
А кто считает не так?
Т.е. это ж не проблема вывода, а проблема описания std?

Sergey
06.07.2018
21:23:21
psalm, phpstan. у них просто стринг потому что "не ну в 99% случаев там не будет false и нечего ругаться что ты не проверил"

Aleh
06.07.2018
21:23:37
Это проблема решается за 2 минуты форком)

Sergey
06.07.2018
21:23:41
в phpstorm стабах там string | false

Aleh
06.07.2018
21:23:45
Но это вообще не проблема

Sergey
06.07.2018
21:23:58
меня это бесит
то есть вывод типов внутри замыкания но не с вызывающей стороны

Google

Aleh
06.07.2018
21:24:32
Проблема с array_map в общем-то в variadic аргументах, но и это решается через описание конкретных случаев

Sergey
06.07.2018
21:25:00
array_filter([1, 2, 3], function ($i) {
return $i % 2 === 0;
});
вот попроще вариант

Aleh
06.07.2018
21:25:37
Окей, что здесь не так у psalm?

Sergey
06.07.2018
21:25:49
https://getpsalm.org/r/3f99ef2c0d

Aleh
06.07.2018
21:25:50
Кроме того, что ни одна тула не умеет в генерики?)

Sergey
06.07.2018
21:26:15
ну оно не может вывести тип $i

Aleh
06.07.2018
21:26:28
Потому что это сложная задача вообще говоря)
Для этого надо уметь в генерики

Sergey
06.07.2018
21:26:48
https://github.com/vimeo/psalm/issues/762

Aleh
06.07.2018
21:26:58

Sergey
06.07.2018
21:27:04
вот с этой штукой может быть можно будет описать то что я скинул

Aleh
06.07.2018
21:27:26
Он просто вместо генерика почти всегда пихает any

Sergey
06.07.2018
21:27:29
Давай будем честны)
ну оно реально умеет, просто использует их только для локальных проверок что делает это все чуть более чем бесполезным

Aleh
06.07.2018
21:29:01
Делать точки расширения кмк это рак, потому что мы теряем весь смысл типов, как компактного явного языка описания интерфейсов
И начинаем использовать вместо этого компактного языка венец творения computer science, который хотели чуть-чуть подлечить этими самыми типами

Sergey
06.07.2018
21:31:09
не всегда

Google

Aleh
06.07.2018
21:32:10
?

Sergey
06.07.2018
21:32:19
https://getpsalm.org/r/b02cf767c1
охереть, неужели
так, надо твой пример с котиками и собачками

Aleh
06.07.2018
21:33:25
Это похоже на проблемы тса, он тоже очень узкие типы выводит
Ну не настолько конечно

Sergey
06.07.2018
21:34:59
ну можно добавить /** @var Container<int> $data */
но чисто теоритический твой пример с котиками и собачками psalm сейчас захэндлит

Admin
ERROR: S client not available

Sergey
06.07.2018
21:35:36
сча потещу

Aleh
06.07.2018
21:35:58
Variance это настолько сложно, что лучше даже не начинать
В тс это делали года два

Sergey
06.07.2018
21:36:59
ммм
/** @var Container<int> $string */
$string = new Container('test');
оно даже это не смогло красненьким пометить
(

Aleh
06.07.2018
21:37:42
В тс это делали года два
И не сделали, просто убрали бивариантность аргументов функций(это было по сути эквивалентно выводу any)
Короче генерики(параметрические типы) это вершина айсберга

Google

Aleh
06.07.2018
21:39:11
Как только появляется параметр начинается столько всего веселого с его выводом, что ненароком можно сделать тьюринг полный язык из вашей системы типов

Sergey
07.07.2018
03:16:48
не сильно понимаю все же в чем проблема ADR


Sergey
07.07.2018
07:34:38
а так как в его понимании Domain это "все что угодно что вы и так юзали" а Responder "что вы там раньше юзали для view" то в целом встает вопрос - а нахера тогда ты это придумал?)
имхо переименовывание компонентов никак людям не помогает по итогу.
было 3 херни где можно код писать - осталось 3 херни где можно код писать. Понимания когда надо юзать transactional script или дробить это еще на слои (application layer + domain layer + persistence layer) у людей не добавляется. Да даже то что мы с тобой обсудили уже (где ты все пытался с базами данных связать) немного говорит о том что проблема у ADR та же что и у MVC - типа "домен это про базу данных"
вместо этого лучше реально воспринимать твое приложение как некую цепочку адаптеров над приложением. И тем самым разделить уровни применения подходов - типа архитектура самого приложения отдельная история.
Лучше распространять мысль что слои имеют свою стоимость, иногда они нужны а иногда нет. Есть масса других способов абстрагировать тот же контроллер от UI (за счет мидлваров) и реюзать в MQ или в CLI
ну и про вертикальные срезы нежели горизонтальные, которые могут иметь каждый свою оптимальную схему работы
(примерно то о чем Уди говорит)


Sergey
07.07.2018
08:13:34
хм...
я так понимаю что суть в том, что эти срезы как раз и находятся в зоне домена
ADR не решает проблему доменов, она для Web-application
кстати у меня как раз очень тонкие действия выходят, по размеру примерно как в том видео где сервисы размер сервиса
вернее его метода
в принципе идея с action вместо жирного контроллера если я правильно понимаю мысль в том, чтобы у действия была одна зона ответственности
кстати говоря о паттернах очень уж мне это напоминает command паттерн

Sergey
07.07.2018
08:27:14

Sergey
07.07.2018
08:29:06
в смысле полностью?
таких нет
частично - да

Sergey
07.07.2018
08:29:56
не очень в это верю
но что бы что-то говорить нужно видеть код