• Файловая система, дешево и быстро

      Разработчикам часто приходится иметь дело с файлами, представляющими из себя древовидную структуру: XML, JSON, YAML, всякого рода языки разметки вроде Markdown или Org-mode. Облегчая в общем и целом нашу жизнь, такие файлы имеют склонность к бесконтрольному росту, в какой-то момент из решения превращаясь в проблему.


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


      Но существует и альтернатива, о которой — ниже.

      Читать дальше →
    • Эволюционный дизайн игр

        image

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

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

        Книга, что попалась не так давно на глаза, объединяет в себе оба мира: в ней, с одной стороны, описаны интересные в совокупности алгоритмические приемы; результат же работы — настольная игра «Yavalath» на приложенной картинке — был издан и пользовался достаточно широкой для абстрактной игры популярностью.

        Итак, если вам интересны теория игрового дизайна, машинное обучение, генетические алгоритмы, универсальные игроки и изящные идеи, то обо всем этом можно прочитать в моем кратком научно-популярном пересказе сути книги под катом.
        Читать дальше →
      • Пайпы, the pythonic way

          Одни питонисты любят код читаемый, другие предпочитают лаконичный. К сожалению, баланс между первым и вторым — решения по-настоящему изящные — редко случается встретить на практике. Чаще стречаются строки вроде
          my_function(sum(filter(lambda x: x % 3 == 1, [x for x in range(100)])))
          
          Или четверостишья а ля
          xs = [x for x in range(100)]
          xs_filtered = filter(lambda x: x % 3 == 1, xs)
          xs_sum = sum(xs_filtered)
          result = my_function(xs_sum)
          
          Идеалистам же хотелось бы писать как-то так
          result = [x for x in range(100)] \
              | where(lambda x: x % 3 == 1)) \
              | sum \
              | my_function
          

          Не в Питоне?
          Зря так думаете...
        • Асинхронный http-клиент, или почему многопоточность — лишнее

            Какое-то время назад Хабре проскакивала заметка про клиент-парсер сайтиков на Питоне. Автор на этом примере разбирал проблемы многопоточных сетевых приложений.

            Но мне показалось, что ту же задачу (вернее, ее главную часть — параллельные соединения c http-cервером) вполне можно эффективно решить и без потоков.

            И решил...
          • DjangoCMS2.0 — быстрее, больше, эффективней

              Django — очаровательный в своей простоте и гибкости фреймворк. Однако, для быстрого построения большого числа несложных сайтов требуется поставить разработку сайтов на поток. Разрабатывать систему управления сайтом каждый раз утомляет и грозит потерями времени. Именно поэтому программисты часто обращаются к готовым CMS.

              Почти все знают о гигантах конвеерного веб-программирования, основанных на php — Drupal, Joomla!, Wordpress и прочих, но не все знают, что в мире Python существуют не менее мощные и даже гораздо более зрелые инструменты.

              Ниже - чуть-чуть о них и много - об одном из новичков индустрии
            • Абстрактные классы и интерфейсы в Питоне

                Абстрактные базовые классы и интерфейсы — близкие по назначению и смыслу сущности. Как первые, так и вторые представляют собой своеобразный способ документирования кода и помогают ограничить (decouple) взаимодействие отдельных абстракций в программе (классов).

                Питон — очень гибкий язык. Одна из граней этой гибкости — возможности, предоставляемые метапрограммированием. И хотя в ядре языка абстрактные классы и интерфейсы не представлены, первые были реализованы в стандартном модуле abc, вторые — в проекте Zope (модуль zope.interfaces).

                Нет смысла одновременно использовать и то и другое, и поэтому каждый программист должен определить для себя, какой инструмент использовать при проектировании приложений.

                Читать дальше →
                • +33
                • 44,4k
                • 9
              • Async Hearts

                  Некоторое время назад случилось несколько событий, изменивших привычный вид ландшафта веб-разработки на Питоне: Facebook приобрела сервис Friendfeed и сразу же открыла исходный код технологии проекта — http-сервер и микрофреймворк Tornado. Одновременно разработчик Friendfeed опубликовал в своем блоге заметку, в которой привел причины, по которым было решено с нуля разрабатывать собственный асинхронный веб-сервер.

                  Статья — экскурсия в самое сердце этого и конкурирующего (Twisted.web) проектов, их циклы асинхронной обработки поступающих данных.

                  Читать дальше →
                • Использование метаклассов в Python

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

                    Читать дальше →
                  • Git Wizardry

                      1 Введение


                      В своей прошлой заметке я постарался осветить в общих чертах стиль работы с
                      распределенной системой контроля версий git и указать на отличия по сравнению с
                      классическими централизованными СКВ. Целью было прежде всего обобщение опыта
                      работы с системой без упоминания тонкостей синтаксиса отдельных команд.

                      Данный же топик задумывался как непосредственное введение в работу с git, нечто
                      среднее между tutorial и обобщенной справкой, до которого все же рекомендуется
                      прочитать упомянутое выше введение. Сознательно избегаются технические
                      подробности работы git, употребляются только общие для СКВ термины и
                      ограничивается список упоминаемых команд.

                      Читать дальше →
                    • Git Workflow

                        1 Вступление



                        В топике освещаются не столько подробности работы с git, сколько его отличия от схемы разработки других систем контроля версий, и общий подход (выработанный по большей части личным опытом и Git Community Book) к работе.


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