Михаил Л. aka dx3mod
44 subscribers
85 photos
11 videos
10 files
238 links
my tiny tech blog
Download Telegram
Михаил Л. aka dx3mod
Милорд, ваши подписчики покидают вас...
Что самое интересное, уменьшение происходит и из-за того, что некоторые придурки улетают в черный список, за свой бред в адрес того, что я делаю
😁1😭1
Вау, рубисты обновили главную страницу
https://www.ruby-lang.org/en/
Выглядит шикарно
🔥1
Abstract IO pattern

Хотел бы поговорить про 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
Оно деплоится и работает 😱

https://dx3mod.github.io/

In action демонстрация моего блог движка на Окамле — bearbeer 🐻🍻 (в целом готовом, но осталось что полировать)
🔥2🍾1
От подписчика ❤️🚬
7🔥1
serialport.0.3

Добавил поддержку Windows для serialport библиотеки для работы с serial (последовательным) портом, теперь который работает как в POSIX, так и Windows системах.

Ахтунг. Не особо шарю за win32, поэтому not tested enough...
1🔥1
Сколько нужно написать библиотек, чтобы написать одну маленькую утилиту? В моем случае — три.

Надеюсь, этим постом я смогу закрыть свой гештальт по топику прошивки Ардуино борд, так как я изучил сурцы существующих инструментов, написал свои миниатюрные реализации, и... это все работает (на удивление).

Мои проекты по это теме можете посмотреть все также у меня на гитхабе: toy-atmega328p-bootloader — загрузчик для Atmega328P c детальными комментариями и видео разбором; библиотеки для OCaml intel_hex, stk500, serialport; в конечном итоге burvar — утилита для загрузки прошивки.

Все это документировано и доступно для сборки, а библиотеки к тому же лежат в OPAM репозитории.

Я, как обычно, хотел записать видос про это все, начал сейчас делать слайды, и по итогу, что-то совсем не идет — ни в тексте, ни в видео. Поэтому если кому интересно, то могу рассказать в лс в вольной форме, либо заставьте меня делать контент :<
🔥2