Привет, Хабр! Представляю вашему вниманию перевод третьей статьи "Java MessageDigest" автора Jakob Jenkov из серии статей для начинающих, желающих освоить основы криптографии в Java.
Домосед
Big O

Примечание. Сокращенный перевод, скорее пересказ своими словами.
UPD: как отметили в комментариях, примеры не идеальны. Автор не ищет лучшее решение задачи, его цель объяснить сложность алгоритмов «на пальцах».
Big O нотация нужна для описания сложности алгоритмов. Для этого используется понятие времени. Тема для многих пугающая, программисты избегающие разговоров о «времени порядка N» обычное дело.
Если вы способны оценить код в терминах Big O, скорее всего вас считают «умным парнем». И скорее всего вы пройдете ваше следующее собеседование. Вас не остановит вопрос можно ли уменьшить сложность какого-нибудь куска кода до n log n против n^2.
Структуры данных
Выбор структуры данных зависит от конкретной задачи: от вида данных и алгоритма их обработки. Разнообразные структуры данных (в .NET или Java или Elixir) создавались под определенные типы алгоритмов.
Часто, выбирая ту или иную структуру, мы просто копируем общепринятое решение. В большинстве случаев этого достаточно. Но на самом деле, не разобравшись в сложности алгоритмов, мы не можем сделать осознанный выбор. К теме структур данных можно переходить только после сложности алгоритмов.
Здесь мы будем использовать только массивы чисел (прямо как на собеседовании). Примеры на JavaScript.
Криптография в Java. Класс Cipher
Привет, Хабр! Представляю вашему вниманию перевод второй статьи "Java Cipher" автора Jakob Jenkov из серии статей для начинающих, желающих освоить основы криптографии в Java.
Криптография в Java
Привет, Хабр! Представляю вашему вниманию перевод статьи "Java Cryptography" автора Jakob Jenkov.
Данная публикация является переводом первой статьи Java Cryptography из серии статей для начинающих, желающих освоить основы криптографии в Java.
Модернизация GHIDRA. Загрузчик для ромов Sega Mega Drive
Приветствую вас, товарищи. Не слышал о пока-ещё-не-опенсорсной GHIDRA
, наверное, только глухой/слепой/немой/без_интернета реверс-инженер. Её возможности из коробки поражают: декомпиляторы для всех поддерживаемых процессоров, простое добавление новых архитектур (с сразу же активной декомпиляцией благодаря грамотному преобразованию в IR), куча скриптов упрощающих жизнь, возможность Undo
/Redo
… И это только очень малая часть всех предоставляемых возможностей. Сказать что я был впечатлён — это практически ничего не сказать.
Топ 20 ошибок при работе с многопоточностью на С++ и способы избежать их

Сцена из фильма «Петля времени» (2012)
Многопоточность— одна из наиболее сложных областей в программировании, особенно в C++. За годы разработки я совершил множество ошибок. К счастью, большинство из них были выявлены на код ревью и тестировании. Тем не менее, некоторые каким-то образом проскакивали на продуктив, и нам приходилось править эксплуатируемые системы, что всегда дорого.
В этой статье я попытался категоризировать все известные мне ошибки с возможными решениями. Если вам известны еще какие-то подводные камни, либо имеете предложения по решению описанных ошибок– пожалуйста, оставляйте свои комментарии под статьей.
Готовое решение markdown2pdf с исходным кодом для Linux
Предисловие
Markdown это прекрасный способ написать небольшую статью, а иногда и достаточно объемный текст, с несложным форматированием в виде курсива и толстого шрифта. Также Markdown неплох для написания статей с включением исходного кода. Но иногда хочется без потерь, танцев с бубном перегнать его в обычный, хорошо оформленный файл PDF, и чтобы не было проблем при конвертации, какие, например были у меня — нельзя писать по русски в комментариях исходного кода, слишком длинные строки не переносятся, а обрезаются и прочие мелкие проблемы. Инструкция позволит быстро настроить конвертер md2pdf не особенно вникая как это работает. Скрипт для более менее автоматической установки ниже в соотвествующем разделе.
Подборка полезностей для программиста под Linux
Думаю, у каждого программиста есть набор любимых утилит, трюков и знаний. Некоторые он даже использует в работе. Скорее всего, у разных программистов они различаются. Значит, пришло время поделиться. Сегодня я расскажу о своей подборке того, что, вероятно, известно не настолько широко, как оно того заслуживает. Речь пойдёт преимущественно про платформу GNU/Linux.
7 основных причин, почему блокируют приложения в Google Play и AppStore

Наверняка, за последнее время доводилось видеть много страшных историй о том, как блокируют приложения в Google Play и AppStore. Все это связано с привлечением большого внимания к информационной безопасности приложений, а точнее, к факту ее отсутствия.
Подробное введение в rvalue-ссылки для тех, кому не хватило краткого
Вместо КДПВ — короткая драма для привлечения внимания, основанная на реальных событиях. Ее можно смело пропустить и перейти к статье, которая поможет вам разобраться в rvalue-ссылках, конструкторах перемещения, универсальных ссылках, идеальной передаче (perfect forwarding) и т. д.
Драма в трех действиях
Действие первое
Компилятор. Локальный объект x типа T, проживающий на стеке, вы приговариваетесь к изъятию у вас всего имущества в связи с тем, что не будете пользоваться им до конца своей жизни.
Объект x. Что? Я не какой-то там временный объект, у меня постоянная регистрация, вы не имеете права!
Компилятор. Никто вас не выселяет. Но согласно одиннадцатой редакции стандартного кодекса, все ваши вещи будут переданы другому объекту, которому они нужны больше.
Объект x. И как вы это сделаете? Все мои данные надежно инкапсулированы, я не позволю никому бесцеремонно обращаться с ними. Если уж они так вам нужны, то пусть приходит конструктор копирования со своей флешкой, я ему скопирую.
Android string.xml — несколько вещей, которые стоит помнить
Доброго времени суток! Представляю вашему вниманию вольный перевод статьи от GDE (Google developer expert) Dmytro Danylyk. Собственно, вот оригинал. Статья описывает правильные подходы для работы со strings.xml и особенно полезно это будет разработчикам, которые разрабатывают мультиязыковые приложения. Прошу под кат.
explicit в деталях
Если спросить C++-программиста о значении ключевого слова explicit, большинство ответит, что это ключевое слово ставится перед объявлением конструктора с одним параметром (или с большим числом параметров, но когда все параметры, начиная со второго, имеют значения по умолчанию) и предотвращает неявное преобразование типов при инициализации.
Создание Bottom Navigation Bar на Kotlin с использованием Anko
Начиная новый проект я решила попробовать полностью отказаться от XML-файлов, на основе которых формируются layouts, а экраны создавать с помощью библиотеки Anko. Имея небольшой опыт разработки под Android (порядка 2-х лет) и еще меньший опыт написания кода на Kotlin (чуть больше полугода) я сразу столкнулась с проблемой включения в приложение Navigation Architecture Component, а вернее отрисовкой Bottom Navigation Bar, создаваемом BottomNavigationView.
Первым делом я обратилась к просторам Инета, чтобы найти возможное решение. Но все статьи найденные мной с той или иной степенью доходчивости рассказывали о том как работать с компонентами навигации и никто (из тех чьи статьи я проштудировала) не делал это на Anko. Решив поставленную задачу, я предлагаю сообществу свой вариант создания Bottom Navigation Bar.
Полностью весь код можно посмотреть здесь
Я пропускаю этап создания нового проекта в Android Studio, отмечу только что для работы с Anko и Navigation Architecture Component в build.gradle на уровне модуля необходимо добавить следующие зависимости:
implementation "org.jetbrains.anko:anko:$anko_version"
implementation "org.jetbrains.anko:anko-constraint-layout:$anko_version"
implementation "com.android.support.constraint:constraint-layout:2.0.0-alpha3"
implementation 'android.arch.navigation:navigation-fragment:1.0.0-beta02'
implementation 'android.arch.navigation:navigation-fragment-ktx:1.0.0-beta02'
implementation 'android.arch.navigation:navigation-ui-ktx:1.0.0-beta02'
implementation 'com.google.android.material:material:1.0.0'
Полнофункциональная динамическая трассировка в Linux с использованием eBPF и bpftrace

«В режиме трассировки программист видит последовательность выполнения команд и значения переменных на данном шаге выполнения программы, что позволяет легче обнаруживать ошибки» — сообщает нам Википедия. Сами будучи поклонниками Linux, мы регулярно сталкиваемся с вопросом, какими именно инструментами её лучше осуществлять. И хотим поделиться переводом статьи программиста Хонгли Лая, который рекомендует bpftrace. Забегая вперёд, скажу, что заканчивается статья лаконично: «bpftrace — это будущее». Так чем же он так впечатлил коллегу Лая? Развёрнутый ответ под катом.
Приключения с ptrace(2)

ptrace
; Алекса написал про это намного более развёрнутый пост, который я решил перевести.С чего начать
Общение между отлаживаемой программой и отладчиком происходит при помощи сигналов. Это существенно усложняет и без того непростые вещи; ради развлечения можете прочесть раздел BUGS в
man ptrace
.Есть как минимум два разных способа начать отладку:
ptrace(PTRACE_TRACEME, 0, NULL, NULL)
сделает родителя текущего процесса отладчиком для него. Никакого содействия от родителя при этом не требуется;man
ненавязчиво советует: «A process probably shouldn't make this request if its parent isn't expecting to trace it.» (Где-нибудь ещё в манах вы видели фразу «probably shouldn't»?) Если у текущего процесса уже был отладчик, то вызов не удастся.ptrace(PTRACE_ATTACH, pid, NULL, NULL)
сделает текущий процесс отладчиком дляpid
. Если уpid
уже был отладчик, то вызов не удастся. Отлаживаемому процессу шлётсяSIGSTOP
, и он не продолжит работу, пока отладчик его не «разморозит».
Эти два метода полностью независимы; можно пользоваться либо одним, либо другим, но нет никакого смысла их сочетать.
Перехват системных вызовов с помощью ptrace
В статье будет показано, как перехватывать системные вызовы на примере ОС Linux.
Взлом каптчи файлообменника
Введение
В данной статье коротко рассказывается о процессе взлома captcha с ifolder.ru. Применение в процессе языка Python и сторонних библиотек. Применение алгоритма преобразований Хафа в составе библиотеки Open Computer Vision © Intel позволит нам избавиться от шума на изображении, простая в использовании и быстрая библиотека FANN (Fast Artificial Neural Network) сделает возможным применение искусственной нейронной сети для задачи распознавания образа.
Моя мотивация состояла, прежде всего, в том, чтобы попробовать язык Python. Как известно, лучший способ изучить язык — решить на нём какую-нибудь прикладную задачу. Поэтому параллельно описанию процесса обработки изображения я буду рассказывать о том, какие библиотеки и для чего я использовал.
Обзор свободного ПО для Android

Привет Хабр.
Не так давно у меня появилось желание написать целую серию статей о безопасности, приватности и анонимности в интернете. Я не хочу тратить время читателей, в очередной раз описывая весьма плачевную ситуацию со сбором персональных данных, все это и так уже было сделано до меня, поэтому давайте сразу перейдём к делу.
И так, можно ли пользоваться мобильным устройством без серьёзного ущерба для приватности?
Ответ — да, можно, но для этого необходимо избавиться от ПО и сервисов, бесконтрольно собирающих данные. Для этого понадобится желание что-то изменить и любое устройство на которое можно установить кастомную систему Android (iOS по понятным причинам не рассматривается, а из альтернатив только SailfishOS и GNU/Linux, но эти системы можно установить на очень ограниченное число моделей). Всех кто заинтересовался я приглашаю под кат.
Погружаемся в opensource-экосистему Android
Каждый выбирает свой "уровень погружения". Вам не обязательно следовать каждому пункту из этого поста. Моя цель — показать, насколько хорошо развита экосистема на данный момент и чего вы можете и не можете от неё получить. Делайте выводы самостоятельно. Хотите — меняйте прошивку полностью и переходите на microg. Хотите — просто поставьте на свой телефон f-droid прямо рядом с gplay. Хотите — не делайте ничего.
Давайте поговорим об экосистеме приложений свободных приложений с открытым исходным кодом на Android. Попробуем установить MicroG — свободную реализацию сервисов Google на Android. Посмотрим, как и зачем со всем этим жить.
Несколько причин, почему стоит об этом задуматься
Google Play далеко "не торт"
Далеко ходить не нужно, в соседних постах можно найти множество примеров того, как разработчиков выгоняют из Google Play по тем или иным причинам, заставляя общаться с ботами без возможности реальной аппеляции. Некоторые типы приложений теперь принципиально невозможно распространять (например, блокировщики рекламы, да и в принципе приложения обхода любых ограничений).
Мне, как параноику, не нравится, что у стороннего лица появляется практически полный доступ к моему устройству. Google способен как минимум удалить с моего телефона любое приложение в любой момент и собрать с него произвольные данные. Более того, google play service — это огромное (стандартная поставка — 600Мб, минимальная — 95Мб) количество постоянно обновляющегося кода, часть которая работает с системными привилегиями. Для сравнения, дистрибутив MicroG может весить всего 4Мб.
Залезаем во внутреннее хранилище Android M
В Android 6.0 ввели функцию, позволяющую отформатировать карту памяти так, чтобы она являлась не отдельным хранилищем, а придатком ко внутренней памяти. Это позволяет избежать путаницы с двумя хранилищами данных, особенно при ручной установке некоторых не всегда честно купленных крупных приложений, поставляемых по частям. Однако есть один нюанс: при этом всём нам наглухо блокируют доступ к карте напрямую. Хочешь что-то передать на устройство — используй MTP со всеми вытекающими, вроде скорости передачи файлов, сравнимой с прогулочным шагом контуженной черепахи. Карту теперь не только к ПК через кабель напрямую нельзя подключить: её и из выключенного телефона через кардридер просто так не смонтируешь, ведь она отформатирована в нечто неизвестное ни науке, ни нашим компьютерам.
Но ведь правила созданы для того, чтобы их нарушать? Давайте попробуем обойти это бессовестное ограничение.
Information
- Rating
- 7,026-th
- Location
- Москва и Московская обл., Россия
- Registered
- Activity