• А какая архитектура пакетов в Android Studio у Вас?

    В последних проектах делаю такую структуру:
    ru.mycompany.myapp
    ├─ activities
    ├─data
       └─  dao
    ├─views
       ├─ adapters
       ├─ customview
       ├─ fragments
       └─ widgets
    ├─ network
       └─api
         └─responce
    ├─ models
    └─utils


    Вообще можете почитать, например, эту статью для того, чтобы привести свой код и структура проекта в порядок)
    Ответ написан
    1 комментарий
  • А какая архитектура пакетов в Android Studio у Вас?

    @georgeci
    -database
    --dao
    --schema
    -di
    --module
    --component
    -ui
    --activity
    --fragment
    --adapter
    --customview
    --presenter
    --widget
    -api
    --response
    -model
    -utils
    --rx
    --logger
    --bus
    ---event
    Ответ написан
    8 комментариев
  • Как сделать Circular Reveal Animation на Android Pre-Lolilop?

    ViRGiL7
    @ViRGiL7
    Добрый день.

    Существуют различные библиотеки для реализации такой анимации на устройствах, вплоть до 2.3.
    Например: https://github.com/ozodrukh/CircularReveal
    Ответ написан
    Комментировать
  • Гадание по коду на собеседовании. Как проверяют кандидатов?

    ValorVl
    @ValorVl
    DevOps
    Проверяют на говногод, проверяют мышление, проверяют знание языка, уровень перфекционизма и т.д.
    Меня как java программера, проверяли на всякую хрень типа знание и использование ООП, юзаю ли те или иные фичи и почему, как оптимизирую код, есть ли лапша, соответствует ли код JCC и прочий булшит.
    Зачастую не проверяют нихрена, просто требуют код потому, что знакомый ичар сказал, что так нынче модно.
    Когда меня просили прислать код или дать ссылку на github, я присылал, сферический код в вакууме. Как правило ни на что не влияло, эдакий модный ритуал.
    Ответ написан
    Комментировать
  • Как правильно хранить в базе данные о авторизации юзера через социальную сеть?

    @unity_ultra_hardcore
    У нас используется следующая схема таблиц:
    Table "public.social_account"
       Column    |              Type              | Modifiers
    -------------+--------------------------------+-----------
     user_id     | integer                        | not null
     network     | character varying(255)         | not null
     external_id | character varying(255)         | not null
     created_at  | timestamp(0) without time zone | not null
     updated_at  | timestamp(0) without time zone | not null
     id          | uuid                           | not null
    Indexes:
        "social_account_pkey" PRIMARY KEY, btree (id)
        "unique_social_account" UNIQUE, btree (network, external_id)
        "idx_f24d8339a76ed395" btree (user_id)
    Foreign-key constraints:
        "fk_f24d8339a76ed395" FOREIGN KEY (user_id) REFERENCES app_user(id) ON DELETE CASCADE


    То есть для каждой привязки хранится запись, в которой содержится user_id, название соцсети (google/vk/facebook/etc) и id этой соцсети (у всех произвольный формат).
    Таким образом, когда пользователь аутентифицируется через одну из этих соцсетей, сначала ищется user_id по связке external_id + network. Если user_id найден - аутентифицируем текущего пользователя как этот user_id. Если нет, получаем от соцсети email и по нему ищем пользователя в таблице пользователей. Если нашли, то создаем запись в social_account и аутентифицируем юзера. Если не нашлось ничего (первый визит), то создаем пользователя и создаем запись в social_account.
    Ответ написан
  • Какой framework лучше подойдет для новичка, Laravel или YII?

    metamorph
    @metamorph
    1. Yii2
    2. ООП, неймспейсы, SQL и общий здравый смысл.
    Из опыта общения на форумах, есть два основных косяка: использование фреймворка для всего ("подскажите экстеншн, складывающий 2 + 2") и переоценка возможностей фреймворка ("хочу сделать соцсеть, подскажите как"). Их следует избегать.
    3. Имеются в обоих. Просто в некоторых еще не нашли. А в некоторых, допустим, нашли: habrahabr.ru/post/219475
    Ответ написан
    1 комментарий
  • Позволяет ли лицензия MIT продавать ПО?

    @HabRuLeX
    Использование данной лицензии не накладывает никаких ограничений на продажу.
    "В целом, лицензия MIT позволяет вам свободно использовать чужую работу. В случае, если вы будете распространять свой продукт, в котором будут чужие коды лицензированные под MIT license, от вас требуется указать копирайты авторов кодов, текст лицензии и отказ от ответственности. По сути, вы должны продублировать текст полученной вами лицензии в своем продукте. Лицензия MIT не является copyleft-лицензией, то есть не требует, чтобы продукт, который вы будете распространять, был открытым, вы можете использовать любые коды под MIT-лицензией в любых своих проектах открытых или закрытых."
    habrahabr.ru/post/46809
    Ответ написан
    1 комментарий
  • Каковы основные принципы регистрации и авторизации через социальные сети OAuth2?

    hbuser
    @hbuser Автор вопроса
    Отвечу сам себе.
    Здесь есть полезная конкретная информация о технической реализации.

    А если вкратце, то...

    Для авторизации, регистрации используется все та же таблица 'users'. Вместе с обычной регистрацией и авторизацией, когда при регистрации (в самом простом виде) в таблицу 'users' добавляются email, password и login пользователя, а при авторизации проверяется соответствие введенных login'а и password'а существующим в базе данных, аналогичным образом используется и регистрация/авторизация через социальные сети. Только в данном случае источником данных о пользователе для его регистрации является не непосредственный пользователь, который вводит данные в форму, а соц. сеть. Регистрация в данном случае достаточно прозрачная, т.е. не видна пользователю. Схема примерно следующая (без особенностей работы Oauth-протокола):


    1) Пользователь выбирает вход через соц. сеть.
    2) Происходит обращение к странице авторизации в этой соц. сети, если человек еще не авторизовывался там. После ввода данных, а если он ранее авторизовывался, происходит запрос на разрешение использования его данных.
    3) Если человек отказывается, то на этом конец. Если дает согласие, то выполняется перенаправление на указанную в настройках Oauth страницу сайта.
    4) У каждого пользователя в соц. сетях есть свой уникальный идентификатор, который можно запрашивать. Для своей таблицы 'users' нужно добавить пару дополнительных полей (например, вот такие): auth_via (enum('native, 'vk', 'mailru', '...')) - для обозначения типа регистрации пользователя, и social_id - здесь будет храниться уникальный идентификатор в соц. сети. Если нужно хранить какие-то специфические данные этого пользователя из соц. сетей, то можно создать доп. поля для этих данных.
    5) После того, как пользователь дал разрешение на использование его данных, необходимо запросить нужные данные от соц. сети, в т.ч. и идентификатор пользователя в соц. сети. Вот здесь и начинается невидимый процесс регистрации. Нужно проверить есть ли в БД пользователь с таким social_id, если нет, то вставляем social_id, данные пользователя из соц. сети, по необходимости, в БД. Все, пользователь зарегистрирован.
    Если же данные о пользователе есть, то необходимо запросить актуальные данные из соц. сети, сравнить их с теми, что в базе и если они изменились, то обновить их и в своей базе данных, если нет, то просто переходим к следующему шагу.
    6) Создается сессия с данными пользователя.

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

    ca4a4b263fd1424085988c9deaeb6d5b.png

    Для пользователя, зарегистрированного из соц. сети пароля и логина, естественно, нет. Они нужны для авторизации. А т.к. пользователь авторизуется с помощью своих логина и пароля в соц. сети, то и указывать здесь нечего. И еще, можно при авторизации, к запросу проверки логина и пароля, добавить условие

    'AND WHERE `auth_via`="native"'

    , чтобы исключить пользователей, зарегистрированных из соц. сетей.

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