• Как вы организуете devel окружение?

    @rozhik
    У меня организовано следующим образом:
    К development серверу есть днс запись вида *.domain.com in A x.x.x.x
    Конфиг апача
    <VirtualHost *:80> UseCanonicalName Off VirtualDocumentRoot /web/%1/html ServerAdmin webmaster@domain.com <Directory /> ... </Directory> </VirtualHost>

    В каталоге /web любой из разработчиков может создавать папки. Сколько ему нужно серверов, и под какие цели — решает сам. Периодически скрипт просит разработчика «почистить» лишние, если у него их больше 5ти. Аналогично для nginx.
    Соответственно разработчик сам выбирает ответ на вопрос 1.

    К папке /web открыт доступ через sftp, samba. По второму вопросу большинство предпочитают доступ по samba или sshfs (тоесть редактируюют код в основном непосредственно на сервере).

    Итого:
    Каждый разработчик волен решать как ему нравится. Но, есть полиси с рекомендованым подходом (оно большое).
    Ответ написан
    2 комментария
  • Какие существуют способы оптимизации часто идуших MySQL запросов на выборку?

    @rozhik
    Если кэширование запросов не возможно то есть несколько путей (по степени эффективности ниже — эффективнее):
    1. С помощью explain SQL посмотреть и удостоверится, что все запросы и индексы оптимальны. Если не оптимальны — оптимизировать.
    2. Использовать Шардинг (разбить таблицу на несколько)
    3. Кэширование
    4. Использование push-pub сервиса
    5. использование middleware (на ноде, перле, жаве итп обернуть все операции с таблицей в RPC. требование к middleware — внутреннее кэширование всех данных, отправка только insert/update на mysql)
    Ответ написан
    Комментировать
  • Android и SMB, как?

    @rozhik
    Если телефон рутованый — то можно smbmount.

    Если Вы хотите только мультимедию смотреть — то намного проще поставить UPnP сервер (типа mediathomb) на сервере и не мучатся.
    Ответ написан
    1 комментарий
  • Сервер HP неоригинальный жесткий диск

    @rozhik
    В G6 работать будет.
    «Сказки» по поводу не родных винтов имеют под собой почву. Но выражаются они в отсутствии поддержки некоторых фирменных технологий, а не дисков вообще. Что сказывается на производительности.
    В принципе они ничего нелегального, и несоответствия в документации не допускаю.
    Ответ написан
    Комментировать
  • Шифр простой замены

    @rozhik
    Конечно. Чисто математически (без интереса к производительности).
    Для всех перестановок. Берем множество слов в словаре. И находим максимальное количество совпадающих слов из словаря и выходного потока. Или Вам формулу написать? (в любом случае она далека от жизни, по причине того, что в реальных задачах сначала берут перестановки по частотному анализу. А потом осуществляют направленный поиск.)
    Ответ написан
    Комментировать
  • «Именные» СМС

    @rozhik
    Есть несколько зарубежных сервисов, которые за дорого позволяют выставлять всё что угодно в поле отправителя).
    Сам посылал через O2 Германия. В энтерпрайз аккаунте проверка на отправителя не делается. Что вы в SMPP напишите — то и уйдет.
    Ответ написан
  • MicroSD с сертификатом эцп?

    @rozhik
    Еще один из вариантов (если есть SIM-Card) — то туда можно вшить ключи. В SIM вообще очень много что есть полезного, для безопасности. И стоят они копейки. Google: «SIM Application Toolkit». На большом количестве устройств — самый дешевый и безопасный способ (конечно если нет WIFI-only устройств).

    Хотя я бы рекомендовал не связываться с картами а принять совет ipswitch.
    Ответ написан
    Комментировать
  • Чат в тяжелом проекте на symfony (в любом тяжелом бэкенд-движке) — как?

    @rozhik
    1. Да
    2. Нет. Если Вам нужен качественный, быстрый, и лёгкий чат. И «Да», если вам не важны эти характеристики.
    3. Я бы порекомендовал 2 фазную авторизацию. Когда на чат сервере — своя сессия. И он у симфонии (или наоборот) через RPC подвязывается сессия к пользователю.
    4. Лучше сообщения держать в памяти чат сервера. Если вам нужны логи, или модэрация — то сообщения можно выгружать в Мускуль. Но читать их от туда (кроме случая с стартом чат сервера) смысла нет совершенно.

    P.S. Примеров чат серверов и на longPooling, и на webSocket на node.js много. RPC реализаций — тоже. Прикрутить чат — дело пары часов (Вместе с кроссаутентификацией итп)
    Ответ написан
    5 комментариев
  • SSD запищал

    @rozhik
    Я думаю, что пищит не ссд (там не механики нет ни высокого напряжения ни магнетизма).
    Писк идет с кулеров и с блока питания. Изза того, что потребляемая мощность системы скачет с частотой писка (к примеру при изменении потребляемой мощности цпу или ссд). Это никаким образом не влияет на работу ССД.
    Подобный писк можно услышать в играх (когда регулярно прощитываються блоки), при скроллинге, при любом процессе, который меняет уровень потребления системы со звуковой частотой. Пищать может и монитор, и что угодно. Достаточно ввести в резонанс.
    Ответ написан
    Комментировать
  • nginx: несколько хостов на один index.php

    @rozhik
    try_files $uri $uri/ $app_root/index.php?$args У файла нет параметров — по этому. Но никто не мешает поменять сие на try_files $uri php.
    Ответ написан
    Комментировать
  • Распределенное хранилище изображений

    @rozhik
    Я хочу предложить следующий вариант.

    Идея:
    0 опционально — поиск на локальной ФС
    1 создаётся хэш-функция от пути к картинке, возвращающая целое число. hashVal
    2. выбирается фронт сервер с номером hashVal % serversCount, и если он живой — стягивается картинка с этого сервера. если её нет — то генерится.
    3. если сервер не живой — берем следующий.и переходим к пункту 2.

    На практике такое решение ущербно по причине того, что после выхода из строя сервера — следующий сервер становится перегружен.
    В живом проэкте используется модификация:
    Есть 1000 записей в мэмкеше. Инициированых значениями из пункта 2. После падения фронт сервера его индексы меняются на индексы живых серверов случайным образом. После поднятия — восстанавливаются.
    (на самом деле чуть сложнее, так как каждая картинка живет всегда на 3х серверах, и доступ к ним балансируется каруселью, но это не важно для этого вопроса)
    Ответ написан
    Комментировать
  • Adaptec maxCache(SSD Raid) + HDD Raid vs Adaptec SSD Raid 5 Deneva 2R

    @rozhik
    Если Вы собираетесь оптимизировать по random IOPS — то только второй вариант (при больших базах (значительно больших размер ССД кэша) разница ощутима).
    По поводу надежности второго решения — то оно сравнимо надежно с большим количеством дисков. ССД нередко летят одновременно (как и винты из одной партии). Большее количество ССД не только увеличит скорость/обьем, но и сделает более неравномерную нагрузку на ССД. А это снизит риск одновременного вылета 2х дисков.
    Вообще данные рейд контролле достаточно эффективно использует ССД кэш. В некоторых, специальных, обстоятельствах скорость чтения в гибриде может быть выше чем в ССД-онли (очень специфические).

    Так, что оба варианта имеют право на жизнь. Я, лично, забил бы все слоты ССДшками и не мучался.
    Ответ написан
    Комментировать
  • Сохранение массива в файл и его чтение

    @rozhik
    Если файл бинарный — то просто записываете
    fd = fopen( filename, "wb" ); write( fd, i_regions, sizeof( i_regions ) ); fclose( fd );
    , читаем — вместо врайт — рид.
    Если должен быть текстовый, редактируемый руками — тогда json, inifile или как удобнее редактировать (как по мне JSON best ).
    Ответ написан
    7 комментариев
  • Чем мониторить состояние приложения?

    @rozhik
    Конечно выбор Заббикс (или коммерческие системы мониторинга).
    Не 2 по тому, что для мониторинга не редко нужно повышать уровень доступа (некоторые моменты можно узнать только руту, или кому-то из группы ХХХ). Через вэб такое делать… опасно.
    Не 3. По тому что зачем писать то, что написано давно, и используется активно.
    Не 4. По тому, что не все Вы сможете отдавать в наружу. Да и не доверяю я этим проксиагентам.

    SNMP — сразу отпугивает аутентификация, вернее её отсутствие — всё хорошо с аутентификацией zabbix snmpv3 authpriv. Даже шифрование есть. Но кроме SNMP, к забиксу можно прикрутить любой транспорт или плагин. У меня к примеру он спрашивает о состояни баз и фронтов через WEB. В энтерпрайзах почти всегда мониторинг идет через SNMP. Есть даже железки, которые сериальный порт обворачивают в SNMP ;)
    Короче почитайте в группах. Забиксовое комюнити умеет мониторить почти всё.
    Ответ написан
    2 комментария
  • Как лучше внести большие изменения в структуру бд?

    @rozhik
    Теоретически правильно 1. Практически — второй вариант.

    Выбор нужно делать в зависимости от того, находится ли в продакшине сайт, или нет. Что обеспечит меньший даунтайм — то и выбирать.

    Однажды пришлось менять связку 1 к 1 на 1 к многим, на таблицах с десятками миллионов записей. Реализовано было:
    1. шаг — создали новые таблици
    2. тригер обновления (чтобы изменял и старые и новые данные).
    3. запуск консольного скрипта фонового обновления (выполнялся 7 часов, при этом не сильно грузил базу)
    4. замена кода, который работал со старой структурой на новую.
    5. удаление старых данных.
    Суммарное время даунтайма = 0 секунд.
    Итого: время обновление 10 часов. Даунтайма нет

    На девелопмент машинах (с почти теми-же данными)
    1. шаг — создали новые таблици
    2. запуск консольного скрипта обновления (выполнялся 2 часф, при этом грузил базу, лочил таблици, и вообще ничего не работало)
    3. замена кода, который работал со старой структурой на новую.
    4. удаление старых данных.
    Итого: время обновление 2часа часов. Даунтайма 2 часа
    Ответ написан
    3 комментария
  • Зависают запросы к Node через Nginx

    @rozhik
    В связке Nginx + нода, при правильной настройке проблем нет. И со статикой и с динамикой.

    Однако, если Вы опишите каким образом отдаётся статический контент через ноду, и кусок конфига nginx, то легче давать советы.
    К примеру статику на ноде отдаёт десяток разным модулей, какой из них Вы используете не известно.

    Судя по красивой минуте — отдача происходит по таймауту. Проблема может быть нодовском коде (что скорее всего), либо протокольной (к примеру после минуты ожидания закрытия потока — он закрывается автоматом).
    Ответ написан
  • Что будет при паблишинге приложения, созданного нелегально?

    @rozhik
    Результат случаен. Если найдут — то ждет в меру желаний возможностей владельцев.
    Технически по APK узнать используется или нет библиотека X тривиально (при прятании идет игра пушка и броня).
    То есть всё зависит от удачи. Но если что-то получится успешным — 100% найдут.
    Ответ написан
    Комментировать
  • Разница между Express и Connect

    @rozhik
    Express надстройка над Connect. Express — фреймворк, Connect — библиотека.

    модули экспресса обратно совместимыми к коннекту — нет. Но «модули коннекта» совместимы с экспресом.
    Ответ написан
    Комментировать
  • Как убрать из обработки один java script на сайте?

    @rozhik
    Если правильно написан скрипт — то никак. Он полностью отвязывается от всего, что доступно вне его контекста. Но подобные скрипты редкость.
    Есть надежда на другое. Если Вы сохраните у себя в переменных как минимум один, которой пользуется скрипт, и замените его на выброс исключения, или что-то подобное. То тогда сможете пользоваться как оригинальным методом, так и убить ненужный скрипт.
    Если вы бросите сюда код скрипта — то помогу. А так пример на пальцах:
    (function() { var badFunc = function() { console.log( 'Im bad'); setTimeout( badFunc, 10 ); } badFunc(); })()
    Как видите, в этом коде, закрыто в наружу всё, за исключением console.log;
    Убиваем скрипт так:
    console.log1 = console.log; console.log = function() { throw 'Death'; }
    Ответ написан
    Комментировать