@Fsharp_chat

Страница 147 из 772
Klei
20.05.2017
17:51:41
А есть TypeProvider, который может автоматом генерить по рекорду методы типа getId, getName, getAddress и т.п.?

Evgeniy
20.05.2017
17:54:46
@Kleidemos Для этого пригодились бы провайдеры, параметризуемые типами. Но их еще не реализовали.

Зачем такие методы нужны? В рекордах же есть обычные проперти.

Klei
20.05.2017
18:00:58
Зачем такие методы нужны? В рекордах же есть обычные проперти.
Мне нужен внешний метод. Чтобы не писать Seq.minBy (fun p -> p.Date). Если таких функций становится слишком много, я прописываю соответствующие методы, чтобы было Seq.minBy Issue.getDate.

Google
Klei
20.05.2017
18:02:27
Заодно упращает выведение типов.

Evgeniy
20.05.2017
18:02:43
Ага, я понял.

@Kleidemos Было неплохое предложение на этот счет. https://github.com/fsharp/fslang-suggestions/issues/506

Klei
20.05.2017
18:09:54
@Kleidemos Было неплохое предложение на этот счет. https://github.com/fsharp/fslang-suggestions/issues/506
Я бы предпочел вводить одно ключевое слово для записи, чтобы она автоматически "скрытно" генерировала внешние геттеры, но так чтобы они были видны интелисенсу. А представленный здесь дактайпинг менее строг, чем мне хотелось бы.

Evgeniy
20.05.2017
18:41:51
F# Weekly #21, 2017 - Welcome new FSSF board! #fsharp https://sergeytihon.com/2017/05/20/f-weekly-21-2017-welcome-new-fssf-board/

Igor
20.05.2017
19:59:26
Кто-нибудь работал с проектом на fable 1.0? Может подсказать, как туда добавить дополнительные nuget либы (типа react)? На сайте написано через “dotnet fable add…”, но в dotnet пишет что это “deprecated” и нужно через paket (никогда не пользовался).

Evgeniy
20.05.2017
20:03:06
@angmarr Была новость, что Fable теперь действительно работает с Paket. Но сам еще не успел попробовать.

Evgeniy
20.05.2017
20:24:44
@angmarr Попробовал.

Они теперь Paket прямо в шаблоне таскают.

В папке .paket

Igor
20.05.2017
20:25:51
Получилось react подключить? Я вроде подключил и VSCode его видит, но при компиляции в JS показывается ошибка.

Module not found: Error: Can't resolve 'react' in ‘…/myfableapp/src’ Module not found: Error: Can't resolve 'react-dom' in ‘…/myfableapp/src’

Google
Evgeniy
20.05.2017
20:37:10
@angmarr Как проверить? Есть пример кода?

Igor
20.05.2017
20:40:17
@angmarr Как проверить? Есть пример кода?
Да ок, разобрался и вроде работает. Надо было просто добавить модули npm ( yarn add react && yarn add react-dom )

Nikita
20.05.2017
20:41:08
Всем привет! Кто-нибудь шарит в Azure?

Evgeniy
20.05.2017
20:43:19
@angmarr Ок. А я наконец-то попробую Fable. :)

Раз уж все установлено теперь.

Max
20.05.2017
21:00:09
Всем привет! Кто-нибудь шарит в Azure?
Напиши Сошникову, он любит извращения с Cognitive Services и Azure в приципе: @shwars

Dmitri
20.05.2017
21:05:28
Я вообще за любые функциональные извращения, но облачные особенно!

Nikita
20.05.2017
21:29:40
@shwars вот, собственно, сам вопрос - как использовать Face API, работая с ним прямо из Azure Mobile App, и возможно ли это вообще, а то у меня большие сомнения, т.к. ничего конкретного не нашел по этой теме

Dmitri
20.05.2017
21:30:38
Это обычный rest вызов. Плюс есть Face API sdk на нугете

С компьютере завтра пришлю ссылки

Nikita
20.05.2017
21:36:28
Спасибо, хотелось бы реальных примеров с гитхаба. При создании Mobile App создал сервер на .NET, но там внутри проекта только код инициализации таблицы TodoItems, а если подключиться к мобильному приложению через ftp, то добавить туда Face API через нугет не получится

Friedrich
21.05.2017
06:27:49
Друзья, а кто пробовал этот ComposableQuery? У меня что-то программа с ним компилируется, но не работает :( https://gist.github.com/ForNeVeR/d4e9d15711186154e5e98ea55e434c90 (там программа и текст исключения)

Ок, моя ошибка в том, что я пытался использовать SqlProvider. Кажется, с ним совместимость хромает. Оформлю баг попозже.

Надо ставить FSharp.Data.TypeProviders, с ними работает.

Evgeniy
21.05.2017
07:13:33
Илья Привет!

Friedrich
21.05.2017
07:37:07
@neftedollar, вот тот пример, который я хотел получить на EF: https://gist.github.com/ForNeVeR/c09e21dabc840c9fd4af7600b8f363ae#file-program-fs-L37 Обрати внимание, что фильтры peter и admin хранятся в отдельных переменных, но я всё равно могу их взять и произвольным образом скомпозировать в запросе. Выводы: 1) F# — молодец и задача решается прекрасно 2) FSharp.Linq.ComposableQuery ещё можно поработать над совместимостью с альтернативными провайдерами

Evgeniy
21.05.2017
07:40:46
@fvnever Выглядит неплохо.

Friedrich
21.05.2017
07:44:36
filterUsers даже не нужен (если не хочется иметь такую функцию), работает даже вот такое выражение: query { for u in users do if (%admin) u && (%peter) u then yield u } Вот это действительно хорошо, никакого бойлерплейта. Прекрасная технология.

Evgeniy
21.05.2017
07:47:56
@fvnever Спасибо методу Quote в query. :)

Friedrich
21.05.2017
07:53:22
Пойду файлить баг про совместимость с SQLProvider.

Google
Friedrich
21.05.2017
08:04:32
https://github.com/fsprojects/FSharp.Linq.ComposableQuery/issues/15 принёс.

Evgeniy
21.05.2017
08:58:47
@fvnever Возможно, нам придется самим это чинить.

Friedrich
21.05.2017
08:59:06
Там в тикете, кстати, интересная дискуссия началась. Мне указали на то, что некоторые выражения уже и так работают в SQLProvider (в частности, то самое, ради которого я всё это затевал). Отлично!

Evgeniy
21.05.2017
09:12:28
@fvnever Ага. Только кажется, что твое последнее сообщение имеет смысл продублировать в репе SQLProvider.

Friedrich
21.05.2017
09:12:39
А я в этом не уверен.

Сам об этом думаю.

Дело в том, что мне вообще вот этот кейс yield! (%filterUsers) (%peter) кажется надуманным. Мне он, например, не нужен; я его в коде написал только потому, что такой сэмпл у ComposableLinq. Тот вариант запроса, который работает, мне на самом деле и нужен, и он мне кажется полезным. Я не думаю, что имеет смысл что-то менять в данном контексте: кажется, все полезные запросы работают как надо.

Evgeniy
21.05.2017
09:14:24
Хорошо.

> But if there is interest I may be able to find a summer intern to work on it

Какой хороший дядька!

@fvnever Как минимум документацию SQLProvider нужно дополнить.

Friedrich
21.05.2017
09:17:39
А первый кирпичик туда я и заложил! https://github.com/fsprojects/SQLProvider/commit/f08654573238cdfea33269c25d031d900c5ea817

Да, надо дописать про квотейшены.

Evgeniy
21.05.2017
09:19:16
@fvnever А сколько существует провайдеров для доступа к базам данных? Три?

Friedrich
21.05.2017
09:19:45
Да я уж сам запутался. Получается, что три? FSharp.Data.TypeProviders, SqlProvider и ещё какой-то третий.

Evgeniy
21.05.2017
09:20:10
http://fsprojects.github.io/FSharp.Data.SqlClient/

Третий.

Friedrich
21.05.2017
09:24:50
@fvnever Как минимум документацию SQLProvider нужно дополнить.
Завёл ишуй на документацию: https://github.com/fsprojects/SQLProvider/issues/418

Привет!

Google
Evgeniy
21.05.2017
09:26:45
Artem Пожалуйте. :)

Dmitri
21.05.2017
12:35:43
@niiiksh вызов когнитивных сервисов из F# с помощью простого REST API - https://notebooks.azure.com/sosh/libraries/pubtalks (посмотрите Azure Notebook, который на F#)

Admin
ERROR: S client not available

Nikita
21.05.2017
12:37:00
@shwars точно, забыл сказать, что я на C#

Friedrich
21.05.2017
12:37:28
Я уверен, что с доступом из C# там тоже всё в порядке :)

Dmitri
21.05.2017
12:37:33
@niiiksh на C# пример кода, не использующий REST API - https://docs.microsoft.com/en-us/azure/cognitive-services/face/quickstarts/csharp. Дальнейшие беседы по поводу C# и Azure Mobile Apps в этом чате думаю будут признаны оффтопиком. Переходите на F#!

Nikita
21.05.2017
12:40:46
@shwars а чем отличается код с использованием REST API от кода без REST API в данном случае?

Dmitri
21.05.2017
12:42:58
@niiiksh предлагаю перевести в приват, чтобы не спамить сообщество не связанными с F# сообщениями

Dmitry
21.05.2017
13:06:01
Я тут опять пытаюсь вспомнить суть async в F# (без постоянной практики через месяц улетучивается из мозга напрочь) и вот пытаюсь сделать асинхронный хендлер для HttpListener, да не выходит каменный цветок - два одновременных запроса никак разом не хотят выполняться, а бегут последовательно

open System.Net let processRequest (context: HttpListenerContext) = async { let request = context.Request let now = System.DateTime.Now.ToLongTimeString() printfn "%s : Request for %s" now request.RawUrl Async.Sleep 5000 |> Async.RunSynchronously let response = "Hello world" |> System.Text.Encoding.UTF8.GetBytes context.Response.OutputStream.Write(response, 0, response.Length) context.Response.OutputStream.Close() } let listener = new HttpListener() listener.Prefixes.Add("http://localhost:8080/") listener.Start() printfn "Listening..." while true do let context = listener.GetContextAsync() |> Async.AwaitTask |> Async.RunSynchronously let now = System.DateTime.Now.ToLongTimeString() printfn "%s : Incoming request" now processRequest context |> Async.RunSynchronously listener.Stop()

Ну, в смысле я понимаю, где и почему оно бежит синхронно - я не понимаю, как это переделать в правильный вариант?

Friedrich
21.05.2017
13:37:19
Мне кажется, тут вообще Async.RunSynchronously не нужен. Его надо убирать, чтоб работало в тредпуле.

Это не самое хорошее решение (т.к. оно без await, так что придётся маяться с обработкой ошибок), но принцип верный, кажется.

Ещё я там очень грязно по-быстрому завернул код обработчика в try / with _ -> (), чтоб не падали ошибки от убитых браузером подключений. Не делайте так в продакшене :)

Evgeniy
21.05.2017
13:55:28
@fvnever А не сделать ли в восьмой строке do!?

Friedrich
21.05.2017
13:57:16
@azazeo рекомендую ещё глянуть вот этот пост: http://stackoverflow.com/questions/15284209/async-start-vs-async-startchild

@fvnever А не сделать ли в восьмой строке do!?
Да, можно. Этот код я не трогал просто :)

Google
Friedrich
21.05.2017
13:58:30
Надо б ещё OutputStream.Write заменить на WriteAsync или... AsyncWrite.

Внезапно, там есть и тот, и другой методы %)

Dmitry
21.05.2017
14:07:40
О, всем спасибо, вспомнено )

Evgeniy
21.05.2017
16:13:47
Форкманн опять взялся за улучшение сообщений об ошибках. \o/

@Nikolay_Scherbakov Привет!

Roman
21.05.2017
21:03:50
Привет!

Most
21.05.2017
22:05:03
ого

Roman
21.05.2017
22:07:23
Привет. Хорошо, что все же зашёл

Dmitri
21.05.2017
22:08:15
:)

Фшарп в райдере может сподвигнет меня чуть больше писать на Фшарп

Most
21.05.2017
22:11:32
@dnesteruk а студия/ionide почему не сподвигает?)

Evgeniy
22.05.2017
04:51:17
@MikeLoginov Пожалуйте. :)

Friedrich
22.05.2017
05:53:46
Привет!

Страница 147 из 772