• Очередь заданий на PHP/MySQL. Пишу очередной костыль?

    @egorinsk
    Самый простой способ — по крону запускаете «надсмотрщика» (supervisor). Надсмотрщик сохраняет свой PID в файл, мемкеш или БД и если видит, что другой надсмотрщик уже запущен — молча умирает.

    Надсмотрщик должен быть предельно прост, чтобы не падать. Обнаружить падение надсмотрщика можно по тому признаку, что файл с PID есть, а процесса с таким PID нет — значит предыдущий надсмотрщик внезапно завершился. Это можно зафиксировать в лог.

    Если надсмотрщик запустился и других надсмотрщиков нет, он берет задания и запускает одного или несколько скриптов-рабочих (worker), каждому раздает по заданию. Если кто-то из рабов успешно завершился, помечаем задачу как выполненную, если умер — он логгирует это и запускает нового, если с N попыток задача так и не сделана, она помечается как невыполнимая и больше не выполняется.
    Ответ написан
    5 комментариев
  • Вопрос по гармонике в ЭЭГ сигнале?

    @egorinsk
    Гармоники жестко привязаны к основной частоте, то есть когда она становится громче, они тоже становятся, так как они генерируются одним источником. В общем случае невозможно отличить допустим основную частоту + набор гармоник от суммы 2 кратных частот и их гармоник.

    Это всего лишь математическая абстракция.
    Ответ написан
    4 комментария
  • Как вы жили до «бума» социальных сетей?

    @egorinsk
    Были асечки и электронная почта.
    Ответ написан
    Комментировать
  • Что делать с объектом при удалении инфы из базы данных?

    @egorinsk
    Если задаваться целью предусмотреть любые ситуации, то видимо надо ставить флаг и при попытке что-то сделать с таким объектом выбрасывать исключение.
    Ответ написан
    1 комментарий
  • Как остановить нашествие спам-ботов на форум?

    @egorinsk
    1) Как защититься от ботов. Если боты не написаны специально под ваш сайт, то просто чуть-чуть переделайте код регистрации (например, сделайте поле email приманкой или считайте код подтверждения яваскриптом или флешем) и боты отвалятся. Они же привыкли к стандартным формам.

    Не хотите переписать код/нанять кого-то/лень/ищите кто за вас все сделает бесплатно? Мучайтесь дальше тогда.

    Запретите или сделайте подтверждение телефона для регистраций из проблемных стран (список стран ниже), с тора и прокси.

    2) Про высокую нагрузку. Не стоит использовать shared hosting вообще. Сейчас облачные сервера с минимальным конфигом очень дешевые и стояит примерно столько же, сколько ваш хостинг, но там вам никто не будет парить мозги про соотношения трафика и загрузку процессора, сколько готовы оплатить, на столько и грузите. Сайт на shared хостинге легко положить даже со школоботнета — хостеру проще отключить нагруженный сайт, чем искать причины проблем.

    На своем сервере всех ботов можно легко забанить при помощи iptables и ipset. Я бы советовал не ждать, пока к вам придут боты, а превентивно забанить все IP из стран: Индонезия, Таиланд, Китай, Филиппины, Польша, Бразилия. Как показывает опыт, в этих странах люди не слышали про антивирусы, используют ИЕ (вот идиоты), а провайдеры игнорируют абузы (почтовые ящики из вхуиза не работают либо переполнены и не принимают письма). Как вы понимаете, ценные посетители на ваш сайт оттуда вряд ли придут, а вот спам, трояны, ботнеты и прочая дрянь — легко. Я бы лично эти страны вообще от интернета и цивилизованного мира отключил, достали уже.

    «Анти-DDOS» сервисы нужны при атаке хотя бы от полгигабита, меньший трафик легко банится вручную на iptables. Бесплатный антиддос (и блокировку упомянутых стран), кстати предлагают сервисы вроде cloudflare. Зачем платить конские тарифы всяким вымогателям из анти-ддос сервисов, когда можно не платить?
    Ответ написан
    Комментировать
  • Программа блокирования развлекательных сайтов (и хабра)

    @egorinsk
    Вам бы помогла стрессовая ситуация, например, за спиной стоит надсмотрщик с плетью и бьет за малейшую попытку отвлечься от работы или например вы потеряли взятые в долг у мафии деньги (глупо, согласен, было их брать) и надо срочно заработать что-то чтобы вернуть долг.

    Ну или хотя бы повернуть монитор так, чтобы строгий начальник и завистливые коллеги видели, чем вы занимаетесь.
    Ответ написан
    1 комментарий
  • Имеет ли смысл писать свою обертку над PDO?

    @egorinsk
    PDO из коробки малоюзабелен и неудобен: не считает время и статистику запросов, не поддерживает ленивого соедиения, пула соединений, транзакций, нормальных плейсхолдеров. потому обертку писать стоит в 90% случаев.

    А вот написать обертку, позволяющую прозрачно для кода менять СУБД, у вас не получится. В MySQL есть LIMIT, INSERT ON DUPLIATE KEY UPDATE и куча вещей, которых нет в других БД. Что вы с ними делать будете, чтобы заставить работать в оракле?
    Ответ написан
    1 комментарий
  • Работа WebSocket в фоновом режиме приложения?

    @egorinsk
    Но вроде для таких случаев придуман push, нет?
    Ответ написан
    Комментировать
  • Shared library на D?

    @egorinsk
    Если тут не ответят, вам стоит написать прямо в mailing list этого компилятора, там-то точно должны знать.
    Ответ написан
    Комментировать
  • Зачем нужен undefined в начале кода jquery?

    @egorinsk
    У меня только один вопрос, а неужели есть те, кто переопределяет undefined? Что-то смахивает на параною.
    Ответ написан
  • Оперные табы или аккордеон?

    @egorinsk
    Добавлю свои 5 копеек. То, что нарисовано слева, никуда не годится, так как там слева крошечный закрытый список, и чтобы добраться до нужного раздела, надо попасть мышью в крошечный плюсик, который без лупы не разглядеть. это же наплевательство на пользователя, не надо так делать. И ведь все равно делают.

    Если не верите, что это неудобно, попробуйте это дурацкое дерево пораскрывать в течении получаса с тачпада от ноутбука или с сенсорного телефона. Тогда вы наглядно увидите все недостатки подхода с использованием дерева.

    Если на одной из вкладок поиск, то не надо делать ее отдельной вкладкой — поместите поле поиска тут же. зачем делать лишние движения, когда можно их не делать?

    Аккордеон — плохая вещь, так как запутывает пользователей и очень неудобен.

    Табы тоже неудобно (но лучше), так как пока не откроешь таб, не узнаешь, что на нем нарисовано.

    Подводя итоги, советую все же подумать, как отказаться от лишних вкладок и поместить все на одной. Может, какие-то функции вашего продукта не нужны пользователям на самом деле.

    Простое правило юзабилити — чем меньше на странице активных элементов и кнопок, тем меньше надо думать пользователю. Если вы видели комикс про «Google, Apple and your comapny app» вы поймете, о чем я.
    Ответ написан
    1 комментарий
  • Вопрос специалистам по GCC и темплейтам C++

    @egorinsk
    У меня немного оффтопиковый вопрос, а зачем вы делаете файлы-то по 20000 строк? Это же наркоманство чистой воды. Сделали бы набор небольших файлов, искать ошибку в 200 строках проще, чем в 20000.
    Ответ написан
    1 комментарий
  • Решение для реализации обработки файла по частям (например, для импорта)?

    @egorinsk
    Вы занимаетесь ерундой. Для сложных задач организуются т.н. очереди задач, то есть файл загружается на сервер, добавляется в очередь задача (обработать файл), пинается демон, скрипт на этом завершается, показывает сообщение «ждите», а в то же время демон видит новую задачу, запускает скрипт обработки, периодически обновляет прогресс выполнения задачи в таблице.

    А клиент дергает простой скрипт, который проверяет по это таблице прогресс в процентах и выводит.

    Я вам настоятельно рекомендую перед написанием своего велосипеда хотя бы ознакомиться с существующими способами решения.

    Если бесплатный хостинг не позволяет запускать демоны, проще поменять его на нормальный VPS, а не изобретать неэффективные костыли.
    Ответ написан
  • Что быстрее — глобальная переменная или инициализация класса в другом классе?

    @egorinsk
    > Работаю сейчас над проектом который будет работать при высокой нагрузке.
    > Что быстрее — глобальная переменная или инициализация класса в другом классе?

    Боюсь, что вы даже не представляете себе, что такое «высокие нагрузки». Кстати, не думали двойные кавычки заменить на одинарные и сократить имена переменных до 4 букв (чтобы они помещались в 1 регистр процессора)?
    Ответ написан
    Комментировать
  • Интересная задача на PHP

    @egorinsk
    Ох май май, какой косяк в PHP, сразу же вспоминается еще путаница в возвращаемых значениях в strpos(), когда она может вернуть 0 или false
    Ответ написан
    4 комментария
  • Почему Антивирус Касперского блокирует мою программу?

    @egorinsk
    Вы, прежде чем жаловаться на хабр, Касперскому писали? Там вполне успешно исправляют ложные срабатывания.
    Ответ написан
    Комментировать
  • Как проходят «хакатоны»?

    @egorinsk
    Есть отчет с предыдущего мероприятия: indiedevstories.com/2012/09/19/facebook-developers-world-hack-barcelona-my-first-hack/

    Судя по фото, приходят со своим ноутбуком/айпадом/whatever, так как на нем у вас все удобно настроено, есть софт и то, что вам нужно.

    Интеренет обычно раздают через вайфай, но резервный источник интернета может дать вам преимущество в случае проблем с вайфаем.

    Насчет хостинга — тоже стоит иметь свой сервер, который вы можете настроить как угодно и поставить любые расширения и библиотеки. Правда, чтобы работать на своем сервере, нужны начальные умения его администрировать, но для разработчика уровня фейсбука это точно не проблема. Я бы советовал просто взять сервер где-нибудь в облаке на несколько дней под это дело, и поставить на него все, что нужно, например (не будем делать рекламы) в недавном пролежавшем день облаке это будет стоить копейки.

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

    p.s. А вот ноутбук вы зря продали. По моему, возможность перенести его в любое место квартиры или мира перевешивает гигагерцы и гигабайты памяти на десктопе.
    Ответ написан
    1 комментарий
  • Netdev_max_backlog detect и прочий sysctl. Как не попасть в дурацкую ситуацию?

    @egorinsk
    Чтобы получить ответ на вопрос «какие значения выставить на моей машине», есть 2 варианта — показать машину тому, кто в этом всем разбирается, или же самому сидеть с диагностическими тулзами, считать проценты потерянных пакетов, время отклика и прочие вещи, находить причины проблем и исправлять.

    Пробовали ли читать доки по ссылкам www.kernel.org/doc/Documentation/sysctl/ и www.kernel.org/doc/Documentation/networking/?

    Упомянутый вами backlog_detect например более чем понятно описан в доке:

    > Maximum number of packets, queued on the INPUT side, when the interface receives packets faster than kernel can process them.

    Естественно, оптимальное значение зависит от производительности машины и скорости сетевого интерфейса.
    Ответ написан
    Комментировать
  • Есть ли хорошие материалы по созданию приложений для сайтов

    @egorinsk
    Если вы размещаете чужой код в ифрейме, то худшее, что он может сделать — это алерты или редирект.

    А вообще, советую бросить эту затею. Разработка приложений стоит денег. Зачем разработчику делать приложения на вашем сайте, если можно делать из вконтакте/фейсбуке, там больеш пользователей и больше можно заработать.
    Ответ написан