Задать вопрос
  • Какую структуру данных выбрать для описания конфигуратора изделия?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Непонятно зачем автор протегал это АЛГОРИТМАМИ. Тут вобщем-то имеет место обычная работа с формочкой.
    Дизайнеры форм лабают это и не зная ваших умных абстракций. Просто пишут там хендлер на каждую радио-кнопку или на чек-боксик и в зависимости от действий - скрывают некоторые филды или подсвечивают.

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

    Гуглить можно по FSM (Finite State Machine) и библиотек по сям и питонам будет много.

    Вообще данная задача еще не набрала критическую массу знаний чтоб кодить ее в автоматах.
    Время потраченное на библиотеки и на привязку их к формам может быть слишком большим
    и эффекта не будет. Будет разочарование.
    Ответ написан
    3 комментария
  • Способ получения ФИО через номер телефона или соц сети?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Поскольку это сбор сведений на людей то легального способа скорее всего нет. А если он появляется
    его быстро закрывают. Государство и правозащитники здесь вобщем-то едины. Такие базы не должны
    быть открытыми никогда.

    Базы для "пробива" предположительно лежат во всяких Даркнетах но я ХЗ... не видел никогда.
    Ответ написан
    Комментировать
  • Как хранить множество слов в БД?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Тут сложно ответить однозначно. Тут есть какое-то дублирование технологий. С одной стороны - есть некий
    умный софт (автор пишет nlp-средство) который сделал разбиение писем на слова. Зачем именно nlp? В чем там была глубокая идея? Разве нельзя это-же разбиение сделать с помощью
    - Postgres
    - MySQL
    - SQlite
    как предлагали выше ?

    Так было-бы проще. А теперь мы все думаем - зачем так сложно?
    Ответ написан
    Комментировать
  • Как эффективно использовать 'сервисы' для обращения к БД?

    mayton2019
    @mayton2019
    Bigdata Engineer
    По поводу смыслов. Обычно с БД работают сущностями (entities). Я не специалист в Node и я не знаю
    как у вас принято. Кажется в новых ecma-спецификациях уже ввели понятие класса.

    В данном коде идет проверка на то что email существует. Но полезный эффект - слабый.
    Я-бы сразу возвращал сущность пользователя. Чтоб не бегать потом в базу еще
    раз когда надо поискать имя или дату регистрации. Ну идея такая что
    если вы уж пошли в базу (это сетевой round-trip) то постарайтесь
    за этот трип собрать максимум информации.

    Вот это более рационально
    export const findUserEntityByEmail = async (
      email: string
    ): Promise<User> => {
      try {
        const users = await db
          .query('SELECT * FROM accounts WHERE email = $1', [email])


    Тоже самое относится к выборкам множества строк по множеству ключей.
    Лучше сделать 1 callback который вернет коллекцию чем для коллекции
    ключей дергать один несчастный метод который по штучке что-то достает.

    Еще важне - join. Если соединяете сущности - то соединяйте сразу в БД
    без попыток соединять в приложении. Это кстати еще бонус к компетенции
    в части ACID.

    Тоесть идеальный вариант работы с БД - запросить пакетом всю информацию
    что может потербоваться на ближайшие несколько секунд. Это рациональнее
    чем потом что-то подтягивать.
    Ответ написан
    6 комментариев
  • Как реализовать классификатор на датасете рукописных цифр?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Эффективность идеи зависит тоже от того в каком виде представлены данные. Если рукописные цифры - это квадратные картинки (как в наборе MNIST) то тогда решается просто. Считай расстояние Хемминга для всех картинок ко всем. Там где расстояние будет минимально - найден кластер картинок. Или класс символов похожих на букву. Далее можешь искать среднее. Завести вещественные значения для кластера. (Тут кстати тебя надо спросить у тебя 1-битные изображения или GrayScale?)

    Если цифры еще не размечены на атласе картинок и тебе предстоит еще и найти их место-положение - то это
    задача уровня FineReader/Tesseract. Это посложнее будет и идей и методов там сразу еще +10 штук.

    Поэтому опиши как выглядят исходные данные. Понял да? Идей целый вагон. Только не заставляй распылятся на пустяки.
    Ответ написан
  • Почему space 32 в ascii называется printable?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Символы с кодами от 0 до 31 куда входит ТАБ являются управляющими символами (comma control / control symbold). И их задача - вызывать разные эффекты при выводе строки на экран. Звук. Backspace. Движения
    курсора в разные стороны. Поэтому данный диапазон символов не рекомендуется к оформлению текста. Потому что при печати текста на принтер например - эффект непредсказуем. Многие из них были частью сетевых протоколов и сейчас уже не используются.

    Символ табуляции в середине 20-го века использовали для оформления исходников на ассемблере
    ради экономии места. Это было удобно. Когда вся память ПК мерялась десятком килобайт - надо было
    экономить даже на тексте программы. И это реально работало. В современной разработке вообще
    нет необходимости использовать TAB (0x09). Ну разве что в Makefile он по старинке еще используется.
    Но мейк делали такие длинно-бородые колдуны что там нет диалога о модернизации. Часть колдунов
    уже померли. А оставшимся пофиг.

    Еще иногда символ TAB я встречаю в экспортах баз данных в формате TSV (Tab-Separated) но
    честно говоря на экране такой дамп выглядит ужасно. Все равно по 1 линии выравнивание не
    получается. Поэтому втопку такое.

    Сегодня в современнных IDE символ табуляции автоматически заменяется на серию пробелов. Поэтому
    смысла спорить о ТАБ нет никакого. Потому что и символа то уже нет. Есть просто клавиша которая
    имеет семантику добивания пробелов.

    UPD: Для исходников типа Python/Scala TAB (0x09) может создавать проблемы. Особенно когда идет
    микс отступов например одна строка TAB а другая spaces. Это сложные невидимые глазами
    проблемы. Только компиллятор увидит и ругнётся. Поэтому - выпиливайте ТАБы как сорняк.
    Чем скорее - тем лучше.
    Ответ написан
    1 комментарий
  • Как решить ошибку при установке Ubuntu 18.04?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Текущая LTS версия 22.0. Зачем автор ставит морально устаревшую?
    Ответ написан
  • Для чего на микрике мыши 3 контакта?

    mayton2019
    @mayton2019
    Bigdata Engineer
    В телефонных станциях мне попадался экзотический вариант такого переключателя. Тип - "молоток".
    В нем красный был безобравно соединен с одним из других контактов. Разумеется это был не микрик.
    Это было реле. Даже в момент переключения был безобрывно соединен.
    Ответ написан
    Комментировать
  • Какую key-value БД использовать с данными в 10 млрд строк записей?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Несколько мыслей.

    1) У меня устойчивое дежа-вю. Периодически в топик заходят люди с именно этим вопросом. Разница только в количестве. Кому 1 млрд. Кому 10. Можно также поискать и слинковать эти вопросы в один большой вопрос.

    2) MySQL который указан в тегах - нормально справляется с этой задачей. Он и не такое число строк
    умеет хранить. И если взять MariaDb - там есть куча новых engines которые можно крутить для тюнинга
    именно скорости чтения. Разумеется жертвуя чем-то другим. Транзакциями и записью например.

    3) Непонятно что такое минимальное время? Если использовать дисковую БД типа MySQL то деградация времени
    поиска будет примерно зависеть от логарифма количества строк. Тоесть деградация будет но очень медленно.
    Для 10 млрд индекс по key будет содержать порядка 4-5 уровней BTree дерева. Тоесть дисковой системе
    нужно будет сделать до 5 или до 6 рандомных чтений (если нужные данные лежат в таблице). Это достаточно
    быстро для того чтобы моргнуть глазом за это время. Рандомное чтение любого блока из магнитного диска
    класса SATA-3 занимает порядка 20 милисекунд. Тоесть для 5 уровней - это 100 милисекунд. Для дисков
    класса SSD и это время можно уже считать меньше милисекунды. Точно я не знаю надо мерять.

    Испортить это время может сетевой лаг который в данной задаче мы просто не учитываем. Считаем что сеть идеальна.

    4) Непонятно зачем здесь указан Redis. Его задача не хранить 10 млрд а хранить только горячие
    ключи по котороым идет очень частый доступ. Если автор хочет In-memory хранение - то время можно
    еще сильнее улучшить. Его можно свести практически до нуля (я вангую несколько микро-секунд)
    но придется прикупить планок памяти побольше и посчитать сколько памяти
    надо для 10 млрд key/values неизвестной длины. Вообще крутить регулятор в направлении
    микро-секунд нет особого смысла т.к. другие звенья вашего стека (приложение и сеть) могут
    быть на порядки медленнее а это вообще нивелирует всю пользу от такой оптимизации.
    Ответ написан
    41 комментарий
  • Нужно ли хранить сервер и клиент в разных репозиториях?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Это организационный вопрос. Если будут 2 команды - то лучше разделить. Пускай каждая коммитит в свой. Так будет меньше споров и конфликтов. Но есть смысл разделять какой-то sub-module для публикации сетевого стандарта или протокола как эти две части друг с другом разговаривают. Это может быть Swagger-файл или GraphQL или SOAP или любой вообще описатель сетевого взаимодействия.
    Ответ написан
    Комментировать
  • На сколько сложно утроиться джуном на позицию C++ dev?

    mayton2019
    @mayton2019
    Bigdata Engineer
    serhiops, скажу по себе что совмещать работу и учебу почти невозможно. Что-то одно ты потеряешь. Или сессию завалишь или на работе будешь уставать морально как чорт.

    Вообще учеба чем хороша. Нормальной жизнью студента. Где можно бухнуть. Где можно погулять со студентками.

    Погрузиться в нудоство взрослого мира ты всегда успеешь. Ну если деньги сильно надо - ну поработай курьером. Всяко лучше работа на воздухе.

    UPD: Тема окороков удалена. :) Мало-ли. Вдруг кто-то обидется. Щас время такое. Все обидчивые стали.
    Ответ написан
    7 комментариев
  • Как собрать несколько программ в один исполняемый stanalone файл?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Нужно собрать это всё в один бинарник и скинуть человеку который по умолчанию не умеет использовать компьютер(точнее умеет только сёрфить в интернете), на компе винда.


    Может я чего-то упускаю. Но я не понимаю каким образом это поможет человеку? Он как не умел запускать так и не умеет. Как он будет пользоваться консольной прогой в данном кейсе?
    Ответ написан
  • Как увеличить скорость загрузки данных в Mysql?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Есть базы данных, весит примерно 40 гб. Нужно его восстановить на свой сервер

    Оптимизация сильно зависит от того в каком виде лежат исходные данные.
    И какой engine включен у таблицы и есть ли какие-то обвсесы у таблицы которые замедляют
    ее вставку. Например индексы, триггеры и констрейнты.

    (я достигал резкого увеличения скорости загрузки когда переключал engine с InnoDb на MyISAM.
    Это было давно. И как щас я не знаю. Может щас появились новые engines которые лучше чем
    MyISAM. Надо читать. Но на тот момент мне транзакции были безразличны. Нужно было просто
    хоть как-то загрузить данные и MyISAM помог).

    Очень хорошо грузится CSV в пустую свеже-созданную таблицу без ничего. Даже не надо объявлять PK.. Лучше потом его активировать и также добавить констрейнты в режиме no check.

    UPD:
    Ответ написан
    Комментировать
  • Как обучить ИИ по своим данным?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Зачем транзисторы? Нужна сверх-задача.
    Например.

    Загрузил туда все данные по котировкам - и завтра разбогател.
    Или загрузил всю историю литературы - и завтра стал литературным гением.
    Или загрузил всю науку за последние 20 веков - и стал новым Ноббелевским лауреатом.

    Зачем унижаете возможности GPT?
    Ответ написан
    Комментировать
  • Как удалить часть строки через регулярное выражение?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Вот эта колбаса
    [2023-03-14 16:08:42] local.INFO:
    имеет длину 36 символов кажется. И если ее просто отрезать слева от строк лога то будет то что надо.
    subsr или subsrring.
    Ответ написан
    Комментировать
  • На чем дешево и долго хранить десятки Тб информации сейчас?

    mayton2019
    @mayton2019
    Bigdata Engineer
    У автора же не сразу 50Тб а как-то постепенно накапливается?

    Можно купить Blue-Ray диски на 50Гб. И писать потихоньку.
    Помню еще Verbatim производила надежные диски DVD с алмазным покрытием.
    Можно поискать есть ли такие для формата Blue-Ray.

    SSD - точно не подойдут. Ни один производитель не гарантирует столько лет хранения информации.
    С другой стороны эти же SSD стоят в облачных хранилищах где их просто спасает уровень redundancy
    в 2 и 3 и более раз.
    Ответ написан
  • Как отсортировать многоуровневый словарь с помощью sorted()?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Обычно сортируют массивы. Это важный смысловой момент. У массивов есть порядок. А в данном документе - одни мапы. Мапы обычно не сортируют потому-что для них сортировка лишена смысла. У них - доступ по ключу а не по порядковому номеру элемента.

    Ты это понимаешь?
    Ответ написан
  • Копирование одного диска на несколько, как ускорить?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Успех мероприятия зависит от пропускной способности канала. Например если все 4 участника этой гонки - магнитные диски и включены в SATA3 порты - то копирование будет в первую очередь ограничиаться шлейфом SATA3 (до 6Gbit) и даже если 3 других в сумме дают более быстрый трафик то мы будем исходить их скорости самого медленного верблюда в караване.

    Иногда помогает легкое поджатие информации. В BigData например используют кодеки snappy/LZ0.
    Хотя я никогда не видел snappy реализованного в виде консольной утилиты.
    Ответ написан
    8 комментариев
  • Как правильно отформатировать данные из таблицы Excel перед импортом в бд?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Не надо ничего форматировать. Софт который делает процедуру импорта должен это сделать автоматически. Если не умеет - софт надо доработать. Но никаких дополнительных ручных действий над Excel делать не надо. Тем более что форматирование - это не контент.
    Ответ написан
    Комментировать
  • Как узнать процент похожести текста?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Мне кажется что для обобщения надо все таки новую статью добавить в MySQL. Чтоб API проводящий сравнение хотя-бы был единообразным.

    И наверное есть много способов решать эту задачу. Но она по своей природе близка к полно-текстовому поиску хотя-бы потому что слова и их комбинации могут отличаться. Могут быть переставлены местами. Могут быть с опечатками. С переносами в середине слова.

    Насчет Sphinx - ничего не скажу. Не использовал. Но в классическом текстовом поиске все слова хешируются в 18-20 битные числа. Потом гистограмма. И дальше эти векторы можно быстро сравнивать. (там еще слова чистятся. удяляются предлоги. приводятся к единой форме). Это теория. Как это реализовано в MySQL - я ХЗ. В Postgres это точно есть. Один чел выше уже написал.
    Ответ написан
    Комментировать