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

    mayton2019
    @mayton2019
    Bigdata Engineer
    Они не отказываются. Скорее происходит отказ от "парадигмы" разработки. Языки стали мульти-парадигменные. Посмотрите на С++20 или Scala. Их невозможно положить в коробочку ООП или ФП. В них есть почти полный набор фич и оттуда и отсюда. И с каждым годом число фич растет и граница размывается. Нашим потомкам будет вообще непонятно где идет раздел.

    По поводу golang. Это язык ограниченной разработки. Его создавали специально чтобы порог вхождения был низкий. Фактически делали лайтовый С++ которому можно обучить школьника за 14 дней. Но с перформансом выше чем у Питона. Поэтому выражать какие-то сложные конструкции на типах там скорее всего не получится. У golang есть свой манифест. Я забыл как он называется и где он. Вобщем там довольно четко обоснованно почему такие принципы и почему такая идеология.
    Ответ написан
    1 комментарий
  • В чем можно хранить около триллиона значений key=>value?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Давайте прикинем объем который понадобится. Что такое триллион?
    Это 12 нулей. Или 1 000 000 000 000 элементов. Какая у нас data-row?
    8 + 64 символов типа ASCII (байт подходит чтоб покрыть все символы).
    Итого 72 байта на строку. Там можно еще поужимать биты в байтах но только
    сложность повышает а большой пользы для дела не дает. Пускай будет ASCII == 1 байт.

    Вобщем такой расчет

    72000000000000 байтов на весь сегмент данных когда таблица загружена.
    Или 65 терабайт. А сколько магнитных блинов надо прикупить? Возьмем популярный магнитный
    Western Digital Purple 10TB 7200rpm 256MB WD102PURZ 3.5" SATA III при цене 290$
    Порядка 7 штук надо. Вобщем готовте котлету денег 290$ * 7 = 2030$

    По поводу DBMS. Да key-value здесь подходит. Можно начинать с LevelDb или RocksDb но у них
    расход дисковой памяти на 1 строчку может быть больше чем я посчитал. Я ведь считал эконом-эконом
    вариант в виде бинарного типизированного файла где все записи строго по 72 байта. Сколько именно
    захватит РоксДб или ЛевлДб - чорт его знает. Вряд-ли документация об этом что-то говорит.
    Но берите 1% датасета. Загружайте
    и аппроксимируйте сколько выйдет после полной прогрузкуи. Это - надежный способ оценки.
    Ответ написан
    12 комментариев
  • Зачем надо закрывать курсор при работе с БД?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Дело в том что курсор может потреблять ресурсы. Например вы захотели взять первые 10 строк из 10000000 выборки но предварительно отсортировали. Выбрали 10 строк и не сделали финализирующие протокольные действия в Python. База данных будет удерживать в памяти алгоритмы и структуры данных для снапшота результата этого запроса до тех пор пока не придет явный CLOSE с вашей стороны либо интеллекуальный драйвер который еще и обладает логикой уборки мусора сам не догадается что Statement уже вышел из scope вашего использования и может быть удалён GC.

    Я был свидетелем ситуации когда крупное ent-приложение Java/Oracle переполняло память из-за неверной обработки Exception и плодила много незакрытых курсоров в БД. Java от этого не сильно страдала (GC всё убирал) но страдал Oracle. Потому что уборка происходила слишком поздно. Пофиксилось тогда переписыванием с try на try-with-resources.

    Поэтому если вы неряшливо обращаетесь с курсорами (явными и неявными (обычный select к примеру может прождать неявный курсор)) то не ваше приложение а база данных почувствует себя плохо. Как быстро и какие ошибки вы будете получать - зависит от настроек вашей БД.
    Ответ написан
    Комментировать
  • На что опираться при выборе изучения RN и Flutter?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    кол-во вакансий у RN в раза 2-3 выше

    Это.
    Ответ написан
    Комментировать
  • Как спарсить текущую погоду в зависимости от месторасположения юзера?

    1. Зачем парсить, если существует куча сервисов с API?
    2. По geoip или как-нибудь ещё узнаешь локацию пользователя, и сопоставляешь со страницами на сайте.
    Например если пользователь в Алматы, то парсишь https://www.gismeteo.kz/weather-almaty-5205/
    А если в Астане, то парсишь https://www.gismeteo.kz/weather-astana-5164/
    Ответ написан
    Комментировать
  • Как реализовать зачет урока в реляционной базе данных?

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

    Я в данном случае не вижу необходимости в денормализации в том виде, в котором вы её реализовали. Курсов относительно немного (а пользователь всегда работает только с одним из них в момент времени), в каждом курсе относительно немного глав, в главе немного топиков, в топике немного уроков. Посчитать по уроку где там пользователь в этом дереве совсем не сложно прямо на клиенте, а ведь ещё у нас есть возможность кешировать данные.
    Ответ написан
    2 комментария
  • Как массив объектов собрать в один объект, объединив одноимённые свойства в массивы?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Получаем все возможные ключи; под каждый создаём пустой массив; при обработке объекта из исходного массива бежим по массиву ключей, добавляем в соответствующий массив значение из объекта или дефолтное - в зависимости от наличия ключа в объекте:

    function groupValues(arr, defaultValue = null) {
      const keys = [...new Set(arr.flatMap(Object.keys))];
      return arr.reduce((acc, n) => {
        keys.forEach(k => acc[k].push(Object.hasOwn(n, k) ? n[k] : defaultValue));
        return acc;
      }, Object.fromEntries(keys.map(k => [ k, [] ])));
    }
    
    
    const result = groupValues(arr);

    Или, результирующий объект изначально пуст; при обработке объекта из исходного массива перебираем его ключи; если ключ отсутствует в результирующем объекте, создаём массив с длиной как у исходного, заполняем его дефолтным значением; записываем в массив в результирующем объекте значение под тем же индексом, который имеет обрабатываемый объект в исходном массиве:

    const groupValues = (arr, defaultValue = null) =>
      arr.reduce((acc, n, i, a) => (
        Object.keys(n).forEach(k =>
          (acc[k] ??= Array(a.length).fill(defaultValue))[i] = n[k]
        ),
        acc
      ), {});
    Ответ написан
    Комментировать
  • Имеет ли значение уникальность шаблона для сайта при продвижении в поисковых системах?

    opium
    @opium
    Просто люблю качественно работать
    Имеет но в плане ранжирования не входит даже в первую двадцатку, если все первые 20 фактов ранжирования сделаны на 5 то можно и шаблон уникальный
    Ответ написан
    1 комментарий
  • Cобрать правильно массив из сортирующего списка?

    Stalker_RED
    @Stalker_RED
    const items = document.querySelectorAll('.item');
    const sorted = [... items].map(item => item.dataset.id);
    console.log(sorted);
    Ответ написан
  • Какую базу данных использовать для такого проекта?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Ну, на основной вопрос уже ответили, а я освещу отдельную проблему, которая очень часто волнует умы юных падаванов.

    когда лучше реляционную и нереляционную использовать?

    Ответ на этот вопрос очень простой.
    Нереляционная БД - это НЕ база данных.
    А узкоспециализированное хранилище, которое может выполнять какую-то одну определенную функцию лучше, чем база данных. Это может быть кэширующий демон, или поисковый движок, или решение для аналитики, или какое-то подсобное хранилище для всякого мусора.

    Как только осознаёшь этот простой факт, то всё сразу становится на место:
    Если нужна база данных, то и использовать надо базу данных. Реляционную. Какую именно - в вашем случае не принципиально.

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

    Использовал для этого телеграмм-бота от одного сервиса.

    Вообще это уже сильно пахнет скамом, так что я бы уже тут задумался.

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

    Сильное заявление, которое невозможно проверить.

    симка для аккаунта телеграмма куплена с рук (уже была верифицирована);

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

    с использованием программы AmneziaVPN

    Вообще пахнет паранойей, но лучше её из исходников собирать. Не думаю, что тут она виновата.

    Вообще я ставлю на следующие варианты:
    1. Кто-то просто взял в руки твой телефон (или куда там у тебя ещё телеграм установлен)
    2. Владелец симки смог увидеть твои входящие смс и при этом знал заранее твой пароль от телеграма, либо смог его подобрать, либо смог сменить пароль, имея доступ к твоей резервной почте.
    3. Кто-то смог получить удалённый доступ к устройству, где установлен твой телеграм и ты залогинен.

    Проверь историю входов в аккаунт и активные сессии. Проверь, что ты знаешь обо всех активных сессиях и никто посторонний не имеет доступа к ним (это не какой-нибудь публично доступный компьютер, например)
    Ответ написан
    3 комментария
  • Как выбрать открытый проект на Python для поддержки?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Вливайтесь в сам проект по развитию Python-а. Там же много работы: Перевод, документация, библиотеки, CPython и др. Да. Сразу будет жесть как тяжело, но зато потом, потом будет такая визитная карточка, что достаточно быстро будете находить новую работу.
    Ответ написан
    2 комментария
  • Как выбрать открытый проект на Python для поддержки?

    @bromzh
    Drugs-driven development
    1) Выбираешь проект (для начала небольшой), которым пользуешься сам.
    2) Смотришь список issues
    3) Выбираешь ту, которую сможешь сделать сам (для начала лучше поправить небольшую багу)
    4) Форкаешь проект
    5) Реализуешь issue
    6) Гоняешь тесты
    7) Если всё ок, делаешь пулл-реквест автору
    8) Повторить

    Ну и главное, надо следовать общему стилю всего проекта и про pep-8 помнить.
    Ответ написан
    Комментировать
  • Как дополнительно оптимизировать загрузку изображений?

    @VegasChickiChicki
    Можете посмотреть в сторону тега picture. Для разных разрешений можно использовать разные форматы, не придется для 1080p монитора грузить 4к фотки. Так же почитайте о современных форматах изображений, их так же в теге picture можно указать(возможно придется сервер учить перегонять фотки в разные форматы, не знаю от куда вы их берете и есть ли такая возможность).
    Ответ написан
    Комментировать
  • Правда ли, что Node.js работает только с одним ядром процессора, и что с этим делать?

    bingo347
    @bingo347 Куратор тега Node.js
    Crazy on performance...
    Используйте pm2 на продакшене
    Он запустит Ваше приложение в кластере (настраивается конкретное количество процессов или по числу потоков cpu)
    Будет следить за потребляемой памятью и загрузкой процессора
    Сделает рестарт упавшего процесса
    Будет собирать логи (console.log, console.error), с плагинами можно настроить ротацию
    С плагинами можно прикрутить CI для пересборки и перезапуска проекта по webhook в git
    Ну и много чего еще
    Ответ написан
    3 комментария
  • Почему не научились ещё одно ядро разгонять до высоких частот?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Этот вопрос нужно адресовать к современной физике. Сделать такой процессор не очень сложно.
    Но сложно сделать его потребительски привлекательным. Все делатели процессоров в современном
    мире бьются за энергоэффективность. А с повышением частоты там просиходит (пускай физики меня
    поправят) квадратичное увеличение потребляемой мощности (к коэффциентиком). Вот сколько именно
    ватт я сейчас не скажу но величина будет неприятная. Тоесть 8 ГГц процессор будет греться как кофейник
    и будет потреблять более чем в 4 раза если сравнивать его с 2Ггц ядром.

    Еще я-бы рассмотрел такой вариант как влияние на здоровье человека. Выж понимете да. Вся современная
    радиопередающая техника (мобилы, Wi-Fi, Bluetooth) со всех сторон зажаты медицинскими нормами
    всяких международных контролирующих организаций. И не дай бох хоть одна организация докажет
    что вероятность поймать рак мозга растет там на 5% от такого процессора - загнобят санкциями.

    По поводу мегафлопов. Фактически производительность техно-стека (Процессор-Память-I/O)
    зависит не только от проца но и от всех устройств которые в стеке. И даже работая на 8ГГц
    ты скорее всего не получишь желаемого роста скорости майнкрафта на переходе от 4 х 2 Ггц просто по той
    причине что кеш и память и диск остались ровно теже самые.

    Да и вообще. Эпоха гигантизма в процессорах прошла. Щас все двигаются к узкой специализации
    CPU/GPU/TPU и к интернету вещей. И майнкрафт здесь никак не будет главным регулятором стратегии.
    Уж извини. Водное охлаждение тоже вещь такая себе. Узкий сегмент энтузиастов. Обычным людам это
    так же не надо как и квантовый комп.
    Ответ написан
    8 комментариев
  • Почему не научились ещё одно ядро разгонять до высоких частот?

    Майнкрафт это одноядерная игра

    Ошибаешься. Сам прямо сейчас в него играю и у меня прекрасно сжираются все 8/16 ядер процессора.
    Сервер майнкрафта также вполне успешно сжирал все ядра сервера, на котором я его запускал.

    но и другие игровые сервера тоже страдают этим

    Тоже ошибаешься.

    так почему intel не сделала ещё такой процессор где высокая частота вкупе с современной архитектурой?

    Потому что спроса блин нет - для всех задач сейчас нужно не менее двух ядер.
    Хочешь разогнать одно ядро? Да пожалуйста - отключаешь все ядра кроме одного в биосе и гони хоть до 6ггц до такого порядка Intel вполне успешно сам разгоняется через turbo boost. А экстремалы гонят и дальше, хоть и под азотом и не все экземпляры.

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

    Вот, пожалуйста

    Покажи пальцем, где тут нагрузка на одно ядро
    64a72cd1383d7104481109.png
    Ответ написан
    1 комментарий
  • Как перенести базу данных postgresql с Ubuntu на windows?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Если кратко - то в Ubuntu делают pg_dump а в Windows - pg_restore.
    Все остальное - это просто детализация этой инструкции.
    Ответ написан
    Комментировать
  • Как заставить работать одновременно фронтенд и бэкенд на одном порте?

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

    Ты можешь поднять nginx (ну или caddy, раз уже определился) на 80-м порту и настроить его на раздачу статики и проксирование запросов.
    MongoDB останется как есть.
    Ответ написан
    2 комментария