• Регулярные выражения для самых маленьких
    +1
    Я просто оставлю это здесь
    image

    [^\s]+ эквивалентно \S+
  • Применение принципа poka-yoke в программировании на примере PHP
  • Эмодзи?! Нет, не слышал
    +1
    Почему обязательно нужно было «мучиться» с UTF-16? UTF-8 не способен кодировать те же юникод-символы?
  • Задай вопрос эксперту и выиграй билет на Highload!
    0
    Поэтому, когда изменяются данные в какой-то транзакции, мы создаём в memcache для конкурирующих потоков для нашего объекта ещё один ключ, наличие которого означает, что кеш этого объекта пока невалиден, и за данными объекта надо сходить в БД

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

    Мечтаю об энджине для MySQL сбрасывающем кеш при коммите.
  • Выразительная простота python на примере задач из комбинаторики
    0
  • Badoo PHP Code Formatter. Теперь в open source!
    +1
    Стандарты кода описываются здесь github.com/badoo/phpcf/tree/master/phpcf-src/styles
    Например можно описать требуемые отличия от стандарта по умолчанию
    github.com/eelf/phpcf/commit/76c8c7205f4c316cb9f557ea960c8ed15a3a1eba#diff-d41d8cd98f00b204e9800998ecf8427e
    Работает так
    $ ~/phpcf/phpcf --style=compact apply classes/Db.php
    или так
    $ ~/phpcf/phpcf --style=minified apply classes/Db.php
  • AIDA. Автоматизация работы с Git, JIRA и TeamCity
    0
    Зачем удалять если можно не удалять :) Технически ветки ничем не отличаются от тегов, лишние телодвижения по созданию тега, удалению ветки только усложнят и без того не простой процесс.
    А баш-гит-комплитеру всё равно: он ищет и в ветках и в тегах.

    $ time b --contains de88e382df3041d43f2aabca9e68a3aee8d1a2d3 PLATFORM-4227_pause_in_edit real 0m1.996s
    Очевидно что эта команда роется только в локальных ветках, которых вовсе не 2000 штук, а не более 10. Возможно имелось ввиду git branch -a…
  • PHP-расширение dom_varimport: быстрое преобразования вложенных массивов в DOMDocument
    0
    Странная область применения, собирать данные для выдачи в пхпшные массивы, потом из них слепить xml объект, который отдать xslt процессору. Если используется такая замечательная технология как xslt, то зачем данные собирать в массивы — можно сразу строить xml-объект нужной структуры, разница будет не заметна :)
    Расширение должно быть полезное для импорта, но упоминание xslt только сбивает с толку.
    А ещё лучше бы сразу из пхпшной сериализации строило xml объектины, эдакий unserialize_to_xml :)
  • 8 ловушек программирования
    0
    Это называется великий треугольник — производство, равно как и производимый продукт, может обладать тремя характеристиками: быстрое, качественное, дешёвое. Но можно выбрать только любые два.
  • GitPHP в Badoo
    +1
    Безусловно diff с тремя точками покажет изменения по ветке, в оригинальном GitPHP этой возможности нет, вот мы и добавили один простой вызов.

    Нас вполне устраивает вид unified диффа в браузере + наша подсветка изменений символов в строке. Каждый сотрудник использует удобную ему операционную систему и GitPHP работает везде одинаково и требует только браузер, также никто не запрещает использовать другие средства, такие как meld или встроеный в phpstorm diff viewer. Но это только просмотр, в нашей версии есть возможность тут же написать комментарии и по окончании ревью уведомить разработчика и возможно обновить статус задачи в баг-трекере.

    GitPHP очень простой инструмент и делает не больше чем вызов программы git с нужными параметрами.
    Необходимость оптимизации настала, очень тоскливо ждать загрузки страницы с бранчдиффом по 20+ секунд. Инструмент уже был встроен в GitPHP, мы его только улучшили и поделились с автором.
  • Тонкости благополучного git-merge
    0
    Я просто оставлю это здесь.
    (feature)$ git show
    commit 504e36a28a81c175518ca4b478e28d93e3146df8
    Merge: c278018 5654da6
    Author: Evgeniy Makhrov <e.makhrov@corp.badoo.com>
    Date:   Thu Oct 31 03:12:01 2013 +0400
    
        Merge branch 'bugfix' into feature
    
        Conflicts:
            test.php
    
    (feature)$ git show -m
    commit 504e36a28a81c175518ca4b478e28d93e3146df8 (from 5654da6fa73e780b9d9ecb06b3a3b90f6707b9c2)
    Merge: c278018 5654da6
    Author: Evgeniy Makhrov <e.makhrov@corp.badoo.com>
    Date:   Thu Oct 31 03:12:01 2013 +0400
    
        Merge branch 'bugfix' into feature
    
        Conflicts:
            test.php
    
    diff --git a/test.php b/test.php
    index 51de675..8fc81b9 100644
    --- a/test.php
    +++ b/test.php
    @@ -1,4 +1,4 @@
     <?php
    
    -echo "Hello, world\n";
    +echo "Hello from feature\n";
    
    (feature)$ git log -1 -p
    commit 504e36a28a81c175518ca4b478e28d93e3146df8
    Merge: c278018 5654da6
    Author: Evgeniy Makhrov <e.makhrov@corp.badoo.com>
    Date:   Thu Oct 31 03:12:01 2013 +0400
    
        Merge branch 'bugfix' into feature
    
        Conflicts:
            test.php
    (feature)$ git log -1 -p -m
    commit 504e36a28a81c175518ca4b478e28d93e3146df8 (from 5654da6fa73e780b9d9ecb06b3a3b90f6707b9c2)
    Merge: c278018 5654da6
    Author: Evgeniy Makhrov <e.makhrov@corp.badoo.com>
    Date:   Thu Oct 31 03:12:01 2013 +0400
    
        Merge branch 'bugfix' into feature
    
        Conflicts:
            test.php
    
    diff --git a/test.php b/test.php
    index 51de675..8fc81b9 100644
    --- a/test.php
    +++ b/test.php
    @@ -1,4 +1,4 @@
     <?php
    
    -echo "Hello, world\n";
    +echo "Hello from feature\n";
    
  • ЦЦБ или управление по управлению версиями программного кода
    +1
    В дефолтном гите ревьювер может написать комментарии к ветке/коммиту/файлу/строке в файле?
    Что должен сделать инспектор, чтобы гит, поменял статус в баг трекере из SUBMITTED в ACCEPTED?
  • PHP IPC — Межпроцессное взаимодействие в PHP
    +1
    $STDOUT это просто перменная, можете назвать её иначе, как вам нравится
    STDOUT это файловый дескриптор, который обычно открыт при запуске программы, запись в него приводит к отображению записанного на терминале, и также как и любой другой файловый дескриптор его можно закрыть функцией fclose, и если после этого открыть любой файл, то новый дескриптор будет иметь значение 1 и echo будет писать уже в него, потому что echo это по сути системный вызов write(1, ...)
  • PHP IPC — Межпроцессное взаимодействие в PHP
    +1
    На самом деле интересует реальный опыт используемого вами метода IPC.

    По моему опыту мне хватило proc_open для задачи взаимодействия одного мастер процесса и десяти дочерних, все функции для этого есть в стандратном экстеншене:

    $ php --re standard | grep -E 'fwrite|fgets|stream_select|proc_open'
        Function [ <internal:standard> function proc_open ] {
        Function [ <internal:standard> function fgets ] {
        Function [ <internal:standard> function fwrite ] {
        Function [ <internal:standard> function stream_select ] {
    


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

    С файлами проблема в том, что пишущий процесс должен закрыть файл, чтобы читащий мог нормально читать данные, чтобы не нужно было отслеживать последнюю прочитанную позицию, кажется как-то так.
  • PHP IPC — Межпроцессное взаимодействие в PHP
    0
    Хороший обзор, хотелось бы примеров каждого из пунктов, буду ждать ещё статью :)

    Почему это popen извращение? Сам popen это конечно же только односторонний IPC, но есть более продвинутый вариант proc_open. Благодаря которому получается unix-way взаимодействие между процессами через пайп.
    Обе эти функции находятся в «экстеншене» core PHP, а это значит, что не нужно дополнительно собирать модули так, как это требуется для тех же pcntl и sockets, не говоря уже про кастомное расширение pthreads.
  • Архитектура высоконагруженных приложений. Масштабирование распределенных систем. Часть первая
    0
    Про поиск ответили выше, а комментарии под фото собственно к этому фото и относятся(как многие к одному), а значит принадлежат владельцу фото, хоть и автор коммента не владелец.
    Получается пользователь, его фоты, и комментарии к ним на одном шарде.

    Гораздо интереснее ситуация когда пользователь А подписался на коменты к фотке/альбому пользователя Б и пользователь В добавил коммент. Или что то же самое А отметил Б на фотке В :)
  • Про кофе и про Web, или почему PHP — велосипед
    +1
    Invalid xml. Use json. It's beta.

    {
    «докопался»: true, «xml гаƒƒно»: true
    }
  • Архитектура высоконагруженных приложений. Масштабирование распределенных систем. Часть первая
    0
    Хм, кажется была статья по мотивам этого доклада www.slideshare.net/BadooDev/badoo-19888002
  • Копирасты наносят новый удар: Вконтакте начал удаление музыки
    0
    О какой рекламе идёт речь?
  • Judy-массивы в PHP
    +6
  • Процесс разработки в Badoo
    0
    1. Вот так ещё например
    Для осуществления ревью мы доработали утилиту gitphp (www.gitphp.org/) так, что в ней стало возможно просматривать общий diff ветки, оставлять комментарии к коду, которые впоследствии отправляются единым комментарием к задаче в JIRA
  • AIDA. Автоматизация работы с Git, JIRA и TeamCity
    +2
    У меня git status на непрогретом кеше идёт 2 сек, затем по 200мс, checkout 4000 файлов древней ветки 5 сек, мерж свежего мастера 6 сек, меня это ни сколько не печалит, страшнее процесс git gc при котором можно идти пить чай ;-)

    Возможно сравнивается скорость работы с svn, при котором доступ к центральному серверу и его тормознутость способна вогнать в тоску…
  • AIDA. Автоматизация работы с Git, JIRA и TeamCity
    +2
    Так реп же Гитовый — там хранятся версии файлов целиком, а не changeset'ы, отличная статья на эту тему: habrahabr.ru/company/badoo/blog/163853/
  • AIDA. Автоматизация работы с Git, JIRA и TeamCity
    +1
    Около 2500 веток, возможно более интересно сколько смержено с мастером и сколько нет: 2000 и 500 соответственно. Смерженные повисят некоторое время и удалятся автоматически.
  • Автоматизированный рефакторинг в большом проекте
    –4
    Приведите пожалуйста пример, в котором требуется только переименовать поле класса. Допротобуфные сериализации не в счёт.
  • Zend Framework 2 — долгожданные усовершенствования в Controller и View
    0
    А она есть?
  • FreeBSD 9.0 is out!
    +2
    Содержимое папки
    ftp.freebsd.org/pub/FreeBSD/releases/i386/i386/ISO-IMAGES/9.0/
    Имя Тип Размер Время
    FreeBSD-9.0-RELEASE-i386-disc1.iso ISO 513882 KБ 3 января 2012 г. 7:50:00
  • Новогодний квест
    0
    Например так: img.php
  • Ubuntu на Toshiba: подводные камни
    0
    В убунте 10.10 за блютус теперь отвечает модуль toshiba_bluetooth и блютус работает из коробки
    но проблему с ACPI и как следствие перегревом так и не решили, вентиллятор выдаёт самые малые обороты :(
  • Открытое тестирование XMPP
    0
    Из минусов: сохранение истории, при отсуствии нормальной удалялки всех сообщений в ящике
  • Как грамотно отправлять почту из скриптов (в частности — на PHP)
    0
    Изумительно, абзацем выше за те же слова только в другой форме был заминусован хьюиТрикс :)
  • TrueBSD — FreeBSD для новичков
    0
    В той части где слово "тоже" - вот это и называется плодить. Лучше б он присоединился к разработчикам фрисби, или их к себе присоединил :)
    А получиться может вот такая хрень как в линях...
  • TrueBSD — FreeBSD для новичков
    +1
    Ну вот началось... Настоящие никсы стали плодить как гнутые/линухи (антиниксы). Этим вводят в заблуждение пользователей начинающих, дистров много, глаза разбегаются, а оригинальный можно и не найти среди этой каши...
  • Интервью с разработчиками Download Master
    0
    +1 Опера хорошо всё качает
  • Интервью с разработчиками Download Master
    0
    Надо поставить слово kiss перед youtube.com чтобы получилось kissyoutube.com ;)