• Массивы в РНР 7: хэш-таблицы

    • Translation
    Хэш-таблицы используются везде, в каждой серьёзной С-программе. По сути, они позволяют программисту хранить значения в «массиве», индексируя его с помощью строк, в то время как в языке С допускаются только целочисленные ключи массива. В хэш-таблице строчные ключи сначала хэшируются, а затем уменьшаются до размеров таблицы. Здесь могут возникать коллизии, поэтому нужен алгоритм их разрешения. Существует несколько подобных алгоритмов, и в РНР используется стратегия связных списков (linked list).

    В Сети есть немало замечательных статей, подробно освещающих устройство хэш-таблиц и их реализации. Начать можно с http://preshing.com/. Но имейте в виду, вариантов структуры хэш-таблиц — несметное множество, и ни один из них не совершенен, в каждом есть компромиссы, несмотря на оптимизацию циклов процессора, использования памяти или хорошее масштабирование потокового окружения (threaded environment). Одни варианты лучше при добавлении данных, другие — при поиске и т. д. Выбирайте реализацию в зависимости от того, что для вас важнее.

    Хэш-таблицы в РНР 5 подробно рассмотрены в материале phpinternalsbook, который я написал вместе с Nikic, автором хорошей статьи про хэш-таблицы в РНР 7. Возможно, её вы тоже сочтёте интересной. Правда, она писалась до релиза, поэтому некоторые вещи в ней слегка отличаются.

    Здесь же мы подробно рассмотрим, как устроены хэш-таблицы в РНР 7, как с ними можно работать с точки зрения языка С и как ими управлять средствами РНР (используя структуры, называемые массивами). Исходный код в основном доступен в zend_hash.c. Не забывайте, что хэш-таблицы мы используем везде (обычно в роли словарей), следовательно, нужно проектировать их так, чтобы они быстро обрабатывались процессором и потребляли мало памяти. Эти структуры решающе влияют на общую производительность РНР, поскольку местные массивы не единственное место, где используются хэш-таблицы.
    Читать дальше →
  • А если без JavaScript?

    В нашем мире без JavaScript никуда! Куча фреймворков, библиотек и прочей радости! jQuery плотно вошел в нашу жизнь. React с Angular пробивают дорогу к светлому будущему. Да и не за горами поддержка браузерами ES6 без Babel.

    Но если тема заходит об обычном сайте со стандартным функционалом, не редки случаи, когда JavaScript начинают “злоупотрелять”. И все, в принципе, нормально… Но порой задаешься вопросом: «А если без JavaScript?».
    Читать дальше →
  • Стратегическое эссе Пола Грэма: Рефрагментация (часть 1)

    • Translation
    image

    У старости есть одно преимущество, и заключается оно в том, что все изменения, происходящие в вашей жизни, становятся заметны. Одним из таких значительных изменений, что мне довелось наблюдать, является фрагментация. Направления политической деятельности Соединенных Штатов гораздо противоречивее, чем раньше. На самом деле, общего между ними меньше, чем когда-либо. Творческие люди толпами устремляются в определенные города в поисках счастья, и покидают родные места. А возрастающее экономическое неравенство влечет за собой увеличения разрыва между богатыми и бедными. И вот вам моя гипотеза: все эти тенденции являются по сути проявлением одного и того же. Более того, проблема не в том, что существует сила, разделяющая нас, а в том, что существуют некие силы, притягивающие нас друг к другу, и такое притяжение для нас губительно.

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

    Этими двумя силами были война (в основном вторая мировая) и рост крупных корпораций.

    (Просьба, рекомендации по переводу слать в личку)
    Читать дальше →
  • Автоматизация бизнес-процессов или что такое «Сложность». Часть 1

    image


    Про автоматизацию бизнес-процессов (БП) написано много. В литературе, да и в интернете, хорошо описаны преимущества автоматизации повседневных рутинных процессов посредством Business Process Management (BPM), а также Workflow Management Systems (WMS).


    Цель этой статьи — пойти дальше и рассмотреть, что же конкретно подразумевает под собой слово "Автоматизация" и почему увеличение требований к моделям процессов непременно приводит к увеличению сложности самой системы, и как с этим бороться.


    Читать дальше →
  • Подводные камни Bash

    • Translation


    В этой статье мы поговорим об ошибках, совершаемых программистами на Bash. Во всех приведённых примерах есть какие-то изъяны. Вам удастся избежать многих из нижеописанных ошибок, если вы всегда будете использовать кавычки и никогда не будете использовать разбиение на слова (wordsplitting)! Разбиение на слова — это ущербная легаси-практика, унаследованная из оболочки Bourne. Она применяется по умолчанию, если вы не заключаете подстановки (expansions) в кавычки. В общем, подавляющее большинство подводных камней так или иначе связаны с подстановкой без кавычек, что приводит к разбиению на слова и глоббингу (globbing) получившегося результата.


    Читать дальше →
  • Анализ социального графа

      социальный граф UkrTweet
      Количество американских патентных заявок связанных с социальными сетями последние 5 лет росло на 250% каждый год (ссылка). Так, например, одна корпорация подала патентную заявку на метод ценообразования который учитывает положение покупателя в социальном графе (обсуждение на Slashdot). Другая корпорация недавно воплотила максимально упрощенный вариант этой схемы, продавая свои новые телефоны влиятельным узлам социального графа за $0, а остальным за $530.

      Анализ социальных сетей (Social Network Analysis) существовал задолго до Интернета, но в последнее время набирает обороты.

      Мне было интересно посмотреть, как эффективно алгоритм, выделяющий кластеры в графах, сработает для некоторых групп в Twitter, которые представляют для меня интерес.

      23 января в Запорожье пройдет #UKRTWEET — первый всеукраинский баркэмп посвященный Twitter. Граф выше показывает, кто из его участников, с кем разговаривает и кого упоминает.

      Заметка ниже посвящена анализу этого графа. Весь код используемых здесь скриптов лежит на github. Изложение, в какой-то мере, вдохновлено недавно упомянутой на Хабре книгой Тоби Сегаран «Программируем коллективный разум», код примеров которой доступен на сайте автора.

      Также о data mining в Twitter я говорил 16 января на первой в этом году донецкой встрече "Кофе и код". Поэтому здесь параллельно проведу анализ группы людей из Донецка, которые пишут в Twitter. Кстати, в этом году донецкие встречи будут регулярными — каждую третью субботу месяца (следующая 20 февраля). Следите за группой.

      Добывать информацию
    • Visual Search provider для IE 8 — задача на два помидора

        Visual Search provider — это один из трех новых типов расширений в IE 8.0 Он позволит пользователям искать что-нибудь на вашем сайте, не переходя на его страницы. А если вы добавите к провайдеру favicon, ваш бренд (вернее 16-и пиксельный брендик) всегда будет вместе с пользователем. И главное, он позволит разбавить сухой текст результатов поиска симпатичными картинками, вот например так:

        Мини игры на Play2Game.ru

        А еще, вы можете рассказать о своем провайдере, выложив его в галерею расширений IE 8.0. Или выиграть плазменный телевизор, поучаствовав в конкурсе дополнений к IE 8.0, который проводится в рамках конференции ReMIX09.

        Главный приз конкурса дополнений к IE 8.0
        Между прочим, сейчас там зарегистрировано всего 3 визуальных провайдера. Так что если у вас есть что искать, а еще лучше — сайт с верной аудиторией, готовой поддержать его в конкурсе — давайте попробуем?

        Все что от вас действительно потребуется — это метод, который будет возвращать найденные по запросу данные. Как он будет выглядеть, зависит от ваших любимых технологий и размера сайта. В моем случае (сайт с мини играми, который я написал на .NET) это было простое строковое сравнение в LINQ запросе. Кто-то посерьезнее настроит full text search в MS SQL Server, ну а приверженцы PHP и MySQL наверняка тоже подберут что-нибудь эффективное в своем арсенале.

        Если у нас будет такой метод, все остальное — это задача на два помидора1, которую мы сделаем на раз-два-три. Причем, в отличие от web slices, простой вариант решения будет одновременно и хорошим, без всяких оговорок и нюансов.

        Итак, в лучших традициях кулинарных программ, для успешного приготовления провайдера нам понадобится:
        Читать дальше →
      • Зарплата напоказ

          Я когда-то работал в компании, где нельзя было говорить о своей зарплате под страхом… я даже не знаю чего. Как дети испытывают ужас от того, что “взрослые заругают”, так и мы боялись ей делиться. О том, какая кара нас ожидает, приходилось только догадываться.




          Ад в представлении Босха.

          И все равно все все знали. Почему? Потому что чтобы закон работал, за ним должна стоять идея, которую разделяет большинство. Какая идея стояла за этим законом? Идея скрыть несправедливую оплату труда. Ведь если она справедливая, то зачем скрывать?

          Читать дальше →
        • Создаем OLAP куб. Часть 2

            OLAP

            Итак, продолжаем создавать куб.
            Напомню, что в предыдущей статье, мы создавали Data Warehouse для хранения голосов хабра-пользователей за хабра-топики. Для тех, кто хочет начать сразу создавать куб, я выложил скрипт, который создает и наполняет хранилище (на моей машине скрипт занял 10 минут и нагенерил 1866268 хабра-голосов).
            Для того, чтобы создать OLAP куб, нам понадобится:
            • SQL Server, на котором хранится наш HabraDW (подойдет любой);
            • Microsoft SQL Server, с запущенными Analysis Services (2005/2008);
            • Business Intelligence Studio, которая входит в пакет клиентских приложений для Microsoft SQL Server-а, и интегрируется с Visual Studio, если она у вас установлена (2005/2008);
            Читать дальше →
          • Веб-аналитика: анализируй это! Часть 3. Базовые метрики

              Предыдущие части:
              Часть 1. Вступление
              Часть 2. Сбор данных

              Пришло время поговорить о метриках — тех величинах, которые считает любая система статистики. Начнем с прямых метрик — тех, которые можно посчитать легко и без применения формул.
              Читать дальше →
            • Простое сравнение изображений с помощью php

                Алгоритм возможно не новый, и не является идеалом, но, на удивление, работает. Никаких графов и корелляции.

                Для начала, стоит отметить, что сравнение очень приблизительно (по крайней мере, на данном этапе), временами две совершенно разные фотографии оказываются похожими процентов на 60%, так же не учитываются жесткие модификации (повороты, инверсия, обрезка) – для этого нужно доводить и доводить. Лично для меня самым главным оказались два параметра: скорость, независимость от разрешения изображения и возможность сравнивать «изображения» прямо в базе данных.
                Читать дальше →
              • Хитрости с логированием в однопоточных неблокирующих серверах.

                  Хочу рассказать об очередном результате моих изысканий в области оптимизации производительности Web-серверов.
                  На этот раз речь пойдет об оптимизации сложного логирования в однопоточном неблокирующем вэб-сервере.
                  Читать дальше →
                • Кропотливая оптимизация PHP-приложений (рассматриваю PHP5, но большинство справедливо и для 4-й ветки)

                    Когда во сне снится «ой а если сервера не хватит...»


                    Для начала, Доброй Ночи. Пишу что-то полезное вроде впервые (если не считать разного рода полу-тестов в моём блоге). Человек я допытливый до жути, неожиданно в голову пришло, что могу помочь сэкономить кому-то много времени ;).


                    танцуем с бубном
                  • Разработка снизу-вверх и базы данных.

                          Пол Грэм в своих эссе часто касается темы разработки снизу-вверх. Этот метод упоминается у него, когда он пишет о разработке програмного обеспечения, о способе ведения бизнеса, о преимуществах open source и блогах. Ниже я опишу почему при этой модели разработки взаимодействие с базой данных встает поперек глотки, и предложу решение уместное в некоторых случаях.

                      читать далее...