Ответы пользователя по тегу Программирование
  • Как обновить базу данных на Android с выходом новой версии приложения?

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

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

    mitaichik
    @mitaichik
    Задание в студию!

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

    Я сделал за 1.5 часа - Firebase + Angular. Задание сделанно? Сделанно. Работает? Работает. Гений ли я? Нет.
    Ответ написан
    1 комментарий
  • Как хранить токены Android?

    mitaichik
    @mitaichik
    По заявлению Android хранить в Shared Preferences с private mode безопасно. Небезопасно это на рутованных устройствах, ибо там к файлу Shared Preferences можно получить доступ (без рута андройд не пускает в папку приложения).

    Так что если что-то серьезное - то лучше шифровать. Как шифровать? Я бы сам хотел увидеть ответ профессионала.

    У себя я сделал так: генерирую сессионны ключ AES, беру информацию, шифрую ее на сессионном ключе, результат сохраняю в приватный файл. Далее сессионный ключ шифрую на постоянном ключе RSA и сохраняю результат в файл. Сам же ключ RSA храниться в KeyStore. Почему нужен сессионный ключ? Потому что RSA может шифровать только небольшое кол-во инфы (245 байт вроде на ключе в 2048 бит).

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

    Но сейчас думаю, не сморозил ли я фигню, ибо тот же сессионный AES ключ можно было бы сохранить в KeyStore. Ну и RSA кажется лишним - это же шифрование с открытом ключем. Думал сначала хранить часть ключа на устройстве, часть на сервере с доступом по пинкоду и удалением после пару неправильных вводов, но потом решил что это лишнее...

    В конце концов даже разработчики гос приложений тупо пихают конфинденциальную инфу в приватные файлы и не паряться с шифрованием, и ничего, сертификацию ФСБ проходят.
    Ответ написан
    4 комментария
  • Что такое "call back interface"?

    Комментировать
  • Первый проект на java. Как решить NetworkOnMainThreadException?

    mitaichik
    @mitaichik
    Ява многопоточная, у приложения есть главный поток (отрисовывает UI например) и чтоб его всякие запросы в инет не блокировали, андройд запрещает делать их в главном потоке. Соответсвенно, вам нужно запустить интернет-запрос в отдельном потоке.

    Мой совет - юзайте библиотеки которые делют запросы за вас: okhttp / retrofit
    Ответ написан
    Комментировать
  • Возможно ли устроиться на работу девелоперу-иностранцу в России?

    mitaichik
    @mitaichik
    Жил раньше в Питере, работал в разных крупных конторах. У нас работали ребята из Казахстана, Узбекистана, Украины (все были не граждане РФ). Их брали нормально. Что касается документов - хз как они были офромленны (знаю тлоько что у некоторых были эти самые РВП). В любом случае, если вы реально хороший специалист - крупная компания посуетится ради вас.

    Другое дело что их не интересует 3 месяца. Ради сотрудника на 3 месяца суетиться никто не будет, будь он гражданин РФ или нет, неважно. Компании ищут человека как минимум на несколько лет, ибо первые несколько месяцев новый сотрудник только вникает в проект, отвлекает разрабов вопросами, делает из-за незнания проекта баги, и в целом, замедляет процесс разработки.
    Ответ написан
    4 комментария
  • Как лучше писать if условия?

    mitaichik
    @mitaichik
    1. Согласен с тем что выходить нужно как можно быстрее. Поэтому лучше как-то так:
    if(foo != bar || foo < 1) {
      return false;
    }
    // логика
    return true;


    2. Деление условий должно быть осмысленно с точки зрения бизнес-логики. Если условие foo != bar || foo < 1 является целостным и неделимым с точки зрения бизнес логики, то лучше его не делить.

    Если же это 2 разных условия (две разных ситуции), просто скомпонованных в одно условие, то вполне допустимо их разделить для логического выделения (опять таки с точки зрения бизнес-логики). Например, если foo - кол-во товаров в заказе, a bar - кол-во товаров при котором дается скидка (не больше не меньше):

    // кол-во товара в корзине != кол-ву товара при котором делается скидка 
    if(foo != bar){
        return false;
    }
    
    // если корзина вообще пуста
    if(foo < 1){
      return false
    }
    
    // применение скидки к заказу
    
    return true;
    Ответ написан
    Комментировать
  • Как правильно связать приложение на Java и Nginx?

    mitaichik
    @mitaichik
    Возможно подойдет https://www.nginx.com/resources/wiki/modules/java_...
    Ответ написан
    Комментировать