Михаил Л. aka dx3mod
44 subscribers
85 photos
11 videos
10 files
238 links
my tiny tech blog
Download Telegram
Короче, на Окамле можно писать гуй под МакОсь 🚬
🔥52
К слову, от меня снова начали отписываться.... По моему это заговор против моей евангелисткой деятельности за Окамл в массы 👀
😭4😢1
Добавлена в OPAM библиотека — intel_hex.0.2

Ну там ничего существенного, один фикс и добавлена в доку инфа про выдаваемые исключения

#share
Милорд, ваши подписчики покидают вас...
😭3
Выпуск Lwt.6.1.0

Крохотный минорный релиз с исправлениями по дата рейсу, установки под виндой и остальным вещам. В ppx расширении теперь нормально указываются аннотаци типов let%lwt x : t = … in …
Михаил Л. 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