Задать вопрос
  • Как лучше хранить много изображений для веб-приложения?

    @rPman
    Веб приложения максимально оптимизированы при работе с файлами на диске.
    Никакой другой метод не позволит дать такую производительность.

    Поэтому - авторизацию доступа делай на уровне веб сервера (вот пример с нормальным oauth)

    Для удобства обслуживания всего архива, раскидывай файлы по подкаталогам таким образом, чтобы в одном каталоге было не больше десятков тысяч файлов (иначе получение списка файлов будет медленным).

    В качестве имени файла и каталога используй уникальный идентификатор из базы данных (т.е. при загрузке изображения ему отводится запись в базе, и уже после файл перемещается в архив, доступный веб серверу как статичные файлы).

    Тупой пример - числовой идентификатор переводи в hex, дели на группы по 4 символа и создавай соответствующие каталоги: /images/0d4f/3b00/a841/0d88, тут 0d88 это файл, остальные части - каталоги. Идентификатор соответственно 64-битное число 0x0d4f3b00a8410d88

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

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

    @rPman
    Фича новая, похоже ее тупо не дореализовали.

    Можно написать скрипт Google Apps Script, который из твоей таблицы google sheets будет перебирать ячейки, копировать их в документ google docs. Вся возня с ячейками, так что это сам.

    // Получаем доступ к ячейке, содержащей изображение
    var cell = SpreadsheetApp.getActiveSpreadsheet().getRange('A1');
    
    // Получаем изображение из ячейки
    var cellImage = cell.getCellImage();
    
    ....
    
    // Открываем Google Docs документ и получаем его тело
    var doc = DocumentApp.openById(docId);
    // var doc = DocumentApp.getActiveDocument();
    var body = doc.getBody();
    
    // добавляем изображение в google docs документ
    body.appendImage(cellImage);
    Код только пример, тут нет логики обработки таблиц
    Ответ написан
    Комментировать
  • Как убрать предупреждение хрома о вирусе?

    @rPman
    Возможно у тебя на компьютере и правда вирус? Скачай бесплатный drweb cleaner/kaspersky removal tool и проверь машину,
    В идеале используй их live cd образы (установи на usb флешку)
    Ответ написан
    Комментировать
  • Постоянный запуск SeleniumBase заполняет ОЗУ ПК, как очистить озу?

    @rPman
    Перед закрытием скрипта делай browser.quit(), а не browser.close() тогда запущенный браузер будет корректно завершен, browser это webdriver.Chrome()
    Ответ написан
  • Какую технологию использовать для проигрывания видео в браузере с ручной подгрузкой байтов?

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

    Если пользователю нужны элементы управления видео, и зачем то нужно управление с клавиатуры (фокусировка на контролах) то они будут сбиваться при смене плеера, кажется это решается, но мне кажется таких пользователей будет минимум.

    p.s. вполне возможно что сейчас лучше/удобнее формировать .m3u8 плейлист, javascript там продвинутый у html video, но если что его можно формировать и прописывать с помощью data uri.
    Ответ написан
    Комментировать
  • Как открывать браузер у конкретного пользователя?

    @rPman
    ты пишешь телеграм бот и хочешь чтобы браузер у пользователя открывался по твоему желанию?
    никак, иначе это была бы дыра приватности (вычислить ip клиента) и для фишинга
    Ответ написан
  • Ошибка 404 на GitHubPages, почему?

    @rPman
    Первый же результат на запрос инструкция по размещению github.io
    Обратите внимание, что после загрузки проекта файл index.html должен находиться в корневой директории проекта:

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

    @rPman
    в windows 10 и выше штатно идет openssh сервер (в более ранних версиях такой сервер ставится сторонними средствами в пару кликов, ну может с русскими именами файлов будут легкие проблемы), ищи в Параметры ПК - Дополнительные компоненты - добавить компонент.

    Настраиваешь беспарольную аутентификацию по ключу на целевой машине/профиле и запускаешь удаленно консольную утилиту shutdown /s (по умолчанию оно выключит машину через 1 минуту, предупредив всех работающих на нем пользователей, за это время выключение можно отменить)

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

    @rPman
    Не совсем верный используешь метод, содержимое страницы формируется на javascript в браузере, твой 'прелестный суп' так не умеет.

    Могу предположить что цены там тупо берутся тут https://api.dedust.io/v2/prices (этот запрос раз в 3 секунды идет со страницы)
    Ответ написан
    2 комментария
  • Как максимально быстро кликнуть на элемент в браузере?

    @rPman
    Необходимо реверсинженерингом выявить способ, которым события доходят до клиента.

    Для начала открой консоль разработчика (f12) и зайди на вкладку networks
    - если там будут периодические события (например с секундным интервалом) по названию (в url или еще как) похожие на получение статуса, то это значит используется медленный метод http get (это значит клиент получает информацию о событии со случайной задержкой порядка этой секунды), значит дальше можно искать в коде способ как чаще делать запросы (обычно это вызов метода по setTimeout его можно тупо повторить из консоли руками).
    - если там будет подключение типа websocket, тогда странно, обычно это самый оперативный метод, но бывает что бакэнд писали странные люди (или их поставили в странные условия) и там события обрабатываются линейно что то типа 'sleep;читаем базу;отправляем на клиента' то тогда достаточно открыть одновременно несколько окон браузера к одной и той же страничке, и с некоторыми шансами получишь на каждого клиента по циклу со sleep а значит со своей случайной задержкой (она зависит от интервала между открытиями страниц) а значит какая то страница получит обновление статуса раньше с вероятностью тем выше чем больше страниц.

    Я привел пример простых методов, которые потребуют минимальное программирование, но мало ли как там в реальности все сделано, для этого и нужен реверсинженеринг.

    По правильному можно разобраться как все работает и на javascript написать максимально эффективное приложение (прямо тут же в консоли браузера) по опросу сервера.
    Ответ написан
  • Как выйти из двух пользователей в Linux, и при этом выполнить команду один раз?

    @rPman
    убить оба шела, сессия автоматически завершится

    Скрипт для этого пиши сам
    ps
    покажет список текущих процессов сессии, а там обычно только sudo и bash (ну и работающий ps), так получишь pid текущего bash
    pstree -s pid_текущего_шела -p
    покажет в одной строчке всех предков от указанного процесса, например так
    systemd(1)───xfce4-terminal(3933)───bash(5169)───sudo(1726858)───sudo(1726872)───bash(1726873)───pstree(1732257)

    тебе достаточно убить два последних sudo и bash (или чем ты там пользуешься) с конца этого списка
    например так
    kill -KILL 1726873 1726872 1726858 5169
    Ответ написан
    Комментировать
  • Как повторно инициализировать жёсткий диск?

    @rPman
    В терминах windows, инициализация - это создание таблицы разделов (спросит DOS MBR или GPT, выбирай второе в 99% случаев тебе подойдет), там еще есть вариант - динамический, это если у тебя софтварный рейд (превращает несколько дисков в один).

    Менять тебе таблицу разделов не нужно. Достаточно удалить созданные разделы и заново создать. Для этого нужно выбрать мой компьютер, нажать правую кнопку, выбрать управление, в открывшемся окне Управление компьютером снизу выбрать Управление дисками, затем выбрать нужный диск и правой кнопкой выбирать нужные действия.

    p.s. есть утилита командной строки diskpart, она позволяет гораздо больше делать с дисками чем gui, если тебе прям очень нужно повторно проинициализировать диск, пользуйся ей (там есть команда clean, но предварительно нужно выбрать select disk ... будь внимателен и читай хелп)
    Ответ написан
    Комментировать
  • Можно ли установить Windows 7 на внешний жёсткий диск?

    @rPman
    Если это usb контроллер то скорее всего нет. С некоторыми оговорками, можно извернуться, настроить своп файл на sata/ide диск, подшаманить и перенести установку на usb но я успешно этот квест не завершил (не сильно старался)

    Причина - своп файл windows не может находиться на removable дисках, это искуственное ограничение, созданное майкрософт специально, и скорее всего там уже забили как это убрать. К сожалению штатно своп файл нельзя отключить (если его отключить в интерфейсе, windows создает своп файл в каталоге \windows)

    Есть версии, основанные на winpe, это достаточно кастрированная версия windows, на которую нормально не установить драйвера на видеоускоритель, эти сборки на usb устанавливаются.
    Ответ написан
    1 комментарий
  • Стал тормозить ютуб?

    @rPman
    есть какие то адблоки
    запусти для теста браузер в новом чистом профиле без расширений и с дефолтными настройками, если не будет тормозить, начинай по одному включать расширения и тестировать, пока тормоза снова не появятся.
    Ответ написан
  • Почему появляется ошибка Sqlite3.OperationalError: table users has no column named name?

    @rPman
    Что за одинарная ковычка после скобки
    CREATE TABLE IF NOT EXISTS users (' <---
    и она же идет в конце списка описания полей

    т.е. sqlite создает таблицу с единственным полем, имя которого
    id INTEGER auto_increment P...EXT, email TEXT, trip TEXT, seek TEXT, extra TEXT
    прямо так со всеми запятыми и пробелами

    Ну и само собой, пользуйся удобными GUI для sqlite их много, там сразу все поймешь
    Ответ написан
  • Как навсегда исключить игровой кряк из проверки защитника Windows?

    @rPman
    Отключить антивирус, установить от другой компании, где игнор лист еще не сломан.
    Ответ написан
    1 комментарий
  • Какой интерфейс выбрать для SSD для ОС?

    @rPman
    Операционная система практически не требует быстрого накопителя, формально он определит скорость ее запуска и с оговорками работу при недостаточном объеме ram. На практике сама ос будет работать даже с hdd (ну может долгий запуск и подлагивания проводника), ну мало кто профиль браузера переносит с системного диска, поэтому когда говорят про работу ОС имеют в виду работу браузера и проводника.

    Все решает на какой накопитель ты будешь устанавливать приложения и игры, он определит скорость их запуска и работы.

    Выбирай накопитель под ОС по деньгам и не заморачивайся, предельные скорости интерфейса ты не отличишь в типовой работе никак. У меня были эксперименты с LLM-ками, когда оперативной памяти под них не хватает и они постоянно подгружаются с быстрого NVME, так вот это наверное единственный момент когда задача упиралась в накопитель и интерфейс подключения, и даже в этом случае найти накопитель, который упрется в pci-e будет сложно.
    Ответ написан
    Комментировать
  • Как рассчитать "нужды" NPC в числовом виде на основе его требований и инвентаря?

    @rPman
    В общем случае это задача комбинаторики, по простому оптимальный вариант можно найти перебором (что само собой не оптимально по затратам процессора/памяти).

    Тебе нужно как то определить функцию (математическую или буквально программа) принятия решения NPC о его поведении в каждый тик на основе его состояния и возможно истории его действий.

    Почти наверняка это будет функция с какими то граничными условиями и коэффициентами... твоя задача подобрать эти значения таким образом чтобы например максимизировать время его жизни (или у тебя там другие целевые критерии). Обычно пишут оценочную функцию, так же на основе состояния, которую и максимизируют. Например собирай оценку счастья NPC на основе событий в его жизни, как часто испытывает сытость, как долго живет, с каким количеством других сущностей он контактировал, умножаешь каждый параметр на коэффициент, складываешь и полученную функцию максимизируешь. Есть алгоритмы многомерной (по многим параметрам) оптимизации минимизации (если тебе нужно максимизировать f(x) а алгоритм умеет только минимизировать, то работай с 1/(f(x)+1)). Эти алгоритмы хороши если параметров мало и функция имеет мало ловушек (локальных минимумов).

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

    Строишь свой мир, строишь для всего мира качественную оценку (например сумма всех параметров счастья всех NPC), затем всем NPC задаешь на старте случайные параметры, запускаешь его на существование до смерти всех или лимита времени, меняешь параметры, повторяешь...
    Ответ написан
  • Актуален ли ассемблер на сегодняшний день?

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

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

    Области - реверсинженеринг, низкоуровневая оптимизация и низкоуровневая отладка unmanaged кода (т.е. к примеру c,c++). Все это можно встретить и в разработке для микроконтроллеров, и в оптимизации кода для gpu и поиске причины, почему простой цикл кратно работает медленнее из-за вот этой 'безобидной строчки'.

    Но повторюсь, без ассемблера живется неплохо.
    Ответ написан
    9 комментариев
  • Как запретить телефону писать на MicroSD карту?

    @rPman
    Отвечать в лоб на поставленный вопрос - отформатировать карту файловой системой ntfs, если смартфон android то скорее всего он эту fs не будет знать (по лицензионным соглашениям, хотя exfat как то с майкрософт договорились)

    Правильно - разобраться в причинах отвала карты, с высокой вероятностью это аппаратные проблемы, либо карта либо контакты картридера в телефоне
    Ответ написан
    3 комментария