Как стать автором
Обновить
73.2
Карма
0.1
Рейтинг
Елецкий Алексей @Tiendil

программист серверов и логики

  • Подписчики 54
  • Подписки 14

Генерация текста на русском по шаблонам

Разработка веб-сайтов *Open source *Python *Разработка игр *Natural Language Processing *
Когда я только начинал работать над своей текстовой игрой, решил, что одной из её главных фич должны стать красивые художественные описания действий героев. Отчасти хотел «сэкономить», поскольку в графику не умел. Экономии не получилось, зато получилась Python библиотека (github, pypi) для генерации текстов с учётом зависимости слов и их грамматических особенностей.

Например, из шаблона:
[Hero] [проходил|hero] мимо неприметного двора и вдруг [заметил|hero] играющих детей. Они бегали с деревянными мечами, посохами и масками чудовищ. Внезапно один из играющих остановился, выставил [игрушечный|hero.weapon|вн] [hero.weapon|вн], выкрикнул: «[Я|hero] [великий|hero] [Hero]! Получай!» — и бросился на «бестий». Они упали наземь, задрыгали руками-ногами, а после встали, сняли маски и засмеялись. [Хмыкнул|hero] и [сам|hero] [Hero], но не [стал|hero] выходить к малышне.
Мы можем получить такой текст (жирным выделены изменяющиеся слова):
Халлр проходил мимо неприметного двора и вдруг заметил играющих детей. Они бегали с деревянными мечами, посохами и масками чудовищ. Внезапно один из играющих остановился, выставил игрушечную золочёную шпагу, выкрикнул: «Я великий Халлр! Получай!» — и бросился на «бестий». Они упали наземь, задрыгали руками-ногами, а после встали, сняли маски и засмеялись. Хмыкнул и сам Халлр, но не стал выходить к малышне.
Или такой:
Фиевара проходила мимо неприметного двора и вдруг заметила играющих детей. Они бегали с деревянными мечами, посохами и масками чудовищ. Внезапно один из играющих остановился, выставил игрушечный катар, выкрикнул: «Я великая Фиевара! Получай!» — и бросился на «бестий». Они упали наземь, задрыгали руками-ногами, а после встали, сняли маски и засмеялись. Хмыкнула и сама Фиевара, но не стала выходить к малышне.
Читать дальше →
Всего голосов 14: ↑13 и ↓1 +12
Просмотры 13K
Комментарии 8

Автоматизация импортов в Python

Ненормальное программирование *Open source *Python *Программирование *Совершенный код *
До После
import math
import os.path

import requests

# 100500 other imports

print(math.pi)
print(os.path.join('my', 'path'))
print(requests.get)
import smart_imports

smart_imports.all()

print(math.pi)
print(os_path.join('my', 'path'))
print(requests.get)
Так получилось, что аж с 2012 года я разрабатываю open source браузерку, являясь единственным программистом. На Python само собой. Браузерка — штука не самая простая, сейчас в основной части проекта больше 1000 модулей и более 120 000 строк кода на Python. В сумме же с проектами-спутниками будет раза в полтора больше.

В какой-то момент мне надоело возиться с этажами импортов в начале каждого файла и я решил разобраться с этой проблемой раз и навсегда. Так родилась библиотека smart_imports (github, pypi).

Идея достаточно проста. Любой сложный проект со временем формирует собственное соглашение об именовании всего. Если это соглашение превратить в более формальные правила, то любую сущность можно будет импортировать автоматически по имени ассоциированной с ней переменной.

Например, не надо будет писать import math чтобы обратиться к math.pi — мы и так можем понять, что в данном случае math — модуль стандартной библиотеки.

Smart imports поддерживают Python >= 3.5 Библиотека полностью покрыта тестами, coverage > 95%. Сам пользуюсь уже год.

За подробностями приглашаю под кат.
Читать дальше →
Всего голосов 45: ↑36 и ↓9 +27
Просмотры 16K
Комментарии 31

Изменение восприятия сложности

Программирование *Анализ и проектирование систем *Совершенный код *
Хочу поделиться очень субъективными мыслями об изменении отношения к сложности за последние лет 50. Возможно, мои наблюдения касаются всей инженерии, но я поостерегусь и буду писать только про разработку ПО.

В последние годы мне стало казаться, что я упускаю что-то в методах разработки ПО. Весь мир радостно и с песней ускоряется, создаёт софт всё быстрее и быстрее, а я торможу. Чтобы не отставать, приходится преодолевать внутренний барьер неясной природы, действовать за границей которого выгодно но неприятно (мне). Не понятно почему выгодно. И не понятно почему неприятно.

Сегодня понял. В былые времена со сложностью боролись, теперь её игнорируют принимают. Переход между этими воззрениями был долгим и плавным, но уже можно видеть разительные отличия.

Я же учился в основном по материалам, созданным в прошлом веке, «древним манускриптам», да ещё и научную фантастику читал классическую, поэтому невольно стал приверженцем «старой школы». В чем же разница?
Читать дальше →
Всего голосов 48: ↑35 и ↓13 +22
Просмотры 15K
Комментарии 63

Опыт портирования проекта на Python 3

Python *
Хочу поделиться опытом портирования проекта с Python 2.7 на Python 3.5. Необычными засадами и прочими интересными нюансами.

Немного о проекте:

  • Браузерка: сайт + игровая логика (иерархические конечные автоматы + куча правил);
  • Возраст: 4 года (начат в 2012);
  • 64k loc логики + 57k loc тестов;
  • 2400 коммитов.

Читать дальше →
Всего голосов 43: ↑40 и ↓3 +37
Просмотры 15K
Комментарии 32

Время, деньги и фан в ММО

Разработка игр *

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

Суть в том, что любую развлекательную игру можно представить как машину, преобразовывающую время игрока в фан. Фан — отличное общее понятие и как-то уточнять его не будем. Кто-то получает фан от исследований игрового мира, кто-то от нагибания ближних своих — для наших рассуждений это не важно.

В итоге, геймдизайн строится вокруг управления коэффициентом преобразования времени в фан. Если коэффициент слишком низкий — игрок начинает скучать и бросает играть. Если слишком высокий — игроки пресыщаются и забрасывают игру.

Эта статья — пробный подход к теме. Развитие идей можно найти у меня в блоге:


Читать дальше →
Всего голосов 15: ↑12 и ↓3 +9
Просмотры 16K
Комментарии 32

О системном мышлении

Разработка веб-сайтов *Программирование *Анализ и проектирование систем *Совершенный код *
Это первый пост из серии про системное мышление и системную инженерию, в которой я постараюсь простым языком описать эти крутые штуки и объяснить зачем они нужны.

Системное мышление — это практический подход к восприятию мира, который значительно ускоряет способности анализировать, принимать решения и учиться. Практический потому, что сформирован практикой, а не вырос из абстрактных математических теорий.

Если вам знакома аббревиатура ТРИЗ, то я бы сказал, что методы ТРИЗ — это набор частных случаев применения системного мышления в физическом производстве.

Читать дальше →
Всего голосов 50: ↑27 и ↓23 +4
Просмотры 111K
Комментарии 30

MMORPG без лишних деталей: Open Source

Я пиарюсь


Как говорится: «обещанного три года ждут». Примерно столько лет назад мы начали разработку своей «оригинальной» браузерки. О ней мы уже рассказывали: MMORPG без лишних деталей, как рассказывали и о наших скромных успехах год спустя.

При этом мельком упоминалось, что код игры постепенно открывается. И вот наконец настал тот момент, когда мы открыли его полностью: github.com/Tiendil/the-tale под BSD лицензией. А это значит, что вы вот прямо сейчас можете начать пилить свою собственную браузерку с… ну с чем захотите.

Разработчики игр, будущие владельцы браузерок и просто любопытствующие приглашаются под кат.
Читать дальше →
Всего голосов 30: ↑29 и ↓1 +28
Просмотры 24K
Комментарии 25

Дублирование логики — единственный способ верификации ПО

Тестирование IT-систем *Совершенный код *TDD *
Привет.

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

В этот раз, опираясь на изложенные идеи, я попробую сформулировать общий подход к оценке уровня верифицированности ПО.
Читать дальше →
Всего голосов 13: ↑12 и ↓1 +11
Просмотры 8.2K
Комментарии 6

Зачем нужен план

Управление проектами *GTD *
Сначала я хотел назвать этот текст «Зачем нужен бизнес-план», но к чему себя ограничивать? План — он и в Африке план, не важно для чего. Тот, что для бизнеса, называется бизнес-планом. Тот, что для эвакуации, называется, как ни странно, планом эвакуации. И так далее.

Но идея текста таки пришла из области, где актуальны бизнес-планы. Часто стал встречаться с высказываниями о том, что «бизнес-план, конечно, нужен, но вот конкретно в нашем случае он пользу не принесёт потому, что»:

  1. у нас слишком большая неопределённость, будет гадание на кофейной гуще;
  2. и так всё предельно ясно, план — лишняя трата сил.

Сам я тоже страдал этими тараканами, но так получилось, что периодически разного рода планы составлять всё-таки приходилось. И хочу вам сказать — планы делать полезно и нужно.

Но сначала…
Читать дальше →
Всего голосов 14: ↑12 и ↓2 +10
Просмотры 14K
Комментарии 3

MMORPG без лишних деталей: год спустя

Я пиарюсь
Здравствуй, сообщество.

Прошёл год, с моего рассказал о нашей независимой браузерке: MMORPG без лишних деталей. За этот год произошло много разных событий, которые тебе, сообщество, не интересны — мало ли кто что в своей игрушке делает. Поэтому рассказывать о них я не буду.

Расскажу лучше о трёх вещах, которые тебя точно заинтересуют: о нашей статистике, оригинальном генераторе текста и общедоступном API.
Читать дальше →
Всего голосов 28: ↑23 и ↓5 +18
Просмотры 20K
Комментарии 1

Тесты, которые тестируют тесты

Тестирование IT-систем *Совершенный код *TDD *
Из песочницы
Или почему в них нет необходимости.

Часто, когда рассказываешь новичкам про автоматическое тестирование, всплывает один и тот же вопрос: «А кто будет проверять сами тесты? Придётся писать тесты для тестов, потом тесты для тестов для тестов…» Все любят рекурсию и ещё больше любят уесть ей собеседника.

Странно, ни разу не попадался вопрос: «Кто тестирует тестировщиков?» — по сути, та же проблема вид сбоку.

Но действительно, почему нет необходимости тестировать тесты? (и тестировщиков)
Читать дальше →
Всего голосов 65: ↑55 и ↓10 +45
Просмотры 24K
Комментарии 170

MMORPG без лишних деталей

Я пиарюсь


Здравствуйте, меня зовут Алексей и я независимый разработчик игр. Два года назад я уволился из Wargaming чтобы немного поэкспериментировать и сделать MMO игрушку, в которую мне было бы интересно играть. Со временем ко мне присоединилась пара замечательных людей — Александр и Елена Дедковы. Сейчас я кратко расскажу что получилось из этой затеи.
Читать дальше →
Всего голосов 74: ↑66 и ↓8 +58
Просмотры 29K
Комментарии 34

Игровое сообщество с точки зрения независимого разработчика игр

Разработка игр *
Привет, я уже второй год с переменным успехом пилю свою браузерку и хочу поделиться опытом формирования и работы с игровым сообществом, когда на это нет ни ресурсов ни времени. А так же рассказать про пользу, которую оно может принести.

Текст в первую очередь будет полезен как вводная для таких же одиночек как я и небольших команд, начинающих свой проект и не имеющих возможности нанять отдельного специалиста.
Читать дальше →
Всего голосов 38: ↑37 и ↓1 +36
Просмотры 23K
Комментарии 9

Ещё одна реализация Enums для Python

Python *
В прошлом году сообщество Python наконец-то договорилось о реализации перечислений. Было разработано соответствующее предложение PEP 435, его реализация уже есть в python 3.4.

Наблюдая за горячими спорами, я решил в качестве эксперимента сделать свой велосипед, добавив в него несколько фич, появление которых в официальной реализации было маловероятно.

На текущий момент эксперименты закончены, библиотека хорошо показала себя в моих проектах, поэтому я решил поделиться ей с сообществом.
Читать дальше →
Всего голосов 24: ↑18 и ↓6 +12
Просмотры 19K
Комментарии 17

Автоматический генератор квестов

Разработка игр *
Из песочницы
Привет, Хабр!

Хочу рассказать о генераторе квестов, который я делаю для своей браузерной ZPG.



Несмотря на то, что вопрос автоматической генерации заданий в RPG достаточно древний, общедоступных работающих версий таких генераторов почти нет (скорее совсем нет), если не считать совсем примитивных вариантов. Работ по этой теме тоже не много, хотя, если активно гуглить, кое-что можно откопать. Поэтому надеюсь, что этот текст (и сам генератор, ссылка на репозиторий есть в конце статьи) будет полезен.
Читать дальше →
Всего голосов 48: ↑47 и ↓1 +46
Просмотры 38K
Комментарии 5

Информация

В рейтинге
2,425-й
Откуда
Минск, Минская обл., Беларусь
Дата рождения
Зарегистрирован
Активность