[Из песочницы] Почему опытные разработчики пишут тупой код и как распознать новичка за километр

Перевод «Why Senior Devs Write Dumb Code and How to Spot a Junior From A Mile Away», автор: Scott Shipp.


Одна из моих любимых цитат на все времена — Брайана Гетца (Brian Goetz), умнейшего чувака из мира Java, одного из авторов «Java Concurrency in Practice», кроме всего прочего. Цитата взята из интервью, опубликованном на сайте Oracle под заголовком «Пишите тупой код» («Write Dumb Code»). Гетца спросили, как писать хорошо работающий код.
Вот что он ответил

Account Manager: аккаунты, токены и все-все-все. Лекция Яндекса

Android предоставляет мощную систему работы с аккаунтами. Наличие Account Manager уже давно помогает Яндексу — за годы разработки приложений и сервисов мы накопили большой опыт, связанный с механизмами авторизации в Android. Узнать об этом опыте можно из лекции разработчика Кирилла Борисова. Заодно вы поймёте, как указанные системы пригодятся вашему приложению и как избежать подводных камней при взаимодействии с ними.


— Я хочу рассказать про одну небольшую подсистему Android. C ней редко кто сталкивается, слышали о ней совсем немногие, но она может пригодиться гораздо большему числу людей. Это Account Manager — страшная вещь, которая заведует аккаунтами, токенами и всем, что с этим связано.

Рассмотрим, что же такое аккаунт в Android в теории, сферический в вакууме. Затем поглядим на Account Manager как таковой, на сам сервис. И посмотрим, какой же был тернистый путь прошёл Яндекс в укрощении этой зверюги.

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

[Перевод] CoffeeMiner: взлом WiFi для внедрения криптомайнера в HTML-страницы

Предупреждение: эта статья и проект имеют исключительно образовательные цели.

Несколько недель назад я прочитал этом случае Starbucks, где хакеры взламывали ноутбуки в сети WiFi, чтобы майнить на них криптовалюту. И я подумал, что может быть интересно провести атаку иным способом.

Цель этой статьи — объяснить, как провести атаку MITM (человек посередине) для внедрения определённого JavaScript-кода в страницы HTML, чтобы заставить все устройства, подключённые к WiFi, майнить криптовалюту для злоумышленника.

Задача состоит в создании скрипта, который проводит автономную атаку в сети WiFi. Это то, что мы назвали CoffeeMiner, поскольку атаки такого типа можно проводить в кафе.
Читать дальше →

[Из песочницы] Профилировщик запросов в БД в Phoenix. И немножко о том как работает stacktrace в Elixir/Erlang

В нашей компании мы используем Elixir, фреймворк Phoenix и Ecto. И недавно на работе мне поставили задачу, сделать профилировщик запросов в БД, чтобы выяснить узкие точки системы, которые следует оптимизировать. Таким образом задачи были следущие:

  1. Выяснить, какие функции чаще всего обращаются в базу (query calls)
  2. Выяснить какие функции создают самые долгие и медленные запросв (query time)
  3. Результаты необходимо аккумулировать и выводить в виде списка/графика.

Как и все, изначально я решил попробовать существующие решения. Простой гуглопоиск выдал мне несколько статей, и некоторые решения а-ля:

https://github.com/parroty/exprof http://erlang.org/doc/man/fprof.html https://github.com/proger/eflame https://github.com/TheRealReal/new-relixir

и др.

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

...Далее...

[Перевод] Питер Хинченс: Психология архитектуры программного обеспечения

Один из принципов Социальной Архитектуры заключается в том, что способ нашей организации важнее того, кем мы являемся.
imageДиркжан Октман (Dirkjan Ochtman) обратил мое внимание на определение архитектуры программного обеспечения в Википедии: «совокупность структур, требуемых для понимания системы, которая объединяет элементы программного обеспечения, связи между ними и их принадлежность». Для меня эта бессодержательная и цикличная болтовня служит хорошим примером того, как унизительно мало мы знаем о том, что на самом деле важно при создании масштабной архитектуры программного обеспечения. Архитектура — это искусство и наука создания крупных искусственных структур, используемых человеком. Если я что и понял и успешно применял на протяжении тридцати лет при создании все более крупных систем программного обеспечения, так это то, что программное обеспечение — это все о людях. Крупные структуры сами по себе бессмысленны. Важно то, как они функционируют для использования их людьми. А в программном обеспечении, человеческое начинается с программистов, которые делают его. Основные проблемы в архитектуре программного обеспечения кроются в человеческой психологии, а не в технологиях. Наша психология по-разному может влиять на нашу работу. Я могу привести примеры того, как группа людей словно становится глупее по мере того, как она расширяется, или когда им приходится работать, будучи разделенными огромным расстоянием. Значит ли это, что чем меньше команда, тем она эффективней? Как же тогда такое крупное глобальное сообщество как ZeroMQ умудряется успешно работать? ...Далее...

[Перевод] Питера Хинченс: Психология архитектуры программного обеспечения

Один из принципов Социальной Архитектуры заключается в том, что способ нашей организации важнее того, кем мы являемся.
imageДиркжан Октман (Dirkjan Ochtman) обратил мое внимание на определение архитектуры программного обеспечения в Википедии: «совокупность структур, требуемых для понимания системы, которая объединяет элементы программного обеспечения, связи между ними и их принадлежность». Для меня эта бессодержательная и цикличная болтовня служит хорошим примером того, как унизительно мало мы знаем о том, что на самом деле важно при создании масштабной архитектуры программного обеспечения. Архитектура — это искусство и наука создания крупных искусственных структур, используемых человеком. Если я что и понял и успешно применял на протяжении тридцати лет при создании все более крупных систем программного обеспечения, так это то, что программное обеспечение — это все о людях. Крупные структуры сами по себе бессмысленны. Важно то, как они функционируют для использования их людьми. А в программном обеспечении, человеческое начинается с программистов, которые делают его. Основные проблемы в архитектуре программного обеспечения кроются в человеческой психологии, а не в технологиях. Наша психология по-разному может влиять на нашу работу. Я могу привести примеры того, как группа людей словно становится глупее по мере того, как она расширяется, или когда им приходится работать, будучи разделенными огромным расстоянием. Значит ли это, что чем меньше команда, тем она эффективней? Как же тогда такое крупное глобальное сообщество как ZeroMQ умудряется успешно работать? ...Далее...

Грузите апельсины бочках. Релизы в Golang проектах

Данная статья является продолжением инструментальной темы затронутой в прошлой публикации. Сегодня мы постараемся разобраться со сборкой релизов Golang приложений в виде единого исполняемого файла, включающего ресурсные зависимости, и вопросом оптимизации размера итоговой сборки. Также рассмотрим процесс построения рабочего окружения отвечающего следующим требованиям:


  1. Переносимость. Окружение должно быть легко воспроизводимо на различных машинах.
  2. Изолированность. Окружение не должно влиять на версии установленных библиотек и программ на машине разработчика.
  3. Гибкость. Окружение должно позволять собирать релизы для различных версий Golang и Linux (разные версии дистрибутивов и glibc).
  4. Повторяемость. Не должно быть магии и тайных знаний, то есть все шаги сборки проекта и зависимостей должны быть описаны кодом.
Читать дальше →

СТО: мечты сбываются? И другие лучшие доклады для тимлидов с HighLoad++

Продолжаем обзор самых популярных докладов HighLoad++ 2017 по тематике тимлидерства. В этой части мы расскажем о выступлениях для уже состоявшихся руководителей — в первую очередь о движении из тимлида на более высокие посты. Ну и немного поговорим о психологии.


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

[Перевод - recovery mode ] Письмо джуниору: о чем я хотел бы знать в начале пути

Дорогой junior-разработчик,

надеюсь, тебе уже весело! Уверен, что ты преодолеваешь немало трудностей, но не надейся, что они скоро кончатся: спустя 20 лет в области разработки ПО я до сих пор сталкиваюсь со сложными задачами. Новичок ты или нет, в нашей работе учиться приходится постоянно. В моей карьере были победы и падения, поэтому делюсь советами, которые помогли бы мне в самом начале пути.


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


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