Pull to refresh

Technotext

Семантические ловушки асинхронности: Ключи к разгадке и эффективному освоению тем Task, Синхронность, Асинхронность

Level of difficultyMedium
Reading time11 min
Views9.9K

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

Такая ситуация имеет место когда начинающий программист знакомится с темами Task, Синхронность, Асинхронность. Ситуация усугубляется тем что зачастую, более опытные коллеги применяют в жаргоне выражения из разряда «Синхронное/Асинхронное выполнение задачи».

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

Читать далее

Матричный шрифт с анимацией на микроконтроллере

Level of difficultyMedium
Reading time5 min
Views9K

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

Читать далее

Не играй в догонялки со Spring — Explyt Spring plugin для IDEA Community

Level of difficultyEasy
Reading time14 min
Views6.4K

Всем привет. После моей предыдущей статьи о Maven плагине, где я предложил новый подход к реализации и создал свою версию для IDEA (вместо того чтобы писать свой мини-мавен, я делегировал всю основную работу ему посредством Maven плагина), меня пригласили работать над Spring плагином в IT-стартап Explyt. Компания занимается автоматической генерацией тестов на базе AI и формальных методов. В процессе работы столкнулся с проблемами, похожими на те, которые решал в своем Maven плагине. У меня возникло некое дежавю, и я подумал: почему бы не использовать подобный подход, чтобы доработать и улучшить Dependency Injection Explyt Spring плагина? Текст для тех, кто работает со Spring-плагинами и хочет разобраться, как эффективно применять готовую логику Спринга для новых задач. Заходите под кат, подробно поделюсь своим кейсом, покажу код, расскажу про итерации и объясню логику.

Читать далее

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

Level of difficultyEasy
Reading time12 min
Views3.9K

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

Читать далее

Оптимизация хранения данных в PostgreSQL

Level of difficultyMedium
Reading time39 min
Views17K

Всем привет. Меня зовут Сергей, я — эксперт компании Bercut. За плечами — более 20 лет работы с различными СУБД (PostgreSQL, Oracle, MS Access, MS FoxPro, Borland InterBase) и высоконагруженными системами на их основе.

В Bercut мы занимаемся разработкой и развитием IT‑продуктов, решений для операторов цифровых услуг и мобильных сервисов. Наши системы работают на различном железе, разных СУБД и обслуживают 24×7x365 в режиме онлайн сотни миллионов абонентов.

Сегодня поговорим о том, как оптимизировать хранение данных в PostgreSQL, снизив объем дискового пространства, потребляемого таблицами и ускорить выборку данных. Это может быть особенно актуально после перевода информационной системы с другой СУБД на PostgreSQL.

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

Читать далее

Осторожно, Combine! Откуда берутся утечки памяти, потеря эвентов, нестабильность операторов и что с этим всем делать

Level of difficultyMedium
Reading time27 min
Views5.2K

Привет, меня зовут Никита, я iOS‑разработчик в Яндекс Диске. В прошлый раз я рассказывал, как мы начали свой путь в SwiftUI. Теперь настало время рассказать ещё об одном фреймворке, который мы затащили в свой проект параллельно со SwiftUI, — Combine.

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

Читать далее

От десятков до сотен тысяч RPS: как мы создали API, который развивается 10 лет без дропа обратной совместимости

Level of difficultyMedium
Reading time10 min
Views11K

Привет! Меня зовут Вадим Клеба, я руковожу командой бэкенд-разработки в Телемосте. Последние девять лет я разрабатываю высоконагруженные распределённые системы. Раньше я разрабатывал search-as-a-service-решение с эффективным полнотекстовым поиском с учётом релевантности.

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

Читать увлекательную историю

Базовые принципы GTD для начинающего

Level of difficultyEasy
Reading time6 min
Views8.2K

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

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

Этой статьей я попытаюсь немного снизить порог входа в одну из самых полезных (для меня) методик - Getting Things Done. Предложу свою вариацию, которую легко начать применять уже сегодня. Без дополнительных пояснений система будет понятна только тому, кто ее использует. Но зато позволит быстро разгрузить голову, не вникая в детали, изложенные в довольно объемной книге Дэвида Аллена. 

Читать далее

Business Process Notation как подход к организации кода в проекте по разработке мобильного iOS приложения

Reading time12 min
Views1.3K

Постановка проблемы

На сегодняшний день наиболее известны такие архитектурные паттерны как MVC, MVVM, MVP, Viper, Clean Code.

Все они в той или иной мере работают с тремя основными сущностями - Модель, Вью, Контроллер, добавляя время от времени некоторые дополнительные, например, Presenter.

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

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

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

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

Именно в такие моменты приходится переосмысливать общую архитектуру проекта и отвечать на вопросы “Зачем нужен тот или иной код, какую задачу он решает?”, “Где расположен код, реализующий ту или иную функциональность и как он работает?”. И т.д.

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

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

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

При этом, задача понимается как бизнес-процесс.

Читать далее

Как мы внедрили Tracetest для улучшения наблюдаемости в EDA

Level of difficultyMedium
Reading time8 min
Views1.3K

В мире разработки ПО поддержка высокого уровня наблюдаемости (observability) для приложений с архитектурой, управляемой событиями (event-driven architecture, EDA) стало критически важным. Сложность таких систем, связанных с обработкой огромных объемов данных в режиме реального времени, требует надежных инструментов для мониторинга, отладки и анализа. Однако традиционные методы, использующие логи и метрики, часто оказываются недостаточными, когда необходимо глубоко понять взаимодействие между различными компонентами системы и выявить узкие места.

Именно с этой проблемой мы столкнулись в нашей команде, поэтому я, Дмитрий Титаренко (QA-инженер в компании TAGES), решил поделится найденным решением в статье на Хабр. Надеюсь, что будет полезно!

Читать далее

Веб-страничка строит график спектра отражения и пропускания света стопкой пластин

Level of difficultyEasy
Reading time1 min
Views1.4K

Стопка пластин – это не только оконный стеклопакет – это еще и слои глины и известняка в недрах земли, это «атмосфера» далекой звезды и атмосфера Земли, это живая ткань под микроскопом, тонкие плёнки. И «свет» – это не только видимый диапазон – это и радиоизлучение, и ультрафиолет. То есть, такие спектры интересны геологам, астрономам, биологам.

Математические методы вычисления этого спектра преподаются в ВУЗах. Предмет называется «Матричная оптика».

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

И назвал веб-страничку «Калькулятор Прашкевич» (это название – подарок на Первое апреля дорогому мне человеку).

Ссылка на Прашкевича

Есть один нюанс со смартфонами. В ссылке смартфоны автоматически приписывают букву "s" к слову "http". Получается "https". С этой припиской ссылка не работает – надо в адресной строке руками удалить эту букву.

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

Буду благодарен за отзывы и критические замечания.

спасибо

Метод Contains коллекций в Entity Framework для SQL Server

Level of difficultyMedium
Reading time7 min
Views2.8K

Долгое время в метод Contains(), который используется в Entity Framework для фильтрации данных по списку значений, не вносили изменения. До выхода Entity Framework 8 коллекция с этим методом внутри оператора запросов where LINQ транслировалась в значения в виде констант внутри оператора IN для SQL. Если количество элементов равно одному, то преобразование происходило в выражение с оператором ‘=’ на стороне MS SQL Server. Аналогично транслируется и метод расширения Where() LINQ.

Использование в EF8 функции OPENJSON устраняет часть проблем с кэшем планов запросов для SQL Server, но не применимо к старым версиям (compatibility level) баз данных. Да и оптимальность генерируемого ею кода в некоторых случаях вызывает сомнения.

В недавно вышедшем Entity Framework 9 добавили больше настроек для возможности транслирования метода Contains() коллекций как с помощью OPENJSON, так и «по-старому» — в виде констант.

Читать далее

Wiren Board шагает в промку — управление линией розлива и этикетирования

Level of difficultyEasy
Reading time5 min
Views5.9K

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

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

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

Читать далее

Синергия дизайнеров и техписов: создание единых стандартов Tone of voice

Reading time6 min
Views1.5K

Привет, Хабр! Меня зовут Саша Новицкая, я ведущий дизайнер продукта в Х5 Tech. Занимаюсь B2B продуктами и дизайн-системой. Хочу рассказать о том, как мы вместе с техническими писателями разрабатывали и дорабатывали наш ToV (Tone of Voice). И даже поделимся результатом нашей работы в виде гайда. А помогать мне в этом будет мой соавтор и менеджер направления «Разработки технической документации» Х5 Tech Настя Московкина.

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

Читать далее

Как ускорить сборку Docker-образов в GitLab: стратегии кэширования с Docker Buildx

Level of difficultyHard
Reading time16 min
Views11K

Скорость сборки Docker-образов играет важную роль в CI/CD, особенно для микросервисов, где частые обновления и тестирования требуют быстрой доставки изменений.

Одним из решений для оптимизации сборок является Docker Buildx — расширение к стандартной команде docker build. Docker Buildx предлагает дополнительные возможности, такие как кэширование слоев образов, что помогает значительно сократить время сборки за счет повторного использования неизменных слоев. В отличие от стандартного процесса сборки, Docker Buildx предоставляет более гибкое управление кэшем, поддерживает мультиархитектурные сборки и работу с несколькими платформами.

В этой статье мы сосредоточимся на том, как эффективно настроить и использовать кэширование с Docker Buildx в CI/CD пайплайнах на GitLab. Мы рассмотрим примеры, когда кэширование позволяет ускорить сборку, и ситуации, когда его лучше отключить для гарантии корректности итогового образа.

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

Для Героев III вышло долгожданное полномасштабное обновление — Фабрика. Почему это по-настоящему уникальное явление?

Level of difficultyEasy
Reading time7 min
Views109K

Если судить по группе ВК, дополнение вышло где-то 31 декабря в 7:38 минут по Москве. Новость дошла до меня где-то за час-два до нового года. Если вы в курсе, то думаю вы уже или без меня ознакомились или вот, прочитав новость, побежите прямо сейчас и статья для вас тут по сути заканчивается). Сначала Doom порадовал ... а сейчас Герои.

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

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

И почему же HotA так уникальна?

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

Reading time20 min
Views74K

Если у вас есть время и желание заняться странной деятельностью, я предлагаю вам развлечение под названием «кадровая археология». Суть проста — вы вводите в поиск запрос, вроде «вакансии в России в 1990-х» и по ним пытаетесь понять, как жили древние люди. А точнее, как мыслили HR‑ы и их руководители, а также, какой была ситуация на рынке труда.

Наша задача на сегодня — проанализировать ряд найденных артефактов было эпохи, дойти до наших дней и понять, как развивалась корпоративная культура, зачем она нужна и предположить, куда же она приведет. А сделать это можно только через гадание на таро и кофейной гуще футурологические прогнозы социально‑экономической ситуации. Hi‑tech, low life и манипуляции — вот краткое содержание этой статьи.

Ностальгировать, читать, думать

3750 дней разработки AI или почему боты всё ещё не захватили покер

Level of difficultyHard
Reading time5 min
Views4K

Идёт именно этот день в разработке. В этот раз хочу затронуть феномен покера, для которого создается AI и поделиться наблюдениями, которые помогут ответить на вопрос из названия. Покер (Техасский безлимитный холдем) – это очень глубокая игра, которая представляет собой модель бизнес-отношений разных субъектов по определённым метрикам, единым для всех участников процесса. Эти метрики позволяют человеку, принимающему решение, понимать, когда инвестиции в “свое внутреннее состояние” могут быть более или менее успешными. Стратегии строятся каждым игроком, исходя из меняющегося контекста, по заранее определенным правилам. Особенность именно безлимитной версии покера в том, что вследствие большого рычага оценки стоимости текущего контекста, число возможных вариаций действий в дереве принятия решений становится огромным в разрезе одной-единственной покерной раздачи.

Читать далее

Королева кода: как Грейс Хоппер сделала компьютеры доступнее

Level of difficultyEasy
Reading time9 min
Views5.2K

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

Читать далее

Документирование HTTP API (и не только) с Foliant

Level of difficultyMedium
Reading time10 min
Views7.4K

В статье расскажу про Foliant и про возможности по документированию HTTP API с его использованием. Упор сделаю на API, которые описываются с помощью OpenAPI/Swagger. Также вскользь коснусь возможностей по документированию API, описанных с помощью других спецификаций.

Читать далее