• Какую альтернативу Gmail выбрать под Android?

    A1ejandro
    @A1ejandro
    youtube блогер, ИТ-специалист
    Яндекс.почту? А так вообще разных почтовых приложений много, зависит от ваших предпочтений...
    Ответ написан
    Комментировать
  • Opengl 4.* или vulkan?

    TrueBers
    @TrueBers
    Гуглю за еду
    Это вообще разные вещи.
    Нужно отличать изучение API, от изучения технологии. Если вы хотите выучить просто API, учите что угодно, ибо разницу заметите только, когда поймёте основы, базу.

    OpenGL проектировался когда были другие архитектуры железа. Мультипроцессорность была только в теории, и считалась уделом суперкомпьютеров и ненужной для пользовательских ПК.
    Можно привести аналогию: OpenGL == C++, Vulkan == асинхронный Assembler + hardware threads. Например, в C++ сейчас довольно много архитектурных косяков, которые пытаются решить новыми стандартами, объявляют какие вещи устаревшими, потому что они концептуально неверны и не подходят под современные реалии.
    Но, при этом, вы можете всё то же самое написать на ассемблере, но нужно намного лучше понимать, как работает процессор и ОС, самому писать примитивы синхронизации, и т. п.

    Для этих же целей и создавался вулкан. Для программирования на нём, нужно знать все тонкости железки, читать кучи пейперов от той же НВидии, исследовать, придумывать новые фичи для современных архитектур с нуля, которые изначально были придуманы в OpenGL, но для старого железа.
    Т. е. на Вулкане нужно делать больше руками, больше оптимизировать. Вместо одного вызова функции OpenGL, на вулкане придётся несколько сотен строк написать. При этом, если вы не понимаете какой-то одной тонкости, вы сделаете менее эффективнее то, что изначально было хорошо реализовано в OpenGL. К тому же, OpenGL умеет выбрасывать ошибки, в случае, когда вы где-то накосячили. Вулкан же их не выбрасывает, он полагается на то, что вы уже знаете как этим пользоваться. Точно так же, как ассемблер просто меняет состояние регистров, у него нет понятия ошибки. Как интерпретировать эти регистры, зависит от того, насколько хорошо разработчик читал мануал к процессору.

    В итоге, я бы ответил так:

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

    Если же вы пишете простые прикладные вещи, которым нужно показать какую-то графику, то учите OpenGL. Здесь вы учите только API, соглашаясь с уже готовым, слегка устаревшим, архитектурным дизайном.

    Если хотите писать игры не мирового класса, то учите готовые движки, Unity или Unreal. Они уже поддерживают за вас Vulkan, продумали за вас API и архитектуру.
    Ответ написан
    2 комментария
  • Почему не работает метод length?

    Labunsky
    @Labunsky
    Я есть на хабре
    Для того, чтобы ArrayList знал, какие объекты в нем хранятся, нужно указать их класс явно:
    ArrayList<String> list = new ArrayList<>();
    Тогда list.get(i) будет возвращать String и желаемый код заработает.

    Запись же
    ArrayList list = new ArrayList()
    эквивалентна записи
    ArrayList<Object> list = new ArrayList<>()
    В таком случае, list.get(i) возвращает не String, а Object, у которого метода length() просто не существует
    Ответ написан
    2 комментария
  • Множественное наследование java, что я делаю не так?

    @Div100
    Множественное наследование java, что я делаю не так?

    Что не так?
    Множественное наследование java

    Можно только 1 класс унаследовать.
    Но ты можешь реализовать до кучи интерфейсов
    //A-Z  - интерфейсы
    public class CommonClass extends Direction implements A, B, C, D, Z
    Ответ написан
    Комментировать
  • Как готовиться к олимпиадам?

    @tomatho
    Не знаю на счёт других областей, так что пишу только про ACM ICPC и смежные (похожие) так:
    Чтоб стать крутым, надо ежедневно по 2-3 часа минимум решать задачи в день.
    На всевозможных сайтах агрегаторах задач типа codeforces.ru, opencup.ru, topcoder.com, google codejam, acm.timus.ru и много много других.
    Участвовать во всех проходящих онлайн соревнованиях.

    Напоминает правило 10 тысяч часов. Есть такое мнение, что люди становятся профессионалами не из-за таланта, а по факту вложения человеко-часов в своё занятие.
    Однако, есть и уникумы, по типу Геннадия Короткевича (загугли, почитай).
    Лучшим в любой области стать почти невозможно. Однако шанс есть.

    Я дальше полуфинала ACM ICPC не проходил, так как был слишком ленив и решал задачи пару раз в месяц.
    Ах, совсем забыл: для чемпионства важен опытный тренер. Чтобы не тратить время на всякую чушь, и эффективнее "качаться".

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

    Многие простейшие алгоритмы можно написать элегантно и быстро, а можно долго мозговать а тут +1 индекс, или -1. А тут надо сколько прибавить? А условие <= или <. Очень много нюансов.
    Так же не повредит психологическая подготовка, если тренер могёт. Так как например меня трижды клинило на ответственных соревнованиях. Дважды на полуфинале ACM ICPC: сидишь как бревно, ничего не соображаешь, переволновался. И один раз на ВКОШП.
    Потом как только соревнование кончается (время закончилось), так сразу спадает волнение и начинаешь смотреть на задачи и думать: Что?!?! И это я не смог решить?!?!
    Ответ написан
    1 комментарий
  • Почему в HashMap используется хэшкод, а не просто ссылки?

    Эквивалентные объекты должны иметь эквивалентные идентификаторы.
    Ссылки этого не могут обеспечить.
    Ответ написан
    Комментировать
  • Что использовать для создания контактов на Android?

    mitaichik
    @mitaichik
    https://developer.android.com/training/contacts-pr...

    Это по контактам. По перехвату звонка погуглите android call receiver
    Ответ написан
    Комментировать
  • Как правильно загрузить несколько файлов на сервер?

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

    Возможно, любые долгие задачи типа HTTP-запросов, работа с файлами или БД должны происходить асинхронно, т.е. в отдельном потоке. Популярные HTTP-клиенты типа OkHttp позволяют это делать довольно легко. По умолчанию Android не должен разрешать делать HTTP-запросы из основного потока в принципе как раз для того, чтобы ты не допустил ошибку и не залочил интерфейс.

    Второй вопрос если это возможно то как правильно организовать переход на другой экран если например фоновый процесс загрузки файлов еще не завершен.

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

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Зависит от типа массива. Для массива байтов, например - это [B. Для массива строк - [Ljava.lang.String.
    Ответ написан
    Комментировать
  • Как сделать настоящую планетную гравитацию в Unity?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Здраствуйте. Я, Кирилл. Хотел бы чтобы вы сделали игру, 3Д-экшон суть такова… Пользователь может играть лесными эльфами, охраной дворца и злодеем. И если пользователь играет эльфами то эльфы в лесу, домики деревяные набигают солдаты дворца и злодеи. Можно грабить корованы…


    Делаем много мешей (планета в форме шара, игрока и прочее), добавляем им примерно такой скрипт:
    class Gravity : MonoBehaviou {
        static const double G = 9.8; // correct constant here
    
        static LinkedList<Gravity> meshes = new LinkedList<Gravity>();
    
        float Mass {
            get {
                return GetComponent<Rigidbody>().mass;
            }
        }
    
        void Start() {
            meshes.add(this);
        }
    
        void Update() {
            foreach(var mesh in meshes) {
                float power = (float)(G*Mass*mesh.mass);
                var force = power*(mesh.transform.position - transform.position).normalized;
                force /= (mesh.transform.position - transform.position).sqrMagnitude;
                GetComponent<Rigidbody>().AddForce(force);
            }
        }
    }


    Горизонтальность оставим в качестве домашнего задания. Подсказка - нужно повернуть меш игрока так, чтобы он был сонаправлен с вектором земля-игрок.
    Ответ написан
    2 комментария
  • Как создать точку входа MVP?

    vvovas
    @vvovas
    Есть разные варианты. Я, например, использую следующий подход:
    1. Есть view, которая не знает ни о чем. Умеет только показывать данные. Обычно имеет интерфейс описывающий все свойства, которые можно отобразить в этой view.
    2. Есть presenter, который знает о IView(интерфейсе view) и использует его, чтобы передать данные для отображения.
    3. Обратная передача информации, т.е. реакция на что-то что происходит на форме осуществляется через события. Т.е. view кидает событие и ей без разницы, кто его поймает. Presenter следит за событиями и что-то делает с моделью, а потом передает новые данные через интерфейс обратно во view, если нужно.

    Что касается точки входа, то в моем варианте создается view и presenter,которому эта view передается. view кладется на форму и все. Когда view передали presenter'у он ее заполнил данными и подписался на события.
    Ответ написан
    4 комментария
  • Не могу получить JSON при запуске на телефоне. На ПК код работает. В чем же дело?

    GavriKos
    @GavriKos
    99% что запускаете в UI-потоке.
    В логе должен быть эксепшн что так делать нельзя.
    Все операции с сетью делаются только в параллельном потоке. Мануалы в гугле есть, полно.
    Ответ написан
    1 комментарий
  • Где почитать про сервис смс-запросов (*100# и прочее)?

    @aol-nnov
    начнем с того, что *100# - это вообще не смс. это USSD
    Ответ написан
    3 комментария
  • Какую почитать литературу про создание компиляторов/интерпретаторов?

    ThePyzhov
    @ThePyzhov
    iOS Ninja
    Гугли: книга дракона компиляторы
    Ответ написан
    Комментировать
  • Как преобразовать ArrayList в int[]?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Если ява 8 то можно так:
    nt[] arr = list.stream().mapToInt(i -> i).toArray();

    Если ява 7-8 то можно воспользоваться apache commons вот так:
    int[] arr = ArrayUtils.toPrimitive(list.toArray(new Integer[0]));

    Вариант с помощью google guava:
    int[] arr = Ints.toArray(list);
    ну и варианты которые выше уже написали.
    Ответ написан
    3 комментария
  • Как получить значение свойства editable?

    isEditable()
    Ответ написан
    Комментировать
  • А уже можно юзать Java 8 под андроид?

    @aol-nnov
    retrolambda и импортозамещение streamapi можно уже давно делать и писать в стиле java8 под андроид
    Ответ написан
    3 комментария
  • Может ли модифицирующий метод возвращать что-нибудь кроме типа void?

    @aol-nnov
    Может ли модифицирующий метод возвращать что-нибудь кроме типа void


    может. см. "method chaining", "fluent api" и пр.
    Ответ написан
    2 комментария
  • Как читать сообщения об ошибках в Java?

    Неужели все так сразу сходу понимают что означают сообщения подобные тому что приведено ниже в качестве примера?

    Склоняюсь к тому, что да. Формат достаточно логичен. Это называется "stack trace", он указывает, какое исключение было выкинуто во время исполнения и выводит стек вызовов, с помощью которого ты можешь понять, где и в каком контексте произошло исключение. В приведённом тобой стек трейсе первая строка -- просто комментарий об ошибке, он указывается программистом для программистов. Далее следует конкретный тип исключения (java.lang.NullPointerException). После него показано, где конкретно в коде произошла ошибка (класс, метод и номер строки).
    Ответ написан