Forwarded from cat sandwitch.dev
#ghc
Наверное самый мой крупный контрибьюшен на текущий момент времени. Полностью переписал разрешение имён для типовых паттернов и частично - проверку типов для них же. Вкрации:
Такой синтаксис есть, ему уже 3 года, но "работает" он только в позиции аргумента у тайп конструктора. Вероятно дальше мне придётся реализовывать его и для обычных паттернов, но это уже совсем другая история. В чём была проблема? 3 года назад эти паттерны были сделаны под идейным руководством Джона Эриксона, а потому до моего патча было запрещено... ну примерно всё запрещено:
И самое интересное - сделано это было на коленке, отдельными валидациями с нехитрыми эвристиками, когда звонить в колокол. В итоге мне пришлось полностью переписывать код, ответственный за это дело и изобретать инфраструктуру, правильным образом собирающую переменные с паттернов. Зато теперь
- TH сплайсы работают
- Нормальный скоупинг тайп/каинд сигнатур работает
- Шедоувинг типовых переменных работает, варнинги о шедоувинге тоже работают
- Линты о конфликтующих определениях работают
А всего-то и надо было - сделать по-человечески, как уже было сделано до этого на уровне термов. Это была моя прямая задача, но я на этом не остановился и дальше, за счёт заведения, пошёл править проверку типов у типовых паттернов. Проверка типов (те самые три года назад) была успешно реализована путём того, что типовые паттерны проверялись точно таким же образом, как и сигнатуры паттернов. Это до какого-то момента работало, а потом всё разваливалось. Представим такой код:
Чё тут происходит: у нас
Это то, как типизация должна работать. Но для этого нам надо чтобы у
Вот такое поведение мне пришлось исправить, добавив отдельный путь кода для простых типовых паттернов, которые состоят либо из одной типовой переменной, либо из типовой переменной с каинд сигнатурой.
https://gitlab.haskell.org/ghc/ghc/-/merge_requests/10725
Наверное самый мой крупный контрибьюшен на текущий момент времени. Полностью переписал разрешение имён для типовых паттернов и частично - проверку типов для них же. Вкрации:
f (Proxy @a) = ... -- @a ето типовой паттерн.
Такой синтаксис есть, ему уже 3 года, но "работает" он только в позиции аргумента у тайп конструктора. Вероятно дальше мне придётся реализовывать его и для обычных паттернов, но это уже совсем другая история. В чём была проблема? 3 года назад эти паттерны были сделаны под идейным руководством Джона Эриксона, а потому до моего патча было запрещено... ну примерно всё запрещено:
f1 :: forall a . Proxy a -> ...
f1 (Proxy @a) = ... -- неа, @a уже в скоупе
f2 (Proxy @a) = \(Proxy @a) -> ... -- неа
f3 (Proxy @(b :: (a, a))) = ... -- неа
f4 (Proxy @a) (Proxy @(b :: a)) = ... -- опять неа
f5 (Proxy @($(TH.varT (TH.mkName "t")))) = ... -- лол)))
И самое интересное - сделано это было на коленке, отдельными валидациями с нехитрыми эвристиками, когда звонить в колокол. В итоге мне пришлось полностью переписывать код, ответственный за это дело и изобретать инфраструктуру, правильным образом собирающую переменные с паттернов. Зато теперь
- TH сплайсы работают
- Нормальный скоупинг тайп/каинд сигнатур работает
- Шедоувинг типовых переменных работает, варнинги о шедоувинге тоже работают
- Линты о конфликтующих определениях работают
А всего-то и надо было - сделать по-человечески, как уже было сделано до этого на уровне термов. Это была моя прямая задача, но я на этом не остановился и дальше, за счёт заведения, пошёл править проверку типов у типовых паттернов. Проверка типов (те самые три года назад) была успешно реализована путём того, что типовые паттерны проверялись точно таким же образом, как и сигнатуры паттернов. Это до какого-то момента работало, а потом всё разваливалось. Представим такой код:
data T where
MkT :: forall (f :: forall k. k -> Type).
f Int -> f Maybe -> T
k :: T -> ()
k (MkT @f (x :: f Int) (y :: f Maybe)) = ()
Чё тут происходит: у нас
f с полиморфным каиндом forall k. k -> Type. В первом использовании f Int типовая переменная k инстанцируется в каинд от Int, то есть Type и полная сигнатура f в этом использовании становится Type -> Type. Дальше мы находим второе использование f, а именно - f Maybe. Тут у нас при имеющихся вводных по всем правилам типизации в Хаскеле с нуля начинается инстанцирование уже другой переменной k в каинд от Maybe - Type -> Type. То есть во втором использовании каинд f должен быть (Type -> Type) -> Type. Это то, как типизация должна работать. Но для этого нам надо чтобы у
f был полиморфный каинд, т.е. имеющий forall k. - но так нельзя сделать, если мы относимся к f как к сигнатуре паттерна. Поэтому до моего патча этой самой f назначался каинд k -> Type, т.е. из какой-то k в Type. Дальше была проверка первого использования, где k сравнивалась с каиндом у Int - Type и GHC видел что ранее у k нет никаких ограничений лихо проводил равенство между k и Type. Второе использование уже пыталось сопоставить каинд Maybe - Type -> Type с k, имея в контексте информацию, что k равен Type. Type -> Type не равен Type, код идёт нахер, завершаем проверку типов.Вот такое поведение мне пришлось исправить, добавив отдельный путь кода для простых типовых паттернов, которые состоят либо из одной типовой переменной, либо из типовой переменной с каинд сигнатурой.
https://gitlab.haskell.org/ghc/ghc/-/merge_requests/10725
GitLab
!10725: Draft: Type patterns (#22478, #18986) · Merge requests · Glasgow Haskell Compiler / GHC · GitLab
Improved name resolution and type checking of type patterns in constructors: HsTyPat: a new dedicated data type that represents type patterns in...
Forwarded from Open Source
This media is not supported in your browser
VIEW IN TELEGRAM
Forwarded from Andrey
GitLab
Andrey Listopadov / infinite.el · GitLab
Forwarded from AbstractDL
ChatGPT Fails on Simple Questions (by Skoltech & Me)
Есть такой старенький бенчмарк с простыми вопросами по википедии (так и называется Simple Questions), и, оказывается, ChatGPT с ним справляется очень плохо, даже хуже, чем GPT-3. А лучший результат вообще достигается решением с эмбеддингами графов знаний (BERT + PTBG).
Похоже, всё дело в том, что RLHF вынуждает модель отказываться от ответа, если она в нём не уверена. А GPT-3 просто тычет пальцем в небо и часто угадывает.
Статья, GitHub
Есть такой старенький бенчмарк с простыми вопросами по википедии (так и называется Simple Questions), и, оказывается, ChatGPT с ним справляется очень плохо, даже хуже, чем GPT-3. А лучший результат вообще достигается решением с эмбеддингами графов знаний (BERT + PTBG).
Похоже, всё дело в том, что RLHF вынуждает модель отказываться от ответа, если она в нём не уверена. А GPT-3 просто тычет пальцем в небо и часто угадывает.
Статья, GitHub
Forwarded from AI для Всех
🦙 Llama-2
Это очень важно: вышла Llama-v2 у которой открытый исходный код и лицензия, разрешающая коммерческое использование!
Это изменит ландшафт рынка LLM.
Llama-v2 доступна на Microsoft Azure и будет доступна на AWS, Hugging Face и других провайдерах.
Доступны предварительно обученные и зафайнтюненые модели с параметрами 7B, 13B и 70B.
Сайт Llama-2
Документ Llama-2
Это очень важно: вышла Llama-v2 у которой открытый исходный код и лицензия, разрешающая коммерческое использование!
Это изменит ландшафт рынка LLM.
Llama-v2 доступна на Microsoft Azure и будет доступна на AWS, Hugging Face и других провайдерах.
Доступны предварительно обученные и зафайнтюненые модели с параметрами 7B, 13B и 70B.
Сайт Llama-2
Документ Llama-2
Forwarded from Senior Python Developer
Дано целое число, преобразовать его в римскую цифру.
В этом решении мы создаем метод intToRoman, который принимает целое число в качестве аргумента и возвращает его римское представление в виде строки.
Метод использует жадный алгоритм для поиска наибольшего римского числа, которое может быть вычтено из входного числа. Затем он вычитает это число и добавляет соответствующее римское число к результату.
Этот процесс повторяется до тех пор, пока входное число не станет равным нулю.
#разбор_кода
В этом решении мы создаем метод intToRoman, который принимает целое число в качестве аргумента и возвращает его римское представление в виде строки.
Метод использует жадный алгоритм для поиска наибольшего римского числа, которое может быть вычтено из входного числа. Затем он вычитает это число и добавляет соответствующее римское число к результату.
Этот процесс повторяется до тех пор, пока входное число не станет равным нулю.
#разбор_кода
Forwarded from Open Source
ZboxFS
ZboxFS — это файловая система, ориентированная на конфиденциальность и предназначенная для безопасного хранения файлов приложения.
☝🏻Цель ZboxFS — помочь приложениям безопасно, конфиденциально и надежно хранить файлы. Он встраивается в ваше приложение и предоставляет зашифрованную виртуальную файловую систему.
ZboxFS инкапсулирует файлы и каталоги в зашифрованное хранилище, предоставляя виртуальную файловую систему и эксклюзивный доступ для авторизованных приложений.
Он поддерживает различные базовые уровни хранения, включая память, файловую систему ОС, СУБД и хранилище объектов «ключ-значение».
ZboxFS шифрует все, включая метаданные и структуру каталогов, используя современную криптографию.
Он поддерживает дедупликацию содержимого и файлов, сжатие данных, управление версиями содержимого файлов, семантику копирования при записи и транзакционные операции ACID.
ZboxFS построен на Rust и его можно использовать на GNU/Linux, macOS, Windows и Android.
https://github.com/zboxfs/zbox
Site: https://zbox.io/fs/
Docs: https://docs.rs/zbox/latest/zbox/
ZboxFS — это файловая система, ориентированная на конфиденциальность и предназначенная для безопасного хранения файлов приложения.
☝🏻Цель ZboxFS — помочь приложениям безопасно, конфиденциально и надежно хранить файлы. Он встраивается в ваше приложение и предоставляет зашифрованную виртуальную файловую систему.
ZboxFS инкапсулирует файлы и каталоги в зашифрованное хранилище, предоставляя виртуальную файловую систему и эксклюзивный доступ для авторизованных приложений.
Он поддерживает различные базовые уровни хранения, включая память, файловую систему ОС, СУБД и хранилище объектов «ключ-значение».
ZboxFS шифрует все, включая метаданные и структуру каталогов, используя современную криптографию.
Он поддерживает дедупликацию содержимого и файлов, сжатие данных, управление версиями содержимого файлов, семантику копирования при записи и транзакционные операции ACID.
ZboxFS построен на Rust и его можно использовать на GNU/Linux, macOS, Windows и Android.
https://github.com/zboxfs/zbox
Site: https://zbox.io/fs/
Docs: https://docs.rs/zbox/latest/zbox/
Forwarded from Open Source
This media is not supported in your browser
VIEW IN TELEGRAM
Translumo
Translumo — это продвинутый переводчик экрана, который может обнаруживать и переводить текст в режиме реального времени, например, субтитры.
Он имеет высокую точность распознавания текста и использует обучающие модели машинного обучения для выбора наилучшего распознаваемого результата.
Интерфейс прост и удобен для повседневного использования.
К сожалению только для Windows🤷🏼♀️
https://github.com/Danily07/Translumo
Translumo — это продвинутый переводчик экрана, который может обнаруживать и переводить текст в режиме реального времени, например, субтитры.
Он имеет высокую точность распознавания текста и использует обучающие модели машинного обучения для выбора наилучшего распознаваемого результата.
Интерфейс прост и удобен для повседневного использования.
К сожалению только для Windows🤷🏼♀️
https://github.com/Danily07/Translumo
Forwarded from Open Source
Queryable
Приложение для смартфона с открытым исходным кодом, использующее модель CLIP OpenAI для проведения автономного поиска в вашей галерее.
Queryable позволяет использовать выражения на естественном языке, такие как например "коричневая собака сидит на скамейке" , для поиска в альбоме.
Приложение работает локально без доступа к сети и конфиденциальность вашего альбома не будет нарушена ни одной корпорацией.
К сожалению только для iOS🤷🏼♀️
https://github.com/mazzzystar/Queryable
Site: https://queryable.app/
Приложение для смартфона с открытым исходным кодом, использующее модель CLIP OpenAI для проведения автономного поиска в вашей галерее.
Queryable позволяет использовать выражения на естественном языке, такие как например "коричневая собака сидит на скамейке" , для поиска в альбоме.
Приложение работает локально без доступа к сети и конфиденциальность вашего альбома не будет нарушена ни одной корпорацией.
К сожалению только для iOS🤷🏼♀️
https://github.com/mazzzystar/Queryable
Site: https://queryable.app/
git chik-chirik(1) Manual Page
Name
git-chik-chirik - Fucks up the whole commit history
Name
git-chik-chirik - Fucks up the whole commit history
Forwarded from Control Quantitative Laboratory (Pavel A)
Метод Монте-Карло
Понимаю, что в рамках поста в Telegram очень сложно будет уместить объяснение работы Монте-Карло.
Поэтому описал статью отдельно 👉 тут
В статье привел примеры как можно моделировать завершение проекта используя данные пропускной способности.
Постарался сделать самый простой пример.
Который можно использовать для развития своих идей моедлирования.
Добавил и пример с возможными наступления и рисков.
Конечно, это не единственный способ. Однако для большенства случаев он вполне подходящий.
В статье привел пример кода на JavaScript который можно запустить даже в браузере.
Но, а если у вас нет навыков программирования, вы можете воспользоваться готовой формой Rodrigo Rosaulo создавший удобную форму на сонове работ Troy Magennis' и Dimitar Bakardzhiev
Если вам статья понравилась дайте знать - поставьте свой emoji.
Будут вопросы, задавайте в тред (прикрепленный чатик к каналу)
Понимаю, что в рамках поста в Telegram очень сложно будет уместить объяснение работы Монте-Карло.
Поэтому описал статью отдельно 👉 тут
В статье привел примеры как можно моделировать завершение проекта используя данные пропускной способности.
Постарался сделать самый простой пример.
Который можно использовать для развития своих идей моедлирования.
Добавил и пример с возможными наступления и рисков.
Конечно, это не единственный способ. Однако для большенства случаев он вполне подходящий.
В статье привел пример кода на JavaScript который можно запустить даже в браузере.
Но, а если у вас нет навыков программирования, вы можете воспользоваться готовой формой Rodrigo Rosaulo создавший удобную форму на сонове работ Troy Magennis' и Dimitar Bakardzhiev
Если вам статья понравилась дайте знать - поставьте свой emoji.
Будут вопросы, задавайте в тред (прикрепленный чатик к каналу)