Задать вопрос
  • Что делать если крашится photoshop на macbook air m1?

    Подозреваю что самый правильный выход - купить подписку Adobe раз уж на макбук наскреб. Что то около 8 баксов в месяц первый год или 96 баксов за год. Через год будет 10 баксов в месяц, но если тебе не играться, то фотошор свои деньги отработает.
    И там вроде триал есть, так что можно попробовать будет работать или нет. И тех. поддержка, можно будет вопросы им писать а не на тостер.
    Ответ написан
    Комментировать
  • Какой инструмент разработки лучше использовать для разработки просто мобильного приложения под Android?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    учи java оно более актуaльно чем какой-то kivy или Python
    Ответ написан
    Комментировать
  • На каких форумах, группах про IT и Gamedev стоит зарегистрироваться?

    @mkone112
    Начинающий питонист.
    Ни на каких.
    Ответ написан
    Комментировать
  • С чего начать обучение ребенка 10 лет спортивному программированию?

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

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    Если честно, то у вас путаница с терминами, так что внесу ясность:

    Запуск Java программы, без установки интегрированной среды разработки возможен?

    Интегрированная среда разработки (IDE) - это программы для разработки ПО. Например, Intellij IDEA, Eclipse и др.
    jdk - Java development kit - это комплект для разработки Java приложений.

    Есть программа Jframe, и я хочу чтобы еë можно было запустить без JDK

    Любой jar можно запустить без jdk, так как для запуска программы достаточно jre.
    Для наглядности:
    606cce89baa5b840749460.jpeg

    Другое дело, что вы хотите запустить jar без надобности установки на устройство пользователя jre, как например, это делает IDE - Intellij IDEA.
    Прочитайте вот, эту статью - https://eax.me/java-without-jvm/

    если да то нужен только .jar или ещë и .bat?

    jar должно быть достаточно. По факту батник при запуске будет через cmd запускать jar. Для кросплатформенности при использовании bat, нужно будет еще создать и sh скрипт, чтобы запустить в UNIX системах.

    Есть программа Jframe

    JFrame это не программа, а класс из пакета awt.
    https://docs.oracle.com/javase/7/docs/api/javax/sw...
    Ответ написан
    2 комментария
  • Можно ли считать любой фрагмент программного кода алгоритмом?

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

    Да. Например так работают декларативные языки, типа HTML, SQL, CSS.
    2. Является ли алгоритмом инструкция с единственным действием?

    Да.
    3. Является ли алгоритмом верстка и можно ли её вообще считать кодом?

    Кодом - да. Алгоритмом - нет, тк вёрстка не описывает шаги по достижению результата.
    Ответ написан
    Комментировать
  • Почему с++ делит неправильно?

    @galaxy
    Уберите floor().
    У вас и так тут lineNumber / table.size() целочисленное деление (с отбрасыванием дробной части).
    С floor же происходит конвертация в double с потерей точности, потом снова в long long.
    Ответ написан
    1 комментарий
  • Как быстро проверить, является ли некоторое огромное число (от 100 знаков) квадратом целого числа?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Можно попробовать вычислить корень быстрым алгоритмом. Но там сложно. Гуглите Karatsuba square root. Есть открытые реализации. Есть еще какой-то адский метод через быстрое преобразование Фурье, попробуйте погуглить и его.

    Более простой в реализации, но менее быстрый метод вычисления корня - бинарный поиск. Храните l, r, l^2, r^2 и lr. По этим числам можно вычислить m=(l+r)/2, m^2, m*l, m*r без длинных умножений, а только складывая длинные числа и деля на 2. Вам надо поддерживать, чтобы l^2 <= n <= r^2. Изначально можно сделать l=1, r=10^51 (или больше - половина длины входного числа + немного, чтобы точно квадрат был больше n), потом делить отрезок пополам и отбрасывать ненужную половину.

    Еще есть вероятностный метод через символ Лежандра/Якоби. Это будет самым быстрым методом.

    Это как смотреть на последнюю цифру. Квадраты могут давать там 0, 1, 4, 9, 6, 5. Но нет ни одного квадрата, который оканчивался бы на 2. Т.е. если число заканчивается на 2, то можно сразу говорить, что это не квадрат. Это мы взяли остаток от деления на 10 (последняя цифра) и посмотрели, какие из них хорошие. Вот символ Лежандра - это такая проверка для модуля по любому простому числу (а не 10).

    Если брать некоторое простое число p, то n может быть квадратом, только если символ Лежандра (n/p) - равен 1 или 0 (По научному: n - должно быть квадратичным вычетом).

    Если брать небольшие (<64-битные) простые числа, то можно за линию считать n%p и потом вычислять символ Лежандра (n%p/p) по алгоритму через символ Якоби за O(log(p)^2). Когда подсчитали символ Лежандра и если он -1, то n - точно не корень.

    Тут проблема в том, что это необходимый, но недостаточный критерий - если для какого-то p вы получили -1 - то это точно не квадрат. Но возможно можно подобрать такое число, что все ваши тесты дадут 1, а оно не квадрат. Поэтому надо брать много простых чисел. Скажем, 20. Желательно еще числа брать достаточно большими. Но их не надо искать каждый раз, можно захардкодить. Грубая прикидка говорит, что вероятность ошибки такого алгоритма 2^(-количество простых чисел).

    Т.е. берете много простых чисел. Считаете для каждого n%p выполняя деление большого числа на короткое (один проход по массиву цифр). Потом считаете символ Лежандра. Если получили где-то -1 - то точно не квадрат. Иначе - скорее всего квадрат.

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

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Определить такую последовательность можно с помощью стека - это структура в памяти (обычный массив), куда вы должны будете складывать скобки по мере прохождения по текстовой строке со скобками. Если скобка открывающая, то скалываете её в стек. Если закрывающая, то вынимаете соответствующую открывающую скобку из стека. И если скобка не та (тип не совпал), или необходимо взять скобку из пустого стека, или в конце строки стек не опустел, то значит в строке присутствует ошибка.

    А вот автоматически исправлять ошибку - дело неблагодарное. Потому что текстовая строка с дефектом не содержит информации о том, какой она должна быть. Например, если ошибка в том, что скобка пропущена, то как узнать, в какое место нужно вставить недостающую скобку? Никак! Разве что ваша строка имеет определённый формат и всякие намёки на то, где это скобка может быть. Но даже в этом случае, скорее всего, будет неоднозначность.

    Например, строка из текста программы: x = 2 * 2 + 2);
    С помощью алгоритма выше вы можете узнать, что в скобочной последовательности допущена ошибка. Но есть целых три места, куда можно вставить открывающую скобку, чтобы строка стала валидной синтаксически. Если это Си-подобный язык, то четыре. Но даже если рассматривать более или менее разумные места для вставки, то их два, и всё равно не понятно, что именно будет исправлением ошибки.

    P.S. Дарю вам бонусный пример строки для медитации:
    /* [(]) */ y = (a[i] + 7); // }])
    Ответ написан
    2 комментария
  • Java, должно ли чтение коллекций или переменных быть Thread Safe?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    почему я не могу прочитать обычную коллекцию ( не изменяя ее ) из разных Thread

    Можете, если никто её не изменяет. Иначе можете изменений не увидеть.

    Или одну и ту же переменную, если она будет final

    Тем более можете.

    Я был бы очень рад и благодарен, если бы кто-то смог доступно объяснить.

    Тема сложная, не стоит искать ответов в интернете, тут и обмануть могут. Лучше прочитайте "Java Concurrency in Practice".
    Ответ написан
    1 комментарий
  • Как правильно ответить на данный запрос из США?

    MaxLK
    @MaxLK
    сети, виртуализация, СХД...
    судя по списку компаний просто проверяют подает под санкции или нет. видимо пользуются библиотекой и малеха очканули. подозреваю что на данное письмо можно просто забить и не отвечать ничего.
    Ответ написан
    3 комментария
  • Ошибка Inappropriate blocking method call при http запросе в Kotlin. В чем проблема?

    @Asapin
    В свободное время ковыряюсь с Rust и Wasm
    Если по каким-то причинам нет возможности заменить блокирующий код неблокирующим аналогом (например, драйвер БД, для которого асинхронной версии просто не успели ещё написать), то можно использовать такое решение:
    1. Создаёте отдельный тредпул
    2. Все вызовы блокирующего кода оборачиваете в блок
    suspendCoroutine { continuation ->
        //
    }

    3. Внутри этого блока создаёте Runnable, который и будет выполнять ваш блокирующий код. После выполнения блокирующего кода вызываете либо continuation.resume(result), либо continuation.resumeWithException(e)
    4. Скармливаете полученный Runnable тредпулу.

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

    * - В котлине по умолчанию используется диспатчер Dispatcher.Default, количество потоков в котором равно количеству ядер CPU (но не меньше двух), поэтому добавление отдельного тредпула под блокирующие задачи приведёт к увеличению количества тредов, что в экстремальных случаях может привести к общей деградации производительности. Но в если у вас не высоконагруженное приложение, то этим можно пренебречь. Правда не уверен как с этим обстоят дела на мобильных платформах, возможно там количество тредов более критично.

    Из очевидных минусов:
    • количество потоков больше, чем ядер CPU
    • количество одновременно выполняемых блокирующих методов = количеству потоков в этом тредпуле
    • следите за тем, что бы этот тредпул был ограничен сверху
    .

    Насколько я помню, еще ~1.5 года назад примерно такая схема применялась в котлиновских обёртках над спринговыми драйверами то ли к монго, то ли к редису (там было 3 версии драйвера - блокирующая, реактивная, и блокирующая, но обёрнутая в отдельный тредпул, как я описал). Как сейчас - не знаю.
    Ответ написан
    1 комментарий
  • Как безопасно хранить ключи к картам Mifare в приложении?

    Никак. Такие ключи не хранят в приложении. Они должны быть на безопасном сервере, в противном случае всегда можно будет до них добраться.
    Ответ написан
    7 комментариев
  • Как правильно использовать ViewModel в RecyclerView?

    iLLuzor
    @iLLuzor
    Java, Kotlin, Android Developer
    Этот код в данном случае не имеет смысла и его нужно удалить:
    notifyItemRangeChanged(positionForDelete,myArrayElement.size)


    Что ещё следует изменить:
    - Сделать ViewModel полем класса активити;
    - Не передавать ViewModel в адаптер. Адаптер вообще не должен знать о модели;
    - Передавать список в адаптер не через конструктор, а через отдельный метод.

    Как обрабатывать клик:
    При клике по холдеру ничего не удалять из списка адаптера, а сообщать в активити через колбэк о том, что был клик по элементу, а из активити сообщать об этом клике во ViewModel через вызов метода. Далее ViewModel должна решать, что делать - в вашем случае удалить элемент и передать новый список в активити, которая передаст его в адаптер.
    Ответ написан
    Комментировать
  • Нужен ли HTML и CSS для Android разработки?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Нет.
    Ответ написан
    Комментировать
  • Как решить эту задачу?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Представьте, что ваши вершины лежат на прямой OX в координатах (a_i, 0). Длины ребер тут будут тупо длинами отрезков. Теперь ваша задача обойти все точки на прямой и вернутся в начало, пройдя наименьшее расстояние.

    Очевидно, что оптимальное решение тут, например, такое: начните в самой левой точке и идите по ним слева-направо. Дойдя до конца, вернитесь в самую левую точку. Это и будет оптимальное решение. Длина пути тут 2*(max(ai)-min(ai)).

    Если нужна только длина пути - то можно тупо найти минимум и максимум и взять удвоенную разность. Если нужен сам путь, то сортируйте или пары {a_i, i} или сортируйте только индексы, используя собственную функцию сравнения, которая по двум целым числам сравнивает a[i1] и a[i2].
    Ответ написан
    1 комментарий
  • Какой выбрать язык для работы с 3D - Rust или C++?

    Про C++ не скажу, но у rust есть нюансы:
    1. Все эти приколы с borrow checker'ом, которые, я думаю, с 3д ещё чаще будут возникать из-за сложных структур данных.
    2. Может не хватить каких-то библиотек - могут оказаться только голые обёртки над си (а то и вообще придётся их генерить), что тоже не очень удобно.

    Но лично я не вижу в этом большой проблемы, тк раст сильно удобнее, чем C++, а побороть компилятор сильно проще, чем кажется.

    Для opengl, vulkan, directx, winapi уже есть удобные обёртки, и их можно найти на crates.io
    Ответ написан
    1 комментарий
  • Сортировка двумерного массива методом Пузырька, ошибка, как исправить?

    fzfx
    @fzfx
    18,5 дм
    if (mass[i][j] > mass[i][j + 1]) {
              swap(mass[i][j], mass[i][j + 1]);

    вот здесь у вас ошибка: при j равном m - 1 вы вылезаете за границы массива.
    Ответ написан
    2 комментария
  • Зачем же все таки нужен return?

    AleksandrB
    @AleksandrB
    Совсем недавно вывел "Hello world"
    Если брать конкретно этот код, он не требует return, ведь он нарушает принцип единой ответственности. Метод daytime в вашем случае отвечает сразу за 2 действия - определение что выводим и его вывод. Правильно было бы иметь такой код:
    static String daytime(int hour){
            if (hour >24 || hour < 0)
                throw new IllegalArgumentException("Bad argument");
            if(hour > 21 || hour < 6)
                return "Good night";
            else if(hour >= 15)
                return "Good evening";
            else if(hour >= 11)
                return "Good after noon";
            else
                return "Good morning";
        }


    А вывод должен осуществляться в методе main

    ps в жизни не писал на джаве, если там косяки в синстаксисе, поправьте
    Ответ написан
    Комментировать
  • Зачем же все таки нужен return?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Оператор return, как и следует из его названия, возвращает из метода результат или управление.

    P.S. Поразительно, что вы задаёте вопросы по Java с 2018-го года и до сих пор не освоили самые основы.
    Ответ написан
    Комментировать