Search
Write a publication
Pull to refresh
2
0
Константин @ConstOrVar

Разработчик мобильных приложений

Send message

Теорема Борсука-Улама, диаметральные точки Земли и дележка украденного ожерелья

Reading time5 min
Views5.3K

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

Этот пост мог бы иметь кликбейтное название в духе «На противоположной стороне Земли сейчас такая же погода, как у вас!», но это не совсем верно. Почему — объясню ниже. А пока предлагаю разобраться с официальными формулировками и переложить их на понятный язык. Еще в тексте будут ссылки на связанные проблемы, которые научат нас грамотно резать бутерброды и причесывать ежей — в общем, надеюсь, получилось познавательно!

Читать далее

Корутины с точки зрения компилятора

Level of difficultyHard
Reading time10 min
Views7.2K

Привет! Меня зовут Абакар, я работаю главным техническим лидером разработки в Альфа-Банке.

Сегодня мы поговорим на тему, связанную с корутинами, а именно погрузимся чуть глубже в недра компилятора Kotlin. На данную тему мы с Александром Гиревым готовили доклад на «Мобиус».

В рамках подготовки доклада нам пришлось заглянуть в святая святых для всех «андроидеров», а именно в исходники компилятора Kotlin. Ну что ж, поглядим, что мы там накопали. Поехали!

Читать далее

Как работает Node.js

Level of difficultyMedium
Reading time22 min
Views14K



После прочтения этой статьи вы хорошо поймете следующее:


  • как работает цикл событий (event loop) в Node.js, включая все его фазы
  • как Node.js выполняет JavaScript в одном потоке (single thread)
  • как Node.js использует библиотеку libuv и внутренние API для обработки асинхронных операций
  • почему знание работы цикла событий так важно для написания эффективного серверного кода

Понять, как JS работает "под капотом" в браузере (см. эту короткую 15-минутную статью), проще, чем понять устройство Node.js. В браузере нет сложных фаз и многослойных механизмов, как в Node.js.


Но почему в Node.js все устроено сложнее? Зачем столько фаз, которые так непросто понять?

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

7 качеств, которые вам нужны, чтобы стать креативным программистом

Level of difficultyEasy
Reading time11 min
Views13K

Привет! Меня зовут Газимагомед, я разработчик в PaaS-направлении Авито. Я прочитал книгу Ваутера Грунефелда «Креативный программист» и в этой статье рассказываю о своих впечатлениях. В тексте я сделал сжатый разбор всех глав книги, разобрал семь рекомендуемых автором качеств креативного программиста и провел параллели с собственным опытом.

Читать далее

Как все успеть и не сгореть: мой опыт микротайм-менеджмента на работе и дома

Reading time10 min
Views32K

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

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

Level of difficultyMedium
Reading time19 min
Views14K

Осторожно: помните ли вы, как в вашем телефоне Siemens, Motorola и Sony поселились маленькие программы — «эльфы»? В рамках этой статьи мы во всех деталях исследуем прошивку бюджетного кнопочника, разберемся в её архитектуре, хакнем и напишем загрузчик тех самых эльфов с MicroSD-флэшки. При этом я постараюсь объяснить всё максимально простым и доступным языком!

Недавно я познакомился с легендой форума allsiemens.ru — Ilya_ZX, который известен своим огромным вкладом в тему реверса и моддинга телефонов на платформе E-Gold и S-Gold. Илья поведал мне интересную историю о том, как в начале нулевых, будучи студентом, поспорил с одногруппником, сможет ли он добавить ‭‭«змейку‭‭» в свой Siemens A60. И спор он этот выиграл, путем бессонных ночей ковыряния прошивки в IDA Pro! Я подумал ‭‭— «а чем я хуже?‭‭». Взял в руки кнопочный телефон на платформе Spreadtrum, сдампил прошивку и загрузил в дизассемблер...

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

Читать далее

Развеиваем мифы о Stability в Compose: оптимизации Strong Skipping

Level of difficultyMedium
Reading time9 min
Views3.2K

За последнее время Jetpack Compose и его кроссплатформенный собрат Compose Multiplatform прошел большой путь от ранних альфа релизов и скептического отношения комьюнити до статуса главного UI-фреймфорка под Android и production-ready состояния на iOS.

Тем не менее одна из важных тем, касающихся runtime-производительности фреймворка, все еще остается полной темных пятен, и это тема stability. Как ни странно, ведь на эту тему сделано множество статей и докладов. Проблема заключается в том, что стремительное развитие фреймворка очень быстро делает эти статьи, доклады и даже документацию устаревшими, а новые посты на эту тему вторят старым, дальше распространяя ложную информацию о том, как работает рекомпозиция, пропускаемость (skippability) и перезапускаемость (restartability).

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

Читать далее

Java Highload и сборка мусора

Level of difficultyMedium
Reading time12 min
Views3.7K

Разработка HL-решения со строгим SLA по RPS и latency затрагивает множество аспектов. В частности OLTP, мультиплексирование запросов, неблокирующий I/O и прочее. В данной статье хотел бы поговорить про сборку мусора. Мы не будем погружаться в цитирование спецификации. Напротив, взглянем на сборку глазами инженера, перед которым стоит задача оптимизировать процесс с минимальными издержками.

Читать далее

Двоичная Java: CDS, CRaC и AOT для ускорения запуска и прогрева JVM

Level of difficultyMedium
Reading time19 min
Views3.4K

Это текстовая версия доклада с HighLoad++ 2024, с которым выступал один из наших бывших девелопер-адвокатов @RustamKuramshin Также есть отдельная запись доклада, сделанная силами участников программного комитета HighLoad++.

Читать далее

Мобильная разработка за неделю #587 (17 — 25 мая)

Level of difficultyEasy
Reading time5 min
Views3.1K
На этой неделе прошла I/O 2025 и главное на ней было посвящено ИИ, но и для Android-разработчиков есть много обновлений — новая навигация Jetpack Navigation 3, новые функции в Android Studio, обновления Google Play и т.д. Кроме этого новые релизы Flutter и Dart, плагин KMP для IntelliJ IDEA и Android Studio, большое обновление DivKit, тестирование без инцидентов в проде и многое другое. Заходите!

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

Что не так? Три парадокса теории вероятностей

Level of difficultyEasy
Reading time8 min
Views39K

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

Казалось бы, детская задачка, где нужно просто “вспомнить формулу”, но всё не так однозначно. Если задать этот вопрос прохожему, он, скорее всего, скажет ½. Преподаватель математики, возможно, ответит ⅓. Кто из них прав?

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

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

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

В этой статье — три таких истории. В первой один и тот же факт даёт разные вероятности, если по-разному устроено наблюдение. Во второй один и тот же объект может быть “случайным” множеством способов. А в третьей невозможно придумать, как сделать задачу математически строгой.

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

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

Читать далее

SQL: бесплатные курсы и тренажёры, которые стоит попробовать

Level of difficultyEasy
Reading time4 min
Views30K

Всем привет! Это команда Яндекс Практикума. Делимся подборкой полезных материалов для изучения SQL от экспертов курса «Специалист по Data Science».

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

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

Читать далее

Как подружить JUnit 5 и Robolectric?

Level of difficultyMedium
Reading time9 min
Views2.4K

Задавались ли вы вопросом, почему Robolectric не работает JUnit 5? В этой статье расскажу, как подружить Robolectric и JUnit 5 и как мы смогли это сделать в команде. 

Вы узнаете, как запустить JUnit 4 тесты при совместном использовании с JUnit Jupiter с помощью тестового движка Vintage. А ещё — как с JUnit Platform разработчики Kotest и Spock Framework создавали свои тестовые фреймворки.

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

Читать далее

Как нанимать крутых инженеров: работающие приемы для собеседований

Level of difficultyMedium
Reading time7 min
Views13K

Привет! Меня зовут Алексей Стратонов, я экс-техлид Авито Недвижимости. До Авито я 8 лет проработал в аутсорсе: управлял четырьмя отделами, успел нанять и уволить многих, в том числе руководителей. В аутсорсе есть специфика — зарплаты тут ниже, а задачи те же, что и в продукте. Поэтому тимлид должен уметь собирать команды под определенный проект и качественно собеседовать.

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

Читать далее

Мобильная разработка за неделю #586 (12 — 18 мая)

Level of difficultyEasy
Reading time5 min
Views1.8K
Новый большой дайджест после праздничного перерыва — архитектурный линтинг и Material 3 Expressive, тёмные уголки обфускации и Compose Multiplatform для iOS, типобезопасная передача результатов, сломанные OTP и открытые конечные точки, UI-дизайн с ChatGPT и многое другое. Заходите!

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

Генератор синусоиды из LC-контура и отрицательного сопротивления

Reading time14 min
Views4.6K

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

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

Поэтому мы обсудим альтернативу - с использованием "отрицательного сопротивления" - подключая к нему LC-контур прямо в том виде в каком он нарисован в учебнике, мы сразу получаем рабочий осциллятор и с широчайшим диапазоном по частоте!

Мы проверим эту идею на практике! Подключим LC-контур к двум типам схем с отрицательным сопротивлением - сперва к "лямбда-диоду" (на транзисторах), а потом к "транзитрону" (на электронной трехсеточной лампе - пентоде).

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

Читать далее

Объяснение графических процессоров для тех, кто привык работать с ЦП

Level of difficultyMedium
Reading time7 min
Views6K

За годы работы я подробно изучил, как центральные процессоры (CPU) выполняют код и как они устроены внутри. Дело в том, что я участвовал в разработке ядра Linux и ScyllaDB, а этот код очень близок к металлу. Я даже немного баловался с Verilog, безрезультатно попытавшись собрать моё собственное ядро RISC-V.

Графические процессоры (GPU) в отличие от обычных в основном оставались для меня чёрным ящиком, несмотря на то, что поработать с ними всё-таки довелось. Помню, что экспериментировал с NVIDIA RIVA 128 или чем-то подобным, проверяя, как там работает DirectX. Тогда такие процессоры ещё не выделялись на фоне ускорителей 3D-графики. Я также пытался идти в ногу со временем и немного упражнялся в программировании элементарных шейдеров на современных GPU. Но я никогда глубоко не вдавался в работу с GPU, и мои взгляды можно назвать CPU-центричными.

Однако, поскольку сегодня наблюдается всплеск рабочих нагрузок, связанных с ИИ, и, в частности, приходится работать с большими языковыми моделями (БЯМ), графические процессоры становятся незаменимыми для современных вычислений. К задачам, решаемым с применением ИИ, относятся масштабные прикладные тензорные операции, в том числе — сложение и перемножение матриц. А это уже работа для GPU. Но как современный GPU выполняет их, и насколько при этом возрастает эффективность по сравнению с выполнением таких же рабочих нагрузок на CPU?

Читать далее

System Design — ТОП 5 ошибок новичка на интервью

Level of difficultyEasy
Reading time9 min
Views15K

Почему так сложно пройти первые System Design Интервью? Какие есть подводные камни? Оказывается, что не все понимают базовый алгоритм прохождения, а также нюансы движения по основным этапам.

Меня зовут Владимир и я senior backend в геораспределенной HighLoad системе. Которая выдерживает пиковые нагрузки в млн RPS. Моя страсть System Design. Я успешно прохожу интервью в BigTech компании, а также готовлю учеников. Выделил ТОП-5 ошибок у новичков и готов поделиться их разбором. Подробности под катом.

Узнать ошибки

Соревнование по взлому AI-ассистентов: впечатления от соревнования Hackaprompt

Level of difficultyEasy
Reading time2 min
Views1.9K

Только закончился очередной конкурс по взлому AI-ассистента — DougDoug’s Buffet. Под катом краткий обзор заданий, и поделюсь техниками которые работали в этом контесте.

Читать далее

Всё везде и сразу

Reading time9 min
Views9.4K

Привет! На связи Евгений Антонов. Я работаю ведущим техническим менеджером проектов в Yandex Infrastructure. А также руковожу парой команд (разработчиков и менеджеров) и факультативно занимаюсь IT‑консалтингом. Ещё я автор телеграм‑канала «Тимлид Очевидность» и ведущий подкастов «Кода кода» и «Три тимлида заходят в бар».

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

Как вы, возможно, догадались по названию, речь пойдёт о многозадачности.

Читать далее

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity