Обновить
32K+

Haskell *

Чистый функциональный язык программирования

21,93
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Проектирование БД рекомендательной системы по подходу DB-first

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели5.6K

В данной статье мы рассмотрим проектирование системы по подходу DB-first и то, какие проблемы он помогает не просто решить, а устранить как явление.

Читать далее

Что вы знаете о символьном программировании?

Уровень сложностиСредний
Время на прочтение15 мин
Охват и читатели20K

Кликбейтный заголовок, риторический вопрос и обещание раскрыть тайну! Не самый лучший набор, но нормального названия для статьи мне в голову не пришло. Что же здесь все таки будет? Речь пойдет о реализации символьного программирования в Wolfram Language (WL). Я не буду рассказывать про отличия от других парадигм. А также здесь точно не будет общих определений. Вместо этого я попытаюсь ответить на несколько вопросов исходя из своего личного опыта и наблюдений.

Внимание! Я не математик и не знаю haskell и lisp! И буду рад если меня поправят настоящие математики, которые с ними знакомы.

Читать далее

Делаем crackme. Часть первая: whitebox AES

Уровень сложностиСредний
Время на прочтение34 мин
Охват и читатели3.9K

Эта статья первая из цикла, в котором мы будем создавать crackme для linux amd64. В crackme будут реализованы шифрование каждой функции отдельным ключём и наномиты для противодействия отладке. В данной статье мы рассмотрим алгоритм встраивания ключа шифрования в код для усложнения расшифровки функций пользователем. Если стало интересно, прошу под кат.

Читать далее

Автоматизация разработки с помощью подхода DB-first

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели6.1K

Интеграция с БД - привычно сложная и хрупкая часть большинства кодобаз, постоянно отвлекающая внимание разработчиков и раздувающая сроки. Какой бы хайпующий фреймворк вы ни пробовали, вы неизбежно обнаруживаете себя борющимся с одними и теми же симптомами, но ощущение того, что проблема могла бы решаться проще не покидает вас. Знакомо?

Оказывается, так вовсе не должно быть. В данном посте мы разберёмся в причинах и сформулируем подход, который оставляет большинство привычных проблем просто несуществующими.

Читать далее

Ломаем хаскелем Brainfuck

Уровень сложностиСложный
Время на прочтение28 мин
Охват и читатели11K

Немного о bfc


Brainfuck — очень глупый язык. Там есть лента из 30к ячеек, по байту каждая. Команды bfc это:


  • Передвижение по ленте влево и вправо (символы < и >)
  • Увеличение и уменьшение значения в ячейке (символы + и -)
  • Ввод и вывод текущей ячейки (символы . и ,)
  • И цикл while, который продолжается пока значение в текущей ячейке не ноль. [ и ] это начало и конец цикла соответственно

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

Читать дальше →

Нет, в Haskell неудобно обрабатывать ошибки (если не пользоваться эффектами)

Время на прочтение6 мин
Охват и читатели6.6K

Если вы когда-нибудь читали агитации, призывающие к изучению Haskell, наверняка вас убеждали, что в нём ну очень удобно обрабатывать ошибки, ведь там есть Монада Either.

Но это неправда. В хаскельных школах не рассказывают, как удобно(?) обрабатывать ошибки. А я расскажу.

Обработать ошибки без регистрации и СМС

Как выглядит стажировка в ИТМО

Время на прочтение8 мин
Охват и читатели3K

Обсуждая IT-образование, представители компаний часто жалуются на отсутствие у вчерашних студентов навыков работы в команде и понимания, как в принципе функционирует бизнес в этой сфере. Но мы уверены ― многое зависит  как от самого студента, так и среды, в которой он проводит время, учится. На некоторых факультетах ИТМО стажировка в магистратуре обязательна. После нее на рынок труда выходит готовый джун или мидл, зачастую с предложением о работе в той самой компании, где он стажировался. 

В этой статье мы покажем, как стажировка проходит на практике и что она приносит самим IT-компаниям. В фокусе истории двух магистрантов института прикладных компьютерных наук ИТМОФедора Золотухина и Андрея Стояна.

Читать далее

Пример использования State и StateT

Время на прочтение4 мин
Охват и читатели4.3K

Мне встречалась фраза: "для многих знакомство с Haskell заканчивается на монадах". Монады действительно сложны для понимания, а самая непонятная, лично для меня, была монада State.

На простом примере, я хочу показать всю полезность монады State и еще большую полезность трансформера StateT.

Читать далее

«Если апатия приводит в Python, то конструктивный поиск ведёт к Rust или Go»

Время на прочтение5 мин
Охват и читатели8.9K

«Хтоническая логика Haskell, тяжеловесная мощь «плюсов» и грязная гибкость скриптовых языков наталкивают человека на экзистенциальный поиск. Если апатия приводит в Python, то конструктивный поиск в итоге ведёт к Rust или Go», — считает Игорь Нетай, специалист отдела перспективных исследований компании «Криптонит».

Читать далее

Близится выпуск обновления Vasil для Cardano: чего ожидать

Время на прочтение7 мин
Охват и читатели1.6K

Обновление Vasil значительно улучшит производительность и возможности Cardano. За последние пару лет в сети наблюдались некоторые нововведения  – запуск NFT, появление multi-asset и возможностей смарт-контрактов в 2021 году – но Vasil - это самое значительное обновление сети с момента запуска стейкинга в эре Shelley.

Читать далее

Cardano в 2022: от недееспособной PAB до форсирования конкурентности

Время на прочтение10 мин
Охват и читатели2.2K

Cardano (ADA) входит в топ-10 криптовалют по рыночной капитализации. Cardano — много больше чем криптовалюта: это масштабируемая и экологически устойчивая блокчейн-платформа для запуска смарт-контрактов, которая работает на основе протокола консенсуса с механизмом Proof of Stake Ouroboros и разрабатывается академическим сообществом экспертов и учёных-программистов на базе исследований, основанных на фактических данных. Цель Cardano — создание полностью децентрализованного блокчейн-проекта, управляемого и финансируемого системой голосования пользователей.

Несмотря на очевидные преимущества, Cardano часто критикуют за медленный прогресс в разработке.  В 2021 году  Cardano запустили несколько обновлений, представив наконец платформу Plutus для написания смарт-контрактов, и анонсировав возможность совместимости со смарт-контрактами на основе Ethereum. Что представляют собой эти обновления, с какими проблемами мы с командой столкнулись, работая на Cardano и что предстоит предпринять, чтобы их решить — расскажу в этом материале.

Читать далее

Спящий гигант, или Почему Cardano продолжает и выигрывает

Время на прочтение11 мин
Охват и читатели8.6K

Cardano и Ethereum — блокчейны, у которых схожие возможности и они неизбежно подвергаются сравнению друг с другом. Постепенно расстановка сил меняется, и о  Cardano всё чаще говорят как об «убийце Ethereum». Разбираемся в особенностях технологии Cardano, смотрим, есть ли основания для слухов и рассказываем, почему Cardano может стать мощнее, быстрее и доступнее, чем Ethereum или Bitcoin.

Читать далее

Telegram-бот мониторинга состояния серверов на Haskell

Время на прочтение5 мин
Охват и читатели6.6K

Привет, Хабр! Состояние сервера необходимо постоянно мониторить, чтобы в случае ошибки быстро ее исправить. Удобнее всего отслеживать работоспособность с помощью смартфона, а именно Telegram-бота, он позволяет осуществлять проверку на ходу. Реализуем Telegram-бот на функциональном языке Haskell, заодно разберемся в его преимуществах.  

Читать далее

Ближайшие события

Почему именно Cardano?

Время на прочтение20 мин
Охват и читатели17K

В июне 2022 года меня пригласили выступить с докладом о Cardano на криптовалютной конференции UTXO в Праге. Я думал о том, что буду рассказывать людям, и выбрал историю проекта и его миссию.

В 2014 году Чарльз Хоскинсон покинул Ethereum и совместно с Джереми Вудом учредил проект Cardano. Тогда же были созданы три независимые организации: Input Output Hong Kong (позже Input Output Global), Cardano Foundation и Emurgo.

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

Читать далее

Применение обобщённой свёртки для обработки синтаксических деревьев

Время на прочтение16 мин
Охват и читатели4.5K

Привет, Хабр! В статье я покажу, как представить синтаксические деревья с помощью фиксированной точки для функторов. Такое представление позволяет снабжать каждый лист дерева дополнительной информацией о самом листе (например позицией выражение в файле с программой), при этом непосредственно перед обработкой листа мы можем убрать из него эту информацию. Таким образом во время обработки в конструкторах синтаксического дерева будут находиться только необходимые данные, что позволяет писать более чистый код для его обработки. К концу статьи мы напишем интерпретатор для простого императивного языка программирования, на примере которого будет показано всё вышеперечисленное

Читать далее

Пример Haskell GUI с фреймворком Monomer

Время на прочтение9 мин
Охват и читатели6.6K
Haskell уже имеет несколько достаточно полных средств для создания GUI. Но только некоторые из них являются кросплатформенными и часто требуют знания графической библиотеки, которая находится в основании. Особняком здесь стоит графический фреймворк Monomer. Ему присуща высокая степень абстракции над графикой и при этом, относительная легкость в использования (pure Haskell подход). Имеет хорошую документацию и примеры.
Читать дальше →

Еще один вьювер сообщений (логов) для Dwarf Fortress

Время на прочтение2 мин
Охват и читатели3.4K

Как-то раз решил поиграть в игру Dwarf Fortress, показалось очень интересно. Это несмотя на неудобное управление, которое возможно будет переделано в новой реинкарнации игры. Но речь о другом: взаимодействие с игроком сильно опирается на сообщения, которые появляются на отдельном экране и приходится постоянно делать переключения на него и обратно в игру.

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

Читать далее

Применения — слева, аргументы — справа

Время на прочтение4 мин
Охват и читатели3.4K

В предыдущей статье (Заберите свои скобки), мы попытались избавиться от скобочек с помощью нового оператора для передачи аргументов. На основе своего опыта пользования оператором, можно конечно подобрать нужный приоритет, но он все равно будет конфликтовать в случаях, которые мы не предусмотрели. Что же делать? У меня есть идея, но она вам может не понравится.

Опять чем-то скобки не угодили?

Знакомство с p-адическими числами. Часть 2, практическая

Время на прочтение13 мин
Охват и читатели7.7K


Эта часть продолжает неформальный рассказ о p-адических числах и она посвящена практическим аспектам работы с этой числовой системой и, в частности, некоторым деталям реализации p-адической алгебры на языке Haskell. О том, что это за система и зачем она может понадобиться, читайте в предыдущей части.


Мы поговорим об эффективном внутреннем представлении p-адических чисел, о базовых алгоритмах и методах работы с ними, а также о двух классных инструментах в системе типов языка Haskell: о типах-литералах (type literals) и семействах типов (type families).

Читать дальше →

Работа с файлами формата ELF из Хаскела

Время на прочтение12 мин
Охват и читатели3.5K

Работа с файлами формата ELF -- популярная тема на Хабре. ("Введение в ELF-файлы в Linux: понимание и анализ", "Минимизация файла ELF – попробуем в 2021?" и т. д.)

Существуют библиотеки для Хаскела для работы с этими файлами: elf
(Hackage) и data-elf (Hackage). Эти библиотеки работают только с заголовками и элементами таблиц и не дают возможности сгенерировать объектный файл.

Библиотека melf (GitHub, Hackage) даёт возможность полностью разобрать файл ELF и сгенерировать такой файл по несложной структуре данных. Ниже даются примеры её использования.

Читать далее