Про то, как в Avito работает performance review, я очень много раз рассказывал внутри компании, а этой весной ещё и на двух конференциях — TeamLeadConf и CodeFest. Мы активно вкладываемся в доработку процесса, проводим много экспериментов и собираем кучу полезных данных, поэтому каждое новое выступление стабильно включает в себя какой-то новый контент. Цель этой статьи — не выдать вам готовое коробочное решение, а поделиться всеми практиками и инсайтами, которые мы обнаружили на своем пути.
Лень и чревоугодие
TON: Telegram Open Network. Часть 1: Вступление, сетевой уровень, ADNL, DHT, оверлейные сети
Уже две недели Рунет шумит про Telegram и ситуацию с его бессмысленной и беспощадной блокировкой Роскомнадзором. Рикошетом задело многих, но всё это — темы для постов на Geektimes. Меня же удивило другое — я до сих пор не видел на Хабре ни одного разбора запланированной к выходу на базе Telegram сети TON — Telegram Open Network. Мне захотелось восполнить этот недостаток, ибо поизучать там есть что — даже несмотря на отсутствие официальных заявлений о нём.
Напомню — ходят слухи о том, что Telegram запустил очень масштабное закрытое ICO, уже собрав в нём невероятные суммы. Предполагается, что уже в этом году будет запущена собственная криптовалюта Gram — и у каждого пользователя Телеграма автоматически появится кошелёк, что само по себе создает немалое преимущество перед остальными криптовалютами.
К сожалению, так как официальных заявлений нет, дальше я могу отталкиваться только от документа неизвестного происхождения, о чём я сразу вас предупреждаю. Конечно, он может оказаться очень искусной подделкой, но не исключено и то, что это — реальный whitepaper будущей системы, написанный Николаем Дуровым (и слитый, вероятно, кем-то из инвесторов). Но даже если это фейк, никто нам не запретит его поизучать и обсудить, верно?
Что же говорится в этом документе? Я попробую пересказать его своими словами, близко к тексту, но по-русски и чуть более человечно (да простит меня Николай со своей склонностью уходить в формальную математику). Имейте в виду, что даже в случае его подлинности, это черновое описание системы и оно, весьма вероятно, изменится к моменту публичного запуска.
Ansible не так прост
yum update
и apt-get upgrade
.Конечно, это неправильно. Я давно присматривался к chef и Puppet, которые, как я думал, решат все мои проблемы. Но я смотрел на конфиги знакомых проектов и откладывал. Это же нужно изучать, разбираться с ruby, бороться с многочисленными, по отзывам, косяками и ограничениями. Две недели назад статья Георгия amarao стала животворящим пинком. Даже не сама статья, а перечисление систем управления конфигурацией. После чтения комментариев и лёгкого гугления решил: возьму Ansible. Потому что питон, и на проблемы никто не жалуется.

Что ж, тогда я первым буду.
DevOps придумали разработчики, чтобы админы больше работали
Еще 4 года назад использование контейнеров в production было экзотикой, но сейчас это уже норма как для маленьких компаний, так и для больших корпораций. Давайте попробуем посмотреть на всю эту историю с devops/контейнерами/микросервисами ретроспективно, взглянуть еще раз свежим взглядом на то, какие задачи мы изначально пытались решить, какие решения у нас есть сейчас и чего не хватает для полного счастья?
Я буду в большей степени рассуждать про production окружение, так как основную массу нерешенных проблем я вижу именно там.
Вопросы для собеседования бэкенд-разработчика

Я не большой любитель задавать технические вопросы на собеседованиях: по мне так лучше посидеть с кандидатом (или кандидаткой) за клавиатурой над каким-то реальным кодом, реальной проблемой — и целый день заниматься парным программированием, желательно поочерёдно с остальными членами команды. Но я считаю, что некоторые технические вопросы могут быть хорошей отправной точкой для начала увлекательного и приятного разговора и позволят глубже узнать друг друга.
В этом репозитории собран ряд вопросов, связанных с серверной частью, которые можно использовать при проверке потенциальных кандидатов. Ни в коем случае не рекомендуется задавать все вопросы одному кандидату: это займет несколько часов и вообще не имеет смысла, потому что они охватывают слишком широкий спектр тем. Никто не может знать всего. Выберите наиболее актуальный раздел и самые интересные вопросы, чтобы развернуть беседу.
Freeswitch: по пути наименьшего сопротивления
Немного лирики
Сколько помню себя в кресле системного администратора (а общий стаж приближается уже годам к 15), столько вопросы офисной телефонии воспринимались мной строчкой из Californication калифорнийских же RHCP: hard core soft porn. Телефония всегда казалась параллельным измерением, в ее администрирование и настройку я старался не лезть. Точнее, вообще обходить все эти телефоновопросы по широкой дуге, скидывая все подобные задачи на «специально обученных людей».
Приватность: рождение и смерть. 3000 лет истории приватности в картинках

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

Решительно сократить количество проблем можно, придерживаясь следующих рекомендаций:
- В голове держать не больше трех-пяти вещей за раз, объединив действия в большие смысловые блоки.
- Раз и навсегда выбрать решение по ежедневному набору мелочей: вносить дела к календарь, проверять утюг и т.п.
- Разложить все вещи по своим местам и поддерживать заведенный порядок.
- Дублировать необходимые и часто используемые вещи; разложить их по всем углам.
- Умело пользоваться календарем, мобильником и другими инструментами интернет-века.
- И самое главное: НЕ ОТВЛЕКАТЬСЯ ПО МЕЛОЧАМ!
Slack — это противоположность организационной памяти
Прерывания работы
Slack помогает вашим худшим сотрудникам подавить лучших. В этом его сходство с офисом открытого типа.
Он превращает в норму постоянные прерывания, многозадачность и отвлечения, косвенно допуская всё это в офлайне и онлайне. Он делает нормой безумно быстро отвечать на вопросы. В мире Slack люди переходят от прямого вопроса к person до обращения here за несколько минут. И правильно: ведь тут если на вопрос не ответили в течение 5 минут, то о нём вообще забывают.
Как-то по ходу дела мы забыли, что отвлекаться вообще-то вредно для реальной работы. Раньше было по-другому. В первый день своей первой работы трейдером единственной инструкцией, которую я получил, было «Когда рынок откроется, отключи телефон». С подтекстом «иначе ты понимаешь, что будет». Если кто-то скажет мне такое сегодня, я обниму этого человека, хотя я не фанат обнимашек.
JSR 133 (Java Memory Model) FAQ (перевод)
В рамках набора на курс «Multicore programming in Java» я делаю серию переводов классических статей по многопоточности в Java. Всякое изучение многопоточности должно начинаться с введения в модель памяти Java (New JMM), основным источником от авторов модели является «The Java Memory Model» home page, где для старта предлагается ознакомится с JSR 133 (Java Memory Model) FAQ. Вот с перевода этой статьи я и решил начать серию.
Я позволил себе несколько вставок «от себя», которые, по моему мнению, проясняют ситуацию.
Я являюсь специалистом по Java и многопоточности, а не филологом или переводчиком, посему допускаю определенные вольности или переформулировки при переводе. В случае, если Вы предложите лучший вариант — с удовольствием сделаю правку.
Этот статья также подходит в качестве учебного материала к лекции «Лекция #5.2: JMM (volatile, final, synchronized)».
Также я веду курс «Scala for Java Developers» на платформе для онлайн-образования udemy.com (аналог Coursera/EdX).
Ну и да, приходите учиться ко мне!
JSR 133 (Java Memory Model) FAQ
Jeremy Manson и Brian Goetz, февраль 2004
Содержание:
Что такое модель памяти, в конце концов?
Другие языки, такие как C++, имеют модель памяти?
Что такое JSR 133?
Что подразумевается под «переупорядочением» (reordering)?
Что было не так со старой моделью памяти?
Что вы подразумеваете под «некорректно синхронизированы»?
Что делает синхронизация?
Как может случиться, что финальная поля меняют значения?
How do final fields work under the new JMM?
Что делает volatile?
Решила ли новая модель памяти «double-checked locking» проблему?
Что если я пишу виртуальную машину?
Почему я должен беспокоиться?
Я разработчик с 9 до 17 (и ты можешь стать таким)
Пожалуй, непопулярное мнение (и тут немного иронии от меня).Такая позиция близка и мила моему сердцу, хотя я тоже понимаю иронию. Одна из вещей, которые я говорю потенциальным работодателям с тех пор как меня уволили за отказ оставаться программировать после работы — это то, что я не согласен на овертайм. По крайней мере, не на регулярной основе. Я могу иногда поучаствовать в авралах, когда критически важно срочно накатить конкретное изменение или исправить баг, но за исключением таких случаев я буду появляться, вкалывать — и пойду домой.
Чтобы быть способным и отличным инженером, вам не нужно писать статьи в блоге, участвовать в проектах open source, выступать с техническими лекциями или делать что-нибудь ещё.
Можете оставить свой код в офисе — и это вполне нормально.
Команда разработчиков Renga: как мы достигли идиллии, работая без менеджеров

Мы, компания Renga Software, занимаемся разработкой программных продуктов для проектирования зданий и сооружений в соответствии с технологией информационного моделирования (BIM). Идем спринтами, выпускаем релизы каждые 3-4 месяца. Пользователей системы с каждой неделей становится всё больше. Продукт совсем молодой, поэтому бэклог переполнен важными, а главное, интересными задачами. Но как в короткие сроки разработать продукт, который будет использоваться для проектирования жилых домов, детских садов, больниц и театров?
«Простое» программирование на python
functools (это такая свалка для всяких ненужных мне вещей :-).
— Гвидо ван Россум
Может показаться, что статья о ФП, но я не собираюсь обсуждать парадигму. Речь пойдет о переиспользовании и упрощении кода — я попытаюсь доказать, что вы пишете слишком много кода, поэтому он сложный и тяжело тестируется, но самое главное: его долго читать и менять.
В статье заимствуются примеры и/или концепции из библиотеки funcy. Во-первых, она клевая, во-вторых, вы сразу же сможете начать ее использовать. И да, нам понадобится ФП.
«Правильная» структура команд для DevOps

Юридические аспекты операций с криптовалютами для резидентов РФ
Являются ли криптовалюты объектом гражданских прав в РФ
Да, являются.
Список объектов гражданских прав указан в ст. 128 ГК РФ:
“К объектам гражданских прав относятся вещи, включая наличные деньги и документарные ценные бумаги, иное имущество, в том числе безналичные денежные средства, бездокументарные ценные бумаги, имущественные права; результаты работ и оказание услуг; охраняемые результаты интеллектуальной деятельности и приравненные к ним средства индивидуализации (интеллектуальная собственность); нематериальные блага”
Как видно из текста закона, этот список не исключительный, и туда входят любые имущественные права, результаты работ и оказание услуг, и даже нематериальные блага (пример: "вы мне споете, а я вам станцую" — это обмен нематериальными благами)
Часто встречаемые высказывания о том, что де "нет определения криптовалюты в законодательстве РФ и поэтому операции с ними незаконны" — неграмотны.
Это Спарта
Суррогат – это когда сделали не то, что нужно бизнесу. Или не так, как нужно бизнесу.
Суррогаты – это самое страшное зло, происходящее сейчас с российским бизнесом и государственным управлением. Суррогаты – это лучший в мире киллер эффективности. Что особенно приятно, мы, программисты, на этот раз не в стороне – мы на самой оси зла.
С чего все начинается
Представьте исходную ситуацию. К программисту, работающему в «обычной» компании, подходит человек – пользователь системы, он же – руководитель некоего подразделения. Просит, или предлагает, или просто нейтрально говорит – надо сделать в программе/системе/на сайте такую-то штуку.
Программист, допустим, толковый – он понимает, что предлагаемая доработка – суррогат.
Вариантов развития событий много, я приведу некоторые из них:
1. Программист говорит: согласуй с моим или своим начальником, тогда сделаю;
2. Программист говорит: напиши мне задачу/поручение/служебную записку, на бумаге или в информационной системе;
Переписать базу сообщений ВКонтакте с нуля и выжить

Это довольно много. Если бы Вы задались целью прочитать все сообщения всех пользователей, это бы заняло больше 150 тысяч лет. При условии, что Вы довольно прокачанный чтец и тратите на каждое сообщение не больше секунды.
При таком объёме данных критически важно, чтобы логика хранения и доступа к ним была построена оптимально. Иначе в один не такой уж и прекрасный момент может выясниться, что скоро всё пойдёт не так.
Для нас этот момент наступил полтора года назад. Как мы к этому пришли и что получилось в итоге — рассказываем по порядку.
Главный принцип хорошего кода
Прочтение этой статьи: 15 минут
Осмысление методики: 10 минут
Ощутимые результаты: 30 минут
Переписываем домашний проект на микросервисы (Java, Spring Boot, Gradle)
Введение
Последние годы стала очень популярна тема микросервисов. Я не попадал на проекты с микросервисами, поэтому мне, естественно, захотелось ближе познакомиться с такой концепцией архитектуры.
Ранее у меня был домашний проект (хотя скорее даже его прототип), который было решено переписать на микросервисы. Проект представлял собой попытку сделать обучающую Java игру. То есть у игрока есть поле, на этом поле он может управлять каким-то юнитом с помощью кода. Пишет код, отправляет на сервер, там он выполняется и возвращает результат, который отображается пользователю.
Всё это было реализовано в виде прототипа — были пользователи, один урок и одна задача для него, возможность отправить код, который компилировался и исполнялся. Кое-какой фронтенд, но в статье о нём речи не будет. Технологии — Spring Boot, Spring Data, Gradle.
В статье будет реализован такой же прототип, но уже на микросервисах. Реализация будет наиболее простым путём (точнее наиболее простым, из известных мне). Реализация будет доступна любому, кто знаком со Spring.
Как JVM аллоцирует объекты?
Как JVM создает новые объекты? Что именно происходит, когда вы пишете
new Object()
?
На конференциях периодически рассказывают, что для аллокации объектов используются TLAB'ы (thread-local allocation buffer): области памяти, выделенные эксклюзивно каждому потоку, создание объектов в которых очень быстрое за счет отсутствия синхронизации.
Но как правильно подобрать размер TLAB'а? Что делать, если нужно выделить 10% от размера TLAB'а, а свободно только 9%? Может ли объект быть аллоцирован вне TLAB'а? Когда (если) обнуляется выделенная память?
Задавшись этими вопросами и не найдя всех ответов, я решил написать статью, чтобы исправить ситуацию.
Перед прочтением полезно вспомнить как работает какой-нибудь сборщик мусора (например, прочитав этот цикл статей).
Information
- Rating
- 2,261-st
- Date of birth
- Registered
- Activity