Задать вопрос
  • Какой тип БД лучше использовать для веб-игры?

    mayton2019
    @mayton2019
    Bigdata Engineer
    При такой постановке задачи тебе безразлично какую NoSQL брать. Я-бы выбирал из скорости
    вхождения в API. Посмотри где более легкий для тебя API из списка например:
    - CouchDB
    - Tarantool
    - RocksDb
    - LevelDb
    на Python и бери и используй.

    Вряд-ли твоя игра достигнет каких-то технических лимитов в этих системах. Можешь брать любую.
    В NoSQL системах под нагрузкой либо канал затыкается (что почти невозможно в твоем конфиге)
    либо твой код. Но задидосить NoSQL движок почти невозможно. Юзай смело.
    Ответ написан
  • Ошибка: sqlite3.OperationalError: no such column: telegram_id: Как исправить?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Добавь новую колонку telegram_id.

    А этот код скорее всего не работает
    CREATE TABLE IF NOT EXISTS users
    потому что он опционален.

    Ты сам себя перехитрил :)
    Ответ написан
    Комментировать
  • Как написать свой парсер (поисковик) CSV на Java?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Использовать готовые библиотеки для работы с CSV

    Я не согласен с этим ограничением. Зачем оно? Так хочет твой преподаватель? Это просто неконструктивно. В процессе написания парсера ты соберешь миллион гвоздей и шишек. Лучше брать готовы парсеры которые работают со скорость канала IO (Univocity например).

    Перечитывать полностью весь CSV файл каждый раз (и даже отдельные колонки)

    Я не согласен с этим ограничением. Почему нельзя? Цель найти данные. А не банить операции I/O.
    Если ты делаешь In-Memory DB то так и напиши. А то получаетася такое завуалированное требовие.
    Потому-что решать эту задачу не читая CSV невозможно.

    У меня уже есть некоторое решение, а именно решил так: читаю файл, сравниваю с введенной строкой, и кеширую, если в кеше уже есть такой ключ (кеш реализовал с помощью LinkedHashMap

    Какая-то ерунда. Откуда здесь берется условие "если" ? Тебе не нужно если, чувак. Тебе нужно 100% данных
    положить in-memory сразу во время первого чтения. Причем тебе нужно столько LHM, сколько колонок.

    Я не прошу решить за меня если что) Мне бы задать вектор, что почитать, что посмотреть, потому что какое-то более хорошее решение придумать не получается... Спасибо!

    Скорее всего нет такого вектора. Но ты должен начать читать с Алгоритмов и Структур данных
    Потом почитай про дисковые структуры данных для поиска B+Tree, LSMTree. Почитай как устроены
    таблицы в Cassandra (partitionkey, clustering key). Почитай как работает LRU и кеш блоков.
    Ответ написан
  • Какая есть альтернатива для lowdb?

    mayton2019
    @mayton2019
    Bigdata Engineer
    работает на node.js , без ruby, .net и тд.

    Я не согласен с такими странными требованиями. Что за религия запретила .net? Тебе нужен только nodejs-клиент к этой базе а сама база может быть написана на чем угодно. Тебя-же не смущает что nginx написан на языке С ? Как-то же node-приложения работают с ним?

    нереляционная, то есть хранение не в таблицах, а в ключ:значение формате, разделение по таблицам будет в разных файлах

    Посмотри https://db-engines.com/en/system/LevelDB. Это классика и обычно всем подходит. Даже в блокчейнах (кошельках) используется.

    для неё не нужен свой сервер и всё взаимодействие с ней идёт через ноду

    Скорее всего речь идет об однопользовательской файловой БД. Тут тоже leveldb подходит.

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

    mayton2019
    @mayton2019
    Bigdata Engineer
    Можно вести подсчет триграмм. (Троек символов). И если разница в небольшом числе триграмм - тогда
    считаем что слова равны с "допуском". Величину допуска можно установить экспериментально исходя
    из тестовых выборок.

    Для случая сходразвал сход-развал.
    сходразвал: схо ход одр дра раз азв вал
    для слова с дефисом из триграмм выпадают
    одр дра
    следовательно допуск равен двум.

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

    mayton2019
    @mayton2019
    Bigdata Engineer
    Согласно законам нормализации в самой первой нормальной форме 1НФ требуется чтобы все данные лежали
    в таблице и ячейчки содержали атомарные значения. Тоесть списки - нельзя. Иначе такая таблица
    не признается реляционной и делать с ней реляционные действия невозможно.

    Попробуй разбить свою таблицу на две. Пользователи. И id_пользователей.
    Ответ написан
  • Что написать на C++ для практики?

    mayton2019
    @mayton2019
    Bigdata Engineer
    У меня периодически возникает одна и таже задача - очень быстро искать нужный текст в логах. Логи большие. Могут быть по терабайту. Россыпь файлов типа

    application/log-2023-02-16-12-30.log
    application/log-2023-01.gz

    Загружать их в эластик - некогда обычно. Тут работа такая что нужно за час разобратсья и логи потом можно
    выкинуть.

    Вот есть сделать предложение - создать утилиту igrep (index-grep) которая при первом пуске - быстро проиндексирует по датам и словам.
    И при полседующих будет искать быстро. И диапазон учитывать например.

    Классический греп не подходит. Он все равно ищет линейно. Не учитывая даты. А мне надо так.

    $ igrep time=-12h level=ERROR Tomcat Network Error
    Вот. Здесь я как-бы захотел поискать все события за 12 часов назад уровня ошибки и содержащие
    два ключевых слова.

    Сами файлы обычно внутри структурированы так. Это почти всегда шаблон.
    2023-02-16T00:00:01,000 [Info] Server started.
    Есть метка времени. Уровень события. И текст события. Много-строчники (стектрейсы) можно соединять в одну строку. О длине самих файлов - ничего не известно. Могут быть от мелких (дневных) до архивов.

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

    UPD.
    Ответ написан
    Комментировать
  • С чего начать изучать математику?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Изучить всю математику наверное невозможно. Имеется в виду высшую.
    Если говорить о road-map - то он есть у ВУЗ-ов в контексте специальности. Физ-мат. Мех-мат.
    Вот поступайте в ВУЗ и вам там накидают роадмапов. Мало не покажется.

    Непонятно откуда у вас появилась опция в виде 2 лет. Она может очень резко исчезнуть по
    жизненным обстоятельствам. Женился. Пошел работать и т.п. Я не встречал в жизни
    людей которые могут так "жахнуть" 2 года просто на изучение чего-то.
    Ответ написан
    Комментировать
  • Какой алгоритм лучше подходит для определения прибыльной сделки на бирже?

    mayton2019
    @mayton2019
    Bigdata Engineer
    и каждый в отдельности давал около 0,7 Accuracy.

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

    mayton2019
    @mayton2019
    Bigdata Engineer
    Существует много стандартов на отображение блок-схем. Для того чтобы правильно ответить на твой вопрос - надо видеть какие стандарты ты изучал. Есть блок схемы по ГОСТ-у.

    Еще вариант - это может называться Activity Diagrams - https://plantuml.com/activity-diagram-beta

    В советском варианте цикл отображался как шестиугольник (плоская гайка) где описано i=0...20
    Далее - стрелочка вниз. Ромбик. Вывод. "Задайте...." и так далее.

    Вот эта штука никак не отображается.
    int number;
    Пропускаем.

    Снова стрелочка низ. Ромбик. Типа input. Там описываются имена переменных для ввода.

    И стрелочка наверк к циклу. Повтор цикла. И справа из гайки - выход в овал "конец"
    Ответ написан
    1 комментарий
  • Как в Python перевести string в bytes, не меняя string?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Для хранения байтов в базах данных обычно из заворачивают в строки в кодировках BinHex, Base64.
    Ответ написан
    Комментировать
  • В чем смысл do while? Как его можно использовать?

    mayton2019
    @mayton2019
    Bigdata Engineer
    do-while удобно применять когда например есть пользовательский ввод и есть реакция на ошибу. Где нужно ввод
    повторить. Например

    do {
      s = input("Enter your bidthday: ")
    } while(!isValidDate(s));

    Еще я использовал для простого I/O когда надо что-то по-символьно читать и проверять
    что файл не закончился (результат не отрицательный).

    В последних версиях Scala (3.x) мусье Одерский внезапно зобанил оператор цикла с постусловием.
    Я уж не помню как он это аргументировал.

    В качестве альтернативы предлагалось делать такой композитный предикат который делает
    сначала действие а потом проверяет.

    while ({ <body> ; <cond> }) ()

    Еще дальше пошел Дейкстра. Он придумал специальный вид do-while для конечных автоматов.
    Такой себе гибрид do-switch-case-while. Где можно как в DSL описать исходящие переходы.
    Правда я не помню где он его реализовал.

    UPD: Ошибочка. Не Вирт а Дейстра. Путаю их.
    Ответ написан
    Комментировать
  • Как повторить curl запрос в java?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Трудно сказать где ты ошибся. Наверное ты формируешь другой запрос отличный от culr-шаблона.

    Попробуй понаблюдать сетевой трафик через tcpdump/wireshark.

    И попробуй активировать DEBUG логгирование для библиотеки org.apache.hc.client5 (я думаю что ты ее используешь хотя по исходнику неочевидно). Попробуй в отладке посмотреть на MultipartEntityBuilder. Есть ли у него toString() ? И что там?
    Ответ написан
    Комментировать
  • С чего начать проектирование базы данных имея только макет?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Сейчас совсем не понимаю с чего начать, нужно ли сначала спроектировать базу, а потом уже бекендом заняться, или все же вместе с беком все делать?

    Из практики я не встречал в жизни такой задачи где-бы проектирование было с нуля и до конца.
    Бизнес меняется. Постоянно появляются новые услуги. И под них растет база. Я-бы на твоём месте
    не стал-бы упарываться вопросом именно проектирования базы. Я-бы доверился итеративному
    процессу наподобие scrum-agile. Делаешь первую версию БД. Показываешь демо. Потом снова
    итерации. Я надеюсь с командой alter table ты знаком? Ну и прекрасно. Значить в любую
    табличку можешь внести изменения. Табличка это не железо-бетон. Если надо - пределай.

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

    Если ты не знаешь какие сущности там будут лежать - то пойди от бизнес-кейсов. Например кейс.
    Человек хочет сделать заказ. Или еще другой кейс. Человек пришел оплатить заказ.
    Оплатил. Попользовался неделю. Потом ему что-то не подошло и он потребовал возврат.
    Из кейсов сразу появляются сущности. Клиент. Заказ. Склад. Платеж. Фидбек. Flow товара по магазинам
    и складам. И так далее.

    Если начнешь делать - делай по минималке. Лучше сделать меньше но самодостаточно чем поначинать
    тысячу сущностей и бросить их.
    Ответ написан
    1 комментарий
  • Как заменить двойные кавычки на "?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Друзья я не знаю как вы в PHP работаете с XML. Но любой нормальный XML-API (стриминговый или документ-ориентированный) это делает автоматически. Экранирует gt, lt, amp, quot.

    Тот факт что вы зачем то делаете строковую замену говорит о том что вы просто работаете с кастомной строкой. А это неправильный подход.
    Ответ написан
    4 комментария
  • Как сделать обработчик коллизий в OpenGL?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Это сложная тема. Это вам - не арканоид написать. Чтоб правильно сталкивать объекты - надо представить как-бы они сталкивались в реальном мире. И я думаю что тут даже десятка параметров недостаточно чтобы описать какое это столкновение. Столкнуть два бильярдных шарика - это одно. А два мешка с песком - это другое. Или шарик с мешком.
    Ответ написан
    1 комментарий
  • Как можно изменить код, чтобы он работал быстрее?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Python это в принципе не тот язык который работает быстро. Но если есть уже готовый вектор примитивов то его наверное можно процессить их альтернативного API написанного на векторных операциях. И Python будет просто посредником при вызове. Разумеется вне цикла. Arrow. Numpy. Numba. Pandas неважно. Их огромное количество.

    Тоесть главная задаа - подготовить структуры данных так чтобы они были applicable к альтернативному API.
    Ответ написан
    Комментировать
  • Нужна ли математика?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Большинство программирования базируется на математике школы. Сложить. Умножить. Взять процент.
    Посмотри на все сайты электронной коммерции и магазины. Какая там математика?
    Ответ написан
  • Вопрос по оформлению кода C++?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Вопрос по оформлению кода C++?

    Если делаешь себе пет-проекты или фрилансишь - то безразлично. Делай как читабельно лично
    для тебя. Из best-practices. Старайся уменьшать количество вложенных for/if/else. Для
    уменьшения - делай декомпозицию на функции. И добавляй guard-expressions с выходом
    в return сразу когда какое-то условие выполняется. Часто это уменьшает число вложенной логики.
    break - как аналог guard только для циклов.

    Если ты зашел в корпорацию - то первое что ты увидишь - это тонны легаси кода и корпоративные
    требования (локализованные под проект) о том как надо писать. Конвенции. Соглашения.
    И просто договорняки в команде. Например у нас было такое что в проекте мы после пары
    багов решили писать switch/case с комменарием в секции default ВСЕГДА в том случае
    когда default не содержал логики. Тоесть программист как-бы подтверждал что все
    кейсы учтены и мы ничего не потеряли в проверках.
    switch(weekday) {
      case SAT: 
         onSaturday();
      default:
         // Nothing to do!
    }

    Фигурные скобочки и пробелы обычно подсвечивают корпоративные плагины в IDE с настройками.
    Еще вариант что стиль чекается во время процедур CD/CI и выдает ошибки или предупреждения
    о нарушении стиля. Тоесть сильно упарываться сейчас этим вопросом не стоит. Когда тебя
    прижмет - привычка писать правильно появится очень быстро. За считанные недели.

    Следующий пример цикла - просто неудачен.
    for (int a = 0; a < 10; a++) {
        if (a == 5) {
            break;
        }
        std::cout << "Не то значение" << std::endl;
    }

    Здесь можно доказать что он на самом деле сводится к циклу от 0 до 4. И вообще без проверки внутри.

    Видишь очень важно правильно подбирать учебные примеры.
    Ответ написан
    1 комментарий
  • Почему попытка обратиться к только что созданной таблице вызывает ошибку "no such table"?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Слушай автор давай табличку по другому переделаем. Вот так

    CREATE TABLE IF NOT EXISTS warning(id INT, user_id INT, count INT);


    А то твое изделие зашкварно совсем.
    Ответ написан
    Комментировать