• Кто нить знает как пробросить вебсокет через nginx малой кровью?

    @kastigar
    Попробуйте haproxy. Первая ссылка в гугле очень похожа на то, что вам нужно.
    Ответ написан
    Комментировать
  • За счет чего может жить Open Source проект?

    @kastigar
    Формула простая: если проект нужен людям, то деньги появятся, иначе незачем тратить время. Если нужно очень маленькой группке людей, то пусть живёт в этом кругу, но ни о каких финансах речи не будет.
    Маленький совет: сильно не заморачивайтесь насчёт денег. Самое главное делать с душой, для людей которым это нужно. И тогда появятся у вас пожертвования, спонсорства, корпоративные клиенты и т.п. Посмотрите на популярные OSS продукты, в них явно чувствуется душа, не так ли?
    Ответ написан
  • Pub/Sub с персистентными сообщениями?

    @kastigar
    Может вам подойдёт Akka? Насколько я знаю для очередей сообщений можно указывать storage (уже есть немало адаптеров). Заодно и более-менне лёгкую масштабируемость получить с помощью akka-remote. Но назвать это 100% готовым решением трудно. Да и важно какого рода вам pub/sub нужен, под одни задачи akka даже лучше будет, под другие вообще не подойдёт.
    Есть ещё vert.x. С реалтаймом там всё хорошо, а вот с персистентностью — не в курсе. Под vert.x есть разные модули, не удивлюсь если уже реализовано, но придётся поискать или поспрашивать в их коммьюнити.
    Ответ написан
    Комментировать
  • PHP: нужно ли создавать массив перед его заполнением?

    @kastigar
    С isset абсалютно верно. Но я бы не стал называть это «чтение», т.к. isset — это специальная конструкция языка. Если вы попытаетесь спросить индекс не-массива, то:
    unset($a);
    echo $a['a']['b']['c']; // будет warning
    echo $a['a']; // тоже будет warning
    isset($a['a']['b']['c']); // не будет warning'а
    

    С записью тоже есть нюансы. Если переменная (даже если это элемент массива) не установлена, то её можно неявно использовать как массив. Но если она установлена и не является массивом, то могут быть проблемы:
    <?php
    unset($a);
    $a['a'] = 'a'; // это ок
    $a['b'] = 1; // это ок
    $a['a'][0] = 'b'; // перезапишет первый символ строки!!!
    $a['b'][0] = 'b'; // будет notice, про обращение к скаляру, как к массиву
    unset($a);
    $a['a']['b']['c']['d'] = 'str'; // тоже ок
    $с = new SomeClass;
    $с[0] = 'c'; // Если класс имплементил ArrayAccess интерфейс, то вызовется метод offsetGet,
                 // иначе Fatal error
    

    Так что если не уверены, что содержится в переменной или элементе массива, то лучше явно проинициализируйте массив.
    Ответ написан
    Комментировать
  • Работа с Doctrine ORM: Пользовательские репозитории?

    @kastigar
    Не вижу ничего плохого в статическом get методе. ИМХО, в вашем случае — это самый лучший вариант:
    — по производительности не должно уступать или сильно уступать прямому доступу через EM
    — не нужно переживать о захламлении кода
    — доступность метода из любых скриптов/классов

    Да, PHP такой язык, code completion очень часто не доступен. Лично я часто использовал instanceof как временное решение. Т.е. как только нужен completion, я добавляю instanceof. После того как ф-ция дописана, я его убираю. Не самое идеальное решение, но в большинстве случаев хватало. Для репозиториев доктрины делал бы с помощью статического get метода.
    Ответ написан
    Комментировать
  • CPP вставки в PHP-скрипты

    @kastigar
    Помню когда-то натыкался на такой то ли экстеншен, то ли класс. Он позволял выполнять c/c++ код. Стало интересно как. Посмотрел исходники, оказалось всё банально: исходник писался во временный файл, затем компилировался с помощью gcc и выполнялся. Вот в принципе и всё))) Быстрой поиск не нашёл его(давно это было), может вам повезёт больше.
    Ответ написан
    Комментировать
  • MongoDB случайные 2 записи?

    @kastigar
    Почитайте вот это, а именно комментарии.
    Ответ написан
  • Как активировать событие на элементе из javascript?

    @kastigar
    В jQuery любое событие можно вызвать с помощью ф-ции .trigger()
    Ответ написан
    Комментировать
  • Нужен ли на Хабре обзор библиотеки для склонения ФИО?

    @kastigar
    Неправильно склоняет мою фамилию на русском языке. На украинском — все ок.
    Обзор обязательно нужен :) Больше интересует теоретическая часть.
    Ответ написан
    1 комментарий
  • Существуют ли статические анализаторы, выявляющие наличие повторов шаблонов кода?

    @kastigar
    Вот посмотрите еще PMD's Copy/Paste Detector. Правда он в составе java pmd, который, насколько я знаю, бесполезен для PHP проектов (именно сам PMD бесполезен). На зато PMD's CPD поддерживает не один язык.
    Ответ написан
    1 комментарий
  • Redis. Как записать в ключ TimeStamp с сервера, где запущен Redis-сервер?

    @kastigar
    А по поводу патчить Redis, если все-таки решитесь, вот описание протокола. Нужно создать специальный вид аргумента, с плэйсхолдерами. Я бы добавил, $PLACEHOLDER, получается что если после $ идет числовое значение, то это длина значения и мы его читаем с новой строки (то есть как происходит сейчас). Если же после $ идет нечисловая строка, то это плэйсхолдер. В данном случае, это может быть $TIMESTAMP, который говорит, что аргументом является текущий таймстэмп. Это также позволит добавить еще плэйсхололдеров в будущем (правда не могу придумать каких). Если же нужна большая гибкость, можно заюзать плэйсхолдеры прям в значениях, например что-то вроде %TIMESTAMP%, но это сделает код обратно не совместимым.
    P.S. я бы все-таки смотрел в сторону NTP :)
    Ответ написан
    2 комментария
  • Redis. Как записать в ключ TimeStamp с сервера, где запущен Redis-сервер?

    @kastigar
    Насколько мне известно, Redis такого не умеет. Поэтому есть такие альтернативы:
    — не давать открытый доступ к Redis, а предоставлять сервисы (достаточно трудоёмкая задачка и возможно лишняя, но более правильная, так как нет зависимости от бэкэнда; на самом деле все зависит от задачи)
    — пропатчить Redis (легче первого, но будут проблемы, если патч не примут: придется ручками саппортить такую фичу)
    — настроить синхронизацию времени с помощью NTP-клиента (самое простое, но если нет рута, то невозможно выполнить)
    Ответ написан
    Комментировать