• Как мы ловим Deadlock`и на PostgreSQL и чиним их

      Предисловие


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

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


      Читать дальше →
    • Если вы решили перейти с PHP на Python, то к чему следует подготовиться

        Думали ли вы когда-нибудь о том, что однажды слишком быстро втянулись в веб-программирование на PHP? И вот уже прошло много лет, у вас хороший опыт, и вы не думаете ни о каких других способах „делать“ веб, кроме как на PHP. Может быть, у вас возникают сомнения в правильности выбора, однако непонятно, как найти способ быстро его проверить. А хочется примеров, хочется знать, как изменятся конкретные аспекты деятельности.

        Сегодня я попробую ответить на вопрос: «А что если вместо PHP писать на Python?».

        Сам я долгое время задавался этим вопросом. Я писал на PHP 11 лет и даже являюсь сертифицированным специалистом. Я научился его «готовить» так, чтобы он работал в точности, как мне надо. И когда я в очередной раз читал на Хабре перевод статьи о том, как всё в PHP плохо, я просто недоумевал. Однако подвернулся случай пересесть на Ruby, а потом и на Python. На последнем я и остановился, и теперь попробую рассказать вам PHP-шникам, как нам питонистам живётся.


        Python с точки зрения PHP-программиста...
      • Стоит ли ставить Gentoo ради ускорения?

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



          Какие вообще бывают оптимизации под процессор

          В основном под этим подразумевают использование дополнительных наборов инструкций типа: MMX, SSE, AES и AVX при компиляции приложений. Однако, если копнуть глубоко, существуют и другие оптимизации и не только для приложений.
          Я выделил следующие группы оптимизаций:
          • Оптимизации кода
            • Оптимизации кода при компиляции под дополнительные наборы инструкций x86: MMX, SSE, AES, ATA, AVX и др.
            • Оптимизации кода при его статическом анализе во время компиляции: разворачивание хвостовых рекурсий, убирание неиспользуемых участков кода, игнорирование бессмысленных условий и др.
            • Оптимизации для лучшего попадания в кеш процессора.
          • Оптимизации кода на уровне ядра: криптографических методы из Cryptographic API.

          Читать дальше →
        • К вопросу о репосте

            Материал бывает разным. Бывают новости, бывает справочная информация, бывают обзоры. А бывает материал, к которому мы невольно сами возвращаемся снова и снова, настолько он нас затрагивает.


            Узнать о чём
          • Развенчание мифов об x32 ABI

            • Перевод
            Наверное, некоторые из вас слышали о халяве под названием x32 ABI.

            Вкратце о x32 ABI


            Если вкратце, то это возможность использовать все преимущества 64-битной архитектуры, но при этом сохраняя 32-битные указатели. Потенциально при этом приложение будет расходовать меньше памяти, хоть и не сможет адресовать более 4 ГиБ памяти.

            Пример. В своём коде вы определяете массив целых чисел и заполняете его значениями. Сколько при этом вы расходуете памяти? Если очень грубо изобразить, то получится примерно так:
            32 бита: Указатель + Счётчик числа элементов + N целых чисел = N+2 32-битных числа
            64 бита: Указатель + Счётчик числа элементов + N целых чисел = N+2 64-битных числа = 2N+4 32-битных числа
            Вот инженеры и задумались: а что если попробовать использовать 32-битные указатели на 64-битной архитектуре? Архитектура X86-64 имеет систему команд CISC и позволяет это сделать. В этом случае наш массив выше будет расходовать памяти 2N+3 вместо 2N+4. Экономия конечно же незначительная, но дело в том, что в современном коде количество разного рода указателей в структурах нередко доходит до десятка, и использование коротких указателей потенциально позволит экономить до 50% памяти (в идеальном случае).

            Для тех кому надо расчёты точнее:
            * Насколько большие массивы (и значения) в PHP? (Подсказка: ОЧЕНЬ БОЛЬШИЕ)
            * Сколько памяти потребляют объекты в PHP и стоит ли использовать 64-битную версию?

            Но как оказалось халявы не будет.
            Далее перевод статьи
          • Сколько памяти потребляют объекты в PHP и стоит ли использовать 64-битную версию?



              На этот пост меня вдохновило исследование потребления памяти для моего текущего большого проекта на ZendFramework. Как обычно, по результатам исследования, я был шокирован нашей программистской самонадеянностью, которая нередко присутствует, когда мы пишем что-либо большое на PHP. Да и, наверное, не только на PHP.

              Но обо всём по порядку.

              Данная статья является логическим продолжением следующих статей:

              Подробности
            • picotux — самый маленький компьютер с Linux в мире

                Пока во всю идёт месячник Raspberry Pi, самое время рассказать о самом маленьком компьютере с Linux. Встречайте — picotux 100, детище немецкого гения.

                Общие характеристики

                • Размеры: 36x19x19 мм
                • Вес: 18 гр
                • Рабочая температура: -40°C to 85°C

                Читать дальше →
              • Архитектурный изьян CouchDB

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

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

                  Вот о такой проблеме в Apache CouchDB мы и поговорим далее.
                  Картинка в тему:

                  Читать дальше →
                • PHP 6 не будет, не осилили

                    Забавно, но не нашёл на хабре упоминания об этом даже в комментариях. Пора устранить этот недостаток, ведь многие используют только хабр, как источник информации.

                    Так вот PHP 6 не будет, вообще. 11 марта 2010 команда разработчиков приняла решение об отмене выпуска PHP 6 в текущем его виде. В результате транк с PHP 6 был перенесён в бранч, а в транке образовалась новая версия — 5.4, в которую разработчики перенесли все наработки из PHP 6, кроме юникода.

                    Ниже приведен краткий пересказ презентации (pdf), сделанной Andrei Zmievski на PHP Community Conference в 2011 году.
                    Читать дальше →
                  • Пополнение для The Humble Voxatron Debut

                      Сегодня в The Humble Voxatron Debut добавились две новые игры. Получить их может только тот, кто сделает платёж на сумму, большую чем средняя. На данный момент это 4.39. А те, кто уже заплатил, автоматически получат все добавляемые игры.
                      Читать дальше →