• MongoDB chat best way?

    @kaasius
    И да, хранение логов пользователей в самих записях инцидента в виде массива имеет пару недостатков, которые могут показаться незначительными, но на деле они фатальны.

    1. Размер записи в монге ограничен - сейчас это 16 мег.
    2. В конкурентной среде достичь атомарности при такой записи у вас не получится. Будет race.

    И да, я знаю, что вы скажете - 16 мег хватит всем, и такого интенсивного обмена, чтобы случился race, не возникнет. Я вам тогда напомню про 640 килобайт, и про закон Мерфи - если какая-нибудь неприятность может случиться - она обязательно случится.

    Резюме - не делайте так.
    Ответ написан
  • MongoDB chat best way?

    @kaasius
    Вы ошиблись c выбором БД для своих целей. Совершенно непонятно, зачем тут нужна монга, какова цель. Чат юзер-юзер замечательно работает вообще без базы данных, я могу на nginx поднять чат юзер-юзер вообще без бэкенда. Если БД нужна, чтобы просто хранить логи общения, подойдет любая БД с буффером в виде быстрой очереди (если планируете высокую нагрузку) или вообще без буферизации дополнительной.

    Ну и, да _id монге лучше дать делать самой.
    Ответ написан
  • Как организовать синхронизацию сайта с bare-репозиторием на сервере?

    @kaasius
    Только не пушит, а переходит в нужный каталог и делает оттуда pull.

    Например так:
    branch=$(git rev-parse --symbolic --abbrev-ref $1)
    if [ $(git rev-parse --is-bare-repository) = true ]
    then
        rep=$(basename "$PWD"|sed 's/.git//')
    else
        rep=$(basename $(readlink -nf "$PWD"/..|sed 's/.git//'))
    fi
    
    /home/scripts/git/post-update.sh $rep $branch


    И в post-update.sh например так:
    #!/bin/sh
    DATADIR=/var/www/$1/$2
    REPO=$1
    BRANCH=$2
    
    if [ ! -d $DATADIR ]
    then
        mkdir -p $DATADIR
        git clone gituser@example.com:$REPO $DATADIR
        cd $DATADIR
        git checkout $BRANCH
    else
        cd $DATADIR
        /usr/bin/git config user.email "deploy@local"
        /usr/bin/git config user.name "Deploy Robot"
        /usr/bin/git fetch origin
        /usr/bin/git reset --hard origin/$BRANCH
        /usr/bin/git stash
        /usr/bin/git checkout
        /usr/bin/git pull    
    fi


    Ну, можно еще сверху навернуть создание виртуалхостов в апаче, или удаление удаляемых веток.
    Ответ написан
    3 комментария
  • Как по клику на определенную ссылку открыть popup-окно, в котором должен начать проигрываться mp3-файл?

    @kaasius
    У вас используется сессия. Первый запрос блокирует сессию (это файл на диске сервера, он блокируется, следующая сессия не начнется, пока не разблокируется эта).
    Чтобы стримить медиафайлы, есть масса инструментов. Например - nginx_rtmp_module (если это живой стрим), либо просто через nginx можно стримить. Чтобы контролировать доступ, используйте X-Accel-Redirect.
    Ответ написан
    2 комментария
  • Зачем в Bitcoin было делать монеты в виде дробей?

    @kaasius
    А, да, еще 0,00001 биткоин вставлю.
    Инфляция так же имеет смысл в отношении национальной валюты, то есть привязана к некоей стране. А биткоин не является национальной валютой.
    Ответ написан
    Комментировать
  • Зачем в Bitcoin было делать монеты в виде дробей?

    @kaasius
    Я бы ответил на вопрос так вот - его дробят, потому что могут.
    Ответ написан
    Комментировать
  • Зачем в Bitcoin было делать монеты в виде дробей?

    @kaasius
    Инфляция в принципе штука, не привязанная к валюте, это характеристика, привязанная к товару. "Сделать" инфляцию невозможно - это свойство экономики. Как и дефляция кстати, тут c предыдущим оратором я не согласен.
    Ответ написан
    Комментировать
  • Стоит ли использовать Mongo и Node.js для сервиса аналога Яндекс.Метрики и Google Analytics?

    @kaasius
    Нода тут вас никак не спасёт, потому что узкое место у вас в БД.
    Монга только отсрочит неминуемое.
    А неминуемое состоит в том, чтобы перейти на очереди.
    То есть, как бы сделал я - на машине, которая собирает статистику (принимает запросы от сайтов), все данные пишутся в очередь. Можно использовать RabbitMQ например. И больше эта машина ничем не занимается.
    Вторая машина достает из очереди данные и кладет их в БД, делая дополнительно какую-то обработку этих данных.
    При этом как первых, так и вторых машин у вас может быть несколько. А можно всё это запустить и на одной. В любом случае, работать это будет быстрее, а записывать в БД будет не 100 потоков, а один, предварительно консолидируя данные.
    Ответ написан
    4 комментария
  • Есть ли сервис-посредник для работы юрлиц с фрилансерами?

    @kaasius

    Ну, вот это вот "регил ИП или терял большой %" как раз и выходит за рамки небольшой комиссии.

    Ответ написан
    Комментировать
  • Есть ли сервис-посредник для работы юрлиц с фрилансерами?

    @kaasius

    Что-то подсказывает мне, что для того, чтобы оставаться в правовом поле, компания-посредник должна стать для фрилансеров налоговым агентом, вести персонифицированный учет, платить отчисления в пенсионный фонд и т.д. - что несколько выходит за рамки "небольшой комиссии". Если кто-то делает это за действительно небольшую комиссию, он c вероятностью 99% нарушает действующее законодательство.

    Ответ написан
  • Красивые URL и поиск по БД - как вы с этим работаете?

    @kaasius

    Если посещаемость сайта не несколько миллионов человек в сутки, беспокойство лишнее. Знаю это не по теории, а из практики, у меня так работают сайты примерно c 2000 года, проблем c быстродействием поиска не наблюдается. Если же посетителей становится много, наверняка захочется сделать кеширование в redis например. Лучше подумать, что произойдет, когда захочется сделать иерархию (/uri, /uri/suburi и т.д.). Тут тоже проблемы особо нет, но задача точно поинтереснее.

    Ответ написан
    Комментировать
  • Git для бэкапа бинарных файлов?

    @kaasius

    По шагам.

    1. Делаете чистый репозиторий

    2. Делаете ветки для старых годов (git checkout -b 2011)

    3. Сохраняете там прежние годы (git add -A && git commit)

    4. Возвращаетесь в ветку master (она остается пустой)

    5. Делаете следующую ветку (git checkout -b 2012)

    6. Повторяем пункт 3

    Алсо, во избежание, можно сразу сделать веточку empty, чтобы случайный мердж в master не заставил вас потом делать откаты.

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

    Ответ написан
    4 комментария
  • Скорость вызова include

    @kaasius

    Хороший принцип - принцип отделения кода от данных и всего этого вместе - от представления. Если хочется чего-то серьезного (а раз вы задаетесь вопросом быстродействия include, то на это похоже), отделите представление (html) от кода (php). Соединяться они имеют право только в скомпилированных шаблонах. Отвечая на вопрос - include очень быстр. Если вдруг, по какой-то неведомой мне причине, вам не хватит быстродействия, надо копать в сторону APC. Ну или бросить шаред хостинг и арендовать VPS.

    Ответ написан
    Комментировать