• Несколько историй про подпольных программистов

    Продажник-программист


    Попал я однажды в организацию, занимающуюся организацией оффлайновых конференций. Им нужен был человек для поддержки сайта. Разговаривал со мной мужчина в пиджаке и при галстуке, представившийся начальником отдела продаж. От общих тем быстро перешли к техническим. Заглянули в код. Свой ORM, самописный шаблонизатор, немного устаревшие приёмы, но в принципе всё стройно, логично и однообразно. Я спросил, что стало с предыдущим программистом, на что собеседник рассказал мне историю.


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


    image

    Читать дальше →
  • Data-mining в 40 строк или с кем и против кого вы заодно

    Находим единомышленников и противников друзей и врагов среди пользователей сайта на Drupal, используя данные votingapi.

    Делаем выборку данных


    SELECT v1.uid uid1, v2.uid uid2, u1.name name1, u2.name name2,
      v2.entity_id entity_id, v1.value value1, v2.value value2
    FROM votingapi_vote v1
    JOIN (votingapi_vote v2, users u1, users u2)
     ON (v1.uid != v2.uid AND v1.entity_id=v2.entity_id
       AND v1.entity_type=v2.entity_type AND v1.uid=u1.uid AND v2.uid=u2.uid)
    WHERE v1.uid < v2.uid AND v1.uid != 0 AND v2.uid != 0
    ORDER BY v1.uid,v2.uid;


    JOIN таблицы votingapi_vote на себя саму выбирает все пермутации пар пользователей, а условие v1.uid < v2.uid превращает пермутации в комбинации.

    Условие v1.entity_id=v2.entity_id AND v1.entity_type=v2.entity_type позволяет выбрать голоса, которые пользователи отдали за одну и ту же тему или комментарий. Скажем, первая строчка в нашей выборке означает, что Administrator и Bob дали 100 очков одной и той же теме или одному и тому же комментарию.

    Условие v1.uid != 0 AND v2.uid != 0 исключает анонимные комментарии.

    В результате получаем таблицу из шести колонок:
    Читать дальше →