
Май принёс отличные новости для Flutter-разработчиков: обновления SDK, интересные статьи, пачка новых и полезных пакетов, а также видео на русском и английском языках.
Искусство создания компьютерных программ
Май принёс отличные новости для Flutter-разработчиков: обновления SDK, интересные статьи, пачка новых и полезных пакетов, а также видео на русском и английском языках.
Никто давно не пытается выводить теорий о том как правильно писать код.
Старые теории и способы об этом думать в общественной дискуссии давно свелись к спору о синтаксическом сахаре да и теории те были попыткой выделения каких-то математических свойств кода. Потом как известно была доказана невозможность этого.
Сейчас всё изменилось - мы должны рассуждать о проекте как о том, что постоянно изменяется большими группами людей, какая-то часть и кода и людей может быть неправильной, никто из модифицирующих не знает проекта целиком, нужны новые идеи и способы рассуждения.
Привет, Хабр!
Тонкое скрещивание DataFrame-ов в pandas по-прежнему остаётся источником прелестных багов: случайных дубликатов, потерянных строк и неуловимых NaN-ов. В статье рассмотрим эти проблемы.
В мире разработки хватает экзотики: одни языки создаются ради скорости и эффективности, другие — ради красоты или даже чистого искусства. Mystical — как раз из последних. Он превращает исходный код в необычные кольцевые структуры, за которыми скрывается синтаксис PostScript. Давайте разбираться, почему он так странно выглядит и что полезного можно сделать со всей этой красотой.
Глава 1: мой коллега, программист
Пустая оболочка человека. Он больше похож на попугая, чем на личность. Мой начальник, искренне верящий в священнодействие Парного Программирования, сковал цепью меня и этого коллегу-«программиста», как сиамских близнецов с разных планет. Общей была наша клавиатура, но не мышление. Боже, как же он был далёк от этого.
«Постой-ка. У меня появилась идея. Дай мне клавиатуру.»
Идея. Ага. Как у младенца появляется «идея» засунуть вилку в розетку. Я почти доделал нечто прекрасное; стройную, изящную логику, пронзающую сложность подобно ножу, режущему масло. И тут появился он — бьёт по клавиатуре, как будто она ему деньги должна, копипастит код-франкенштейн из комментария на StackOverflow, написанный последователем Дяди Боба в 2014 году.
Знает ли он, что делает наша система? Нет.
Прочитал ли он тикет? Разумеется, нет.
Ощущает ли он уверенность, когда безрассудно корёжит глобальное состояние? Разумеется, да.
У меня возникла идея, как можно расширить синтаксис C++ операцией скалярного произведения. Если кратко, то произведение двух матриц в новых обозначениях будет выглядеть так:
C[>i][>j] = A[i][>k] * B[>k][j];
Насколько мне известно, сочетания операторов [> и [< вроде бы нигде не используются. Их можно применить для декларации индексов, которые существуют только в пределах данного выражения. Сочетание [> используется для декларации индекса, который пробегает от начала до конца массива в прямом направлении, а сочетание [< для декларации индекса, который пробегает в обратном направлении. Для повторяющихся индексов в произведении подразумевается суммирование - они аналогичны немым индексам в тензорных обозначениях.
Разберём на примерах, как это будет работать.
В предыдущей статье я учил существ рисовать узоры и привлекать внимание человека. Теперь я пошёл дальше — дал им возможность «торговать» друг с другом. Простая экономика и координация действий через обмен. В этой статье — как это устроено, какие алгоритмы я использовал и почему торговля среди глупых жёлтых существ оказалась совсем не глупой.
ИИ шагает по планете и входит в нашу повседневную жизнь. Но иногда преподносит сюрпризы. Некоторые из них - неприятные.
Моя заметка - об одном таком сюрпризе.
Привет, Хабр!
Сегодня разберём, как устроен reflect.Value
изнутри и что на происходит, когда вы вызываете .Field(i)
.
Почему люди не используют типы чаще? Возможно все связано с тем, что опытные разработчики перестали использовать нерабочие паттерны, не оставляя за собой следов для новичков. В этой статье более детально разбирается недавно удаленный мной код с паттерном, который я называю «утка‑дублер». Вы сможете проследить процесс разработки типа, а также причину его удаления. Также мне хотелось бы попросить разработчиков на Rust документировать и делиться своими ошибками, чтобы мы все могли на них учиться.
Кажется, ещё вчера искусственный интеллект был чем-то из фильмов и фантазий. А сегодня - он везде: в чатах, в рабочих инструментах, в личных помощниках. Мы удивительно легко впустили его в свою жизнь - с интересом, с восхищением, с доверием. И, казалось бы, что может пойти не так?
Legacy проекты на С++ зачастую являются многокомпонентными, когда продукт использует несколько библиотек, которые имеют различную архитектуру для работы с ними.
Обычно это:
библиотеки, поставляемые как ООП решение (Некоторые модули boost, SOCI как пример)
библиотеки, реализованные в функциональном стиле (OpenGL через С API, POSIX как пример)
Из-за этого в итоговом проекте появляются сущности, которые внутри реализованы через классы, но внутри методов класса идет обращение к обычным функциям. Некоторые библиотеки имеют специфичные функции, которые для своей работы требуют первоначальную инициализацию. Как пример: поиск подключенных устройств и получение на них ссылок для дальнейшей работы или функции, которые требуют инициализации большого количества памяти.
Вследствие этого возникает вопрос - как лучше реализовать покрытие юнит-тестами специфичных объектов, которые внутри себя имеют функции, требующие специальных условий для своей работы?
Привет, Хабр!
Сегодня рассмотрим почему DataFrame.apply()
— это так себе инструмент в 2025 году, чем его заменять и как писать dataframe-логику так, чтобы она летала вместо того, чтобы жечь CPU и бюджет.
Go — язык, который ценится за простоту и чёткость. Однако даже при минимальном синтаксисе здесь есть нюансы. Особенно это касается работы с функциями и методами. В этой статье хочу поделиться личными наблюдениями и выводами по нескольким ключевым темам: выбор типа получателя, использование именованных параметров результата, распространённые ошибки при возврате nil, проблемы с файлами в качестве входных данных и поведение defer
.
ps. Обложку нейронка сгенерировала. Очень странно, но мне понравилось.
Команда Spring АйО перевела и адаптировала доклад Даниэля Гарнье-Муару “Spring Security Architecture Principles”, в котором на наглядных примерах рассказывается, как пользоваться возможностями Spring Security, не запутываясь на каждом шагу и не зарабатывая себе головную боль.
Доклад публикуется тремя частями. В первой части было рассказано об основных подходах к созданию цепочек фильтров, а также разработан простейший фильтр. Во второй части мы расскажем об Authentication объектах и продемонстрируем, как разработать специализированный фильтр для обеспечения доступа программы-робота к основному приложению.
Привет! Меня зовут Александр, я iOS-разработчик в IT-компании SimbirSoft. В этой статье я расскажу, как интегрировать Yandex SmartCaptcha в iOS-приложение — от подготовки до решения возможных трудностей.
Настройка Yandex SmartCaptcha на первый взгляд может показаться простой задачей, но на практике она требует внимательности, точной настройки и понимания архитектуры приложения. Я поделюсь личным опытом внедрения этого инструмента, объясню, какие нюансы стоит учесть, а также как избежать ошибок.
Материал предназначен для iOS-разработчиков, у которых уже есть базовые знания мобильной разработки, и кто хочет быстро и корректно внедрить капчу от Яндекса в свое iOS-приложение.
Привет, Хабр! Сегодня хочу поговорить о том, как компании-разработчики сами себе «ставят палки в колеса» — выбирают неэффективные модели лицензирования собственного ПО и теряют выручку. Казалось бы, что сложного? Настроил защиту от несанкционированного использования, прикрутил проверку лицензий, добавил пару условий в договор — и готово. Но на практике ошибки в лицензировании обходятся дорого: теряется выручка из-за пиратства и негибких продаж, растут операционные расходы, а клиенты уходят к конкурентам. Почему это важно? Лицензирование — не просто «замок» на софте. Это инструмент монетизации, который защищает код от нелегального использования, формирует стабильный доход (подписки, продажа обновлений и модулей ПО), автоматизирует процессы и делает конечных пользователей счастливыми.
Привет, Хабр!
В статье рассмотрим, как реализовать Template Method-паттерн в Go без наследования, зачем он вообще нужен.
Привет, Хабр!
В этой статье рассмотрим, как и почему в Kubernetes может сломаться service discovery — даже когда DNS вроде бы работает.
Привет, Хабр! Меня зовут Александр Антипов, я продакт-оунер MWS Tables.
Современный бизнес требует быстрых и эффективных решений для управления проектами, задачами и данными. И далеко не всегда есть возможность разрабатывать с нуля сложные системы или интегрировать дорогостоящий софт. Именно для таких случаев создан MWS Tables, чтобы быстро делать приложения без привлечения разработчиков.
В прошлом посте я рассказал, как MWS Tables помог внедрить единый реестр для работы с качеством данных, централизовать управление проектами и заменил таск-трекер. Сегодня будут еще три кейса: создание общего календаря и списка задач в распределенных региональных командах, единая система допусков и внедрение механики рейтингов.