
Friedrich
24.06.2018
06:45:40
Потому что просто так Option.ofObj x компилятор мне не даёт вызывать
Но это дело сработало очень хреново.

Vasily
24.06.2018
06:46:04
А match там не катит?

Friedrich
24.06.2018
06:46:57

Google

Friedrich
24.06.2018
06:47:05
Придётся бахать AllowNullLiteral.
(сразу я что-то о нём забыл, и нагородил костылей)
[FS0934] Records, union, abbreviations and struct types cannot have the 'AllowNullLiteral' attribute
Да что ты будешь делать ._.

Vasily
24.06.2018
06:48:34
Код покажи
Слышь

Friedrich
24.06.2018
06:48:41
[<CLIMutable>]
[<AllowNullLiteral>]
type DailyQuote =
{ id : int64
date : DateTime
quotationId : int64 }

Vasily
24.06.2018
06:48:55
И кто там null?

Friedrich
24.06.2018
06:49:14
И потом я это вытаскиваю из базы через
let dq : DailyQuote = collection.FindOne(…)

Vasily
24.06.2018
06:49:26
Не

Friedrich
24.06.2018
06:49:27
И оно бывает равно null.

Vasily
24.06.2018
06:49:33
Так не надо

Friedrich
24.06.2018
06:49:39
А как надо?

Google

Friedrich
24.06.2018
06:49:57
О, а там же есть адаптер от LiteDB.FSharp!

Vasily
24.06.2018
06:50:03
Я делаю всегда поиск, чтобы возвращал коллекцию

Friedrich
24.06.2018
06:50:16
Блин, это как-то неправильно.

Vasily
24.06.2018
06:50:23
Ну почему

Friedrich
24.06.2018
06:50:26
Но, конечно, лучше, чем мой (неработающий) подход.

Vasily
24.06.2018
06:50:54
Возвращается все равно один элемент
Завёрнутый в сек
А дальше seq.isempty
Seq.head
Просто с некоторых точек зрения findone излишен
И является частным случаем find
С другой стороны,findone в теории работает намного быстрее

Evgeniy
24.06.2018
06:55:03

Vasily
24.06.2018
06:55:38
Кстати, тоже вариант

Friedrich
24.06.2018
06:56:30
Ну, щас попробуем.
Да, так заработало. Интересно, почему же не работал Option.cast…

Evgeniy
24.06.2018
07:05:19

Friedrich
24.06.2018
07:05:49
Всё ещё непонятно, почему не работало!
А, или он только для структур будет работать?
Чо вообще делает unbox %)

Google

Evgeniy
24.06.2018
07:06:31
Это функция не кастит значение в option.

Friedrich
24.06.2018
07:07:11
А, понял, мне надо было box >> Option.cast

Evgeniy
24.06.2018
07:07:21
Это просто безопасный каст.

Friedrich
24.06.2018
07:08:00
Я думал, что это аналог Option.map(fun x -> x :?> 'T)

Evgeniy
24.06.2018
07:08:16

Friedrich
24.06.2018
07:08:22
Ну типа как Seq.cast, например. Применяется к Seq, а не к любому obj

Roman
24.06.2018
07:58:21

Friedrich
24.06.2018
08:16:31
Сделай два мейлбокса
Мне кажется, штука с ReaderWriterLockSlim вышла намного проще в понимании, чем схемы на нескольких мейлбоксах, смотри: https://github.com/ForNeVeR/EvilPlanner/blob/d829b028429b40fd3920f1f928aa90c3fc1797b5/EvilPlanner.Core/Storage.fs#L9-L29

Ayrat
24.06.2018
09:19:31
Кстати эта проблема (много читателей, один писатель) решается в том числе архитектурно через "разделение ответственности между командами и запросами" (в девичестве CQRS)
добавит когнитивной сложности, но зато понтово
твой вариант @fvnever гораздо лучше, т.к. 1) проще 2) работает

Bonart
24.06.2018
09:27:59

Ayrat
24.06.2018
09:28:27
Ну нет.

Vadim
24.06.2018
09:28:33

Ayrat
24.06.2018
09:28:47
От того что ты в одну бд кинешь читателей и писателей, толку мало
10 ридер реплик, одна мастер для команд

Евгений
24.06.2018
09:29:07
@vad_pashkov ?
спасибо

Google

Ayrat
24.06.2018
09:29:21
:D

Bonart
24.06.2018
09:29:46

Vasily
24.06.2018
09:41:03

Friedrich
24.06.2018
09:41:41
Давайте посмотрим!

Vasily
24.06.2018
09:41:53
@fvnever перепиши на модуль :)
Типом смотрится беспонтово

Friedrich
24.06.2018
09:42:15
Параметризованных модулей же не бывает :(

Evgeniy
24.06.2018
09:42:38

Friedrich
24.06.2018
09:42:54

Vasily
24.06.2018
09:43:21
А зачем тебе параметризованный, если ты всегда можешь экземпляр бд прокидывать?

Friedrich
24.06.2018
09:43:34
А то там снаружи возьмут да и поюзают его без транзакций.

Vasily
24.06.2018
09:44:26
Да его и так поюзают
Если надо

Friedrich
24.06.2018
09:45:41
Если надо
Если надо — то поюзают, а вот если не надо — то мой дизайн их не подталкивает к тому, чтоб они сами владели этой датабазой. А то, что ты предлагаешь — подталкивает.

Evgeniy
24.06.2018
09:46:00
Я все-таки за то, чтобы модули были стейтлесс. Пусть локи и подключения будут в классах, это хорошее решение.

Friedrich
24.06.2018
09:46:19
Я согласен, что данный вариант пока что довольно текучий, но считаю, что его нужно именно в этом ключе развивать.
Шоб наружу датабаза не торчала!
А у readerwriterlockslim внутри cas?
Блин, там чото сложное. https://github.com/dotnet/corefx/blob/5e3aecf952ea5810b82293312fd840d4fdaa13d3/src/Common/src/CoreLib/System/Threading/ReaderWriterLockSlim.cs

Google

Friedrich
24.06.2018
09:49:03
Куча каких-то таймеров и ивентов, спинлоки везде.

Vladimir
24.06.2018
09:58:14

Bonart
24.06.2018
16:40:54

Evgeniy
24.06.2018
17:10:05
Привет.

евроневидимка
24.06.2018
17:17:30
ку

Aminion
24.06.2018
20:33:04
Ребята, читнул новость о Suave. Какой сейчас мейнстрим фреймворк для веба? Giraffe поверх аспнета?

Igor
24.06.2018
20:34:43

Aminion
24.06.2018
20:35:03
https://safe-stack.github.io/docs/news/#18th-june

Igor
24.06.2018
20:35:59
Ну и что, он же все равно работает и поддерживается

Vlad
24.06.2018
20:37:06

Aminion
24.06.2018
20:37:43
Можно. Но тогда будет все начинатся с ооп контроллеров

Friedrich
25.06.2018
02:15:27

Vladimir
25.06.2018
08:18:13

Roman
25.06.2018
09:02:00

Vladimir
25.06.2018
09:18:15
Неа..

Evgeniy
25.06.2018
10:05:15
https://twitter.com/alfonsogcnunez/status/1011186545213222912

Igor
25.06.2018
10:11:09

Evgeniy
25.06.2018
10:11:17
Просто учитывают новые аннотации при генерации кода.