Задать вопрос
  • Что почитать про диски (HDD, SSD) и файловые системы, желательно какое-то системное описание?

    @rPman
    Собственно все необходимые вопросы, на которые нужно обратить внимание, вы указали в вопросе, гуглить по каждому но в большинстве своем все ответы можно сформулировать самостоятельно, просто подумав и включив логику.

    1. Случайный и многопоточный доступ - принципиальная необходимость задумываться об этом исходит из физической особенности накопителей, последовательный доступ от случайного (имеется в виду как у hdd так и у ssd (в меньшей степени, зависит от размера читаемого блока кластера, потребительскиее ssd это 256кб) значительно отличаются (на порядок или даже два) по времени. Аппаратные контроллеры на материнской плате и даже на диске (или драйвера и планировщик ос) могут физически считывать данных больше чем потребуется (read ahead), делая это фоном, после запроса и сохраняя в своей памяти.
    Если несколько приложений одновременно потребуют данные с разных областей устройства хранения, специальный планировщик ос может приостанавливать работу этих приложений, собирая как можно больше запросов на данные, сортируя их для оптимальной их обработки. Пользовательское приложение может делать это значительно эффективнее, если заранее озаботится о том, как именно данные будут храниться на диске (обычно речь идет о хранении данных минуя файловую систему).

    2. Кеширование чтения - в подавляющем большинстве случаев хватает функционала операционной системы, операционные системы используют разные стратегии (fifo или к примеру на основе частоты запросов), системные вызовы ОС позволяют управлять стратегией кеширования, в т.ч. полное ее отключение (это может быть недоступно для некоторых файловых систем, например fuse в linux, если об этом не позаботился их разработчик), с целью перенести логику выбора кеширования данных в приложение.

    3. Кеширование (буферизирование) записи - приложение может управлять, стоит ли ждать окончания физической записи данных на диск или это можно сделать фоном или даже отложить на потом. Например fflush позволяет принудительно сбросить буфера при использовании fwrite (и других от stdlib), более низкоуровневые вызовы позволяют точнее управлять процессом. Помимо инструментов управления кешированием на уровне приложения есть способы настроить это на уровне ОС (например ext4 позволяет настроить стратегию записи data=writeback, это делает файловую систему уязвимой к сбоям но значительно ускоряет запись, так как даже fflush из приложения не будет ждать окончательной записи), так же разные сетевые файловые системы могут накладывать дополнительные ограничения (точно помню что nfs обрабатывает fwrite по другому в отличии от локальных записей, делая больше лишних действий на диске)

    p.s. про mmap, меанизмы ОС (как linux так и windows) позволяет вместо работы с файлом по кусочкам (fopen/fread/fwrite/...) 'замапить' указанный файл или даже раздел/диск на область памяти, при доступе к которой прозрачно будут совершаться чтения и записи на диск. Этот способ работы с файлами зачастую самый производительный (кстати по умолчанию используются на исполняемый файл приложения и .dll/.so) и очень часто еще и удобнее, так как кеширование данных будет произведено средствами ос, и при повторном запуске приложения данные уже будут в памяти (при обычном fopen их пришлось бы считывать в память, т.е. копировать что дает 2x накладные расходы на процессор).

    -------------

    4. Файловые системы это уровень абстракций ОС, значительно добавляет накладные расходы на работу с данными но за счет удобства (например возможность расширить хранилище без полного копирования данных, просто увеличив размер раздела или добавив новый накопитель, как это позволяют файловые системы - комбаины типа btrfs/zfs), разные файловые системы организуют хранение по разному, что значительно влияет на скорость как записи так и чтения.
    Например cow файловые системы (xfs/zfs/btrfs) каждое последующую запись делают последовательно, даже если записываемые чанки/кластеры принадлежат разным файлам, даже если это модификация а не добавление в конец, что благосклонно сказывается на скорость записи но отвратительно фрагментирует размещение файлов на диске (там есть механизмы борьбы с этим), т.е. для хранилище файлов разного размера, считываемых/изменяемых целиком такие файловые системы идеальны, но для баз данных наоборот очень неэффективны (в таких фс можно принудительно отключить cow для определенных файлов). btrfs/zfs за эти накладные расходы (незначительные) дают бонусом функционал быстрых снапшотов (почитай про btrfs snapshot incremental backup) и высокую устойчивость к сбоям.
    Еще пример, файловые системы, с целью защитить данные от сбоев, добавили к функционалу понятие журнал, промежуточное место, куда записываются данные (метаданные) до тех пор пока приложение не зафиксирует изменения (закрытие файла или fflush), в нормальных ОС существует возможность разместить этот журнал на отдельном, более быстром, накопителе (например ext3/ext4) или отключить полностью. Это позволяет заметно ускорить запись и не покупать на весь объем данных быстрый и дорогой накопитель.
    Было время, когда можно было буквально (кажется у xfs но я могу ошибаться) указать разные накопители для метаданных (информация о том как файл размещен на диске и информация о атрибутах файлов) и самих данных, что тоже в условиях значительного отличия скорости работы емких hdd и быстрых но не емких ssd, сэкономить на построении хранилища.

    5. Сжатие данных на лету - некоторые файловые системы позволяют прозрачно для приложений пропускать данные через библиотеку сжатия (в пределах кластера или даже нескольких соседних), например ntfs использует compress, а btrfs позволяет выбирать, например zstd (один из лучших по соотношений скорость/сжатие), было время когда включение сжатия на медленных накопителях давала двух-трех кратное ускорение скорости чтения практически бесплатно (а запись почти не замедлялась но повышалась нагрузка на процессор), на современных же накопителях процессор может не поспевать (но есть дорогие контроллеры с таким функционалом).
    Еще есть тип сжатия - sparse files (дырявые файлы), части файла, в которые не производилась запись, физически не занимают место (фактически тратится место только крохотная часть в области метаданных файловой системы), при чтении таких частей будут возвращены нули, так же есть функции по замене ранее записанных частей файла на такие дырки. Такие файлы могут понадобиться, например, когда нужно хранить огромные разряженные матрицы с индексацией по позиции, индекс тут будет использоваться от файловой системы но выигрыш по производительности сомнителен и требует измерений под ваши данные.

    p.s. любая сторонняя библиотека, добавляющая еще один уровень абстракции к хранилищу, может дать выигрыш только если стратегия работы с данными совпадает с той, на что заточена эта библиотека. Например реляционные базы данных дают готовый и обширный функционал по индексированию данных, многопользовательских транзакций но за счет больших накладных расходов на их поддержание. Помню был тут вопрос про хранение терабайтов данных числовой ключ -> крохотное значение (несколько байтов хеш), так вот майкрософтовская sql уже с миллионами записей могла до секунды на запись диском шерстить (тысячи iops), когда как самодельный и примитивный велосипед с одноуровневым индексом по хешу от значения мог дать скорость доступа и записи 1к1 iops накопителя (от 1 вызов к диску на запрос чтения и от 2 - на запись).
    Ответ написан
    9 комментариев
  • Поиск по большим файлам python?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну если файл 2гб чем pandas то не устраивает, можно еще и pandas ускорить использовать polars, у него схожий синтакс c pandas но поддерживает параллельное выполнение. Что для pandas что для polars такие выборки это будет одна коротенькая строчка кода.

    2гб не проблема в память загрузить, но и если бы файл был на много больше и pandas и polars поддерживают чтение файлов по частям. Вообще если нужна серьезная скорость, polars ,будет номер один там не numpy массив, а Rust Arrow. Не факт что тут polars нужен, ну вот глянь https://www.makeuseof.com/pandas-vs-polars-which-i... на сколько pandas быстрый, но polars выборка рядов по условию в 5 раз быстрее, а например применение функции, к столбцу или фрейму в 30 раз быстрее.
    Ответ написан
    Комментировать
  • Стоит ли сейчас ипользовать Elasticsearch?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    вообще - Эластик не стоит использовать никогда, но такая роскошь недешева

    дело в том что "других систем" особо не существует, их ровно одна: Sphinxsearch и ее отдельная ветка - Manticoresearch ( ее вот и стоит на сегодня),
    они сильно лучше Эластика по техническим параметрам: там где на Эластик уходит ~10к на кластер Амазона, Сфинксы обходятся 1-2к сервером ( вообще 1, но приходится все же побольше SSD ставить)

    но!

    почему-то ж Вы когда-то выбрали Эластик?
    да, именно поэтому:
    • есть мануалы
    • есть API (в сфинксе наверно и сейчас нет, в Мантикоре есть - учли это)
    • есть "кто-то кто уже работал"
    • есть плагины, надстройки, аддоны


    проще говоря чтобы перевести корпорт на Сфинкс - вам придется думать где взять людей,
    поэтому для бизнеса может оказаться проще разобраться с доступами чем кардинально менять на лучшее, сильно лучшее, но тяжелое в освоении

    это , в общем-то, и много чего в project mamagement касается
    Ответ написан
    4 комментария
  • Что изучать после пайтона?

    Maksim_64
    @Maksim_64
    Data Analyst
    Часть первая: Английский Язык.

    Часть вторая: поставь anaconda и jupyter lab

    Часть третья: python фреймворки
    1. numpy - изучать каждый метод не нужно, нужно освоить broadcasting Это правила по которым происходят операции с массивами разной размерности. Не изучишь, не сможешь работать с нейронными сетями и много еще с чем.

    2. pandas - нужно научится понимать, как работают индексы (вся мощь но и сложность лежит в индексах особое внимание к многоуровневым индексам). Группировки объект groupby. Решайпинг, методы stack, unstack, melt и т.д. Решайпинг сложная тема, но без нее никуда.

    3. matplotlib - нужно научится работать в ооп стиле, а не в матлаб стиле.

    Вот эти 3 можешь начинать изучать без математики. учить по документации . Скачай учебные датасеты простенькие, задавай им вопросы применяй и визуализируй.

    4. scikit-learn - это машинное обучение, тебе понадобится разобраться что такое оценщик (estimator) и transformer (трансформатор). Также научится пользоваться пайплайнами, объект Pipeline это для старта, естественно.

    5. statsmodels - это не много иной взгляд на машинное обучение он включает в себя инферентивную статистику. Например построив логистическую регрессию, я могу посредством этой библиотеки найти каким образом изменение на одну единицу одного из моих предикторов отражается на вероятности, так называемый маржинальный эффект. Это очень важно для бизнеса. Также A/B тесты тоже там, и многое многое другое.

    4 и 5 также учить по документации она совершенно фантастического уровня особенно для scikit-learn + очень важный плюс В этой области есть классика это книга Statistical Learning книга написана профессорами стенфорда, в мире датасаенс она очень известна. Раньше она была написана на R, я ее читал на R в свое время, так вот 2023 году этим летом вышла python edition. Книга и код доступны бесплатно. https://www.statlearning.com/
    Это уникальная книга без равных, но к ней надо быть готовым.

    Часть Четвертая: Математика
    Все что нужно есть на Khan Academy. Начни со своего уровня и вперед, математика тебе нужна вся. Особенно Calculus. Заходишь на Khan Academy и вперед проходи бесплатные курсы со своего уровня,
    Algebra 1,
    Algebra 2,
    Precalculus,
    AP/College Calculus AB
    AP/College Calculus BC
    Statistics and Probability
    AP College Statistics

    Вот эти курсы вот этом порядке, ты должен освоить, то есть в конце курса финальный тест, должен проходить играючи, и все делать на листке бумаги не читерить, сам себя обманешь. Потом книга что я указал выше, код в книге естественно в основном использует scikit-learn и statsmodels, + первые три библиотеки само собой.

    Потом придется прочитать еще пару книг по теории вероятности и статистике отдельно (со временем). Если calculus на Khan Academy на должном уровне, то вот теория вероятности и статистика слабенькая, нужно будет добавлять.

    В добавление еще SQL но поверхостно, уровень не сложных запросов и подзапросов. Все дела будут происходить в pandas.
    Ответ написан
    Комментировать
  • Как реализовать escape-последовательность в файле конфигурации.ini?

    Vindicar
    @Vindicar
    RTFM!
    Вариант 1. В доках на configparser написан пример синтаксиса для многострочного строкового значения. Сформируй исходное значение в файле корректно, и парсер выдаст то, что нужно, без дополнительных прибабахов.

    Вариант 2. error_message = error_message.replace(r'\n', '\n')
    Ответ написан
    Комментировать
  • Как задействовать випианарное проксирование только для определённых вкладок в браузере Google Chrome?

    Никак. VPN на то и VPN что в него заворачивается весь трафик, и vpn ничего о браузере не знает.
    Если речь о прокси, который как расширение в браузере работает, то некоторые расширения позволяют включить/выключать проксирование для отдельных сайтов, а иногда даже вкладок
    Ответ написан
    Комментировать
  • Какую CMS используют в vc, tj и dtf?

    Noizefan
    @Noizefan
    Ответ написан
    Комментировать
  • Как добавить готовый график в Figure (matplotlib)?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ты уверен что ты понимаешь что такое объект Figure в matplotlib? Это канва, на которой ты размещаешь axes (оси координат и уже на этих осях ты непосредственно рисуешь графики). Прямого api что бы засунуть sympy plot на matplolib figure, не существует. Потому что это не оси с графиками а своя ФИГУРА с осями и на них графиками.

    Можно ли это обойти, да конечно можно создать урода и присобачить на figure sympy plot.
    import matplotlib.pyplot as plt
    import numpy as np
    from sympy import Symbol
    from sympy.plotting import plot
    x = Symbol('x')
    X = np.linspace(-3,3,100)
    y = np.cos(X)
    def add_plot(p, ax):
        backend = p.backend(p)
        backend.ax = ax
        
        backend._process_series(backend.parent._series, ax, backend.parent)
        backend.ax.spines['right'].set_color('none')
        backend.ax.spines['bottom'].set_position('zero')
        backend.ax.spines['top'].set_color('none')
        plt.close(backend.fig)
    
    p = plot(x**2, (x, 0, 3), show=False)
    
    fig, ax  = plt.subplots(1,2, figsize=(18,9))
    ax[0].plot(X,y)
    add_plot(p, ax[1]);


    Вот мы имеем фигуру с двумя осями, одна нормальная matplob'вская вторая из sympy.
    Вот здесь кто то постарался и прикрутил. Почитай, что пишут.
    Ответ написан
    Комментировать
  • Как сделать товары улетающие в корзину?

    @hesy
    Код анимации

    $(document).ready(function() {
        // Когда документ полностью загружен и готов к работе...
        
        $(".ajax_add_to_cart").on("click", function() {
            // При клике на элемент с классом "ajax_add_to_cart"...
            
            var productImage = $(this).closest(".post").find("img");
            // Находим ближайший родительский элемент с классом "post" и внутри него ищем изображение (тег <img>)
            
            productImage
                .clone() // Клонируем изображение товара
                .css({
                    position: "absolute", // Позиционируем клон абсолютно на странице
                    "z-index": "11100", // Устанавливаем высокий порядок слоя для клонированного изображения
                    top: productImage.offset().top, // Устанавливаем верхнюю позицию клонированного изображения
                    left: productImage.offset().left // Устанавливаем левую позицию клонированного изображения
                })
                .appendTo("body") // Добавляем клонированное изображение внутрь элемента body страницы
                .animate({
                    opacity: 0.05, // Задаем конечную прозрачность для анимации
                    left: $("#cart-punkt").offset().left, // Устанавливаем конечную левую позицию для анимации
                    top: $("#cart-punkt").offset().top, // Устанавливаем конечную верхнюю позицию для анимации
                    width: 20 // Устанавливаем конечную ширину для анимации
                }, 1000, function() {
                    // По завершении анимации...
                    
                    $(this).remove(); // Удаляем клонированное изображение
                });
        });
    });



    Ответ написан
    Комментировать
  • Qr code на python?

    fenrir1121
    @fenrir1121
    Начни с документации
    Потому что если попросить chatGPT написать код, который "генерит qr и добавляет на него изображение" он сделает все точно по ТЗ, не обращая внимания на то, что изображение перекрыло половину qr.
    Бред на входе -> бред на выходе, все честно.
    Ответ написан
    1 комментарий
  • Бесплатные или бюджетные VPS?

    @rPman
    lowendstock.com
    Поисковик по хостингам с ценами от 2$ в год (за какой-нибудь 128ram со 100мбит сетью), не обслуживаемые, слабая надежность (в зависимости от хостера)....
    Мне кажется нормальные начинаются где то от 2-3$ в месяц (с 1GB ram), пользуюсь buyvm(frantech) с оплатой в bitcoin lightning network.

    настоятельно рекомендую выбирать kvm версии, в них ты сможешь поставить любую ос, настроить свою файловую систему и т.п., когда как более дешевые lxc/openvz ничего этого не позволят.
    Ответ написан
    2 комментария
  • Как принимать и обрабатвать ключи типа `-key "value"` в строках?

    Vindicar
    @Vindicar
    RTFM!
    argparse, но ей требуется уже подготовленный список токенов, т.е. отдельных частей строки. Такой список можно сделать через shlex.
    Ответ написан
    Комментировать
  • Какой дистрибутив Linux пойдёт на мой ноутбук для веб разработки?

    У меня есть ноутбук точно таким же характеристикам, стоит Ubuntu, но полностью удалён gnome, а установлен xfce
    Ответ написан
    2 комментария
  • Какой дистрибутив Linux пойдёт на мой ноутбук для веб разработки?

    hint000
    @hint000
    у админа три руки
    Любой, с которым вы лучше знакомы. Или тот, который стоит у знакомого вам гуру.
    Прямо скажем, ноутбук слаб для разработки, так что просто не запускайте одновременно много программ.
    Ответ написан
    Комментировать
  • Как запустить Selenium+Opera?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    Ваш код пытается использовать webdriver-manager, который должен по-идее скачивать бинарник webdriver, соответствующий вашей версии браузера. Наверняка, webdriver-manager поддерживает только определенные версии браузеров, не вообще все.

    Вам надо установить в системе ту версию браузера, которую webdriver-manager в принципе может скачать (как сказано в ошибке, начиная с в.111).
    Либо надо переделать код, убрав работу с webdriver-manager и сделав «по классике», глазами самостоятельно определить версию своего браузера, руками скачать соответствующий выявленной версии браузера бинарник webdriver, положив его в удобное вам место и указав при вызове webdriver в своем коде, где искать бинарник. Это делается через параметры options обычно, почитайте документацию к своей версии selenium.
    Ответ написан
    1 комментарий
  • Как лучше\проще реализовать работу с серийными номерами\лицензиями чтобы не особо пиратили?

    @d-stream
    Готовые решения - не подаю, но...
    Ну из классики .ini / .xml / .yml / .toml / etc файл с сигнатурой его содержимого

    Соответственно генерация файла лицензии и подписание - закрытой частью ключа, верификация - открытой (классика)

    Кончилась лицензия - сгененрировать и выслать новый файл.

    Литература - любая доступная про ассиметричное шифрование
    Ответ написан
    7 комментариев
  • Как преобразовывать PDF в Excel?

    Adamos
    @Adamos
    Идея такая: проследить, откуда берутся эти PDF, и получить там более вменяемый исходник. Это перспективно, в отличие от любых костылей, которые вам удастся нагородить для решения задачи в том виде, как она поставлена сейчас.
    Ответ написан
    Комментировать
  • Как написать фото галерею?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    Если есть готовые проекты с несложным кодом особенно фронта буду только рад таким ссылочкам)
    Вордпресс.
    Ответ написан
    Комментировать
  • Что нужно знать чтоб стать Джуном в бэкэнде python?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    То же самое, что и раньше - Лутца вплоть до 37-й главы и руководство Django. Но надо понимать, что конкуренция среди джунов огромная, так что за место придётся бороться с людьми, которые могут отлично знать SQL, теорию реляционных баз данных, принципы работы сетей, алгоритмы и шаблоны проектирования, могут свободно чувствовать себя в консоли Linux, могут разбираться в виртуализации, уметь тонко настраивать сервера, разбираться в железе и т.д. и т.п.
    Ответ написан
    1 комментарий