
Nikolay
31.05.2017
11:26:09

Roman
31.05.2017
11:26:12
Роутинг по урлам там очень похож .

Friedrich
31.05.2017
11:26:14

Roman
31.05.2017
11:26:47

Google

Aleksander
31.05.2017
11:29:19

Anton
31.05.2017
11:30:46
@neftedollar типы в общем там есть, но как только их вытягиваешь через свойство - сразу же "красным" становится тип sqlProvider'а
магия

Roman
31.05.2017
11:31:36
Там вроде не DSL было
Я к тому что можно было бы описать фцию типа parseMessage<'t> str =
// тут парсишь строку в нужный тип, например обычным сопоставлением, типа
match str with
| "/start" -> MyCommandDU.Start |> Some
| "/forget" -> Forget |> Some
| ParseCommand<'t option> cmd -> cmd
| _ - > None

Anton
31.05.2017
11:31:38
М - магия
То ли я дурак... То ли сани не едут.

Evgeniy
31.05.2017
11:34:21
@the_RAMZAY Зачем тебе эти типы нужны?

Anton
31.05.2017
11:34:47
@gsomix сейчас пока не нужны. Но вот вдруг я захочу dto ?
я бы использовал эти типы как dto

Evgeniy
31.05.2017
11:35:15
Но это не DTO типы.

Google

Evgeniy
31.05.2017
11:35:43
Это не настоящие типы, в них ничего нельзя хранить, их нельзя использовать во внешних сборках.

Anton
31.05.2017
11:36:09
ну, я бы создал тип для dto, внутри которого был бы этот тип, и через него к примеру расширял dto, что бы не писать руками всё и вся

Roman
31.05.2017
11:36:27

Anton
31.05.2017
11:36:43
я понимаю, что они не настоящие - дак вот я пытаюсь их сделать настоящими.
скопипастить их поля, так сказать.

Evgeniy
31.05.2017
11:37:06
@neftedollar Что делал и как?
@the_RAMZAY Ты уверен, что там есть "поля"? :)

Anton
31.05.2017
11:37:43
а почему бы и нет?
я же их вижу через тот же sql
Seq.iter

Roman
31.05.2017
11:38:04

Evgeniy
31.05.2017
11:38:06
@the_RAMZAY Ты уверен, что это "поля"? :)

Anton
31.05.2017
11:38:33
@neftedollar да, он такое рассказывал у себя в презенташке.

Roman
31.05.2017
11:38:46

Anton
31.05.2017
11:38:59
@gsomix нууу, эм, а как тогда это работает?
db.Users |> Seq.iter (fun u -> printfn "%A" u.Name)

Roman
31.05.2017
11:39:00

Anton
31.05.2017
11:39:15
а, я попутал людей

Evgeniy
31.05.2017
11:39:23
@the_RAMZAY С помощью магии компилятора.

Anton
31.05.2017
11:39:29
просто @nevoroman тоже такое у себя делал.

Evgeniy
31.05.2017
11:40:27
@neftedollar @the_RAMZAY Erased провайдер не генерирует настоящих типов, их не видно в C#. Скорее всего он писал типы-обертки, функции и так далее, чтобы заменить этим ORM.

Google

Roman
31.05.2017
11:40:42

Anton
31.05.2017
11:41:00
интересно послушать, как @nevoroman это делал.

Roman
31.05.2017
11:41:00
@nevoroman Делал. Правда, не от хорошей жизни, как и говорил - это была олимпиада и там нельзя было EF использовать (по странным причинам), так что я вот так хачил
Через функции, да

Anton
31.05.2017
11:41:17
расскажи подробней =)
Ты пользовался только тем, что нагенерил тайп-провайдер ? ( по части энтитей)

Roman
31.05.2017
11:42:00
Я не вспомню деталей, честно - это был адский ад со страшным г... не особо качественным, в общем, кодом

Anton
31.05.2017
11:42:32
Ну, меня это прямо вдохновило =)
мол - а зачем мне тогда EF вообще ? =)

Roman
31.05.2017
11:42:52
Не. EF это мощный комбайн

Vasily
31.05.2017
11:42:54
change tracking
Хотя в большинстве случаев от ORM нужен только маппинг сущностей и вменяемые селекты

Roman
31.05.2017
11:43:25
Провайдеры - это в основном альтернатива написанию оберток для типов + их автоматический маппинг, не более того

Anton
31.05.2017
11:44:01
@nevoroman я про свои корманные проекты, и вот такие утилетарные проекты, как сейчас у меня. EF тут выглядит очень толсто.

Roman
31.05.2017
11:44:04
Но да, когда нужен только маппинг и селекты, этого достаточно. И сильно помогает, когда не хочется тянуть EF просто чтобы слегка поковыряться в данных
Да, в небольших пет проектах провайдеры идеальны
Такие проекты вообще на F# приятно делать, быстро и удобно выходит. У меня, во всяком случае.

Anton
31.05.2017
11:44:48
Кстати ты меня прямо воодушивил на Дата Сцаинс =)

Roman
31.05.2017
11:45:05
Радует, в том и цель :)

Google

Vasily
31.05.2017
11:50:40
Я вот думаю, как f# затащить в кровавый энтерпрайз, точнее, где он там уместен

Pavel
31.05.2017
11:51:52
везде :)

Igor
31.05.2017
11:53:42
А поясните человеку, который не разу не щапал провайдеры:
1. Как часто перегенерируется код провайдеров?
2. Что бывает если, он не нашел исходные данные, по которым генерит
3. Как они влияют на скорость сборки?

Vasily
31.05.2017
11:54:08
1. При каждой компиляции
2. Ошибка компиляции
3. Замедляют

Friedrich
31.05.2017
11:54:29
При каждой компиляции, но и в дизайн-тайме тоже
То есть пока пишешь код в студии.

Vasily
31.05.2017
11:54:55
Поэтому, например, в продакшн базе с тайп провайдером будет тяжко. Там надо, чтобы билд сервер имел метаинформацию о базе

Anton
31.05.2017
11:55:07
@angmarr если ввести не верные данные - оно по ctrl+s упадёт с ошибками =)

Vasily
31.05.2017
11:55:20
Вот это, кстати, одно из препятствий на пути к энтерпрайзу
Потому как там надо много всего невидимого сделать, чтобы оно нормально заработало

Friedrich
31.05.2017
11:55:52
Я хотел на билдсервере вот так изворачиваться, через сериализованную структуру в файлике

Roman
31.05.2017
11:56:33

Vasily
31.05.2017
11:56:45
Поэтому все эти коннекшн стринги с точки зрения энтерпрайза - курам на смех

Igor
31.05.2017
11:58:07
Это получается как со scala-макросами, еще надо научить IDE понимать их (ее фронтенд-компилятор).
У Scala это не получилось до сих пор, постоянно народ жалуется что красный код.

Evgeniy
31.05.2017
11:59:02
Так вроде IDE нормально понимают провайдеры.

Igor
31.05.2017
11:59:17

Evgeniy
31.05.2017
11:59:36
Все, которые на FCS работают.

Google

Vasily
31.05.2017
12:00:04
С провайдерами засада одна всего - у тебя на билде окружение одно, а в продакшне другое
И как тут добиться консистентности - задача не из простых

Igor
31.05.2017
12:00:30

Anton
31.05.2017
12:02:02
хм, у меня в Rider'е всё ок c type provider'ом

Pawel
31.05.2017
12:06:42

Roman
31.05.2017
12:07:11
в общем я бы сказал так, что тайппровайдеры не всегда подходят для разработки. Но например json провайдер вполне подходит.

Igor
31.05.2017
12:07:13
хм, у меня в Rider'е всё ок c type provider'ом
Я так понял FCS включает в себя и частично фронтенд компилятор.
Если так подумать, то в Rider ничего своего и не сделали.
Те расчитавать что JB напилит своего функционал, как в R# для C# не приходится.

Roman
31.05.2017
12:08:44

Evgeniy
31.05.2017
12:08:58
@angmarr Поживем, увидим.
Я очень надеюсь, что в Rider будет хорошая поддержка F#.

Igor
31.05.2017
12:09:35
Меня вообще VSCode устраивает с головой (по крайней мере памяти жрет гораздо меньше, чем продукты JB)

eugene
31.05.2017
12:16:52
Дратути. Можно же глупые вопросы задавать?

Evgeniy
31.05.2017
12:17:09
@welltyped Привет. Можно.

eugene
31.05.2017
12:17:49
Я пытаюсь создать проект на F# с помощью dotnet. Иду по этой инструкции https://github.com/dotnet/docs/blob/master/docs/fsharp/tutorials/getting-started/getting-started-command-line.md и не получается.

Evgeniy
31.05.2017
12:18:54
Что именно не получается?

eugene
31.05.2017
12:19:42
Сразу после добавления Library в solution, нужно выполнить dotnet restore и потом dotnet build.
dotnet restore сообщает, что: /usr/local/share/dotnet/sdk/1.0.4/NuGet.targets(97,5): warning : Unable to find a project to restore!
и dotnet build валится:
/Users/ak3n/Develop/fsharp-abt/src/Library/Library.fsproj.metaproj : error MSB4025: The project file could not be loaded. Could not find file '/Users/ak3n/Develop/fsharp-abt/src/Library/Library.fsproj.metaproj'.
По путям видно, что у меня os x. dotnet ставил с сайта microsoft.

Evgeniy
31.05.2017
12:22:05
@welltyped
dotnet sln add src/Library/Library.fsproj
Сделал?

eugene
31.05.2017
12:22:22
Все по инструкции.