gavr_sas
216 subscribers
2.67K photos
184 videos
28 files
784 links
JB пропаганда
Download Telegram
gavr_sas
Забавная ситуация, циклы тут этакие рекурсионные, отдает ерленгом эликсиром, делаешь loop, а потом в разных местах делаешь recur, то есть loop создает точку рекурсии, и его можно вызывать с аргументами которые могли бы быть в том массивчике после loop []…
Штош, вот и вся программа, с итерацией по ключам значениям вышла история, значит есть функция seq которая принимает мапу и выдает лист массивов из пар ключ значение.
>(seq {:foo 1 :bar 2})
([:foo 1] [:bar 2])

Есть макрос doseq который проходится циклом по каждому такому массиву keyvalue из списка созданного из мапы

> (doseq [keyval map] (prn keyval))
[:subprotocol "mysql"]
[:username "usr"]
[:classname "com.mysql.jdbc.Driver"]
[:subname "//100.100.100.100:3306/clo"]
[:password "pwd"]


И воот чтобы не распаковывать эти массивы из двух kw значений внутри итерации, можно распаковать их сразу

(doseq [[k v] db] (println k v))

Вот тут k, v уже первый и второй элементы каждого массива, вот и получается итерация по ключам и значениям.

В ифе остался только второй дублок, потому что на одно действие он не нужен, линтер clj-kondo встроенный в ls очень не плохо работает, жаль исправления сам не предлагает.
👍2
gavr_sas
Штош, вот и вся программа, с итерацией по ключам значениям вышла история, значит есть функция seq которая принимает мапу и выдает лист массивов из пар ключ значение. >(seq {:foo 1 :bar 2}) ([:foo 1] [:bar 2]) Есть макрос doseq который проходится циклом по…
Готово, спрашивает те слова, которые наименее часто правильно отгадываются, сохраняет все в жсончик

Объяснять тут уже нечего, заметил 4 особенности,
1) при ошибке стектрейс пишется в /tmp/sas.edn и читать его неоч удобно
2) если хочется сделать какое то действие между объявлениями переменных придется создать новый скоуп, как здесь нужно принтнуть поэтому на 39 новый скоуп ради 1 переменной.
3) редактировать формы офигенно удобно, все действия с текстом как бы работают с учетом скобок, нужно поменять 2 местами в какой нибудь адской вложенности, alt вверх нормально меняет местами, не строку а именно форму, тоже самое с автоотступами итд, вообщем редактировать текст приятно
4) все иммутабельное, сначала даже растерялся, функция update-in возвращает новую версию, но не меняет старую, поэтому вся приложенька на хвостовой рекурсии, храним измененный стейт в аргументах функции, по заветам функциональщиков

github.com/gavr123456789/no-wo-read
This media is not supported in your browser
VIEW IN TELEGRAM
Еще 5) немного относящееся к пункту 3 офигенный тулинг, что довольно редкто встретишь у функциональных яп(единственный норм тулинг что я знаю это F# с Rider), тут что плагинчик у vscode что у IDEA оба тк сказать mature,
- shift ctrl стрелки всегда выделяет то что нужно, не останавливаясь в бессмысленных местах
- перемещение форм местами работает через alt стрелки
- обычные штуки вроде ренейминга, перехода к определению, подсказка документации вместе с примерами по наведению отлично работают

- ну и самое главное, из-за чего я уважаю Clojure и Smalltalk несмотря на то что они динамически типизированные это конечно REPL, любую форму можно выполнить прямо в редакторе, а не в какой то отдельной косольке, это заставляет писать маленькие чистые функции, чтобы потом сразу на месте их по тестить и компоновать в большие, что очень приятно(мы люди обожаем композицию).

Выглядит это так
эмм, ват
фига, вижла на 25 мегов апдейтнулась
🤯1
Firefox скоро опустится ниже оперы впервые за 18 лет
1😁1😢1
v2 nim в мае, хайпуем
Не совсем понимаю это решение, некоторые окна на mac os полупрозрачные, но большинство нет, может все диалоговые прозрачны
- ууу, веб разрабы засрали все своими косвенными зависимостями, node_modules самый тяжелый объект во вселенной

- тем временем ios разрабы
Сегодня ВОЗ отменила статус пандемии Covid-19, поздравляю, ковид официально закончился.
никогда бы не подумал что новые классные гтк приложения еще будут писать на чистом си

https://github.com/zhrexl/ThisWeekInMyLife

https://flathub.org/apps/io.github.zhrexl.thisweekinmylife
Пасаны уже запускают модельки на телефонах.
Нас однозначно ждет будущее где в каждом чайнике будет узкоспециализированная модель.

https://github.com/ggerganov/llama.cpp/issues/58#issuecomment-1466732993

Статья топ: https://habr.com/ru/articles/733702/
👍1
хосспади, JB так повернуты на джаве что компилируют ее даже в MD файлах, а что если мне нужно сделать пример без public static main System.out.print??
Текущее состояние моделей отсортированных по хорошести
https://paperswithcode.com/sota/multi-task-language-understanding-on-mmlu
Очень быстрый гайд по написанию фронтенда языка, пишем лексер(токенайзер), он нужен чтобы превращать неразборчивую писанину в цепочки токенов, типа
s_aS =
0.3432345f
в
[Identifier Equel Float]

Чтобы потом с ними можно было удобнее работать, сохраняем в токенах номер строки и начальную позицию токена, чтобы выдавать юзверам адекватные ошибки

Сам лексер хранит текущую позицию и возможно вам понадобится хранить количество пробелов текущей строки, если хотите сделать чтобы отступы чего то значили.

Нам понадобится набор базовых функций
1) step — поглащает следующие n символов, то есть
ab^cde
^ - курсор

step(2) вернет cd
abcd^e

2) peek — как step но не поглащает, нужна чтобы проверять что там впереди
ab^cde, peek(2) -> cd, ab^cde

3) check(str: string, distance: int): bool — хелпер чтоб проверять что в переди то что мы ожидаем, использует peek

4) match — ровно тоже самое что check, но поглащает строку
^if(sas)
match("if") -> true, if^(sas)

Воот, это база, следующий выпуск завтра
(((
Ой, кодек не найден, какая жалось, а мы как раз знаем одно место где его можно скачать, заплатите денюжку, стандартному модерн виндувс плееру, встроить по дефолту? ну нееее, так дела не делаются
Гугл забавно измеряет размеры коммитов