Некоторое время назад я разработал режим GNU Emacs для редактирования конфигурационных файлов операционной системы Embox. Кроме всестороннего изучения Emacs Lisp мне потребовалось разобраться со структурой модуля режима, а также процессом и требованиями к публикации пакетов в MELPA, наиболее популярном архиве пакетов для GNU Emacs. В этом руководстве я расскажу, что нужно знать, чтобы написать свой собственный режим, и как опубликовать свой собственный пакет.
;;;###autoload
(define-derived-mode mybuild-mode prog-mode "Mybuild"
"Major mode for editing Mybuild files from Embox operating system."
:syntax-table mybuild-mode-syntax-table
(setq-local comment-start "// ")
(setq-local comment-end "")
(setq-local indent-tabs-mode nil)
(setq-local indent-line-function 'mybuild-mode-indent-line)
(setq-local font-lock-defaults '(mybuild-highlights)))
Короткий туториал о том, как создать зашифрованный /home
в уже установленном Linux, если вы не сделали это во время установки. Здесь будут описаны необходимые действия в среде Ubuntu Desktop, но большинство информации должно быть актуально и в других вариантах Linux. Мы будем использовать тот де метод, что и установщик системы: связку Device Mapper и LUKS.
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: автор этого туториала не даёт гарантии, что повторение описанных в нём действий, не причинит вреда. Используйте его на свой страх и риск!
Добавил раздел “Курсы” для информирования о курсах, которые я провёл. Технически это было реализовано точно также как и для раздела “Проекты”.
Также добавил поддержку Jekyll Compose, в том числе и для проектов и курсов.
Полгода назад я вёл в Телеграме канал о языке Rust. Канал я закрыл, и сделал выжимку из материалов, опубликованных в нём. Здесь я расскажу о том, как настроить среду разработчика на Rust в Linux, GNU Emacs и Visual Studio Code и как запрограммировать Arduino Uno на моргание светодиодом.
#![no_std]
#![no_main]
use ruduino::Pin;
use ruduino::cores::current::{port};
#[no_mangle]
pub extern fn main() {
port::B5::set_output();
loop {
port::B5::set_high();
ruduino::delay::delay_ms(1000);
port::B5::set_low();
ruduino::delay::delay_ms(1000);
}
}
Наверное все, кто изучал информатику и вычислительную технику в университете, так или иначе, в курсе функционального программирования, например, столкнулся с Scheme – языком функционального программирования, произошедшем от Lisp, и известным как язык со скобками, то есть где всё является так называемыми S-выражениями. Скорее всего это был MIT/GNU Scheme или Racket. Но на самом деле реализаций Scheme великое множество. В этой статье собраны в таблицы различные реализации Scheme, указаны поддерживаемые ими версии языка, является ли реализация компилятором или интерпретатором, и другая информация.
В недавно вышедшем Ubuntu Linux 22.04 LTS Ruby был обновлён с версии 2.7 на 3.0. Если вы обновили систему на новую версию без переустановки, то ожидаемо ранее установленные gem перестали работать. В этой статье будут описаны начальные шаги по реанимации после обновления Ruby.
Как-то заглянув на GitHub, обнаружил Koka – язык функционального программирования со статической типизацией. Koka разрабатывается с 2012 года Daan Leijen в Microsoft Research, USA. Его исходники выкладываются на GitHub под лицензией Apache 2.0. Как признаются его авторы, он ещё не готов для промышленного применения: у него нет библиотек, менеджера пакетов и полной поддержки в средах разработки. При этом сам язык достаточно стабилен, а компилятор полностью разработан. Отдельными моментами язык напоминает Rust, Haskell и Scala. Сам же по себе он интересен контролем побочных эффектов. Это его основная фишка. Приглашаю познакомиться с Koka и обсудить его свойства.
fun main(): console ()
println("Hello, World!")
Сначала пробежимся по свойствам языка, а затем рассмотрим один небольшой пример.
28 января 2022 выпустил первую версию GH Jekyll Template. Это шаблон Jekyll для публикации сайтов на GitHub Pages. Над шаблоном работал больше года, с тех пор как перевёл этот свой блог на Jekyll. Это двунаправленная работа: иногда я с чем-то экспериментирую на шаблоне и после отладки переношу в свой блог, иогда наоборот, сначало что-то добавляю на сайт или исправляю ошибку, а затем выкладываю это в шаблон. Вот, только выпустил первую версию шаблона, а на сайте уже доработка: добавил сортировку проектов по дате.
3 января 2022 я запустил свой новый проект “Превозмочь Rust”. Это канал в Телеграме, где я рассказываю о том, как я постигаю язык программирования Rust. Этот язык, как и Haskell, Agda, Idris и некоторые другие, известен высоким порогом входа, в отличие от Python, Pascal или C, например. Но при этом способствует написанию качественного и эффективного кода. На этом канале вы узнаете о том, с какими трудностями я столкнулся, как я их преодолевал, какие задачи мне потребовалось решать. Самообучение будет построено на решении кейсов и разработке проектов. В канале уже опубликовано несколько постов на разную тематику: от настройки среды до мигания светодиодом на Arduino Uno. Подключайтесь!
Добавил раздел “Проекты” для публикации информации о своих актуальных проектах. Давно хотел реализовать такую штуку. Но как? Было неочевидно. День работы и всё получилось. Теперь вкратце расскажу как это было сделано.
Выясним, как вычисляются рейтинги языков программирования, какие языки программирования наиболее популярны, и что нам с этой информацией делать.
В декабре 2021 года Python остается одним из самых популярных языков программирования. Об этом мы узнаем из рейтингов IEEE Spectrum, TIOBE, PYPL. Однако рейтинги GitHub Octoverse и Stack Overflow Annual Developer Survey сообщают нам, что Python на 2-м месте, а GitHut, что лишь на 3-м. А самым популярным является JavaScript. Дело в том, что у разных рейтингов разные задачи и методики подсчета. А значит пора разобраться, как устроены эти рейтинги и для чего они нужны.
Место | TIOBE | IEEE Spec. | PYPL | GitHub Oc. | Stack Overf. | GitHut |
---|---|---|---|---|---|---|
1 | Python | Python | Python | JavaScript | JavaScript | JavaScript |
2 | C | Java | Java | Python | HTML / CSS | Java |
3 | Java | C | JavaScript | Java | Python | Python |
4 | C++ | C++ | C# | TypeScript | SQL | CSS |
5 | C# | JavaScript | C / C++ | C# | Java | PHP |
6 | Visual Basic (.Net) | C# | PHP | PHP | Node.js | Ruby |
7 | JavaScript | R | R | C++ | TypeScript | C++ |
8 | Assembly Language | Go | Swift | Swift | C# | C |
9 | SQL | HTML | Objective-C | C | Bash / Shell | Shell |
10 | Swift | Swift | Matlab | Ruby | C++ | C# |
Этот пост изначально должен был быть ответом на пост “Честный рассказ об образовании в IT. Стоит ли оно того?”, однако, по-видимому, вышел за эти пределы и может рассматриваться как самостоятельное произведение.
Нам часто приходится читать в подобных постах, а также слышать из уст студентов и выпускников, что их ожидания от учёбы в университете не оправдались. Эту проблему можно рассматривать с разных сторон. Я коснусь лишь некоторых аспектов. А именно, тех, которые относятся ко взаимодействию университетов и студентов. Итак, давайте разберём сетования автора исходного поста, сформулируем причины происходящего, и дадим вновь поступающим советы о том, как отучиться в университете, и не пожалеть, о том, что это было скучно и бесполезно.
Язык запросов Cypher изначально разработан специально для графовой СУБД Neo4j. Целью Cypher является предоставить человеко-читаемый язык запросов к графовым базам данных похожий на SQL. На сегодня Cypher поддерживается несколькими графовыми СУБД. Для стандартизации Cypher была создана организация openCypher.
Основы работы с СУБД Neo4j описаны в Основы работы с Neo4j в браузере.
Для знакомства с Cypher рассмотрим пример генеалогического дерева заимствованный из классического учебника по Прологу за авторством И. Братко. На этом примере будет показано как добавлять узлы и связи в граф, как им назначать метки и атрибуты и как задавать вопросы.
На сегодняшний день графовых СУБД стало настолько много, что аж глаза разбегаются. Они написаны на различных языках, предлагают различные языки запросов, некоторые не ограничиваются одной только графовой моделью. Давайте пройдёмся по наиболее популярным и известным, свободно-распространяемым из них. Сначала мы рассмотрим полноценные СУБД, а затем – встраиваемые.
В статье рассматривается как начать работать с графовой СУБД Neo4j, используя Neo4j Browser. Это руководство может быть полезным как дополнение к книге Редмонда и Уилсона “Семь баз данных за семь недель”, так как рассматриваемый веб-интерфейс был полностью переработан, а также к книге “Графовые базы данных” (Робинсон, Вебер, Эифрем), так как в ней этот вопрос вообще не рассматривается. Статья рассчитана на приступающих к изучению Neo4j. Те, кто уже знаком с этой СУБД, могут смело её пропустить.
Итак, мною завершён перевод этого сайта-блога на использование Jekyll. Ушло у меня на это две с половиной недели вечеров и выходных. Мотивация была сформулирована в предыдущем посте, а сейчас расскажу, почему же так долго продолжался этот переход.
Очевидный и единственно правильный ответ: автор давно не юноша. Рассказ окончен, шутка…
Вот, решил отказаться от использования самодельного инструмента Bloggero. Главная причина: не нужно превращать сайт (блог) в веб-приложение, в EWW (встроенный в GNU Emacs браузер) такой блог не почитаешь. Далее: скомпилированный код Bloggero весит больше мегабайта, это много и это приводит к задержке открытия блога. Затем: Bloggero работает не очень быстро, на смартфоне с Android это особенно заметно. И наконец: Bloggero давно не обновляется, с тех пор как вышел Elm 0.19, и всё сломалось.
Теперь сижу и разбираюсь, как вести блог на Jekyll. Почему Jekyll? Как и когда-то давно, я рассматривал несколько вариантов, ну и, Вы угадали, я выбрал Jekyll, потому что для него у GitHub Pages есть автогенерация после очередного коммита в репозиторий блога.
Пока всё! Если что нарою интересного мне, то всем расскажу. Заглядывайте или лучше читайте RSS.
2 июня 2018 буду выступать в Краснодаре на Krasnodar Frontend: Meetup #3 с темой “Elm как язык разработки веб-интерфейсов”. Ссылка на мероприятие: https://vk.com/frontkrd3.
Итак, с сегодняшнего дня, 11 февраля 2018, я замораживаю свою активность на Habrahabr. Мой профиль там: https://habrahabr.ru/users/easimonenko/ На момент заморозки имею: четыре публикации, 91 комментарий, 387 закладок, карму 7, рейтинг 9,6, подписчиков 8. Сделал вклад в хабы: “Учебный процесс в IT”, “Функциональное программирование”, “Разработка веб-сайтов”, “Node.js”, “Elm”, “JavaScript”. Особенно большим вниманием пользовалась статья “Памятка начинающего преподавателя, или почему не стоит работать преподавателем в вузе”. А статья “Основы разработки на языке Elm (руководство по инструментарию для начинающих)” послужила толчком к формированию русскоязычного сообщества языка Elm.
С момента публикации статьи Инструменты разработчика на языке Elm прошло полтора года. За это время в инструментарии для языка разработки веб-интерфейсов Elm произошли многочисленные изменения: появилась более удобная система сборки с возможностью генерации нового проекта; для редактора Atom набор дополнений в некоторых отношениях теперь лучше, чем для популярного тогда среди разработчиков на Elm редактора LightTable; заработал инспектор состояния приложения. Давайте пройдёмся по этому набору на простом примере.
В статье рассматривается как установить, настроить и запустить графовую СУБД Neo4j в среде Linux.
Это руководство по утилите командной строки oai-pmh, предназначенной для получения информации с серверов с интерфейсом OAI-PMH. Эта утилита выводит информацию в формате JSON, который может быть более удобен при использовании с языком JavaScript. Для примеров используется arXiv.org. Результаты выполнения команд приводятся на момент написания этой статьи.
arXiv.org – некоммерческий научный сайт, основное назначение: открытая публикация научных статей, принадлежит Корнеллскому университету (США), основан 14 августа 1991.
После выпуска версии 0.3.1 движка статических блогов с одностраничным интерфейсом Bloggero решил перевести на него свой блог на Bitbucket, заодно переместив его на GitHub. Попутно были выявлены и исправлены недоработки текущей версии, которые войдут в следующий выпуск движка.
Node.js, как и другие среды разработки, предоставляет базовые средства работы с
опциями командной строки. В нашем случае это массив process.argv
. Но обычно,
кроме простейших случаев типа A + B, обрабатывать опции командной строки
вручную очень неудобно. Для этого есть несколько популярных пакетов. Я написал
небольшую программу, которая построила сводную таблицу по этим пакетам,
выбрал из них три самых популярных и рассмотрел их поближе. (Материал статьи на
7 января 2020 года по прежнему актуален, сводная таблица обновлена и дополнена.)
В статье рассматривается как начать работать с Iskra JS в среде Linux, как настроить доступ к плате по USB, как установить и использовать среду Espruino IDE.
В этой статье рассматривается как начать использовать PlatformIO с Atom для разработки скетчей для Arduino в среде Linux.
Elm это функциональный язык программирования для разработки веб-приложений, работающих в браузере. Elm строгий, статически типизированный. Elm похож на Haskell, однако это лишь поверхностное сходство, ведь Elm изначально заточен для быстрой разработки веб-приложений. Эта статья представляет из себя шпаргалку для начинающих по основам разработки на языке Elm, а именно, здесь рассматривается организация проекта, инструментарий Elm и среда разработки Light Table. Часть шагов, если не актуально или не применимо, можно пропустить.
Закончил чтение замечательной книги по JavaScript Сила JavaScript. 68 способов эффективного использования JS (Дэвид Херман) и предлагаю вашему вниманию отзыв.
Книга будет полезна как начинающим, там и опытным программистам на JavaScript. Под начинающими программистами я понимаю здесь тех, кто уже познакомился с синтаксисом JavaScript и попробовал написать что-то более-менее сложное.
В книге описываются многочисленные подводные камни и особенности JavaScript, без знания которых дальнейшая разработка на этом языке затруднительна и полна проблем. Объём книги невелик, всего около 300 страниц, но материал разнообразен, интересен и полезен.
Успешно завершил курс Learning How to Learn. Курс понравился. Сам курс на английском языке, но под большинством видео есть русские субтитры. Кроме того, в продаже есть перевод книги одного из авторов курса Думай как математик. Как решать любые задачи быстрее и эффективнее – Барбара Оакли. Книгу прочитал: в целом она идентична по содержанию этому курсу.
Без лишних слов маленький пример различия результов одного и того же кода на JavaScript и TypeScript.
const a = [1, 2, 3, 4, 5];
var s = 0;
for (var v in a) {
s += v;
}
console.log(s);
JavaScript выводит (WTF? Неожиданно? Для специалиста JavaScript нет…):
001234
TypeScript даже не компилируется (и это хорошо!):
sample.ts(5,3): error TS2322: Type 'string' is not assignable to type 'number'.
Шпаргалка по ручному созданию проекта JavaScript или TypeScript с использованием Visual Studio Code.
По Prolog книжек достаточно много, есть онлайн-курсы. Автор впервые познакомился с Prolog ещё в девяностые, прочитав советский перевод [Братко]. Эта хорошая книга была переиздана в 2004 году в лучшем виде, чем в первый раз. В советском издании зачем-то перевели на русский идентификаторы в коде на Prolog, да и сам язык там носит название Пролог. [Братко] не единственная переведённая ещё в советское время книга по Prolog, автору известно ещё пять. Из современных книг хотелось бы выделить учебник коллеги по кафедре информационных систем и программирования ИКСИБ КубГТУ [Марков]. В книге рассматривается коммерческий диалект Visual Prolog.
Знакомство с Prolog можно начать с любой из основных книг, только нужно учитывать различия между диалектами.
Начиная или продолжая изучать что-либо, мы интересуемся тем, а что нам бы ещё интересного и полезного об этом почитать? И вот, здесь я отвечаю на этот вопрос и привожу ссылки на наиболее интересные на мой взгляд источники информации на русском языке как о функциональном программировании вообще, так и об отдельных языках функционального программирования в частности, таких как Haskell, Scala, Elm.
В этой заметке рассказывается как добавить синтаксическую подсветку в Hakyll для файлов в формате Markdown .
Эта заметка дополняет предыдущую, в которой я описываю работу с сервисами Git в качестве хостингов для статических сайтов, и содержит два замечания для тех, кто использует Hakyll.
Предыдущую заметку я закончил словами о том, что статические сайты можно публиковать на Git-сервисах.
Если Вы знакомы с системами управления версиями, то преимущества данного подхода Вам должны быть понятны. Если же Вы не знакомы, то вот они:
Отдельное преимущество Git-сервисов заключается также в том, что Ваш сайт обновляется автоматически с обновлением соответствующего хранилища файлов сайта (репозитория).
В заметке описывается процесс подготовки к использованию Hakyll для создания статических сайтов.
В этой заметке даётся краткий обзор статических генераторов, с которыми автор познакомился за последние несколько дней, окончательно решив перейти с доморощенной системы генерации на промышленную (см. об этом мой пост Два точка ноль).
Я потратил несколько дней на ознакомление с различными системами управления статическими сайтами. Здесь же хочу выделить особо:
Несколько слов о каждой.