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

Для решения проблемы прибегают к сторонним утилитам, которые отображают лог игры в отдельном окне. Попробовав два варианта таких утилит (один включен в PeridexisErrant's Starter Pack), я пришел к выводу, что оба варианта не могут полностью устроить.

Вот то, что мне бы хотелось, но чего нет в каком-либо варианте или в обоих сразу.

  1. До 4 отдельных окон для различных типов записей.

  2. Гибкая настройка цветов и распределения типов записей по окнам.

  3. Временное или постоянное скрытие каких-либо типов записей (желательно без перезапуска программы).

  4. Настройка отображения имен: отображение или скрытие псевдонимов или профессий.

  5. Указание относительного времени появления записей.

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

Для начала, надо было найти подходящий графический фреймворк для того, чтобы программа работала в тех же операционных системах, что и игра. После поиска вариантов, я остановился на Monomer.

Для парсинга логов я выбрал вариант с использованием Parsec. Хотя в Haskell разработке есть возможность использования регулярных выражений, я предпочел более функциональный подход (на самом деле, это почти прямое использование подхода конечных автоматов, только нет явных определений состояний автомата в программе).

Сейчас утилита уже в рабочем состоянии. Домашняя страница проекта на гитхаб.

Дистрибутив с исполняемым файлом для Windows. Дополнительная информация по использованию утилиты в install.txt. Ниже скриншоты экранов утилиты.

Основной экран - четыре окна сообщений
Основной экран - четыре окна сообщений
Настройка цветов
Настройка цветов
Настройка типов записей по окнам
Настройка типов записей по окнам

Комментарии (7)


  1. FeNUMe
    27.04.2022 19:55
    +4

    За старания конечно +, но в статье на хабре хотелось бы видеть больше технических деталей, а не простой анонс свого "велосипеда".


    1. igor720 Автор
      29.04.2022 11:17

      Я планировал, что сначала дам простой анонс. А какой вопрос бы Вам хотелось, что бы я осветил более подробно? Из тех, что были применены: парсинг с Parsec, хаскел гуи с Monomer или линзы?


      1. FeNUMe
        29.04.2022 18:23

        Лично мне было бы интересно почитать про варианты гуя для Хаскеля, почему выбрали конкретно этот, возможно какие-то примеры работы с ним, минусы/плюсы/подводные камни. Про парсинг можно если там есть что-то не тривиальное.


  1. cadovvl
    28.04.2022 10:46
    -1

    Так как основным языком программирования сейчас для меня является Haskell

    Я раза четыре перечитал предложение.


    1. igor720 Автор
      29.04.2022 11:19

      А что здесь Вас так смутило? что Хаскел это основной язык программирования для кого-то?


  1. Crazy22
    28.04.2022 11:05
    -2

    Не совсем понятно зачем это здесь в таком виде: судя по URL это новость, но больше похоже на <я пиарюсь>. Насколько легитимно анонсировать свой проект как новость на Хабре?

    Я понимаю, что до поста не дотягивает, нет интересной информации, процесса, деталей - но и как и новостью я бы назвал это с натяжкой


    1. igor720 Автор
      29.04.2022 11:25

      Я все таки посчитал это новостью, простите.