Эта история началась банально. Я взял в прокат повербанк сети Energo рядом с кофейней - телефон садился, а зарядки под рукой не было. Дотянул до дома, про устройство забыл напрочь. Через пару дней приложение вежливо сообщило, что аренда автоматически превратилась в покупку, и списало с карты сумму, сопоставимую со стоимостью неплохого обеда. Штраф за утерю как он есть.
Я расстроился, закинул желтый корпус в ящик с проводами и забыл о нем еще на полгода. На днях, разгребая этот ящик, наткнулся на знакомую коробочку и только сейчас я обратил внимание на деталь, о которой в самом сервисе почему-то активно умалчивают: на боковой грани корпуса красуется стандартный входной разъем Type-C. То есть девайс после выкупа не превращается в бесполезный пластиковый «кирпич», его можно спокойно заряжать дома обычным кабелем от розетки или ноутбука, используя как обычный многоразовый аккум.
Раз уж я за нее фактически заплатил (да еще и выяснил, что она вполне юзабельна в быту), грех не посмотреть, что внутри. И заодно понять - за какое железо я отдал эти деньги, и насколько вообще безопасно носить такую штуку в кармане куртки.
Читать далееИз новостей: продажи Against the Storm достигли 2 миллионов копий, Meccha Chameleon разошлась тиражом в 20 миллионов копий, Epic Games продала ArtStation и Sketchfab, Supermassive Games объявила о сокращениях.
Из интересностей: Quasimorph — когда сложность это творческий замысел, как перестать бояться и полюбить ассемблер, простая 2D-трава на WebGPU, на пути к Unity 7.
Читать далееПайплайн у вас есть. Он есть у всех: CI перестал быть предметом споров примерно тогда же, когда Docker перестал быть новостью. Именно поэтому разговор пора вести другой - не “зачем вам CI”, а можно ли верить вашему зелёному пайплайну, сколько он стоит и кто им владеет. Разбор в формате “зачем - как - чем - цена отказа” - пилот рубрики: дальше в ней будут другие практики, формат останется.
Читать далееНа Хабре немало статей о том, почему Agile не работает. И в большинстве из них авторы справедливо отмечают, что ритуалы превратились в формальности, Scrum выродился в бюрократию, команды имитируют активность. Всё так.
Я хочу поговорить про другое - про глубинные причины неудач во внедрении Agile и конкретные способы наконец-то получить от методологии тот результат, который она способна дать.
Предлагаю пошаговый алгоритм, построенный на принципах поведенческой психологии. Он работает не с ритуалами и артефактами, а с тем, что действительно движет изменениями, — с людьми, их привычками и поведением.
Эта статья — не про то, что Agile плох. Она про то, как сделать его работающим.
Читать далееПривет, Хабр!
У меня есть для вас очень простой способ испортить себе вечер. Поставьте cargo-llvm-lines, запустите на своём проекте и посмотрите не на первую колонку, а на вторую, которая называется Copies. Сверху почти наверняка будет core::ptr::drop_in_place, дальше что-нибудь из Vec, потом хвост от serde. И напротив каждой строчки будет стоять не единица.
Обычная реакция в этот момент: ну да, дженерики, зато быстро, а одинаковые копии потом схлопнет LLVM. Часть действительно схлопнет. Только не тем механизмом, о котором вы подумали, и точно не тем, который вы включили в Cargo.toml.
В статье узнаем откуда берутся копии, почему Vec<u32> и Vec<i32> в бинарнике сливаются в одну функцию, а Vec<u32> и Vec<u64> не сольются ни при каких настройках, что от этого видно в именах символов, как с той же проблемой воюет сам std и куда делась полиморфизация, которую пять лет ждали как лекарство.
Читать далееИногда TypeScript думает мучительно долго. У меня это вылезло не самым приятным способом: @_chenglou — он работал над React, ReasonML и ReScript, а сейчас над Midjourney — завёл в моей библиотеке схем issue «Large TS types cause type inference slowdown».
Ну… неприятно. Но я знал, что в системе типов TS люди собирали и не такое, вплоть до Doom, — значит, тормоза лечатся, а не заложены в фундамент.
Дальше всё оказалось довольно механически. Сначала тесты на типы, чтобы ничего не сломать молча: оптимизация типов легко превращает { a: string } в { a?: string }, и никто вам об этом не сообщит. Потом замеры через @ark/attest от создателей ArkType — он считает, во сколько инстанцирований типов обходится выражение, и фиксирует это как бейзлайн, который дальше можно занести в CI. И только после этого — сама оптимизация.
Фикс в итоге оказался на одну строчку. S.Output матчился по всему типу Schema<…> — большому объекту с перегрузками, пересечённому с юнионом всех вариантов схемы, — хотя готовый тип всё это время лежал в соседнем поле ~standard. Достаточно было заглянуть сразу туда.
Извлечение типа стало дешевле в 15.7 раза и перестало зависеть от размера схемы. В статье — таблица со всеми замерами до и после, код тестов и бенчмарков и рецепт, который можно применить к своему проекту.
Читать далееЕсли верить мемам, многие мужчины удивительно часто думают о Римской империи. Этот факт удивляет женщин, но на самом деле его легко объяснить. Вся западная цивилизация формировалась под влиянием Рима. Архитектура, политика, экономика, города, образ жизни. Расширение Рима сформировало Европу, а Европа сформировала мир.
Следы Рима сохранились и в языке. Тысячи слов латинского происхождения вошли в европейские языки — непосредственно из латыни или через другие языки. Например, в русском это «текст», «армия», «университет», «документ», Роман — и тысячи других слов.
Читать далееПривет! На связи Антон Полухин из Техплатформы Городских сервисов Яндекса. Недавно в Брно состоялась встреча международного комитета по стандартизации языка программирования C++, в которой я принимал активное участие. В этот раз началась работа над C++29 и как раз о новинках и хочется рассказать.
Читать далееПопробуйте бытовой фокус: вместо того чтобы скинуть кодинг-агенту задачу напрямую, попросите его сначала написать промпт под неё, а потом скормите этот промпт ему же. Часто выходит лучше вашей формулировки.
Но это всего два хода. Цикл начинается там, где система повторяет такое сама: хранит состояние, выбирает следующий шаг, проверяет результат внешним критерием и останавливается по условию или бюджету.
Слоган "хватит промптить кодинг-агентов, проектируйте циклы" собрал миллионы просмотров и оброс гайдами "как печатать альфу 24/7". Я полез смотреть, что там под мемом, и за пару месяцев собрал поверх своей обвязки собственный цикл. Переписывал столько раз, что перестал считать.
Читать далееПродолжаю публикацию интересных задач на логику с красивым решением.
Формулировка:
3 честных рациональных инопланетянина (А, Б, В) стоят в колонне. В видит А и Б; Б видит только А; А не видит никого. На каждого надет колпак либо синего, либо зеленого, либо красного цвета, количество колпаков того или иного цвета не ограничено. Договорившись об общей стратегии, они по очереди (начиная с В) называют возможный цвет своего колпака. Цель - гарантировать, чтобы минимум двое ответили верно.
Решение:
Воспользуемся арифметикой по модулю 3 (будем считать остатки от деления на 3, соответствующего количеству цветов). Участники заранее присваивают каждому цвету число - красный = 0, синий = 1, зеленый = 2. Инопланетянин В видит двоих перед собой (Б и А). Он складывает их числа и называет цвет, который соответствует остатку от деления суммы на 3. Например, В видит у Б - синий (1), у А — зеленый (2). 1 + 2 = 3. Остаток от деления 3 на 3 равен 0. В говорит: «Красный» (код числа 0). Б слышит «Красный» (0) и понимает: «Мой цвет + цвет А делится на 3 без остатка». Затем он смотрит на А. Допустим, Б видит, что на А — зеленый колпак (2). Единственное число, которое при сложении с 2 дает число, делящееся на 3 — это 1. Б понимает, что он — Синий (1), и уверенно это произносит. А слышал код от В (0) и ответ от Б (1) и понимает, что на нем колпак зеленого цвета (2).
Данный метод работает для любого количества цветов и любого количества инопланетян.
Читать далееПосле двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 7.2. Среди наиболее заметных изменений: механизм потоковой передачи данных USB4STREAM, оптимизации производительности btrfs, xfs и ext4, продолжение удаления кода для поддержки CPU i486, возможность создания вложенных планировщиков SCHED_EXT, снижено потребление памяти в подсистеме подкачки, ускорены неименованные каналы, поддержка расширений Intel MBEC и AMD GMET в KVM, удаление протокола AppleTalk, начальная поддержка HDMI 2.1 FRL в драйвере AMDGPU.
( читать дальше... )