Shub
ну это такое. в Коннектикуте например запрещенное можно купить без лицензии
Shub
оно у них получается “разрешенное"
Hog
да - вот как раз в тот день, когда я с ним поехал - пришлось 3 часа добираться с пересадкой в гарлеме
Hog
тот ещё экспириенс :)
Фил Ранжин
Я что-то запутался. Смотрите, вот есть типы типизаций Есть номинативная и структурная есть строгая и нестрогая и есть такая, которой термин которой я не знаю - существующая или не существующая в рантайме. строгая/нестрогая - это показатель того, делает ли ЯП имплиситные касты Всё выглядит так, как будто де-факто считается, что номинативная - обязательно есть в рантайме, но я могу теоретически представить себе ЯП с номинативной типизацией, который не тащит метаданные типов в рантайм. Я что-то упускаю?
Фил Ранжин
У тайпскрипта структурная типизация. В то же время, силами ЯП, я вполне могу её ограничивать. Скажем, я могу требовать, что бы метод принимал тип, содержащий только те поля, которые мне нужно. Так же я могу положить метаданные типа вручную, тогда они будут существовать и в рантайме тоже. А ещё, я могу положить их так, что бы они у меня работали и компайл тайм. А вот например F# тащит метаданные всех типов в рантайм по дефолту, и если я хочу игнорировать их, мне придётся руками колдовать с дженериками, эмитируя структурную типизацию. Вопрос, ответ на который я ищу - как наиболее полно описать модель типизации в конретном ЯПе?
Анна
И в Минске тоже!
Vladislav
Vladislav
Там в самом начале про статическую , динамическую и друзей написано
Hog
И в Минске тоже!
Вылезай из моей машины!
Анна
Какой машины?
Vladislav
Трактора
Hog
Какой машины?
https://www.anekdot.ru/id/292678/
Hog
Сегодня лучше смотреть «День сурка» :)
Vladislav
Кто участвует ?) https://twitter.com/fsharporg/status/1091449339430481925?s=21
Hog
https://twitter.com/richcampbell/status/1091603030741372928?s=12
Vasily
Походу, нужен бот переводчик
Vasily
И назвать его надо fabel fish
Klei
@grishace Ты не знаешь, как в FsReveal вывести код в два этапа отдельными блоками через fragment? <p class="fragment">bla bla<p> - работает. <p class="fragment"> *) (*** include: code id ***) (** </p> - нет.
Hog
@Kleidemos сейчас проснусь - погляну. Фрагментами точно пользовался... у тебя md или fsx?
Hog
А - у тебя fsx. Я им ни разу не пользовался - всё в мд ваял
Hog
А на md подобное проворачивается?
ну, там нет define и include, но на одном слайде два примера с фрагментами - запросто
Klei
Странно, если в результат залезть, то выглядит как валидный код.
Hog
На fsx - тоже сделал ща :)
Hog
ща гист расшарю
Klei
И стадию вставляет. Надо дополнительно нажать. Но показывает код сразу.
Klei
Сказывается моя html безграмотность.
Klei
Наверное.
Klei
Короче с p не работает, а с div норм.
Hog
разобрались!
Hog
тоже в след. раз попробую fsx заместо md :)
Klei
Чую надо будет конкретно перепилить FsReveal. Местами очень громоздкий синтаксис. К тому же когда не находит фрагмент кода по ключу, пишет лишь о том, что он не найден, не указывая, какой именно. Когда ключей за полусотню, хрен найдешь. И нельзя подключить отдельный fsx файл, из которого можно было бы брать фрагменты.
Hog
я пришёл к выводу, что код на слайдах не нужен
Hog
ну или минимум
Hog
50 - это уже как-то перебор :)
Klei
У мя несколько иные задачи.
Klei
Собственно ради кода и собираемся.
Hog
самодокументирующаяся система?
Klei
Чего?
Hog
кода
Klei
Все еще не понял.
Hog
ранишь fsx - получаешь результат. ранишь fsreveal поверх - получаешь документацию
Klei
Короче я объясняю конкретные детали каких либо либ или синтаксиса. Объяснения общих концепций найдут и без меня. К тому же у мя люди готовы два-три часа слушить мое нытье про F#.
Klei
ранишь fsx - получаешь результат. ранишь fsreveal поверх - получаешь документацию
Пробовал, не получилось. Скорее всего из-за криворукости.
Hog
кстати - зачем инклюды? почему нельзя прям по месту? у тебя код по нескольку раз используется?
Klei
Потому что надо определить гораздо больше кода, чем требуется показать. Да бы все не скатывалось к настолько тупых примерам, что они не откладываются в памяти.
Klei
Ну и многократное использование вылазит.
Vasiliy
Играл тут кто в горизонт? https://dtf.ru/38458 Система ИИ роботов как то напомнила акторы имхо
Vasily
Ну хз
Vasily
Интеллект там ,конечно, такой себе у мобов
Klei
Кто-нить понимает разницу между акторами и агентами?
Vasiliy
Интеллект там ,конечно, такой себе у мобов
Да ладно, роботы хорошо же там проработаны
Vasiliy
А про людей да, слабо
Klei
акторы частный случай агента
Частный потому, что может меньше?
Ayrat
Частный потому, что может меньше?
наоборот больше. А может больше, т.к. больше требований к более общему случаю - агенту
Ayrat
исправил логику в своей фразе
Klei
Ок.
Hog
Чо-то как-то всё равно не так
Dr. Friedrich
я пришёл к выводу, что код на слайдах не нужен
Не соглашусь. Считаю, что технический доклад без кода — как пиво без водки!
Dr. Friedrich
наоборот больше. А может больше, т.к. больше требований к более общему случаю - агенту
Кажется, не бывает больше требований к более общему случаю. Например, класс — частный случай типа, и поэтому к классу больше требований: возможность хранить в куче, скажем.
Nikolay
А как правильно в акторах сделать запрос к БД? 🤔
Nikolay
Отдельным актором на запрос?
Nikolay
Или просто в акторе вызывать функцию, которая сходит в БД, и отправит актору сообщение обратно после получения данных?
Nikolay
let getUserById userId actor = async { let! user = ... actor <! user } Типа что-то такого, и вызывать её без await'a
Vagif
Вот пример: let scheduleMessagesActor (mailbox : Actor<_>) = let rec loop () = actor { let! (msg : obj) = mailbox.Receive() let db = AkkaDbUtils.getAkkaDbContext () return! match msg with | :? ScheduleMessageCommand as cmd -> query { for row in db.Dbo.ScheduledMessages do where (row.MessageReference = cmd.Id && row.Triggered = false && row.Cancelled = false) select row } |> Seq.iter (fun row -> row.Cancelled <- true) db.Dbo.ScheduledMessages.``Create(Cancelled, Message, MessageReference, MessageVersion, TriggerTime, Triggered)``( false, cmd.Message |> serializeObject, cmd.Id, cmd.Version, cmd.TriggerDateTime, false) |> ignore db.SubmitUpdatesAsync () |> Async.pipeTo (retype mailbox.Self) (fun result -> { Command = cmd; Result = result }) loop() | :? ScheduleMessageResult as result -> let cmd = result.Command match result.Result with | Result.Ok _ -> sendAck mailbox cmd.Ack <| sprintf "Scheduled message for %s on %A" cmd.Id cmd.TriggerDateTime | Result.Error exn -> db.ClearUpdates() |> ignore logErrorWithExnAckf mailbox exn cmd.Ack "Could not schedule message for %s" cmd.Id sendNack mailbox cmd.Ack <| sprintf "Could not schedule message for %s" cmd.Id loop() | _ -> UnhandledMessage } loop ()
Vagif
Но есть и другого типа реализация, используя aggregate pattern, описанный у Бартоша (https://bartoszsypytkowski.com/dont-ask-tell-2/)
Vagif
Во втором сценарии запросы в БД делаются в отдельном акторе, т.е. разница не очень большая по сути ( вызывать в теле главного актора или отправлять в новый)