Ответы пользователя по тегу Java
  • Как хранить изображения в PostgreSql?

    @rPman
    Базы данных не очень эффективны с BLOB-ами, большими объемами данных, вопрос даже не в скорости работы с ними, а в том что инструменты резервного копирования к примеру будут работать значительно медленее, чем если копировать файлы того же объема но размещенные на диске.

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

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

    Причина - большое (десятки тысяч) количество файлов в одном каталоге не совсем удобно в том плане, что многие утилиты резервного копирования (да и просто работа с файлами, получение списка или удаление с помощью bash rm, он до сих пор глючный и тормозит), поэтому вместо хранения файла 031432532341234123.jpeg делать подкаталоги 0314/3253/2341/234123.jpeg заранее расчитав количество уровней от прогнозируемого количества файлов.
    Ответ написан
    1 комментарий
  • Запуск Minecraft (1.12.2 Forge OptiFine из TLauncher) из консоли/командной строки/shell и т.д?

    @rPman
    Не понимаю, почему нужно брать именно из TLauncher?

    minecraft forge распространяется в виде установщика, который берет оригинальную версию jar-файла и модифицирует ее, как минимум это было до 1.12 версии (после майкрософт все купило и сломало).

    Сами моды tlauncher берет с curseforge (там есть соответствующий api, им пользуется и официальный лянчер), на сколько я знаю есть какие то особенности реализации.

    А дальше все просто, моды складываем в каталог mods

    p.s. с легальной точки зрения есть какие то ограничения по самостоятельному распространению файлов, даже для 1.12 версии до того как майкрософт сломало лицензию, нужно было пользоваться официальными средствами дистрибуции.

    upd. весело, все публичные ссылки на загрузку оригинального .jar файла исчезли, спасибо майкрософту
    Ответ написан
  • Возможно ли автоматически конвертировать большой проект с Java на C++?

    @rPman
    Все верно тебе ответили - ручками.

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

    Результат будет хуже чем если все делать руками но возможно самую тупую но объемную работу можно будет взять от туда.

    upd. я бы не сбрасывал со счетов ИИ, он дает неожиданные результаты, полностью работу пока еще на него я бы не перекладывал, но вот что то простое но объемное - почему нет.

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

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

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

    Для синхронизации можешь использовать следующий алгоритм, у тебя должно быть два интервала чтения пикселов, интервал определяй как
    intval(timestamp/интервал времени (у тебя 1 секунда)) * на этот же интервал + смещение

    смещение у каждого интервала свое (меняется в пределах от 0 до длины интервала, само собой в миллисекундах), твоя задача найти такие значения для смещений, чтобы один интервал возвращал чаще то же самое что другой в последний раз (т.е. был позади во времени перед сменой значений), а это другой чаще новые значения (сразу после смены значений). Т.е. ты сохраняешь последние N измерений со значениями интервалов и boolean (подходит или нет) и считаешь градиент для интервалов (количество true по значениям интервалов), из них уже вычисляешь нужно ли увеличивать интервал или уменьшать на некую дельту.
    Ответ написан
    Комментировать
  • Как работает static final?

    @rPman
    static по определению, без каких либо final и прочего, это поле класса а не экземпляра, сколько бы ты экземпляров объекта не создал, переменная будет одна и та же. Ты можешь (будешь) обращаться к этой переменной даже не имея экземпляра, т.е. ClassName.static_member_name, но конечно синтаксически ты можешь обращаться к статическому члену и через экземпляр объекта object_variable.static_member_name.

    final делает эту переменную - константой, т.е. мало того что эта переменная для класса будет в одном экземпляре, она не может быть изменена, а значит компилятор ее может оптимизировать до буквально ее отсутствия (например скалярные типы легко могут подставляться по мере использования в коде)
    Ответ написан
    Комментировать
  • Как прочитать txt файл в телефоне android studio java?

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

    https://www.digitalocean.com/community/tutorials/a...
    Ответ написан
    3 комментария
  • Как оптимизировать return выражение?

    @rPman
    В твоем варианте каждый replace копирует предыдущую строку в новую.

    Логика подсказывает что если проходить посимвольно по строке и проверять значение символа и заменять его на другой в новой строке будет эффективнее по всем параметрам. Новую строку лучше создавать через StringBuilder, так как он эффективно добавляет символы к строке (иначе попытка использовать += к строке будет постоянно ее копировать).

    Так же рекомендуется для проверки символа использовать не кучу if-ов а switch case (оно преобразуется в эффективную таблицу переходов) либо самостоятельно подготовить массив (у тебя речь идет о кодах <256) из 256 строк, где каждая строка либо null (не проводить замену) либо строка, на которую нужно провести замену. Тогда вместо проверки символа по условию будет достаточно брать код символа charAt и проверять что его значение не выходит за пределы массива.
    Ответ написан
    Комментировать
  • Почему не работает Майнкрафт мод?

    @rPman
    Failed to verify authentication
    ничего не навивает?
    Ответ написан
  • В плагине Майнкрафт ошибка, что делать?

    @rPman
    твоя ошибка
    Caused by: java.lang.IllegalArgumentException: Health must be between 0 and 20.0(24.666667938232422)

    ты пытаешься дать больше жизней чем это возможно, ограничивай

    p.s. я правильно понимаю, что если я выстреливаю из лука и тут же меняю оружие в руке, пока стрела летит, то у меня просто ничего не сломается?
    Ответ написан
    6 комментариев
  • Почему при запуске grpc сервера с телефона через компьютер не получается подключится?

    @rPman
    С высокой вероятностью это ограничение телефона, запрет на доступ к ресурсам телефона, когда он раздает интернет

    решается либо перепрошивкой (возможно в твоем телефоне будет опции и так, но я не верю в такое) либо аппаратными средствами, например подключить к телефону usb ethernet (можно и wifi но настраивать придется из консоли adb shell и так же не уверен что без рута это будет возможно), подключив его к своей сети и настроив ip адреса, отличные от тех что раздает телефон (т.е. физически должно быть две сети) в общем сложно и муторно

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

    @rPman
    Для установки, начиная с 26 api (android 8) приложение должно иметь право REQUEST_INSTALL_PACKAGES.
    Устанавливать приложение нужно с помощью Intent.ACTION_INSTALL_PACKAGE (до api 29 т.е. до 10 андроида)или PackageInstaller API.

    p.s. за обход этого гугл делает атата, например запретили так делать (открывать apk дефолтным просмотрщиком как ты хочешь) разработчикам Total Commander под угрозой выкидывания из гуглстора
    https://www.ghisler.com/android.htm
    Removed all functions to install apk files manually by request from Google.


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

    @rPman
    что именно занимает так много времени, проведи профилирование чтобы выяснить где больше всего проводит времени твой код - например внутренняя обработка данных или база данных?
    для 10 000 данных весь процесс занимает около 20-25 мин.
    для такого объема записей это слишком большой срок для базы данных

    Что за анализ выполняется для этих данных что так медленно? почти наверняка это сделано ОЧЕНЬ не эффективно, особенно если вылезает вот это:
    Если стрим записи в БД сделать параллельным (parallelStream()), то появляется проблема при записи в БД, так как некоторые потоки пытаются одновременно обновить одни и те же данные.

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

    Правильно - разделить свою задачу на три - анализ, обработка и сохранение данных. Затем анализ и/или обработку переделать на работу с одновременно большим количеством данных.. в оперативной памяти, а уже потом записать результат.

    Классический пример: для каждой записи ты делаешь запрос - найти соответствующий объект(ы) в базе, прочитать их, изменить и записать результат в базе. нужно сделать так - выгрузить сразу много записей (условно по 1000), изменить их с учетом того что это будет происходить в оперативной памяти, многократная запись одних и тех же объектов не будет занимать столько времени как запись в базу.

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

    Современные даже десктопные машины с 16-32гб (а серверные с 128-256 легко) оперативной памяти позволяют вообще зхагрузить большую часть данных в оперативную память и обработать ее там эффективнее чем это получится делать через sql прослойку, которая рассчитана не на скорость обработки а на надежность хранения и многопользовательский доступ.
    Ответ написан
    4 комментария
  • Какую область программирования выбрать PHP или Java?

    @rPman
    в данном случае язык определит направление дечятельности

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

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

    то о чем в вопросе не было спрошено:

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

    javascript - занял очень интересную позицию в мире, благодаря nodejs он может быть как web бакендом, так и способом разработки браузерного интерфейса на стороне клиента, так и десктопные приложения (electron, чтоб его...) и даже как язык для unity игрового движка, т.е. получается язык получает статистический прирост с нескольких областей а не одной как остальные.
    У языка есть недостаток - как и у php (но он старается избавиться от этого) - свободная типизация, странная реализация ООП и другой синтаксический сахар типа асинхронности (это кстати его плюсы) увеличивают шансы выстрелить себе в ногу и усложняют поддержку проекта на долгосрок (там вообще много где проблем найти, как пример, берешь любой проект с гитхаба с датой последнего комита 3-4 года и пробуешь его обновить и поддержать, советую посмотреть что аудит безопасности npm будет вам писать).

    c# - надо ставить рядом с java (он и .net и создавался майкрософтом как главный конкурент), так же благодаря unity движку, захватывает часть статистики из геймдева. К сожалению, выбор языка гвоздями (да есть способы освободиться, но за все приходится платить и чего то лишаться) прибивает разрабатываемый продукт к майкрософтовской экосистеме, за который бизнесу приходится платить неплохой 'налог', поэтому если у тебя не unity то скорее всего ты либо поддерживаешь какое то легаси либо... ну мне нравится на .net формочки к базе данных делать, нигде такого легкого инструмента который дает ms visual studio и .net - нету, но, если прямо так хочется, там можно и на python.net писать, и на c++.net, и вообще какая разница какой язык программирования, в мире разработчика главенствуют фреймворки и среды разработки.
    Это я к чему - найти деньги с этими знаниями можно только по везению.

    Все остальные языки типа R, Rust, go и прочая экзотика - это издевательства над работодателями.. т.е. если ты найдешь по ним работу, это значит работодатель стал заложником не шибко умного системного аналитика (или его отсутствие/совмещение с разработчиком, который для самообразования решил приколоться), т.е. еще большее везение, делать ставку на это я бы не стал. Хотя для самообразования учить Rust или go очень даже неплохо, много открытых проектов пилят именно на go, вполне возможно, когда в мире количество разработчиков наберется до некоторой критической массы, это станет таким же мейнстримом как сейчас php или javascript.

    Так что еще раз - выбор языков программирования в порядке убывания оценки рекомендации (выше-вероятнее найти работу, кстати оценить уровень оплаты тут сложнее)
    php - и он теряет позиции, потому что SPA приложения захватывают мир
    javascript
    python
    - если не нужен вебдев - то это на первом месте
    java/c# (точнее .net)
    go

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

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

    Правильно - пользоваться готовыми системами сборки, предоставляемые IDE или тем чем пользуется народ. Сейчас на ходу gradle - идеологически оно строится на принципах устаревших maven (репозитарий пакетов библиотек и система контроля за зависимостями) и еще более старого ant (это что то типа продвинутого make но на xml)
    Ответ написан
  • Как заставить код сравнивать ведённую информацию с базой данных?

    @rPman
    Все очень зависит от запросов.

    Самые простые запросы - поиск по конкретному значению, в sql запросе это выглядит select ... from ... where ПОЛЕ = 'значение'
    Как частный случай этого, выбор значения справочника (это такой список значений, обычно выделяют в таблицу с полями id,name а в целевой таблице оставляют идентификатор а не значение) в фильтрации where пишешь ПОЛЕ = идентификатор_из_справочника (в интерфейсе же ты можешь показывать не id а значения из справочника)

    Чуть по сложнее, это запрос по подстроке, как ни странно sql для этого подходит плохо, но если что есть запросы вида where ПОЛЕ like '%подстрока%', в зависимости от наличии % в начале и выбора типа индекса, такой запрос может перебирать все поля в базе или только те что нужно по индексу.

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

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

    @rPman
    в скомпилированной программе
    т.е. исходников нет но развивать как то надо?
    декомпилируешь и развиваешь

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

    Гуглится десятки проектов-декомпилеров, советую самостоятельно в них разобраться.
    java decompiler
    Ответ написан
  • Как сделать чат на java(Android)?

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

    всякая мишура вида login, email, sms, пароли это вопросы безопасности и защиты от спама/ддос.
    Ответ написан
    Комментировать
  • Возможно ли писать на java 18 под java 8?

    @rPman
    нет
    Ответ написан
    Комментировать
  • Как сделать сервер без использования VPS?

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

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

    цена за сутки просто vps-ки будет в районе 20-30 рублей
    Ответ написан
    Комментировать
  • Может ли одно Java-приложение работать с разными БД?

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

    У меня есть совет, так как структуры для каждого пользователя одни и те же, то можно смешать данные всех пользователей в одной базе, добавив поле для фильтрации user_id и везде в запросах его указывать.
    Ответ написан