Elixir Objects

Erlang (и Elixir) часто в шутку называют самым труъ-ООП языком программирования. При этом под объектной ориентацией (ОО) понимают определение, которое дал Алан Кей, автор языка программирования Smalltalk и один из отцов-основателей ООП. Согласно ему, объекты представляют собой изолированные сущности с защищённым (скрытым) состоянием, которые общаются между собой только путём передачи сообщений. Согласитесь, как будто бы описание процессов Erlang/Elixir!

Широкое же распространение другого определения ("Encapsulation, Inheritance, Polymorphism") связано с популярностью С++ и Java, а также языков, на которых они оказали влияние. Если отбросить аспект наследования, в рамках этого определения объекты — это экземпляры классов, которые обладают одновременно внутренним состоянием (переменные экземпляра) и поведением (методы класса/экземпляра). Как пример можно привести следующую интерактивную сессию Ruby:

irb(main):001:0> str = String.new("Some string")
=> "Some string"
irb(main):002:0> str.split
=> ["Some", "string"]

Здесь мы создаём объект, который обладает некоторым состоянием (внутреннее представление строки "Some string"). Кроме того, он знает, как разбивать строку по разделителям (метод String#split).

Можно ли добиться такого же поведения (хотя бы визуально) в Elixir? Ответ — можно!

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

Деплой блога

В данной статье описан деплой статического сайта на Fedora-дроплет с помощью rsync. В данном случае для генерации статики использовался Hugo, но большая часть статьи применима к любому генератору.

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

Переезд на Hugo

После многолетнего перерыва я решил возобновить ведение блога. Cтарый блог я забросил в один прекрасный момент, когда решил написать свой генератор статических сайтов на основе Org mode взамен используемому мной форку генератора org-page. Писать новые статьи планировалось параллельно с запилом своего генератора, но в итоге дальше самой идеи и нескольких коммитов в форк org-page дело так и не пошло.

Недавно возросшее с новой силой желание чего-нибудь написать заставило меня вернуться к теме блога. Трезво оценив свои шансы создать за приемлемое время с нуля генератор статических сайтов, удовлетворяющий мои потребности, я отказался от этой затеи. Так как я большой фанат Emacs и Org mode, я решил разузнать, как поменялись в среде Org mode за это время дела на фронте блогинга.

Проглядев список генераторов для файлов .org, я не нашёл подходящего решения, которое работало бы нативно в Emacs (а оригинальный org-page вообще за это время прекратил и без того не особо активное развитие). К моему удивлению, довольно-таки продвинутый и активно развиваемый сообществом генератор статических сайтов Hugo, написанный на Go, недавно обзавёлся вполне сносной встроенной поддержка формата Org-mode с внедрением библиотеки парсинга и рендеринга Org mode-файлов go-org. Так как список поддерживаемых им фич, из-за которых я и задумал изначально переписать org-page (быстрая публикация, развитая система управления коллекциями, live reloading), меня полностью удовлетворял, я решил остановиться на этом проекте.

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

Пишем Pastebin на Hanami (часть 1)

Не так давно узнал про новый Ruby full-stack веб-фреймворк под названием Hanami — от яп. 花見, или flower viewing (любование цветами). Фреймворк был создан итальянским программистом по имени Luca Guidi совсем недавно (где-то в начале 2014 г.) и разрабатывается им же и постепенно растущим сообществом. Ещё недавно фреймворк назывался «Lotus», однако из-за возможных трений с IBM (которые владеют правами на одноимённую торговум марку), было принято стратегическое решение переименовать фреймворк.

Данная запись — первая часть из (я надеюсь) серии, в которой я собираюсь рассмотреть возможности фреймворка на примере создания игрушечного приложения — сервиса для хранения текста (Pastebin). В первой части мы создадим интерфейс, похожий на интерфейс pastebin'а IX.io, которым можно управлять с консоли с помощью утилиты curl.

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

Слушаем Google Play Music через MPD с помощью Mopidy

Google Play Music — замечательный музыкальный сервис, но у него есть серьёзная проблема, которая заключается в отсутствии дестктопного клиента.

Эту проблему можно решить, если воспользоваться решениями, которые используют неофициальный API, предоставляющий доступ к сервису. Одно из таких решений — плагин gmusic к MPD-серверу Mopidy.

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