• Как сделать сервер отказоустойчивым?

    DevMan
    @DevMan
    Как я понимаю днс привязываются к одному хостеру, а сразу к двум нельзя.
    https://ru.wikipedia.org/wiki/Round_robin_DNS
    Ответ написан
    4 комментария
  • Как реализовать отказоустойчивость mysql?

    MrFrizzy
    @MrFrizzy
    1) master-master на mariadb - каждый сервер будет иметь свой уникальный gtid и именно мария в отличии от оригинального mysql умеет хорошо разруливать бинарные логи и даже мульти репликацию. Но нужно как минимум прописать сдвиг auto_increment на северах, чтобы он были уникальными
    2) galera cluster - где-то на 30% медленнее - транзакция должна пройти на всех нодах, только innodb движок, нужно следить, чтобы не было myisam, нужен кворум нод, то есть две ноды лучше не делать, если одна 100% будет уходить в оффлайн

    В первом случае синхронизация может быть с небольшой задержкой на сложных изменениях, но сама схема вполне рабочая.
    Все рецепты настроек есть в гугле :)
    Ответ написан
    Комментировать
  • Как починить терминал Linux?

    Вариантов решения есть не один:
    1. Настроить сервер, чтобы нельзя было использовать какие-то символы, а только "нормальные". Возможно, это решается не средствами сервера, а какими-нибудь плагинами. Для CS1.6 были подобные.
    2. Не держать screen. Пусть логируется в файлы. Да, так управлять несколько неудобнее, но и падать меньше будет.
    3. Возможно, нужна более новая версия screen либо какой-то библиотеки, если она есть.
    ...
    Возможно, это делают намеренно, чтобы вызвать отказ в обслуживании. И придётся изучать вопрос, искать где в чём уязвимость, и способы закрытия/обхода. Для примера, в одной из версий сервера cs1.6, была дыра, когда атакующий мог послать специфичную команду, которая ложила сервер, или он перезапускался (если настроено). И долго не могли выпустить (не знаю почему) обновление с закрытой дырой. Обходились хитрым правилом в iptables, которое дропало такой опасный пакет.
    В любом случае, для точного ответа слишком мало данных.
    Ответ написан
    5 комментариев
  • Парсинг json в go?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Комментировать
  • На чём писать back-end платформы с видео?

    Неверный вопрос.
    Неверные требования.
    Неверное понимание проекта.

    1) Ваша сейчас единственная задача - это дать ответ на три вопроса:

    - какие деньги вы готовы потратить на этот проект.
    - какие деньги вы готовы потратить на продвижение проекта.
    - какую главную функциональность вы хотите получить.

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

    3) Стабильная и быстрая работа платформы не зависимо от количества пользователей - глупая постановка требований. Ибо очевидно, что если платформа держит 1000 юзеров в сутки, то с увеличением до 200к юзеров, появятся новые требования к железу, архитектуре и подходах к разработке.

    4) Но, если быть честным, вы похоже на типичного "бизнесмена", который думает, что запилит какой-то сайт с курсами, и к нему начнут валить 10к людей в день, хотя по факту будет 5-10 человека.

    Я видел много успешных проектов с хорошим маркетингом и отделом продаж, на говно-стеке, который постепенно рефакторили и переводили на новый стек с ростом команды. И видел много провальных проектов на "крутой" технологии без денег и юзеров.

    Бизнесмен должен думать о деньгах, а не о том, почему .net хуже или лучше, php.
    Ответ написан
    Комментировать
  • WebSocket - в чем разница между байтовой передачей и текстовой?

    shai_hulud
    @shai_hulud
    https://tools.ietf.org/html/rfc6455#section-5.6

    Data frames carry application-layer and/or extension-layer data. The
    opcode determines the interpretation of the data:

    Text

    The "Payload data" is text data encoded as UTF-8. Note that a
    particular text frame might include a partial UTF-8 sequence;
    however, the whole message MUST contain valid UTF-8. Invalid
    UTF-8 in reassembled messages is handled as described in
    Section 8.1.

    Binary

    The "Payload data" is arbitrary binary data whose interpretation
    is solely up to the application layer.


    Текстовый фрейм это бинарный фрейм в котором контент это UTF-8 закодированный текст. Это сделано было скорее всего для удоства использования WS из браузера т.к. в JS в то время не было удобного представления бинарный данных.
    Ответ написан
    Комментировать
  • Как распознать картинку с камеры на javascript и найти её в базе?

    @rPman
    Потому что задача не такая простая как хотелось бы, да, перцептивное хеширование и opencl верное направление, но ваша проблема именно в том что вы работаете с камерой а не типличными условиям и готовыми картинками.

    Камера - это повороты и перспективные искажения, проблемы с неравномерной яркостью и мерцанием освещения, инертностью матрицы и глюки алгоритмов пост обработки в смартфонах.

    Вы зависните глубоко и на долго тупо на определении границ вашего изображения, и хорошо, если бы оно было бы геометрически простым, типа прямоугольник
    Ответ написан
    Комментировать
  • Стоит ли работать под руководством начальников, которые считают себя умнее других?

    @WasteMan
    Тут 2 варианты.
    1. Они на самом деле не дураки. Или так - не они на самом деле дураки.
    Без обид но в данном случае "дураком"=не правым можете быть и вы.
    Просто мы так устроены что за собой не замечаем - кто же усомнится в собственной правоте.
    2. Они на самом деле "дураки". В кавычках потому что у них тоже может быть начальник и ваш начальник считает что его не прав, но он вынужден проводить его мнения подчиненным и вам он прямо об этом не скажет, т.к. субординация.

    Спорить - однозначно нет.
    В лучшем случае он вежливо выслушает и скажет - "делай как я сказал".
    Главное иметь доказательство (письмо, распоряжение) что вы делаете ровно то что сказал начальник. Чтобы в случае чего он потом не переобулся - "ты меня неправильно понял"

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

    Желание думать - так думайте параллельно "в стол" "про себя".
    "Все решает начальство" - это 99,9999%. Это норма.
    Ответ написан
    Комментировать
  • Стоит ли работать под руководством начальников, которые считают себя умнее других?

    @Dobryak88
    Системный администратор
    1) Если вопрос именно про ИТ, то очень многие ИТ-специалисты обладают очень высоким ЧСВ. Иногда оправданно, иногда нет. Нужно определить, у кого из вас с начальником самомнение выше уровня действительной значимости.
    2) Разногласия должны быть: если мнение начальника и исполнителя совпадают, то очень легко представить, что они оба ошибаются. В споре вскрываются аргументы разных точек зрения, без этого не найти лучший вариант.
    3) "Терпеть тупого начальника" - один из необходимых софт-скиллов, а личное профессиональное развитие постепенно сокращает необходимость развивать именно этот навык
    Ответ написан
    Комментировать
  • Стоит ли работать под руководством начальников, которые считают себя умнее других?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    я начальник, ты - дурак

    Слишком общая постановка проблемы. Решение зависит от того, как именно работает этот принцип. Кроме того, он даже не звучит. Логичнее было бы "я умный, ты - дурак" или "я начальник, а ты - подчиненный, и должен выполнять приказы".

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

    Но подумайте хорошо, что является причиной такого поведения начальника. Дело в том, что есть популярное когнитивное искажение, которое случаи успеха объясняет личными качествами, а случаи провала - обстоятельствами. Причем, в случае провала начальника, именно вы будете являться этими обстоятельствами. Это абсолютно здоровое когнитивное искажение, которое мы имеем благодаря эволюции, позволяющее сохранить самооценку. Конечно, не очень честно самоутверждаться за счет других, но фишка в том, что человек верит, что он прав, т.е. по сути думает, что поступает честно. Проблема усугубляется еще и тем, что эмоциональный накал работает как коэффициент, увеличивающий искажение. Забавно, что у подчиненных с неустойчивой самооценкой точно такое же искажение, заставляющее их думать, что они правы, а начальник - козел. Поэтому здесь нужно смотреть комплексно: а именно, можно ли достучаться до начальника, приведя свои аргументы в свою пользу и выслушав его аргументы. Рецепт здесь сложно привести, потому что много факторов влияют на решение. Например, у начальника, точнее у бизнеса в целом, может банально не быть времени на споры, поэтому принимается быстрое и не самое эффективное решение.

    Это искажение сломано у депрессивных людей, поэтому они склонны во многом винить себя, от чего и страдают. Если вы такой человек, то ваше мнение можно считать чуть более объективным, однако держать его с таким начальником придется при себе. Ведь теперь вы знаете, что такой изъян в других людях в виде искажения - это нормально, поэтому с этим просто придется считаться.

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

    Lucian
    @Lucian
    https://t.me/MakeFreelance
    Привет, жизнь это выбор, каждый выбирает что ему делать, задавая подобный вопрос, вы перекладываете ответственность за вашу жизнь на других, вы хотите чтобы за вас решили, стоит ли вам работать у такого начальника или нет. Полагаю ваш начальник не просто начальник, а человек который умеет брать ответственность на себя, иначе он не занимал бы свою должность.

    Если вы видите что начальник считает что он умнее вас, то можно сказать и обратное, вы считаете что вы умнее начальства, тут нужно выслушать обе стороны вас и вашего начальника.
    Ответ написан
    1 комментарий
  • Самый простой способ реализовать real time MySQL (без firebase!) базу данных для маленького приложения?

    @xfg
    Базу данных можно выбрать любую. Она не играет роли в realtime приложениях. Позвольте вам немного объяснить. Для передачи данных между клиентом и сервером в браузере существует всего два протокола. HTTP и Websocket. Firebase не магия и также использует их. Если браузером не поддерживается Websocket, то firebase откатывается на HTTP. Используя общераспространенный подход к разработке на PHP у вас не получится использовать websocket протокол поскольку типичные PHP приложения не живут дольше 1 запроса. Соответственно да, в таком варианте остается только ajax. Но точно также работает и firebase если в браузере нет поддержки websocket, так работает facebook, telegram и много всего остального. Они используют long-polling. Клиент отправляет запрос к скрипту на сервер, скрипт в цикле опрашивает хранилище mysql или более продвинутый вариант mysql+redis (чтобы не грузить запросами mysql) и пока данных не будет, цикл так и продолжит крутиться, для клиента это просто выглядит как повисший запрос к серверу. Как только данные появляются, они отправляются на клиент, соединение разрывается, а клиент сразу же отправляет новый запрос.

    Есть развитие этой идеи. Называется HTTP Streaming. Отличие от long-polling в том, что после отправки данных клиенту соединение не разрывается, а сервер продолжает отправлять последующие данные по этому же соединению. Соединение разрывается по таймауту. Минус в том, что прокси-сервера могут кешировать небольшие пакеты данных и данные нужно раздувать например пробелами, чтобы пакет данных достигал минимального размера и был способен пробить кеш прокси-сервера. Плюс в том, что если у вас данные для клиента появляются скажем с переодичностью раз в секунду, то не будет происходить постоянного открытия-закрытия соединения как при long-polling.

    Есть вариант, когда можно реализовать небольшую прослойку на socket.io. Ваше PHP приложение пишет данные для клиента например в redis. Приложение на socket.io подписывается на redis. Когда PHP что-то отправляет в redis, то socket.io мгновенно об этом узнает и рассылает это событие по websocket протоколу всем подключенным клиентам. Минусы. Раздуваете стек. Нет консистентности данных между записью в основное хранилище (mysql/postgre/mongo/etc) и redis. Соответственно может возникнуть ситуация, когда данные записали, но в redis событие не ушло. Поменяете местами, будет наоборот, событие есть, данных в базе нет.

    Вариантов в целом очень много. Всё это называется Comet. Вам проще всего реализовать long-polling.

    А реал-тайм база, которая умела пушить данные клиенту по tcp протоколу (но не в браузер) была и называлась она rethinkdb.com. Ныне не развивается. IP в России заблокирован. На сайт можно сходить по VPN.
    Ответ написан
    3 комментария
  • В каком формате лучше сохранить длинную лекцию, которая является изображениями из презентации плюс звук спикера?

    nidalee
    @nidalee
    Используйте контейнер MP4, кодек H.264, но для сжатия не указывайте битрейт, а пользуйтесь CRF. Чего-то в районе 25-30 должно хватить. Чем больше число, тем хуже качество, но меньше размер.
    This command encodes a video with good quality, using slower preset to achieve better compression:

    ffmpeg -i input.avi -c:v libx264 -preset slow -crf 22 -c:a copy output.mkv
    https://trac.ffmpeg.org/wiki/Encode/H.264
    Это можно сделать либо через ffmpeg, либо через любой его GUI, например Handbrake.

    Дополнительно файл можно сжать сильнее, если уменьшить его FPS. Поскольку это слайдшоу, 1 FPS должно хватить за глаза, если изображения статичны.
    С готовым видео после ffmpeg-а это можно сделать, например, с помощью mp4box:
    mp4box -add input.mp4:fps=1 -new output.mp4


    Лекция у вас в каком виде? Уже готовый видеофайл?
    Ответ написан
    2 комментария
  • Почему зависает сайт при свободной памяти и процессоре?

    @FOcuswOwX
    Сайт не обращается к каким-нибудь сторонним ресурсам? Похоже что ответ не получается и зависает
    Ответ написан
    3 комментария
  • Почему зависает сайт при свободной памяти и процессоре?

    Age1mar
    @Age1mar
    DevOps a little
    Если по "железным" ресурсам всё проверили, то попробуйте использовать систему распределённой трассировки типа zipkin. Может быть такая система сможет помочь найти узкие места.
    Ответ написан
    Комментировать
  • Как переносить программу которая использует MySQL?

    @Slawka_SoD
    Если для работы вашей программы необходима БД и в ней нет чего-то специфического попробуйте использовать sqlite.
    Установки не требуется, все данные в одном файле.
    Ответ написан
    Комментировать
  • Как обработать и сравнить большой массив данных?

    erge
    @erge
    Примус починяю
    вариантов есть несколько....
    1) загружаете данные доступными вам способами во временную таблицу, далее UPDATE по этой таблице
    если из PHP, то собрать из массива запрос вида
    INSERT INTO tmp_goods (name, article, price)
      VALUES ('NAME_1', 'ARTICLE_1', PRICE 1),
    .......
             ('NAME_N', 'ARTICLE_N', PRICE_N)
    ;


    после чего выполнить UPDATE:
    UPDATE goods g
      INNER JOIN tmp_goods t ON t.article = g.article
      SET g.price = t.price
      WHERE g.price != t.price
    ;


    и очистить tmp_goods если она более не нужна.

    2) собрать из массива запрос вида:
    UPDATE goods
    SET price = CASE article
    WHEN ARTICLE_1 THEN PRICE_1
    WHEN ARTICLE_2 THEN PRICE_2
    ....
    ELSE price END


    так же есть операторы:
    REPLACE ,
    INSERT ON DUPLICATE KEY UPDATE
    и вообще погуглите - MySQL множественный апдейт

    и... еще вариант:
    можно обойтись без временной таблицы (как в варианте 1)...
    соберите из массива запрос вида:

    UPDATE goods g
      INNER JOIN (
        SELECT 'ARTICLE-1' AS article, PRICE_1 AS price UNION
        SELECT 'ARTICLE-2', PRICE_2 UNION
        SELECT 'ARTICLE-3', PRICE_3 UNION
    ...
        SELECT 'ARTICLE-N', PRICE_N
        ) t ON t.article = g.article
      SET g.price = t.price
      WHERE g.price != t.price
    ;


    смотрите пример на sqlfiddle (сосбтвенно update в левом поле описания схемы)
    Ответ написан
    Комментировать
  • Как распоточить работу скрипта?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    Очереди ваше все. Redis, RabbitMQ и другие) а там только воркеров добавляй сколько надо
    Ответ написан
    Комментировать