Как стать автором
Обновить
1318.85

Программирование *

Искусство создания компьютерных программ

Сначала показывать
Порог рейтинга
Уровень сложности

.NET Digest #7

Время на прочтение5 мин
Количество просмотров71

Добро пожаловать на седьмой выпуск нашего дайджеста, посвящённого новостям и событиям в мире .NET! В этот раз мы расскажем про .NET 10 preview 2 и 3, новый релиз Mono, множество интересных статей и, конечно же, AI. Команда PVS-Studio рада представить вам подборку самых интересных и полезных материалов. Поехали!

Читать далее

Новости

Технический долг нельзя распланировать

Время на прочтение4 мин
Количество просмотров166
image


Будучи ведущим инженером, я неоднократно наблюдал следующую картину в разных компаниях.
  1. Руководители жалуются на недостаточно высокую скорость разработки. "Я просто хочу показывать день рождения пользователя на странице настроек. Почему на это уходит целый год?"
  2. Инженеры говорят, что техдолг мешает им двигаться вперед.
  3. Руководство поручает менеджерам «разобраться с техдолгом», чтобы повысить скорость разработки.
  4. Менеджеры начинают искать крупные проекты с технологическим долгом, чтобы добавить их в роадмап
Читать дальше →

Graceful Shutdown в Go на практике

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров232

Разберемся с сигналами от ОС, поработаем с таймаутами и контекстом в нашем HTTP сервере и шаг за шагом сделаем Graceful Shutdown в Go приложении.

Читать далее

Сlite — «zero-dependency» фреймворк для создания CLI

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров1.4K

Привет, Хабр! Это моя первая статья и я пишу ее в рамках конкурса «Сезон Open Source на Хабре». Сегодня я хочу рассказать о своем pet-проекте, Clite - это легковесный, фреймворк на Python для создания CLI.

Читать далее

Переизобретаем Ansible для Windows в условиях кабинета информатики

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров1.8K

Привет, Хабр!

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

Читать далее

Два подхода к интерпретации видимости в Rust

Время на прочтение12 мин
Количество просмотров763

В прошлом году, просматривая пул-реквесты по поводу компилятора Rust, я обратил внимание на #126013. В нём к некоторым пакетам компилятора добавлялась проверка unreachable_pub. Естественно, меня это заинтересовало, так как на тот момент я о такой проверке не знал. Но, разобравшись с её описанием, я тем более удивился, так как эта проверка показалась мне абсолютным нонсенсом! Поговорив об этом с авторами пул-реквеста, я осознал, что, пожалуй, достаточно странно представляю себе, как устроена видимость в Rust. Как минимум, я воспринимал её не «так, как она была задумана».

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

Читать далее

Radio Data System, SI4735 и Flipper Zero

Уровень сложностиСредний
Время на прочтение19 мин
Количество просмотров2.4K

Названия музыкальных произведений, которые проигрываются на радиостанциях, можно получать прямо из радиоэфира с помощью radio data system (англ. Radio Data System, RDS). Представим ситуацию, когда из радиоприёмника играет музыка, которая очень понравилась, и стало интересно кто её автор. Конечно, можно "зашазамить", но ведь это не наш метод. Интереснее будет взять микросхему si4735 и подключить её к Arduino. Почему бы и нет. Есть хорошая библиотека SI4735. При таком подходе самым сложным будет качественно оформить устройство в корпусе с кнопками для изменения частоты и громкости, а ещё дисплеем и батареей, чтобы устройство было автономным. Далее будет описан способ с использованием Flipper Zero и созданием простого шилда для него. Тогда не надо терять время на кнопки и дисплей, но нужно немного потрудиться и перенести программную часть на Flipper Zero.

Работа с микросхемами SI473x очень хорошо описана в статье журнала Хакер. Всё, что там написано, проверено и работает. Но там нет работы с RDS. Так что эту статью можно считать просто продолжением той статьи в части работы с RDS.

Читать далее

Как упростить себе освоение Rust

Уровень сложностиПростой
Время на прочтение13 мин
Количество просмотров5.6K

Я наблюдаю за тем, как люди снова и снова совершают одни и те же ошибки при изучении Rust. Ниже представлены мои мысли (в порядке важности) о том, как можно упростить себе процесс обучения. Моя цель — помочь вам сэкономить время и избежать разочарования.

Расслабьтесь

Перестаньте сопротивляться. Это самый важный урок.

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

Темп обучения не особо зависит от вашего ума и предыдущего опыта программирования. Главнее всего ваше отношение к языку.

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

Читать далее

readonly struct в C#

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров2.5K

Привет, Хабр!

Вы, вероятно, уже сталкивались с struct в C# и задумались: а зачем нужен readonly struct и когда он реально спасает, а когда, наоборот, начинает всё тормозить? Сегодня это и рассмотрим.

Читать далее

Архитектурные принципы Spring Security. Часть первая

Уровень сложностиПростой
Время на прочтение14 мин
Количество просмотров2K

Команда Spring АйО перевела и адаптировала доклад Даниэля Гарнье-Муару “Spring Security Architecture Principles”, в котором на наглядных примерах рассказывается, как пользоваться возможностями Spring Security, не запутываясь на каждом шагу и не зарабатывая себе головную боль. 

Доклад будет опубликован тремя частями. В первой части будет рассказано об основных подходах к созданию цепочек фильтров, а также разработан простейший фильтр с красивым названием “Es prohibido” (“Это запрещено” в переводе с испанского).

Читать далее

Секреты эффективного кодирования на Go для опытных и новичков: профайлинг, тесты, CI

Время на прочтение11 мин
Количество просмотров2.1K

За последние два года Go-сообщество выросло на 55% — с 3 млн до 4,7 млн разработчиков. Многие пришли в Go из других языков или только начинают свой путь в программировании. Без понимания идиоматики и ключевых особенностей языка даже опытные специалисты нередко сталкиваются с медленным кодом, дедлоками и утечками памяти.

Так что сегодня разберём, как организовывать пакеты, обрабатывать ошибки, безопасно работать с горутинами и каналами, оптимизировать аллокации и профилировать «горячие» участки через pprof. Советы одинаково пригодятся и опытным Golang-разработчикам, и тем, кто только начинает свой путь в Go.

Читать далее

Оптимизация производительности кода — это тяжёлый труд

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров2.1K

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

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

Читать далее

В поисках хорошего стиля. Часть 2. Пишем свой линтер на Go для golangci-lint

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров506

Привет! Меня зовут Артём Блохин, я Go-разработчик в команде интеграций Островка. Сегодня поговорим о линтинге кода.

Если бы «Сумерки» были про код, Эдвард — был линтером, а Белла — легаси-кодом, их диалог звучал бы так:

Читать далее

Ближайшие события

Играем в старый мобильный Minecraft… на ПК без эмуляторов?

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров1.5K

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

Читать далее

Прячем код по-настоящему: тёмные уголки обфускации R8 и ProGuard

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров1.3K

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

Подробности

Всё про Generic Math в C#

Уровень сложностиСложный
Время на прочтение21 мин
Количество просмотров4.1K


С момента своего релиза в C# 11 и .NET 7 Обобщённая Математика так и осталась тёмной лошадкой в глазах программистов. Разработчики не понимают и не используют эту фичу, статья же ответит на все вопросы и разложит всё по полочкам.

Рассмотрим с нуля концепцию Generic Math. Как она выглядит в C# и других языках программирования, почему вообще появилась. Также зароемся в «кишки» System.Numerics и узнаем, как применить в продакшне кровавого ынтэрпрайза.
Читать дальше →

Dockhost год в проде: как мы строим свою платформу хостинга приложений

Время на прочтение7 мин
Количество просмотров316

Всем привет! У нас знаменательное событие — Dockhost отмечает первый день рождения!

Год назад мы запустили в продакшн нашу платформу для запуска приложений в Docker контейнерах Dockhost.ru. Вроде год выглядит как совсем не большой срок, но для нашей команды это был яркий период, маленькая жизнь с кучей побед, факапов, достижений и драйва.

Меня зовут Евгений Бабий, я один из основателей платформы Dockhost. И в этой статье я хочу оглянуться назад и рассказать про наш путь в построении платформы: что мы задумывали, что в итоге получилось и к чему мы стремимся в будущем.

Читать далее

Шестидесятилетний заключённый и лабораторная крыса. F# на Godot. Часть 5. Ошибки и исключения

Уровень сложностиПростой
Время на прочтение13 мин
Количество просмотров600

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

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

C# и ФП пропагандируют разные подходы к ошибкам. F#, будучи на перепутье, испытывает влияние обоих. Можно много говорить про плюсы взаимного обогащения культур, но судя по публичным баталиям, это не совсем наш случай. Вместо синтеза я куда чаще наблюдаю эмоциональные взрывы в среде представителей то одного, то другого лагеря. Я не буду ввязываться в эту борьбу (в этот раз) и сосредоточусь на решении более насущной задачи. Мне нужно доработать интероп так, чтобы он соблюдал привычную систему распределения ответственности. Так что сегодня только рутина, без красивых ходов и эффектных бросков.

Читать далее

ООП для кота – моделируем кота через классы

Время на прочтение5 мин
Количество просмотров3.2K


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

А что может быть наглядней котофея? :-)) Поэтому, попробуем рассмотреть кота через объектно-ориентированное программирование (ООП) и его классы.

Итак, что же представляет собой кот с точки зрения ООП?
Читать дальше →

Голосовой и визуальный нейроредактор в Telegram созданный искусственными нейронными сетями, пример текущих возможностей

Уровень сложностиСредний
Время на прочтение21 мин
Количество просмотров927

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

Читать далее