Search
Write a publication
Pull to refresh
53
0

Разработчик под Android, перешедший на Rust

Send message

Не Таиландом единым или Как фрилансеру за три часа поменять место обитания без проблем с визами

Reading time10 min
Views51K
С падением курса рубля жизнь фрилансера-путешественника сильно осложнилась. Однако если все же заработок позволяет, а европейского гостеприимства, как и солнца, ох как не хватает в России – добро пожаловать в восемь стран, где фрилансер найдет покой и красивую картинку позади монитора без проблем и волнений с оформлением виз.


Маршруты кочевников за полторы тысячи лет не поменялись. Но нравы стали помягче
Читать дальше →

Защита личных данных на Android-телефоне

Reading time26 min
Views119K
Мобильных компьютеров уже давно больше, чем стационарных. И наших личных данных на них так же значительно больше, чем на стационарных. При этом текущий дизайн OS мобильных устройств создаёт впечатление, что одна из их основных задач — как можно сильнее упростить доступ третьим лицам (в основном — корпорациям и государству, но и мелким разработчикам мобильных приложений тоже обламывается от этого пирога) к вашим личным данным.

Частичная открытость Android немного улучшает ситуацию, но полноценного решения проблемы утечки приватных данных пока не существует. Основная проблема в том, что пока на устройстве используются блобы нет никаких гарантий, что в них нет закладок (вроде обнаруженных в прошивках Samsung Galaxy). Аналогичная проблема с проприетарными приложениями без открытых исходников (вроде всего пакета GApps, начиная с самого Google Play Маркет). По сути всё как раз наоборот — крайне высока вероятность, что закладки там есть. Нередко их даже не пытаются скрывать, выдавая за удобные «фичи» для синхронизации и/или бэкапа ваших данных, обеспечивания вас полезной рекламой, и «защиту» от вредоносного софта или на случай утери устройства. Один из самых надёжных способов защиты своих данных описан в статье Mission Impossible: Hardening Android for Security and Privacy, но там речь не о телефоне, а о планшете, причём с поддержкой только WiFi (мобильных чипов без блобов по-моему вообще пока ещё нет, для мобильного инета вместе с этим планшетом предлагается использовать отдельный 3G-модем, блобы в котором никому не навредят т.к. на этом модеме личных данных просто нет), и, на всякий случай, физически отрезанным микрофоном. Но, несмотря на невозможность полноценно защитить личные данные на телефоне, я считаю что стоит сделать максимум возможного: прикрыть столько каналов утечек, сколько получится — ведь мало кто может позволить себе не использовать мобильный телефон или не держать на нём личные данные (хотя бы контакты и историю звонков).

Читать дальше →

Material Design. Динамический Toolbar на живом примере

Reading time6 min
Views153K
Уверен, что те, кто следят за изменениями в мире Android, заметили, что Toolbar начинает играть в приложениях всё более значимую роль. Например в последней версии Gmail клиента в Toolbar вынесен почти весь функционал по работе с почтой, а в новом Google Chrome Toolbar отвечает за работу с текстом страниц.

В данной статье я постараюсь рассказать о создании динамического Toolbar, который позволит пользователю работать с контентом четырьмя различными способами в рамках одного Activity. Мы рассмотрим весь процесс разработки Toolbar-a начиная с xml файлов стилей и заканчивая анимацией иконок, а в конце статьи я оставлю ссылку на GitHub репозиторий с примером полностью рабочего приложения.
Читать дальше →

Ускорение загрузки Windows for fun and profit

Reading time4 min
Views811K
image Пожалуй, начну с того, что если перегружаться 15 раз в год, то любой «тюнинг» процесса загрузки отнимает больше времени, чем будет выиграно на перезагрузках за все время жизни системы. Однако, спортивный интерес берет свое, тем более, что люди интересуется процессом оптимизации быстродействия. А загрузка оказалась самым очевидным кандидатом в примеры того, как на мой взгляд должен выглядеть этот самый процесс. Сразу скажу, что грузиться будем с 5400 rpm винта, грузиться будем в «рабочую» систему: помимо недобитой вендорской крапвари там стоит еще куча всякого типа вижуал студии, антивируса, скайпа, стима, гуглапдейтера и пр…

Про то, почему отключение pagefile-а скорее вредно, чем полезно — как нибудь в другой раз, а пока…
Под катом много однообразных картинок и немножко унылого текста

Твой код никого не интересует

Reading time4 min
Views81K
Мой код никого не интересует. Я был повержен в шок, когда осознал это в процессе работы программистом. Я тратил много времени на оттачивание своего кода, пока не понял, что он никого не интересует, ведь в зачет идет не сам код, а продукт. Принятие программистом этого факта приведет к повышению продуктивности и ценности его работы.
Читать дальше →

Как правильно переходить границу: кроссплатформенность в мобильном приложении

Reading time10 min
Views15K
image
Сегодня все больше приложений создается сразу для нескольких мобильных платформ, а приложения, созданные изначально для одной платформы, активно портируются на другие. Теоретически можно полностью писать приложение «с нуля» для каждой платформы (т.е. фактически «кроссплатформенной» оказывается только идея приложения). Но это означает, что трудозатраты на его разработку и развитие будут расти пропорционально количеству поддерживаемых платформ. Если же многоплатформенность изначально заложить в архитектуру приложения, то эти затраты (плюс, в особенности, затраты на поддержку) могут существенно сократиться. Вы разрабатываете общий кроссплатформенный код один раз — значит используете его на текущих (и будущих) платформах. Но в этом случае сразу возникает несколько взаимосвязанных вопросов:

  • Должна ли быть граница между общим (кроссплатформенным) и нативным (специфичным для данной платформы) кодом?
  • Если да, то где и как провести эту границу?
  • Как сделать так, чтобы кроссплатформенный код было удобно использовать на всех платформах, как на тех, что надо поддержать сейчас, так и на тех, чья поддержка, вероятно, может потребоваться в будущем?

Конечно, ответы на эти вопросы зависят от конкретного приложения, предъявляемых к нему требований и накладываемых ограничений, поэтому универсальный ответ найти, по всей видимости, невозможно. В этой статье мы расскажем, как мы искали свои ответы на эти вопросы в процессе разработки мобильного клиента Parallels Access для iOS и Android, какие архитектурные решения были приняты и что в итоге получилось.

Хочу сразу предупредить, что букв в этом посте много, но дробить тему на куски не хотелось. Поэтому запаситесь терпением.
Читать дальше →

Как я одной кнопкой шарил разные данные в Android приложении

Reading time9 min
Views10K


Как-то раз передо мной встала задача добавить экспорт в календарь к уже написанному экспорту обычных текстовых данных через ShareActionProvider кнопку. Сходу нашлись несколько вариантов, каждый из которых мне по каким-либо причинам не подходил.
Раскопать очень много кода

Получение пути к карте памяти SD Card на Android

Reading time5 min
Views270K
Разрабатывая приложение для проведения соревнований, я столкнулся с проблемой хранения базы данных. Проблема состояла в том, как мне определить внешнюю карту памяти. В целом поиск в сети точного ответа не дал. Поэтому, объединив все найденные результаты, я собрал свой класс. Если кому интересно, смотрим под катом.
Читать дальше →

Кнопка выключения для Raspberry Pi

Reading time3 min
Views89K
Порты GPIO являются одними из главных преимуществ Raspberry Pi, недаром в более поздних версиях платы их количество было увеличено с 26 до 40. К сожалению, большинство подключаемых к ним плат (сенсорные экраны, светодиодные матрицы, платы расширения и т.д.), в целях совместимости со всеми моделями «малинки», используют только первые 26 контактов, оставляя остальные 14 «за бортом». Но мы не дадим пропасть добру! В данной статье я расскажу, как сделать кнопку выключения или перезагрузки на двух неиспользуемых портах. На самом деле функциональность кнопки может быть любой, зависит от вашей фантазии и потребностей.



Читать дальше →

Защита от прослушивания разговоров — строим безопасную SIP телефонию своими руками

Reading time7 min
Views77K
image
Привет, Хабр!
В этот раз хочу рассказать о технологиях шифрования VoIP звонков, о том какую защиту дают разные подходы и как организовать наиболее защищенную от прослушивания голосовую связь с технологическими гарантиями безопасности.
В статье я постараюсь доступно изложить особенности таких технологий как SIP\TLS, SRTP и ZRTP. И продемонстрирую конкретные схемы использования на примере нашего сервиса ppbbxx.com

Читать дальше →

Корзинка для каталога товаров (minibasket.js)

Reading time2 min
Views6.9K
Недавно очередной раз встала задача улучшить юзабилити каталога товаров. Полный функционал интернет-магазина заказчику был не нужен, а вот возможность для пользователей складывать товары в корзину оказалась крайне нужной. Еще бы, заказчик продает запчасти для авто и пользователю крайне неудобно по телефону перечислять весь список, пусть даже по артикулам.

Решено внедрить промежуточный этап заказа — корзинку. Делать ее будем, естественно, на скриптах, чтобы не привязываться к cms (глядищь где еще пригодится).

На выходе получилась библиотечка, позволяющая прикрутить такую корзинку к любому сайту.
Читать дальше →

Кто играет с Google Play: большинство людей не скачивают мобильные приложения

Reading time2 min
Views14K
Американское статистическое агентство ComScore обнародовало данные об использовании смартфонов за прошлый год. Судя по их статистике, смартфоны окончательно обогнали настольные компьютеры по популярности, большую часть времени при использовании смартфонов люди проводят за приложениями, при этом сторонними приложениями пользуются совсем немногие.


Популярность типов устройств

Из графика видно, что мобильная революция свершилась уже окончательно и теперь разрыв между использованием смартфонов и настольных компьютеров только увеличивается. По данным на июнь 2014 года 60% времени из всей «цифровой» деятельности люди проводят со смартфоном в руках, и лишь 40% — за столом с компьютером. 52% из 60% людей используют время смартфона для работы в мобильных приложениях.
Читать дальше →

Анонимности нет

Reading time3 min
Views136K
Привет %username%! Хотел тебе показать и рассказать часть моего исследования расследования изучения мира сего, которое я рассказывал на конференции Zeronights 2014. Тема была о деанонимизации, но больше вопросов было именно по данным, поэтому я решил рассказать об этом отдельно.



Ну ты же в курсе, что сайты собирают данные о твоём посещении, откуда ты пришёл, куда ты уходишь, твои запросы, ip адреса? Вот ты помнишь, во сколько и какого числа ты искал.
Собственно, вот пример данных. Фичу прикрыли, пример данных в комментариях :)

Именно твоих, %username%. Если у тебя пустая страничка, возможно ты используешь плагины Ghostery, Adblock, Noscript — дай ссылку своему другу, надеюсь, ты удивишься.

Что это было?


Данные. Обычные данные о пользователях, которые собирают множество сайтов. Включают в себя поисковые запросы, браузеры, ip-адреса, посещённые сайты. По ним строится возраст, пол, интересы. И это всего лишь один из примеров, который собрала одна из множества компаний.
Хм, продолжай...

Дешифрация TLS трафика Java приложений с помощью логов

Reading time8 min
Views21K


Отладка защищенных по SSL/TLS интеграций у Java приложений порой становится весьма нетривиальной задачей: соединение не ставится/рвется, а прикладные логи могут оказаться скудными, доступа к правке исходных кодов может не быть, перехват трафика Wireshark'ом и попытка дешифрации приватным ключом сервера (даже если он есть) может провалиться, если в канале применялся шифр с PFS; прокси-сервер вроде Fiddler или Burp может не подойти, так как приложение не умеет ходить через прокси или на отрез отказывается верить подсунутому ему сертификату…

Недавно на Хабре появилась публикация от ValdikSS о том, как можно с помощью Wireshark расшифровать любой трафик от браузеров Firefox и Chrome без обладания приватным ключом сервера, без подмены сертификатов и без прокси. Она натолкнула автора нынешней статьи на мысль — можно ли применить такой подход к Java приложениям, использовав вместо файла сессионных ключей отладочные записи JVM? Оказалось — можно, и сегодня, уважаемые однохабряне, я расскажу, как это сделать.
Читать дальше →

Как могла бы выглядеть поддержка JSON в современном С++

Reading time5 min
Views67K
Хорошо в плане поддержки JSON живётся программистам на Javascript — по какому-то невероятному стечению обстоятельств там JSON входит в спецификацию самого языка: есть JSON — есть объект. Удобно. Неплохо дело обстоит и в языках, где JSON не входит в сам язык, но поддерживается стандартной библиотекой (Python, Ruby): импортируешь модуль — и готово.

Жизнь программистов на С++ никогда не была особо простой — поддержки JSON у нас нет ни на уровне языка, ни в стандартной библиотеке. И не будет, возможно, никогда. «Тоже мне проблему нашел!» — скажут мне опытные коллеги — «Её там и не должно быть, С++ поставляется без „батареек“. Для решения этой задачи мы...» и вот здесь они разделятся на два лагеря:

1. «Мы используем большой фреймворк (boost, Qt, POCO, другой), который применяется во всех наших проектах и умеет 150 000 разных вещей, в том числе и JSON.»
2. «Мы придерживаемся подхода в котором для каждой задачи применяется своя легковесная библиотека. В частности, для JSON мы уже 150 000 лет назад выбрали отличную библиотеку %JSON_LIB%, которая прекрасно работает.»

Да, всё так и есть. Вот только…

Чем плох подход с использованием фреймворков
Во-первых, тянуть в проект огромный фреймворк ради одного JSON — как-то уныло. Ну ладно, допустим фреймворк у вас был и так. Но тогда придётся писать работу с JSON в терминах фреймворка, а это, как правило, тихий ужас. Посмотрите, например, на документацию по JSON в Qt — куча собственных типов вроде QJsonArray, QJsonDocument, QJsonObject, QJsonValue и т.д. и их придётся использовать. О том, чтобы потом перенести код в другой проект (где этого фреймворка нет) можно сразу забыть. Ну или вот Boost: парсер JSON находится очень логично в модуле Boost.PropertyTree. Ага, так бы я и догадался. Т.е. нам предлагают плясать не от формата JSON, а от структуры данных «дерево», которая умеет себя читать в том числе и из JSON.

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


Чем плох подход с использованием библиотек
Плох он вот этой частью: "...150 000 лет назад выбрали отличную библиотеку...". Скорее всего речь идёт о чём-то, что начинало писаться чуть-ли не во времена DOSа и, без сомнения, работает, но при этом, пытаясь быть совместимым со всеми платформами и стандартами языка совершенно отстаёт от прогресса. Да, всё компилируется и работает, даже тесты проходит. Но библиотека совершенно не знакома с такими вещами, как ключевое слово auto, range-based циклы, строковые литералы, raw-строки, конструкторы перемещения, списки инициализации и прочие классные вещи, делающие код одновременно более эффективным и более легко читаемым. А ведь у библиотеки, созданной годы назад, есть обязательства по обратной совместимости, а значит просто так взять и добавить это всё она не может.


Давайте немного помечтаем.

А что, если бы JSON вошел в стандартную библиотеку нового стандарта С++? Что, если бы он был написан в терминах С++11\14 и без требований обратной совместимости со старыми стандартами языка? Что, если бы синтаксис этого модуля попытались бы сделать максимально приближенным к родному для JSON использованию «а-ля Javascript», но в том же время сохранить дух С++ (эффективность, минимальное потребление памяти, совместимость с STL)? Что, если бы его можно было включить в проект одним инклюдом и не беспокоиться о его сборке и линковке? Как бы это всё выглядело и работало?

И у нас есть ответ на этот вопрос! Давайте посмотрим на JSON-библиотеку для С++ написанную в соответствии со всеми этими принципами, ну и вообще написанной людьми для людей, а не чужими для хищников, как это обычно бывает.
Читать дальше →

Немножко анонимен

Reading time5 min
Views232K
Обсуждение анонимности нужно начинать не со слов прокси/тор/впн, а с определения задачи: анонимно подключиться к чужому серверу по SSH это одно, анонимно поднять свой веб-сайт это другое, анонимно работать в инете это третье, etc. — и все эти задачи решаются по-разному. Эта статья о задаче «анонимно работать в интернете как пользователь».

В последнее время на хабре появилось много статей на тему обеспечения анонимности в интернете, но они все описывают подход «немножко анонимен». Быть «немножко анонимным» практически бессмысленно, но, судя по комментариям к этим статьям, многие этого не понимают.

Во-первых, нужно адекватно оценивать потенциального противника. Если вы хотите быть «анонимным», значит вы пытаетесь избежать возможности связывания вашей активности в интернете с вашим физическим расположением и/или настоящим именем. Обычные пользователи и так не имеют возможности вас отслеживать (технически, социальные методы когда по вашему нику на форуме легко гуглится ваш аккаунт в соц.сетях со всеми личными данными мы здесь не рассматриваем). Ваш провайдер/соседи могут иметь возможность прослушать большую часть вашего трафика, но, как правило, вы им не интересны (да, соседи могут украсть ваши пароли, но заниматься отслеживанием вашей активности или вашей деанонимизацией они не станут). Что же касается владельцев используемых вами ресурсов (веб-сайтов, прокси/vpn-серверов, etc.) то у них в распоряжении множество средств по отслеживаю вас (DNS-leaks, Flash/Java-плагины, баннерные сети, «отпечатки браузера», множество разных видов кук, etc.) плюс серьёзный коммерческий интерес к тому, чтобы надёжно вас отслеживать (для таргетирования рекламы, продажи данных, etc.). Ну а правительство и спец.службы могут получить доступ и к данным, которые на вас собирают веб-сайты, и к данным, которые собирают провайдеры. Таким образом получается, что те, кто имеют возможность и желание вас отслеживать — имеют доступ к большинству возможных каналов утечки.

Во-вторых, каналов утечки информации очень и очень много. И они очень разнообразны (от внезапно отключившегося VPN до получения реального IP через Flash/Java-плагины браузера или отправки серийника на свой сервер каким-нить приложением при попытке обновления). Более того, регулярно обнаруживаются (и создаются) новые. Поэтому попытка блокировать каждый из них в индивидуальном порядке, уникальными для каждого методами, просто не имеет смысла, всё-равно что-то где-то протечёт.

В-третьих, при «работе в интернете» используется не только браузер — большинство пользуются так же IM, торрентами, почтой, SSH, FTP, IRC… при этом часто информация передаваемая по этим каналам пересекается и позволяет их связать между собой (.torrent-файл скачанный с сайта под вашим аккаунтом грузится в torrent клиент, ссылка пришедшая в письме/IM/IRC открывается в браузере, etc.). Добавьте сюда то, что ваша ОС и приложения тоже регулярно лазят в инет по своим делам, передавая при этом кучу деанонимизирующей вас информации…

Из всего этого логически следует то, что пытаться добавить «немножко анонимности» путём использования браузера со встроенным Tor, или настройкой торрент-клиента на работу через SOCKS — нет смысла. Большинство вас не сможет отследить и без этих мер, а тех, кто имеет возможности и желание вас отследить эти меры не остановят (максимум — немного усложнят/замедлят их работу).
Читать дальше →

Windows на RAM-диске

Reading time10 min
Views373K

В наш век мы все любим скорость. Мы любим быстрый транспорт, быстрые службы доставки, скоростной интернет. И, разумеется, быстрые компьютеры. У нас есть шестое чувство, которым мы детектируем милли/микросекундные задержки. Частенько появляется желание что-нибудь да разогнать.
Вы уже поняли из названия, как именно будем разгонять

Создание искусственного интеллекта

Reading time17 min
Views85K
Пока программисты могут зарабатывать программированием, то существующие ИИ это не ИИ, какой бы фантик на них не был бы навешен. Предлагаемый мной вариант может решить этот вопрос.

В результате своих изысканий я перестал для себя использовать фразу «искусственный интеллект» как слишком неопределенную и пришел к другой формулировке: алгоритм самостоятельного обучения, исследования и применения найденных результатов для решения любых возможных к реализации задач.

Что такое ИИ, об этом уже много было написано. Я ставлю вопрос по другому, не «что такое ИИ», а «зачем нужен ИИ». Мне он нужен, что бы заработать много денег, затем что бы компьютер выполнял за меня все, что я сам не хочу делать, после построить космический корабль и улететь к звездам.

Вот и буду здесь описывать, как заставить компьютер выполнять наши желания. Если вы ожидаете здесь увидеть описание или упоминание, как работает сознание, что такое самосознание, что значит думать или рассуждать — то это не сюда. Думать — это не про компьютеры. Компьютеры рассчитывают, вычисляют и выполняют программы. Вот и подумаем, как сделать программу, способную рассчитать необходимую последовательность действий для реализации наших желаний.

В каком виде в компьютер попадет наша задача — через клавиатуру, через микрофон, или с датчиков вживленных в мозг — это не важно, это дело вторичное. Если мы сможем компьютер заставить выполнять желания написанные текстом, то после мы можем поставить ему задачу, что бы он сделал программу, которая так же выполняет желания, но через микрофон. Анализ изображений так же лишний.
Читать дальше →

Rivulet — аудио плеер для торрентов

Reading time2 min
Views9.7K

Что такое rivulet.audio?


rivulet.audio – новый способ скачивания и прослушивания музыки. Вы создаёте плейлисты, а программа автоматически находит музыкальные файлы в торрентах. Этими плейлистами можно делиться с другими и публиковать где угодно, потому что они не содержат нелегального контента сами по себе, и в них нет информации о том, где можно нелегально скачать песни. Когда кто-либо импортирует ваш плейлист, его клиент автоматически начинает поиск торрентов и проигрывает песни. Исходный код проекта открыт.

Демо


(эти сайты не имеют отношения к авторам проекта rivulet.audio)

http://178.62.36.48:9074
http://104.236.128.155:9074
http://107.170.89.163:9074
Читать дальше →

Ваш wi-fi расскажет мне, где вы живёте, где работаете и где путешествуете

Reading time3 min
Views148K

Москва вайфайная

Многие знают, что ваши мобильные устройства распространяют информацию об их предыдущих соединениях. Большинство не имеет об этом представления.

Пробы WiFi


Чтобы соединиться с уже известными сетями, которые не сообщают о своём присутствии, все ваши мобильные устройства отправляют пробные пакеты, чтобы найти известные им сети. Эти пакеты можно перехватить, когда телефон включается, или когда он отсоединяется от сети. Для этого используются обычные инструменты — airodump / tcpdump. Пример:

# airodump-ng -w wifi-dump wlan0
# tcpdump -n -l -e -r wifi-dump.cap |
    grep 'Probe Request ([^)]'


Вывод содержит время, MAC-адрес устройства и имя сети. Пример:

16:32:26.628209 BSSID:ff:ff:ff:ff:ff:ff DA:ff:ff:ff:ff:ff:ff SA:50:ea:d6:aa:bb:cc
    Probe Request (SUBWAY) [1.0 2.0 5.5 11.0 Mbit]


То бишь, устройство 50:ea:d6:aa:bb:cc проверяло, есть ли сеть SUBWAY в пределах доступности.

Ну и что тут плохого?


Ну испускают они эти пакеты с именами сетей. Подумаешь.
Читать дальше →

Information

Rating
8,031-st
Location
Bratislava, Bratislava, Словакия
Date of birth
Registered
Activity