Михаил Л. aka dx3mod
Милорд, ваши подписчики покидают вас...
Что самое интересное, уменьшение происходит и из-за того, что некоторые придурки улетают в черный список, за свой бред в адрес того, что я делаю
😁1😭1
🔥1
Abstract IO pattern
Хотел бы поговорить про IO, как вы знаете, я написал уже достаточно библиотек на Окамле и всегда, когда приходиться с вводом-выводом сталкиваешься с этим, а именно с тем, что пользователь захочет использовать твою библиотеку в разных средах с разными библиотеками (самый классический пример, он использует Lwt для асинхрощены и ему не прикольно, что твое блокирующие решение станет узким горлом — он хотел бы использовать твою библиотеку в контексте lwt нативно с соответствующей поддержкой асинка, а другой захочется использовать в ее в простом синхронном контексте, а другой вообще обработанный Джейн Стрит использует ее в рамках Async либы.
Неужели придется писать библиотеку для разных библиотек, то есть одно и тоже по сотню раз? Конечно, нет. Тут не долго думая, вы сами придете к мысли, что требуется абстрагирование и тут самым подходящим будет использовать module type. Образцовый пример это библиотека Cohttp.
Хотел бы поговорить про IO, как вы знаете, я написал уже достаточно библиотек на Окамле и всегда, когда приходиться с вводом-выводом сталкиваешься с этим, а именно с тем, что пользователь захочет использовать твою библиотеку в разных средах с разными библиотеками (самый классический пример, он использует Lwt для асинхрощены и ему не прикольно, что твое блокирующие решение станет узким горлом — он хотел бы использовать твою библиотеку в контексте lwt нативно с соответствующей поддержкой асинка, а другой захочется использовать в ее в простом синхронном контексте, а другой вообще обработанный Джейн Стрит использует ее в рамках Async либы.
Неужели придется писать библиотеку для разных библиотек, то есть одно и тоже по сотню раз? Конечно, нет. Тут не долго думая, вы сами придете к мысли, что требуется абстрагирование и тут самым подходящим будет использовать module type. Образцовый пример это библиотека Cohttp.
module type IO = sig
type 'a t
and out_channel
val ( let* ) : 'a t -> ('a -> 'b t) -> 'b t
val return : 'a -> 'a t
val stdout : out_channel
val print_endline : out_channel -> string -> unit t
end
module Sync_impl = struct
type 'a t = 'a
and out_channel = Stdlib.out_channel
let stdout = Stdlib.stdout
let ( let* ) x f = f x
let return x = x
let print_endline oc s =
let* _ = Out_channel.output_string oc s in
Out_channel.output_string oc "\n"
end
module Make (IO : IO) = struct
open IO
let print_hello_and_bye () =
let* _ = print_endline stdout "hello" in
print_endline stdout "bye"
end
module Lib = Make (Sync_impl)
let () = Lib.print_hello_and_bye ()
❤2
Михаил Л. aka dx3mod
Abstract IO pattern Хотел бы поговорить про IO, как вы знаете, я написал уже достаточно библиотек на Окамле и всегда, когда приходиться с вводом-выводом сталкиваешься с этим, а именно с тем, что пользователь захочет использовать твою библиотеку в разных…
Добавлена статья (рецепт) про абстрагировании IO при разработке библиотек — это важно обеспечения совместимости с разными IO библиотеками (Stdlib, Lwt, Async, Eio, etc)
https://ocamlportal.ru/recipes/agnostic-io.html
#ocamlportal
https://ocamlportal.ru/recipes/agnostic-io.html
#ocamlportal
ocamlportal.ru
Абстрагирование Input-Output (IO) для библиотек | ocamlportal
Ресурс по OCaml и его экосистеме.
👍5
Неловкий скринкаст про работу загрузчиков для МК AVR, в видео разбираю написанный мной крохотный загрузчик, из чего он состоит и по какому алгоритму работает.
https://youtu.be/gp72gTeLquM
https://youtu.be/gp72gTeLquM
YouTube
Screencast. AVR bootloader'ы под капотом – пишем и изучаем, как это работает.
Неловкий скринкаст про работу загрузчиков для МК AVR, в видео разбираю написанный мной крохотный загрузчик, из чего он состоит и по какому алгоритму работает.
Исходны коды программ из видео:
Tiny ATmega328P bootloader (in C)
https://github.com/dx3mod/toy…
Исходны коды программ из видео:
Tiny ATmega328P bootloader (in C)
https://github.com/dx3mod/toy…
🔥4👏3❤1
Оно деплоится и работает 😱
https://dx3mod.github.io/
In action демонстрация моего блог движка на Окамле — bearbeer 🐻🍻 (в целом готовом, но осталось что полировать)
https://dx3mod.github.io/
In action демонстрация моего блог движка на Окамле — bearbeer 🐻🍻 (в целом готовом, но осталось что полировать)
🔥2🍾1
serialport.0.3
Добавил поддержку Windows для serialport библиотеки для работы с serial (последовательным) портом, теперь который работает как в POSIX, так и Windows системах.
Ахтунг. Не особо шарю за win32, поэтому not tested enough...
Добавил поддержку Windows для serialport библиотеки для работы с serial (последовательным) портом, теперь который работает как в POSIX, так и Windows системах.
Ахтунг. Не особо шарю за win32, поэтому not tested enough...
GitHub
GitHub - dx3mod/serialport: Serial communication library
Serial communication library. Contribute to dx3mod/serialport development by creating an account on GitHub.
❤1🔥1
Сколько нужно написать библиотек, чтобы написать одну маленькую утилиту? В моем случае — три.
Надеюсь, этим постом я смогу закрыть свой гештальт по топику прошивки Ардуино борд, так как я изучил сурцы существующих инструментов, написал свои миниатюрные реализации, и... это все работает (на удивление).
Мои проекты по это теме можете посмотреть все также у меня на гитхабе: toy-atmega328p-bootloader — загрузчик для Atmega328P c детальными комментариями и видео разбором; библиотеки для OCaml intel_hex, stk500, serialport; в конечном итоге burvar — утилита для загрузки прошивки.
Все это документировано и доступно для сборки, а библиотеки к тому же лежат в OPAM репозитории.
Я, как обычно, хотел записать видос про это все, начал сейчас делать слайды, и по итогу, что-то совсем не идет — ни в тексте, ни в видео. Поэтому если кому интересно, то могу рассказать в лс в вольной форме, либо заставьте меня делать контент :<
Надеюсь, этим постом я смогу закрыть свой гештальт по топику прошивки Ардуино борд, так как я изучил сурцы существующих инструментов, написал свои миниатюрные реализации, и... это все работает (на удивление).
Мои проекты по это теме можете посмотреть все также у меня на гитхабе: toy-atmega328p-bootloader — загрузчик для Atmega328P c детальными комментариями и видео разбором; библиотеки для OCaml intel_hex, stk500, serialport; в конечном итоге burvar — утилита для загрузки прошивки.
Все это документировано и доступно для сборки, а библиотеки к тому же лежат в OPAM репозитории.
Я, как обычно, хотел записать видос про это все, начал сейчас делать слайды, и по итогу, что-то совсем не идет — ни в тексте, ни в видео. Поэтому если кому интересно, то могу рассказать в лс в вольной форме, либо заставьте меня делать контент :<
🔥2
Михаил Л. aka dx3mod
Сколько нужно написать библиотек, чтобы написать одну маленькую утилиту? В моем случае — три. Надеюсь, этим постом я смогу закрыть свой гештальт по топику прошивки Ардуино борд, так как я изучил сурцы существующих инструментов, написал свои миниатюрные реализации…
Прошивка Arduino под капотом-1.pdf
1.9 MB
Прошивка Arduino под капотом
Я всё таки написал статью, поэтому читаем!
Я всё таки написал статью, поэтому читаем!
❤3