пятница, 14 августа 2015 г.

Морзянка на Raspberry PI

Продолжаем эксперименты. В прошлый раз мы просто зажигали и гасили светодиод. Но этого нам мало. Я же вообще себя представил где-то на корабле, вокруг волны бются, качает, чемоданы падают и всё такое. В общем, надо бы как-то пообщаться. Для этого издавна уже используется азбука морзе.

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

Итак, вернёмся к нашим точкам и тире. По записям из той же вики. Длина точки это наша единица длины. Тире - это три точки. Между точками и тире пауза в одну точку и между словами пауза в 7 точек. Собственно, это и получилось:

(ql:quickload "gpio-sysfs")
(ql:quickload "morse")

(defparameter *pin* 27)
(defparameter *morse-time* 0.1)

(defun initialize ()
  (gpio:initialize-pin *pin* :out 0)
)


(defun wait (times)
  (sleep (* times *morse-time*))
)


(defun morse-dot ()
  (gpio:write-pin *pin* 1)
  (wait 1)
  (gpio:write-pin *pin* 0)
  (wait 1)
)


(defun morse-tire ()
  (gpio:write-pin *pin* 1)
  (wait 3)
  (gpio:write-pin *pin* 0)
  (wait 1)
)


(defun morse-word-letter (word-letter)
  (if word-letter
    (progn
      (map 'list
        (lambda (morse-letter)
          (ecase morse-letter
            (#\. (morse-dot))
            (#\- (morse-tire))
)
)
        word-letter)
      (wait 3))
    (wait 7)))

(defun morse-say (string)
  (let ((morse-struct (morse:to-morse string)))
    (mapcar
      (lambda (word-letter)
        (morse-word-letter word-letter)
)

      morse-struct
)

    nil
))

(initialize)
(morse-say "sos")
Теперь можно посылать различные сигналы вокруг. Например, писать, "Not enough minerals! Mine more minerals!". Выводы светодиода соединены к 27 пину GPIO. sbcl собран из исходников. Всё это работает на Raspberry PI B вроде бы, что-то древнее, но не самое простое.


вторник, 11 августа 2015 г.

ICFPC-2015: Отчёт об участии (Ктулху фтагн!)

Начало

Собственно, началось всё довольно обыденно. За пару месяцев до начала списались, договорились участвовать бравые лисперы swizard, sectoid  и grep-z. Заранее спланировали время, чтобы освободить ЭТИ дни на трёхсуточный марафон. Кровь бурлила, были настроены выигрывать. :)

Организаторы сразу начали нагнетать. Сначала в анонсе, затем в своём твиттере. Это и про восстание машин, и про квантовые комьпютеры. Да и вообще кучу всего. Уже предвкушал, предвкушал, потом появился странный твит: "R1 O0 P1 Q1 P1 O0 N0 N0 P1 R1 Q1 P1 O0 P1 Q1 R1 P1 N0 N0 Q1 S1 N1 T1 S1 R1 P1 R1 Q1 P1 O0 O0 P1 Q1 R1 P1 N0 N0". Я его не понял совсем, думал, что-то с кубитами. Затем про пчёл, затем про то, что то, что они видел - это вообще страх и ужас какой, да и лого было многообщеающим.

Но тут, если честно, они несколько разочаровали. Заданием оказался банальный тетрис, правада, в шестигранных сотах. Хекстрис, то бишь. Какой-то такой я играл несколько лет назад. Теперь нужно было научить и компьютер играть. Ну ещё и задача усложнялась тем, что из ходов нужно было подбирать некоторые слова, за которые начисляются дополнительные бонусы.


Картинка взята у какого-то участника. В общем, как и говорил, правила очень простые - двигать фигуры, расставлять, сжигать ряды, кодить всё это в дополнительные фразы. Вроде, если подумать, скукота. :) И тем обиднее, как плохо выступили.

Соревнования

К сожалению, на старте отвалился grep-z, извинившись за внезапно возникшие проблемы, зато добавился товарищ jtootf. Задания прочитали, всё просто, сразу напряглись, предполагая, что же будет в аддонах. Дополнительно ещё фразы были неизвестны, их предлагалось найти самим в произведениях Лавкрафта, да и в предоставленных медиа. Они, кстати, были на картах.

Ну, нацелились на лайтниг и молниеносно ворвались! Я уже не помню, кто что кодил, но swizard взял на себя основную работу, а мы проверяли, подсказывали, что-то пробовали дополнительное. Sectoid и jtootf, будучи более вовлечёнными в тему Ктулху, искали слова. Я с поиском фраз вообще не участвовал, ибо на этих соревнованиях про Ктулху услышал раз во второй, ну или, максимум, в третий.

Началось всё с ГСЧ. Видать, чтобы строго формализовать всю игру, орги определили алгоритм ГСЧ. По описаниям, он совпадал с системным, а вот по значениям не совпадал. Пришлось быстро налабать свой. Дополнительных проблем доставили соты, но их решили, перейдя на кубические координаты.

В общем, первый день кодили, кодили, кодили, кодили, кодили. Прям как девелоперс. При этом сделали карту, бинарь, переход из одной позиции в другую. Правда, алгоритм расположения был кривоват при поиске конечного места. В общем, к лайтнингу что-то уже было. Туповатое, правда. К лайтнингу сабмитим карты и! Огорчаемся. :( Где-то на картах даёт скор, где-то даёт лишь 0 очков. 0! Боль! Смотрим визуализацию и как печально, но некоторые элементы располагаются в начальной позиции не так, как описано в правилах. Бывают в жизни огорчения. Это находим минут за 5 до конца лайтнинг раунда. В общем, прошли мимо лайтнинга.

Далее добавляем к нашему алгоритму подбор места на основе оценки итогового состояния доски. Всё это работает, правда, медленно. Подбираем коэффициенты, пилим для этого генетический алгоритм, но что-то на него забиваем. Но вспоминаем почти под конец. :) Там же лихорадочно лепим подбор на основе выхода из начального положения рандомно куда-нибудь. Правда, ничего уже подобрать особо не успеваем, ищем фразы, добавляем ещё эвристику, но сабмитим наш старый вариант, потому что получая прирост на одних картах, при этом получаем заметный регресс на других, попутно перетирая пару карт с нулевым результатом. Итог - 57 место. Предварительно. Окончательные результаты в сентябре.

Зов Ктулху

На третий день соревнований я испытал проблемы с инетом. То же было и у swizard'а. Мы переключились на резервный канал. Затем за полчаса до конца соревнований я испытал проблемы и с резервным каналом, но переключился на ещё один резервный. Наверное, это Ктулху звал нас. Но мы не пошли. :)

Дополнительно


Итого

Несмотря на простое задание, было очень весело. Ребята, с которыми я был в команде - вы супер, реально. Спасибо вам за участие. В общем, хорошо провёл эти три сутки, хотя в какие-то периоды можно было вставлять спички в глаза. :) Ну, надо готовиться и брать вершину в следующем году.

Отчёт swizard'а можно прочитать здесь.

пятница, 7 августа 2015 г.

ICFPC-2015, Таки идиш.

Проснулся с утра и новый твит. А там идиш. И позже орги дописали, что да, на идише текст. Имеет ли смысл какой текст или нет - пока не знаю, но явно не просто так он появился. :) Меж тем, перевод, сделанный в гугл транслейт, гласит: "В его доме на R'lyeh смерть kthulhu пшеницы сновидения." Во как, блин!

четверг, 6 августа 2015 г.

ICFPC-2015, Всё фигня, кроме пчёл

Опять потвитали орги. Говорят, обычный вопрос про то, где тыква? Да и ещё привели ссылку на пчёл, сопроводив комментарием: "Чёртов агро-комплекс! Если бы только они знали..."

ICFPC-2015, Аааа! Квантовые вычисления.

Накидали орги твитов. Одна из ссылок ведёт на статейку о компьютере гугла, который построит квантовый компьютер. Думаем, думаем...

суббота, 25 июля 2015 г.

Моргаем светодиодами на Raspberry PI

В общем, расчехлил я свою малинку и решил что-нибудь поделать. Первым делом, собрал там ccl, потом sbcl. Раньше sbcl собрать было нельзя. Теперь можно. Даже, вроде, работает.
В общем, брат собрался делать умный курятник, нашёптываю ему, что нужен lisp, ибо тру и всё такое. Он что-то пока посматривает на питон. :-\ 
Ну да ладно, теперь по порядку. Дабы чем-то управлять, нужно уметь подавать на выходы. А выходы можно смастерить на GPIO (General Purpose Input Output). А управлять этим GPIO будем... Нет, не из С, а именно из лиспа, в данном случае sbcl.
Собственно, заморачиваться не стал всяким FFI, ибо у нас есть sysfs интерфейс для GPIO. Собственно, по этой документашке накидана на скорую руку простейшая библиотека. Не шедевр, конечно, но функции выполняет. Потом причешу, думаю. Итак, пользовательский код:
(ql:quickload "cl-gpio-sysfs")
(gpio-sysfs:initialize-pin 27 :out 0)

;;; Посылаем 1 на выход порта, светодиод горит
(gpio-sysfs:write-pin 27 1)

;;; Посылаем 0 на выход порта, светодиод гаснет
(gpio-sysfs:write-pin 27 0)

(gpio-sysfs:shutdown-pin  27)
(quit)  


Перед запуском нашу библиотеку нужно забрать в quicklisp/local-projects. Ну а перед этим установить quicklisp.
Собственно, как этот светодиод горит, можно даже посмотреть:



пятница, 29 мая 2015 г.

ICFPC-2015, анализ анонса

Сразу скажу, что допёр до всего не сам, но почитал разные ресурсы, в том числе и reddit ну и подёргал цитаты из интернета. Итак, начнём с названия документа, которое выглядит как "OGA-BAA-15-18". Сначала показалось это совсем бессмысленным, но потом вчитался в сам документ. 
OGA - Other Government Agencey, Другое Правительственное Агентство, почти как обычный порошок. Английская википедия говорит, что это некий эвфемизм для CIA (ЦРУ). 
BAA - прямо в шапке и написано "Broad Agency Announcement", некий способ для правительственных организаций США проведения контрактов по исследваниям и разработкам.
15-18 - предположительно номер документа, формируемый из года (15) и, как заметили в комментариях, номер по счёту проводимого состязания.
AS2H2 - что я только ни гуглил, каких только химический соединений не нашёл. А надо было читать документ. Там прямо и написано "Advanced Simulacrum Simulation High-­assurance Haven". Не знаю как правильно перевести, я перевёл как "Расширенная Симуляция Высокогарантированного Пристанища". Ну в общем, какая-то симуляция окружения, наверняка, будет. И к этому какая-то фабула. Предпосылки есть.
Aleister - так называется программа исследований. Гугл выдаёт в основном только этого известного оккультиста. Настолько пафосный товарищ, что пока не понял чем связаны сами исследования с его именем.
Miscatonik University - цитирую с википедии: "вымышленный университет, расположенный в вымышленном городе Аркхем, штат Массачусетс. Был придуман американским писателем Говардом Лавкрафтом и в дальнейшем появлялся не только в его произведениях, но и в произведениях его последователей. Наименование университета образовано от названия реки Мискатоник, протекающей через город. Считается, что Лавкрафт давал таким образом намёк на Массачусетский технологический институт." Имеет отношение к мифам Ктулху.
GCHQ - "Центр правительственной связи (англ. Government Communications Headquarters, GCHQ) — спецслужба Великобритании, ответственная за ведение радиоэлектронной разведки и обеспечение защиты информации органов правительства и армии."
2840 Hazelnut Dr. Woodburn, OR 97071 - это адрес ещё одной OGA. Насколько именно будет гольф или же просто интересно совпадение аббревиатур - не знаю.
Само лого - его можно рассмотреть при увеличении, у этой картинки высокое разрешение. Это некий ящик, в который входит лента, на которой изображение разные символы. Если правильно посчитал, то 8 разных символов. Предположительно, машина Тьюринга. На самой машине ещё есть стрелка и вокруг неё 5 различных изображений: возможно Ктулху (осьминог), иконка (похожая на иконку копирования), знак биологической опасности, астероид, знак радиации. Ну и ещё вырез в самой машине для подкидывания бланка или выпуска распечатки. Возможно, ввод/вывод.
Что ещё - само описание говорит о криптографии, алгоритмах, безопасности. Да ещё и отсылка на среду симуляции позволяет сказать, что задание должно быть, как минимум, интересным. :)

МТС, на шаг впереди

В общем, грустная и печальная история случилась при попытке пойти и заплатить деньги МТС за их услуги. В салоне послали, по телефону послали. Звонил второй раз по телефону, говорят, можете на сайте ещё оставить, поишёл на сайт, нашёл ссылку "Форма обратной связи". В общем, попечалился я. Потом подумал, наверное, они уже решили мою проблему и смотрят в будущее. Действительно, на шаг впереди. :) В общем, присматриваю пока себе другого оператора. Не думаю, что там будет сильно лучше, но хотя бы можно будет посмотреть и сравнить. А желание смотреть и сравнивать уже появилось.


среда, 20 мая 2015 г.

ICFPC-2015, дата проведения

Стала известна дата проведения ICFPC-2015. Как обычно, проходит с пятницы по понедельник. В этом году с 7 по 10 августа. В общем, я уже начинаю морально готовиться. Мои товарищи по команде в прошлом ICFPC-2014 уже высказли своё согласие и тоже начали двигать дела, чтобы освободить эти дни. Выступаем, как обычно, на Common Lisp.