IWasHere, боты и эмиграция

Всем привет! В этой записи перед началом уже «рейтинга сотовых операторов»(который будет завтра вечером) я хочу прояснить некоторые моменты. Но обо всем по порядку.

IWasHere. В начале мая должен был выйти «дневник разработчика», где я бы рассказал, что я такого интересного сделал за прошлый месяц. На самом деле, там мало чего интересного. Исправление ошибок, некоторые дизайновые улучшения, ворох новых ошибок и другое. Так уж получилось, что в понедельник у нас уже предзащита, соответственно, мне сказали по-быстрому пилить самую неинтересную и формальную часть диплома — текстовую. Энтузиазма у меня на это мало, но делать что-то да надо, поэтому я вчера таки осилил написать 7 страниц по введению и первой главе. В ней, кстати, надо бы еще побольше текста накидать. Наверное. В общем, защита у меня 14 июня, примерно к этому сроку будет релиз. А в конце мая, может быть, выйдут и «дневники». Посмотрим.

Атаки ботов. Вообще, я удивляюсь, как много разных IPшников пытаются взломать сайт. Зачем? Тем более, что теперь меры безопасности усилены(я скачал пару полезных плагинов) и это бесполезно. Впрочем, пусть развлекаются. Главное, чтоб мне не мешали.
А заниматься мне тут, кстати, есть чем. После диплома и отпуска я хотел начать разрабатывать т.н. «Project Darkside» — обновление моего блога, повышающее приватность и защиту. Но об этом позже.

Эмиграция. Наверное, самый сложный на данный момент вопрос. Решение уехать из этой страны было принято еще месяца 2 назад, помнится я об этом писал, по-моему даже в «Идеологии власти». Однако, принятое решение не значит наличие хоть какого-то плана действий. Желание есть, вон на днях в телеге даже поставил срок в 2 года, которого должно хватить на подготовку. По моим подсчетам. За это время я успею оформить загранпаспорт, как-нибудь освоить тот же Fucking English(ибо международный язык все-таки), найти денег и подходящее место. Среди основных вариантов — учеба и/или работа за границей. Однако, не так-то уж просто с имеющимися начальными данными найти подходящий вариант. На самый экстренный случай есть еще возможность запросить политическое убежище в странах Загнивающего Запада или хотя бы Гейропы. Но это уже совсем если прижмёт. Оставаться в этой стране при подавляющем большинстве тупого и поцреотически агрессивного стада мне не хочется. Как там было… «не нравится в России — вали в США». По-жа-луй-ста! С вас билет в один конец, немного денег для получения визы, оформления загранника(5000, между прочим!) и запроса политического убежища и прочих первоначальных расходов.  В таком случае с превеликим удовольствием свалю отсюда. Что? Никто не хочет оплачивать мне билет в один конец? Даже так искренне ненавидящие агентов Госдепа поцреоты? Впрочем, другого ждать и не следовало.

Да, вопрос этот пока что сложный. Весьма сложный. Но решать его как-то нужно.
С завтрашнего дня и до 22 мая будут выходить 5 частей «рейтинга», так что, если вам эта тема интересна, подписывайтесь на обновления.
До скорого.

IWasHere: дневники разработки. Март

Всем привет! Итак, как вы уже помните, я сейчас занимаюсь работой над собственным проектом. Ну… как занимаюсь… вспоминаю иногда. Подробности о нём вы можете прочитать, например, вот здесь — IWasHere: мизантропичная геосоциальная сеть. А здесь находится предыдущая запись по дневникам разработки. Что ж, с тех пор аж месяц прошел, за это время я, правда, успел пару раз упомянуть некоторые фишки проекта(например, модное на фоне конфликта Telegram с гэбней сквозное шифрование), но всё-таки до полноценных «дневников разработчика» это не дотягивает. Ах да, теперь эта небольшая рубрика будет выходить раз в месяц.

1. Концепция MVP. Собственно, основная концепция при разработке проекта и презентации его первой версии(которая будет во второй половине мая). Название подсказал мне мой научрук в универе, но основной смысл был понятен мне и до этого — для начала реализуется базовый функционал, достаточный для презентации основной идеи проекта. В нашем случае, это будет сама возможность добавления меток, отправки сообщений и создания групп. В данном виде выпускается первая готовая версия приложения и анализируется спрос на него. В случае успеха допиливаются различные свистелки и перделки(«extended version»). В случае фейла проект успешно забывается, ибо потери невелики.

2. Определение местоположения(включая точность). Достаточно много времени пришлось потратить на непосредственно определение координат и улучшение их точности. Был создан класс GPSLocation, реализующий паттерн Singleton, в котором определяется местоположение устройства пользователя. В единственном экземпляре данного класса хранятся и сами координаты, и точность определения местоположения(в метрах).
Использование всех доступных провайдеров местоположения позволяет снизить время определения координат(то есть, время неактивности приложения с момента запуска, ибо первым делом у нас идёт именно определение местоположения) до минимально возможного. При переключении между различными компонентами приложения координаты сохраняются. Также приложение умеет работать в фоне и определять местоположение там.
Определив координаты и точность, приложение отправляет их на сервер, который возвращает все доступные метки, находящиеся в окружности радиуса точности с центром в указанной координатами точке.

3. Отображение метки. Получив список меток, приложение отображает их в RecyclerView. При клике на элемент списка, юзер попадает на страницу информации о метке. При этом, зашифрованные метки, ключа от которых на устройстве пользователя нет, не показываются. Текст остальных зашифрованных меток показывается только на странице подробной информации.

4. Анонимность и шифрование. Метка может быть оставлена анонимно, при этом другие пользователи не смогут узнать имя автора. Однако, на сервере эта информация всё равно будет храниться(для того, чтобы была возможность редактировать и удалять метку, а также делиться ею). По умолчанию метки хранятся на сервере в открытом виде и все пользователи могут получить к ним доступ. Однако, при добавлении или изменении метки пользователь может сделать её шифрованной. В таком случае, её текст будет зашифрован с помощью алгоритма AES, а ключ от метки сохранится на устройстве юзера. Этот ключ можно будет отправить другим пользователям с помощью личных сообщений, но об этом позже.

5. Добавление, изменение и удаление метки. Тут всё просто  — заполняешь поле текста, по желанию щелкаешь две галочки(анонимность и шифрование), и метка добавлена. Автор метки может изменить или удалить её, если нужно. Изменению подлежат только текст, а также опции «Анонимность» и «Шифрование». Изменить метку можно в течение часа после её добавления. Удалить — в течение 24 часов. Это сделано ради предотвращения возможных спекуляций. При таком раскладе на одной точке может скопиться огромное множество меток, но и этого можно избежать с помощью небольшой доработки проекта. В будущем.

Еще много чего надо успеть сделать. А остаётся полтора месяца. Что ж, пора бы, пожалуй, поднажать. Тем не менее, еще как минимум две записи с этим заголовком вы еще увидите. А там посмотрим.
До скорого.

IWasHere: дневники разработки. Февраль

Знаете, а я тут ВНЕЗАПНО вспомнил, что мне надо пилить диплом. А точнее говоря, дипломный проект. Сия внезапность меня настигла вчера ночью, поэтому подкрепившись знатной дозой кофе, я таки до 8 утра просидел за Android Studio. И да, меня до сих пор бесят его вечные тормоза, если что. Впрочем, сам диплом для меня сейчас вовсе не в приоритете, ибо еще конец прошлого года показал, что важным фактором защиты диплома является скорее куча ненужной бумаги и красивые речи, плюс еще люто ненавидимый мной деловой внешний вид. Не, я конечно знаю, что «встречают по одежке», но всё же… Как вы уже догадались, на первое место в приоритетах выходит сам проект. Поэтому в качестве некой систематизации рабочего процесса где-нибудь, скажем, раз в месяц я буду публиковать отчеты о ходе разработки. И нет, это не постоянная рубрика, просто небольшой эксперимент. Может быть, он мне не понравится и продолжать публикацию записи я и не буду. Кто знает.

И раз записи будут выходить примерно раз в месяц, то сегодня я хочу рассказать о том, что я сделал в феврале. Напомню, что на начало февраля у меня был готов сервер(написанный на PHP+Yii2, в качестве базы данных используется MySQL) и даже интерфейс для взаимодействия с ним на клиентской стороне(это делалось с помощью библиотеки Retrofit).
1. Аутентификация. Разумеется, самой первой функцией приложения, которую необходимо было реализовать, стала аутентификация. Как я уже рассказывал, вместо привычной и уже немного устаревающей связки «логин-пароль» я выбрал «email-одноразовый пароль». Причем, одноразовый пароль высылается на адрес email. В будущем возможно применение OAuth, в частности, использование аккаунтов Google, которые есть почти на всех устройствах Android.
Однако, главным принципом любого современного приложения является не только удобная аутентификация, но и возможность хранить сессию сколь угодно долго. Мобильные устройства чаще всего принадлежат одному владельцу и процедура прерывания сессии здесь нужна не так часто, как, например, в браузере. В конце концов, приложение может закрываться системой или юзером много раз, но каждый раз начинать аутентификацию заново в таком случае — просто бред. При этом, сервер должен быть уверен в том, что получает информацию от нужного пользователя и выполняет запросы от имени того, кто этот запрос отправил. Проще говоря, если Б отправил от имени А запрос на сервер по выполнению какого-либо действия, то этот запрос должен быть отклонен. Проще говоря, при каждом запросе клиента сервер должен авторизовать запрос. Для этого используются Cookie. При успешной аутентификации сервер передает клиенту файл Cookie, содержащий уникальный идентификатор и ключ сессии. Ключ случайно генерируется из символов латинского алфавита(строчных и прописных) и цифр. Длина ключа составляет 32 символа. Хеш ключа хранится в базе данных в объекте сессии. В каждом запросе клиент предоставляет файлы Cookie, а сервер, перед тем как этот запрос выполнить, проверяет, соответствует ли переданный пользователем ключ данному хешу.
2. Регистрация. Тут всё гораздо проще — пользователь заполняет 4 поля и регистрируется в системе. Приложение сразу определяет заполнение полей(пока что только сам факт заполнения, о корректности как-нибудь потом поговорим) и отправляет запрос. Сервер отвечает и в случае успеха юзер сразу перенаправляется на страницу аутентификации.
3. Выдвижное боковое меню. Плюшка, сделанная ради интереса. Использовалась библиотека MaterialDrawer. Выглядит неплохо, по крайней мере, на девайсах с 6-м андроидом и выше. На планшете с 5.1, увы, не работает. Надо пилить отдельные костыли
4. Сервер. Периодически дописываются различные методы для сервера. Ибо сначала их было примерно 15, к концу практики их уже стало около 20, а теперь я еще хочу парочку добавить. Соответственно, будет обновляться и интерфейс сетевого взаимодействия в клиентском приложении.

Вот пока что и всё. Сейчас я пилю добавление новых меток, их просмотр и RecyclerView со списком всех меток в заданной точке и некоторой небольшой окружности(ах да, добавилась еще и небольшая окружность, вида +-0.0002 градуса к координатам точки по GPS, для того, чтобы нейтрализовать погрешность в точности геолокации. Хотя, это нужно тестировать для достижения наилучшей точности).

По сути, где-то через месяца три уже должна быть защита. А времени не так уж и много, я вам скажу. Впрочем, в сроки я укладываюсь. Наверное. А после защиты… Что делать после защиты? Кто-нибудь знает? Не, в июне-июле я, может быть, отпуск себе организую. А потом ведь надо будет искать, чем заняться. С одной стороны, я давно хотел заняться бизнесом. Особенно было бы хорошо, если в сфере информационных или телекоммуникационных технологий. Ну, той же связи, например. Эта сфера мне интересна(особенно, если мобильную связь вспомнить). Но… бизнес и Россия — вещи мало совместимые. Отдельно хотелось бы продолжить изучение хомо и общества, применить уже навыки управления людьми на куда более широкой аудитории… Хм… мысли вслух, не более.
До скорого.

Скучно.

Привет! Да, пожалуй, именно таким коротким предложением можно охарактеризовать моё текущее настроение. Я уже наверно говорил, что если бы можно было изобразить график моей активности по периодам, то это были бы те еще американские горки с экстремальным уклоном. Ибо за периодом быстрого роста следует пик и столь же быстрый спад до того состояния, когда вообще ничего не хочется делать. Конечно, энергии на всё и сразу не хватает и иногда нужно время, чтобы восстановить силы. Потому что иногда приходишь ты такой с практики, на которой делал… ну… практически ничего, и валишься с ног. Ну да, еще и сбитый режим дня, вкупе с тем, что на практику за каким-то хером нужно было приходить к 9 утра. Впрочем, к 9 утра за весь месяц я приходил лишь пару раз. Ибо в первые часа два-три я всё равно бы либо спал, либо занимался чем угодно, только не дипломом. Рабочие часы у меня обычно начинаются гораздо позже.

Ах да, в субботу должна была быть рубрика, но я слишком сильно увлекся дипломом, поэтому на написание букв времени не хватило. Будет, пожалуй, через пару дней. Максимум — в субботу. Вообще, надо бы немного подкорректировать расписание выхода рубрик, дабы, скажем, раз в две недели рубрика выходила, например, в среду. Сокращать время выхода, как раньше, я пока не хочу, ибо рассказать надо о многом, а времени не так уж и много. Но ладно, об этом я как-нибудь сообщу позже.

Диплом. Да, я тут в пятницу вечером решил продолжить им заниматься. Ну, во-первых, появилось желание. Во-вторых, надо ж его когда-то делать. Я вон итак из графика выбился. Впрочем, график я делал только на время практики, преимущественно по желанию моего научного руководителя и на абсолютное [ДАННЫЕ УДАЛЕНЫ]. Ибо я никогда не умел вкладываться в нужное время. А уж куча подводных камней, что мне пошла встречаться и вовсе делает реализацию этих планов в указанное время невозможной.
Кстати, о недостатках разработки по Android. Что бы вам рассказать? Ладно, такой НЕНАВИСТИ, как в случае первого пришествия OdinAss 1С не будет, но вот что мне НЕ нравится в этом занятии:
1. Android Studio. Нет, местами это даже вполне удобная среда разработки. Подсказки там, автоматическое форматирование кода, дабы ВЕСЬ программный код не писали в одну строку, что есть абсолютно вырвиглазно. Но! Как же он тормозит! Ваш проект может собираться минуты 3-4 минимум, и это без учета состояния, когда система радостно информирует вас о том, что «Приложение не отвечает». Вообще, по уровню тормозов ЭТО обгоняет все ОСки семейства Windows вместе взятые. А по количеству обновлений Gradle, SDK и иже с ними еще и персонально десятую винду. Возможно, это всё потому что у меня на ноуте стоят «нищебродские» 4 гига оперативной памяти, когда системные вымогательства этой среды рекомендуют аж 8(8, Карл!). И еще 1 гиг для эмулятора. Извините, у меня даже большинство игр на ноуте столько не требуют. Про такие мелочи, как Fucking English по умолчанию я и вовсе предпочту забыть.
2. Эмулятор. Начнем с того, что он тоже тормозит. Продолжим тем, что на моём ноуте с «не менее нищебродским» процессором AMD A6 он и вовсе отказывается запускаться. Поэтому про это адское поделие гугла и IntelliJ мы благополучно забываем и качаем GenyMotion, благо для частного использования он бесплатен. Правда, если эти запускать её одновременно с Android Studio(что логично при отладке приложения!), тормозят они в два раза больше. Ладно, черт с вами, хорошо, что андроидофон у меня в наличии.
3. Дизайн. Вот не люблю я всякие юзер-интерфейсы пилить хотя бы за то, что в CSS и верстку я нормально не могу. В андроиде этому посвящена отдельная дисциплина, называющаяся Layout и расположение элементов в нём. Благо можно в ConstraintLayout сделать кучу форм и кнопочек, привязать их друг к другу и не особо париться.
4. Отображение и обратная совместимость. Частично вытекает из предыдущего пункта. Приложение должно хорошо выглядеть на всех устройствах. Телефон, планшет, 4 дюйма, 5, 10 и так далее. Соответственно, для планшетов следует пилить свой собственный интерфейс, с Layout и Fragments. Отдельная песня — это различные версии Android. Поскольку даже начиная с 4.0 зеленый робот претерпел кучу изменений, все их следует мысленно держать в голове. Ну… например: приложение, определяющее местоположение пользователя требует прописать разрешение на это в манифесте и если вы это успешно сделаете, то оно будет успешно работать вплоть до версии 5.1, а вот начиная с Marshmallow ваша замечательная прога вылетит примерно с SecurityException, если вообще установится или скомпилируется. Ибо многие разрешения нужно запрашивать у юзера лично прямо во время пользования. Удобно, да, но вот про старые версии тоже не забывайте. В общем да, читайте официальные мануалы. Которые, ВНЕЗАПНО, тоже в 90% случаев написаны на Fucking English. Блэт. Впрочем, http://startandroid.ru и http://developer.alexanderklimov.ru вам в помощь. И StackOverflow, конечно, но без него вообще нельзя.

Минутка объективности: весь этот список НЕ значит, что я терпеть не могу разработку под Android. Более того, это мне нравится. Потому что это Java, который интуитивно понятен, это быстрорастущая сфера и это поле для кучи новых идей. В частности, геосоциальных сетей. Просто здесь я хотел описать те моменты, на которые следует обратить внимание и которые нужно учитывать. И да, еще мне до сих пор скучно и хоть какую-то запись надо бы сделать. У меня после выхода новых записей статистика посещений обычно растёт 😉 Шучу.
До скорого.

IWasHere: мизантропичная геосоциальная сеть

Вот это ирония — мизантроп создаёт социальную сеть

Приветствую! Пожалуй, сегодня самое время немного рассказать о моём новом проекте, который у меня к тому же пока что выступает в качестве дипломного. А поскольку работы много, в частности, в деле проработки бизнес-логики проекта, то кое-что напишу и сюда. В том числе, чтобы представить ту идею, которую я придумал.
Кстати, да, в [ДАННЫЕ УДАЛЕНЫ] обзоре литературы, что я сдавал месяц назад я говорил, что социальные сети могут быть неплохим сподручным средством для социофобов. С другой стороны, они могут вызвать эту самую социофобию у тех, кто ею не страдал. Хотя, Великий Дарвин, да что вы вообще знаете о саморазрушении? Так что, возможно, мой проект внесёт свой вклад в дело взаимодействия мизантропов с обществом. А так да, я это делаю исключительно Just for lulz.

Итак, предлагаю вам идею геосоциальной сети на основе геометок, которые можно разместить и прочитать, находясь в строго определенной точке(для каждой точки метки разные!) На этапе подбора домена я придумал для неё название IWasHere, что является переводом на английский второго по популярности выражения, которое пишут на стенах IRL(называть приложение в честь первого по понятным причинам не есть хорошая идея). Ах да, раз мы уже в информационном веке живём, то надписи на стенах пора уже модернизировать и перевести в электронный вариант. Хе-хе. Я же говорил, «just for lulz».

Собственно, сайт проекта — http://iwshere.xyz, но на нём пока что висит только приветственное сообщение, с которого я обычно и начинаю какие-либо новые проекты или изучение нового языка программирования. Вообще, на наполнение этого сайта для юзеров пока что не надейтесь, ибо он нужен только в качестве API для мобильного приложения, которое и будет представлять собой клиентский интерфейс. Ну разве что может быть к тому времени, как приложение будет готово, на главной появится ссылка на загрузку для тех, кто захочет попробовать на свой страх и риск.

Ну а теперь сами фишки приложения:
1. Метки можно оставлять где угодно. Никаких вам предопределенных мест, где можно чекиниться. Сообщения можно оставлять не только стоя в пробке или обедая в KFC. Вы можете написать «х█й» «I was here» абсолютно везде, до куда сможете добраться, где работает геолокация и есть доступ к интернету. Метка привязывается к месту только на основании координат широты и долготы.
2. Метки можно зашифровать и отправлять заданному количеству друзей. При этом, текст сообщения смогут прочитать только они. ФСБ сосёт! Да, ладно, ладно, не возбуждайтесь так сильно, товарищ майор! С паяльником ко мне выезжать бесполезно — на сервере сообщение тоже хранится в зашифрованном виде, а в базе есть только открытые ключи пользователя.
3. Полная свобода мнений. Разграничений между пользователями в сети не будет. А значит, никаких администраторов и модераторов, которые могут удалить вашу метку и отправить в бан, ибо мне лень это делать потому что я полностью за свободу слова и мнений.
4. Полная свобода идей. Используйте метки как хотите. Для общения, путешествий, хулиганства, творчества и даже командных игр. Платформа IWasHere абсолютно универсальна!
5. Общайтесь с друзьями и объединяйтесь в группы. Как и в любой социальной сети, будет функция личных сообщений, а также возможность воздавать собственные группы и писать в групповые чаты. А для удобства о новой метке можно сообщить сразу всем участникам группы.
6. Безопасность и удобство. Для аутентификации пользователей используется система одноразовых паролей, высылаемых на email(ибо это бесплатно в отличие от паролей по SMS). Каждый такой пароль действует 1 час с момента запроса, а при трех неудачных попытках ввода он автоматически удаляется. Пароли хранятся в базе в хешированном виде, поскольку PHP предоставляет неплохие дефолтные функции для безопасного генерирования и хеширования паролей. Взаимодействие с API осуществляется по протоколу HTTPS(благо мне удалось раздобыть бесплатный сертификат), все данные шифруются, а авторизация клиентского приложения проходит с помощью Cookie, что защищает от подмены запроса и выполнения действий злоумышленником от имени пользователя. Осталось только разобраться насколько данная реализация безопасна. Шифрование меток, вероятно, будет базироваться на AES, а передача ключа шифрования от метки — на алгоритме RSA. В общем, да, инфобезопасность в прошлом году для меня явно не прошла зря.

Ну и пока что всё на сегодня. Если интересно — пишите, предлагайте что-нибудь еще. У нас сейчас практика идёт и я весьма активно(хоть и медленнее, чем планировалось) занимаюсь разработкой API. А поскольку сейчас времени уже много, на этом я запись заканчиваю.
До скорого.