• Типографика и современный CSS

    • Tutorial
    Типографика и CSS

    Пока некоторые CSS свойства, отвечающие за разного рода красивости (вроде filter, mix-blend-mode или transition) привлекают внимание всех и каждого, другие совсем мало освещаются в интернете. Взять хотя бы свойства, отвечающие за типографику. Они весьма полезны и эффектны, но широко не известны. Давайте же исправим несправедливость и осветим то, что обычно остается в тени.
    Читать дальше →
  • Трансляция с геймдев-конференции 4C в Санкт-Петербурге. День первый

      Привет, Хабр! Мы ведем текстовую трансляцию с первого дня геймдев-конференции 4С в Петербурге. Сегодня поговорим о тонкостях разработки игр, работе с аудиторией, монетизации VR и многом другом. Присоединяйтесь!

      День второй - текстовая трансляция.

      Читать дальше →
    • Как мы ловим Deadlock`и на PostgreSQL и чиним их

        Предисловие


        Ситуация: есть высоконагруженная мета-игра для наших танков под названием Глобальная карта. Эдакая пошаговая настолка для команд, где бои происходят в реальном танковом клиенте. В пиковые часы на карте несколько тысяч руководителей кланов производят игровые действия: атакуют друг друга, перемещают дивизии, покупают, продают, грабят корованы. Помимо этого, существует десяток сервисов, которые также могут вносить изменения в игровую ситуацию: подкидывают деньжат, штрафуют, добавляют игроков в клан и прочее.

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


        Читать дальше →
      • 4C: Kyiv — конференция разработчиков видеоигр

          23–24 сентября 2016 года состоится международная конференция разработчиков видеоигр 4C:Kyiv. Не важно, сколько проектов в портфолио вашей компании. Если вы живете играми — вам непременно следует посетить 4С: Kyiv.

          4С: Kyiv — это два дня докладов и мастер-классов от 50+ экспертов игровой индустрии, выпустивших в релиз не одну легендарную игру. Участники услышат выступления Криса Тейлора (создателя Totall Anihilation), Чета Фалисзека (сценариста Half-Life и Portal), Рейнира Хардарсона (креативного директора EVE Online), Эрика Симонича (креативного директора Alan Wake и Evolve), а также других авторитетных разработчиков.

          Подробности под катом.


          Читать дальше →
        • PostgreSQL. Как правильно хранить котов или история одной миграции

            История взята из реального проекта. Но поскольку реальный проект слишком скучный (и под NDA), в этой статье используется упрощенный пример.

            Жил-был один проект. И была у него база данных. И была в базе таблица для хранения, ну, скажем, котов. Вот такая:
            CREATE TABLE cats (
                id serial,
                cname varchar(20),
                ctype varchar(20),
                primary key(id)
            );
            

            Все довольно просто: у каждого кота есть id, имя и некий тип.

            Конечно, у нас были бизнес-требования к котам и их типам. Например, мы точно знали, что у нас есть типы big furry, neko и sudden danger. Предполагали, что могут появиться типы long tail и sleeper-eater. Но мы ожидали, что требования будут меняться. И пока не известно, какие в итоге понадобятся типы. Поэтому использовали тип данных varchar(20).
            Читать дальше →
          • Лучшие выступления WGDF

              Всем привет! Этой весной в Санкт-Петербурге состоялась West Game Development Forum — международная конференция, посвящённая разработке игр и всему, что с ней связано. Участники WGDF услышали более 40 докладов о разработке, геймдизайне, маркетинге, дизайне, юзабилити и тестировании в видеоиграх класса ААА. Своим опытом и знаниями поделились эксперты из компаний с мировым именем: Wargaming, Blizzard Entertainment, Rockstar Games, Remedy Entertainment, Unity Technologies, Autodesk и др.



              И теперь мы бы хотели поделиться записями лучших докладов с хабровчанами. Под катом вы найдете выступления:
              • Blending Eastern and Western Development Cultures / Thaine Lyman / WoTs PC Executive Producer, Wargaming
              • Through the Grinder: Refining Diablo III's game systems / Wyatt Cheng / Technical Game Designer, Blizzard Entertainment
              • Five Questions to Ask Everyday: The fun-damentals of strong game design / Alexander Brazie / Game Design Consultant
              • Leadership Traits Your Company Should Have (and you can teach yourself!) / Keith Fuller / Leadership Consultant, Fuller Game Production
              • Мотивация и эмоциональные потребности игроков / Надежда Иванова / IXD Researcher, Wargaming
              • Разработка идей в условиях высокой неопределенности / Никита Денисов / Senior Game Designer, Wargaming


              Приятного просмотра!
              Читать дальше →
            • Open WG Talk #3: Новые процессы и продуктовое управление

                В минском офисе Wargaming регулярно проходят встречи, на которых сотрудники компании делятся опытом и обсуждают насущные вопросы, волнующие разработчиков, менеджеров, дизайнеров, продюсеров, художников – словом, всех тех, кто работает в IT и геймдеве. Эти митапы мы называем WG Talk и проводим в закрытом формате, только для сотрудников компании.
                Но есть темы и знания, которыми нельзя не поделиться с широкой аудиторией. Поэтому мы организуем Open WG Talk.

                Сегодня мы хотим поделиться с вами видеозаписями выступлений последнего Open WG Talk, темой которого стало продуктовое управление и внедрение новых процессов. Под катом вы найдете доклады Сергея Бережного, директора разработки Wargaming, и Ярополка Раша, руководителя медиасервисов Wargaming.



                Приятного просмотра!
                Читать дальше →
              • Python: строим распределенную систему c PySyncObj

                  Представьте, что у вас есть класс:
                  class MyCounter(object):
                      def __init__(self):
                          self.__counter = 0
                      def incCounter(self):
                          self.__counter += 1
                      def getCounter(self):
                          return self.__counter
                  

                  И вы хотите сделать его распределённым. Просто наследуете его от SyncObj (передав ему список серверов, с которыми нужно синхронизироваться) и отмечаете декоратором @replicated все методы, которые изменяют внутреннее состояние класса:
                  class MyCounter(SyncObj):
                      def __init__(self):
                          super(MyCounter, self).__init__('serverA:4321', ['serverB:4321', 'serverC:4321'])
                          self.__counter = 0
                      @replicated
                      def incCounter(self):
                          self.__counter += 1
                      def getCounter(self):
                          return self.__counter
                  

                  PySyncObj автоматически обеспечит репликацию вашего класса между серверами, отказоустойчивость (всё будет работать до тех пор, пока живо больше половины серверов), а также (при необходимости) асинхронный дамп содержимого на диск.
                  На базе PySyncObj можно строить различные распределенные системы, например распределенный мьютекс, децентрализованные базы данных, биллинговые системы и другие подобные штуки. Все те, где на первом месте стоит надёжность и отказоустойчивость.
                  Читать дальше →
                • Грязные трюки мобильной разработки от J2ME до Android

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


                    Читать дальше →
                  Самое читаемое