Задать вопрос
  • Почему крупные библиотеки для обработки мультимедиа используют чистый си?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Просто многие библиотеки зависимости используют си, кроме того это очень близко к железу, что для медиа очень важно и помогает использовать расширенные инструкции процессора напрямую.
    Ответ написан
    7 комментариев
  • Как автоматизировать установку программного обеспечения и настройку windows машины?

    3r1k
    @3r1k
    the quieter you become, the more you hear
    Может проще сделать виртуалку, раскатать там всё ПО, сделать бэкап и каждый раз восстанавливать, как новую...
    Ответ написан
    8 комментариев
  • Как автоматизировать установку программного обеспечения и настройку windows машины?

    fox_12
    @fox_12
    Расставляю биты, управляю заряженными частицами
    Установили Windows, установили драйвера и все нужное ПО - сделали образ диска. Каждые 4 дня - просто восстанавливать ОС из образа.
    Ответ написан
    Комментировать
  • Есть ли перспективы у бэкендера на Node.js?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Находите себе продуктовую компанию с этим стеком и вперед.
    Только будете писать не только бэк но и фронт
    Ответ написан
    9 комментариев
  • Как принять скобку в переменную из Textarea в jQuery / JavaScript?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    replace() так не работает: ('<test>').replace(['<', '>'], ''); // "<test>"

    Заменить угловые скобки можно так: content = content.replace(/[<>]/g, '');
    Это регулярное выражение / /, которое заменяет "глобально" (флаг g) во всей строке
    любой из симолов внутри квадратных скобок [ ] , на пустую строку ''.

    Уверены, что хотите в превью пропускать любые теги, включая script ? Это может быть небезопасно.

    Более разумная, может, идея – создать в теневой DOM узел с этим HTML, в нём удалить запретные теги через обычные querySelectorAll('script') и затем уцелевшее дерево вставить в элемент для предпросмотра.

    Другой вариант — вставить этот HTML в iFrame с максимально строгими запретами.
    Ответ написан
    1 комментарий
  • Какой можно применить алгоритм для хранение индекса для 50 миллиардов записей в golang?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Немного бухгалтерии. Если взять по максимуму.

    Размер одной записи должен быть порядка 60 + 32 +8 = 100 символов (байт для простоты)

    При 50 млрд записей объем хранимых данных должен быть порядка

    50 000 000 000 * 100 = 5 000 000 000 000 = 5 триллионов байт.

    В дисковом хранении это будет примерно 4.5 терабайта. Задачка для in-memory неподъемная. Нужен диск + мемори.

    Если я там где-то ошибся в расчетах - то только в средних значениях. Если подставить не максимумы а среднее - то цифры будут поскромнее. Но в любом случае - многовастенько для покупки памяти.

    Вобщем нужна дисковая БД которая встраивается в приложение. На требование менеджеров которые запретили использовать БД забейте. Они ничего не понимают. Делайте БД встраиваемую в приложение. В качестве таких (встраиваемых систем можно поробовать) LevelDb, BerkeleyDb, RocksDb. Они поддерживают индекс класса B+Tree и это даст возможность искать группы записей по одному ID. Для этого класса систем любую запись можно найти за 4-5 дисковых IOPS. Если какдый IOPS стоит 15 мс (это я так мерял свой собственный магнитный HDD) то любой поиск группы ключей для TTFB будет порядка 15 * 5 = 75 милисекунд. Ну если вы поставите SSD - то быстрее.

    По поводу предложений хранить в файлах. До того как обсуждать это - надо уяснить требования по времени отклика. Сколько секунд вы согласны ждать - насколько можно и партицировать (или шардировать ваш файл).
    В простейшем случае мы делим большой CSV файл на 512 partitions по хешу от ID и получаем соотв время фулл-скана всего файла поделенное на 512. Дальше - играйтесь с этим параметром партишенинга выводя его на доступный уровень отклика. Из недостатков - будет россыпь файлов. Надо почиать документацию на вашу файловую систему (ext4?) и тюнить ее так чтоб она не сдохла от такого числа inodes.

    Я поддержу оба сценария. И с встраиваемой БД и с файлами. Но с БД надежнее т.к. есть транзакции а файлы у вас могут быть в крешнутом состоянии долго. И вы об этом ничего знать не будете.

    По поводу Parquet. Не взлетит. Скорее всего индекс по данному типу файла - это совсем не то что вкладывают туда релационные системы. Обычно Parquet/Orc/Delta вкладывают в индекс смысл - отбрасывания тех полосок данных (stripes) которые бесполезны при чтении всего файла. Такой индес - обычно просто либо range-признак либо карта Блума. И в случае с range - дает эффект на сортированных данных. Для прочих - будет бесполезно т.к. фулл-скан все равно обеспечен. А если фулл-скан то зачем тогда вообще индекс.

    Вобщем для дизайна архитектуры нам нужны цифры. Средние длины по колонкам. И я-бы еще запросил кардинальность по полю ID.
    Ответ написан
    7 комментариев
  • Как передать переменную из одной функции в другую?

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

    sergiks
    @sergiks Куратор тега Веб-разработка
    ♬♬
    Делал сто лет назад проект с видеоуроками. На Амазоне в S3 лежали файлы, раздавались в плеер через CloudFront.

    Перед каждым воспроизведением генерилась уникальная ссылка с подписью, которая привязана ко времени и «живёт» недолго – см. Signed URLs

    Так что если решили вопрос с оплатой Амазона, я бы рекомендовал через них реализовать.

    Или посмотрите сервис Kinescope.ru – они предлагают услугу доставки контента и его защиты.
    Ответ написан
    1 комментарий
  • Как защитить видео на сайте?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    посмотрите на wistia.com, в хитори нашел
    видел на одном канале и просто скачать не получилось, увы - не помню технически как было сделано, и УРЛ забыл
    Ответ написан
    Комментировать
  • Как обрезать json до определённого тега?

    rozhnev
    @rozhnev
    Fullstack programmer, DBA, медленно, дорого
    Я бы посоветовал превратить JSON в структуру и с ней производить все преобразования. На выходе снова превратить в JSON
    Ответ написан
    Комментировать
  • Как занять домен первым?

    CityCat4
    @CityCat4
    Дома с переломом ноги
    Подать заявку на аукцион.

    Правда тут надо вот чего иметь в виду. Если регистратор посчитает, что этот домен можно пристроить и повыгоднее - то он подключит к аукциону карманную конторку, которая тоже подаст заявку и будет постоянно повышать ставку. Выиграть аукцион можно - но по цене, заметно превышающей обычную.
    Можно написать текущему владельцу, чтобы он сделал направленный перевод домена
    Ответ написан
    Комментировать
  • Как занять домен первым?

    @TheBigBear
    СтарОдмины мы
    Даже не пытайся
    Боты за такими освобождающимися доменами следят
    Я как-то ради прикола решил один ненужный домен так с одного на другой договор в NICе перехватить
    Сидел в обоих договорах одновременно. Только домен освободился - сразу пытался зарегистрировать в другом договоре. Фиг вам! Домен уже кем-то зарегистрировался и на следующий день висел новый сайт с надписью "Этот домен возможно продается. Связь с владельцем ЗДЕСЬ"
    Ответ написан
    6 комментариев
  • Зачем задавать приватный модификатор доступа для свойств класса?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    У вас очень логичный вопрос на счет сеттера: сеттер полностью уничтожает задумку с инкапсуляцией. Правильно это называется "семантическое нарушение инкапсуляции" — то есть как-бы мы инкапсулировали, но по факту назад открыли прямую запись в свойство напрямую. Все доводы "ну мы можем в сеттере валидировать" не корректны

    Правильным способом будет не использовать сеттеры. Вот моя статья на эту тему:
    https://habr.com/ru/post/469323/

    Более подробно: каждый класс нужно проектирвовать так, чтобы данные внутри были максимально связаны. Например каждый метод работать должен в хорошем случае с максимальным числом полей класса, тогда у него высокий cohesion... В тоже время снаружи наужно работать с максимальн омалым числом метода, тогда будет низкая связанность (coupling). Это пара принципов из GRASP.
    Когда вы делаете сеттеры и геттеры, то у вас данные внутри между собой почти никак не взаимодействут: с геттером работают снаружи, с сеттером работаю снаружи — весь класс нараспашку, а в нем в 100% случаев появляются данные, которые вместе не должны находиться и никак не связаны — анрушена и абстракция и инвариант и много чего еще...

    Про инвариант отдельно: например есть платеж, у него есть значение, с которым платеж инициирвоан (initValue), есть значение холда (holdAmount) и есть значение чарджа на списание (chargeAmount)
    Когда вы работаете с платежом, контролируя ивнариант в самом классе, то ваш каждый метод првоеряет др значения и позволяет перейти к др состоянию... методов будет 2-3, все инкапсулировано и безопасно.

    Например:
    class Payment {
         pub func charge(amount int) void {
              if (this.holdAmount < amount && this.initAmount < amount) {
                   throw new PaymentException('Unavailable charge amount')
              }
    
               if (this.status === PaymentStatus:finish) {
                   throw new PaymentException('Payment already fisnished')
              }
    
              this.chargeAmount = amount
              this.holdAmount -= amount
              this.status = PaymentStatus:finish
         }
    }


    Тут в одном методе полные проверки и класс сам контролирует все состояние внутри, также соблюдается закон Деметры. У даннго кода высокий cohesion (из GRASP), тк внутри идет плотная работа с внутр данными (значит они корректно тут закроекны) и низкий coupling ( с теми данными для данного кейса только один метод работы, все внутри)

    Когда вы раскроете сеттерами и геттерами, то ваше состояние становится непредсказуемо и полагается только на то, что снаружи точно подумали об инварианте (нет)
    Ответ написан
    18 комментариев
  • Зачем задавать приватный модификатор доступа для свойств класса?

    Adamos
    @Adamos
    class VeryOpenOne
    {
    public $property;
    }
    $voo = new VeryOpenOne();
    $name = 'pro' . 'perty';
    $voo->$name = 'Пытаясь отрефакторить тот класс, ' .
      'ты хрен найдешь, что в этой строчке меняется эта переменная. ' .
      'Никакое самое умное IDE не поможет';
    Ответ написан
    1 комментарий
  • Как передать IP адрес сервера в Docker контейнер?

    2ord
    @2ord
    TCP-сервер должен слушать на 0.0.0.0:9002.
    Ответ написан
    Комментировать
  • Как избавиться от ddos на конкретный домен?

    mikes
    @mikes
    самое простое закрыть админку .htaccess и разрешить с конкретного ip который ваш
    Ответ написан
    Комментировать
  • Почему не работает код в firefox?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Потому, что в хроме авторизованы, есть все куки. А в Фоксе – нет.
    И бэк возвращает вместо валидного JSON'а, какое-нибудь «вам надо зарегистрироваться».

    (дичайшее предположение моего хрустального шара, я не при чём)
    Ответ написан
    Комментировать
  • В чем вообще соль задания nullable полей в БД, вместо пустых значений по умолчанию, есть ли в этом какой-то сакральный смысл?

    yarkov
    @yarkov
    Помог ответ? Отметь решением.
    вместо пустых значений по умолчанию

    Есть у вас поле id с типом int. Что должно быть в качестве пустого значения?
    Есть у вас поле name с типом varchar. Что должно быть в качестве пустого значения?
    NULL как универсальное значение, указывающее что в поле ничего не записано.
    При проектировании БД мы можем поле сделать nullable, а можем просто назначить ему по умолчанию '', 0, '[]', и т.д., по контексту.

    Представим ситуацию, что у нас есть в бд поле-флаг, который указывает что мы хотим получать рассылку новостей с сайта. Если по-умолчанию будет 0, то пользователь отказался. Если 1, то согласился.
    А если NULL, то пользователь ещё не определился с выбором и мы при каждом посещении сайта будем его спрашивать не хочет ли он подписаться на рассылку, пока он не выберет 0 или 1.
    Ответ написан
  • В чем вообще соль задания nullable полей в БД, вместо пустых значений по умолчанию, есть ли в этом какой-то сакральный смысл?

    Adamos
    @Adamos
    NULL - это не пустое поле. Это "поле не заполнено".
    Используется в тех случаях, когда разница между этими состояниями - есть.
    Кроме того, у числовых полей или дат просто нет "пустого" варианта.
    0 и '1970-01-01 0:00:00' - это значения, которые вполне могут иметь смысл.
    Например, при подсчете средних значений или интервалов NULL позволяет исключить ненужные строки.

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

    сделайте страницу на сайте с тегами title + description = gymbalnce.ru
    внутри произвольный текст, содержащий gymbalnce.ru пару раз.
    и проверьте, через какое-то время должна страница появиться в поиске

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

    также понятно, что таких страниц можно нашлепать сколько угодно, под разные ошибки.
    если вариантов ошибок мало, то можно попробовать просто в главную страницу добавить в текст (не в теги) слова с ошибкой "gymbalnce.ru" под каким-то соусом, небольшим шрифтом внизу и поисковик вполне может схавать и выдавать вас по таким запросам в топе, так как уровень конкуренции по ним ниже плинтуса.
    Ответ написан
    5 комментариев