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

Пользователь

Отправить сообщение

Почему я предпочитаю исключения, а не значения ошибок

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

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

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

Давайте рассмотрим пример, в котором применено защищённое от ошибок целочисленное деление:

int safeDiv(int a, int b) {
   if (b == 0)
      throw Div0(); // Исключения передаются особым образом
   return a / b; // Теперь-то всё абсолютно безопасно, ведь так?
}

Новые языки программирования склонны применять сообщения об ошибках в функциональном стиле и кодировать ошибки в возвращаемый тип. Например, Go кодирует ошибку в возвращаемый тип при помощи кортежа (res, err), а Rust возвращает Result<T, E> — тип-сумму результата и ошибки.
Читать дальше →
Всего голосов 64: ↑56 и ↓8+66
Комментарии213

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

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

В этой статье рассказывается о процессе исследований и разработки моей новой системы датчика OptiGap — основной части моей работы для получения степени PhD. Я пишу статью в формате рассказа, чтобы поделиться своими рассуждениями в процессе принятия решений, которые привели к готовой реализации. Надеюсь, она даст какое-то представление о незнакомом многим мире исследований для PhD, а также может заинтересовать тех, кому любопытен этот процесс. Технические подробности, симуляции и предыдущие исследования по теме можно прочитать в моей диссертации.
Читать дальше →
Всего голосов 47: ↑47 и ↓0+62
Комментарии7

Зачем в iPhone чип, который убивает FaceID

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

Разбирался я в низкоуровневой работе камер iPhone, и дошёл до FaceID — системы распознавания лиц, используемой Apple для разблокировки смартфона. И наткнулся внутри на интересную вещь: чип, единственное предназначение которого в том, чтобы вывести из строя FaceID. Навсегда.

О том, как в iPhone вообще работает FaceID, где там этот чип стоит, что именно он делает, зачем его сделали таким злым, и как в ремонте справляются с этой напастью — под катом!

Читать далее
Всего голосов 629: ↑628 и ↓1+746
Комментарии177

Как Linux создаёт и подсчитывает сокеты

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

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

Читать далее
Всего голосов 33: ↑32 и ↓1+44
Комментарии2

Entity Framework c предустановленной БД в вашем приложении на .NET MAUI

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

Данный текст является логичным продолжением статьи Entity Framework c Code-First миграциями для .NET MAUI. В ней рассказывалось как подключить и использовать, возможно, уже привычную вам по работе с апи технологию работы с БД Entity Framework теперь в вашем мобильном приложении.


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


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


Кладем ваш файл базы данных в Resources/Raw/Db/app.db3 — Build Action: MauiAsset. Замечательно, файл уже с нами.


Теперь, чтобы его реально использовать при исполнении приложения, надо

Читать дальше →
Всего голосов 3: ↑2 и ↓1+3
Комментарии2

Динамический рендеринг Angular-компонентов

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

Привет Хабр. На связи Даня, Angular-разработчик из команды Т-Бизнеса.

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

Добро пожаловать под кат!

Читать далее
Всего голосов 6: ↑6 и ↓0+7
Комментарии4

Сложно о простом. Транспортный уровень (L4) модели OSI

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


Приветствую, коллеги! Меня зовут ProstoKirReal, и сегодня мы продолжим наше путешествие по модели OSI, обсудив транспортный уровень (L4). Этот уровень играет ключевую роль в обеспечении надежной передачи данных.
Читать дальше →
Всего голосов 25: ↑22 и ↓3+25
Комментарии11

Обходим ASLR для Linux по-новому

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


Ядро Linux широко распространено во всем мире как на серверах, так и на пользовательских машинах, на мобильных платформах (ОС Android) и на различных «умных» устройствах. За время существования в ядре Linux появилось множество различных механизмов защиты от эксплуатации уязвимостей, которые могут существовать как в самом ядре, так и в приложениях пользователей. Такими механизмами является, в частности, ASLR и stack canary, противодействующие эксплуатации уязвимостей в приложениях.

Читать дальше →
Всего голосов 50: ↑50 и ↓0+50
Комментарии6

.NET: итерируемую в foreach коллекцию изменять нельзя. Или…

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

Сегодня поговорим о неочевидной особенности некоторых коллекций в .NET. Долго вокруг да около ходить не будем и начнём с задачки на самопроверку.

Читать далее
Всего голосов 34: ↑33 и ↓1+37
Комментарии27

Переход на .NET Aspire из отдельных проектов. Часть 2. Локальное развертывание с помощью Aspire

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

Эта статья является продолжением краткого туториала по переводу приложений на .Net Aspire. В ее рамках будет рассмотрено развертывание Aspire приложения в локальном кластере Kubernetes.

Читать далее
Всего голосов 8: ↑6 и ↓2+6
Комментарии4

Переход на .NET Aspire из отдельных проектов. Часть 1. Перевод приложений в Aspire

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

Не так давно в свет вышел .NET Aspire - продукт для упрощения создания и публикации микросервисных приложений от Microsoft. В рамках данной статьи будет рассмотрен ручной переход на Aspire в "игрушечном" случае: пара небольших проектов, один из которых обращается к Postgres'у.

Читать далее
Всего голосов 8: ↑6 и ↓2+4
Комментарии2

.NET Aspire — империя дотнета наносит ответный удар

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

Когда я первый раз услышал про .NET Aspire, я подумал что это какая-то очередная лажа от Майкрософта, про которую все забудут через неделю.

Особенно, учитывая какую дичь часто завозят в шарп (например те же ужасно спроектированные Primary Constructor'ы про которые я писал, или вот прикол-пропозал от самого Тоуба). Так что ожидания у меня, честно говоря, были ниже нуля.

Но попробовав его лично, я был, честно говоря, шокирован. Трепещите, жависты!! Трепещите гошники! Трещепищите питонисты - такого вы еще точно не видели.

Я даже представить не мог, что DevEx можно сделать настолько офигительным.

Узнать про Aspire без смс и регистрации
Всего голосов 38: ↑36 и ↓2+42
Комментарии51

Запускаем .NET на RISC-V и разрабатываем IoT приложение для Sipeed Lichee RV

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров4.3K
.NET nanoFramework Weatherstation

До недавнего времени разрабатывать IoT приложения на C# можно было только для компьютеров построенных на архитектуре ARM или x86. Поддержка RISC-V процессоров для платформы .NET уже давно в стадии разработки. В начале этого года был представлен не официальный .NET 8.0 SDK, который уже сейчас вы сможете запустить на RISC-V процессоре под ОС Debian/Ubuntu. В качестве платформы запуска возьмем одноплатный компьютер Sipeed Lichee RV на RISC-V процессоре Allwinner D1 (ядро Alibaba/T-Head Xuantie C906 RISC-V). В первой части поста рассмотрим установку .NET 8.0 SDK на Sipeed Lichee RV. Во второй, запустим приложение для работы с контактами GPIO и датчиком BME280 для замера температуры, влажности и давления.
Читать дальше →
Всего голосов 21: ↑21 и ↓0+28
Комментарии14

Почему для меня так важен алгоритм CORDIC

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

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

Перейду сразу к делу и скажу, почему я так сильно люблю этот алгоритм, а затем займёмся изучением принципов его работы. По сути, фактические операции CORDIC весьма просты — как я уже сказал, это сдвиги и сложение — но выполняет он их путём комбинирования векторной арифметики, тригонометрии, доказательств сходимости и продуманных техник компьютерных наук. Лично я считаю, что именно это имеют ввиду, описывая его природу, как «элегантную».
Читать дальше →
Всего голосов 87: ↑87 и ↓0+113
Комментарии27

Сравнение сборщиков мусора в Unity и .NET

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

В этой статье я хотел бы рассказать о различиях между сборкой мусора в Unity (IL2CPP) и .NET. Несмотря на то что IL2CPP существует более 10 лет, я до сих пор встречаю недоумение, когда беседа заходит на тему Garbage Collector (GC) касательно Unity. Считать реализацию GC в .NET, ровно как и в JVM, единственным существующим решением — не верно. А тем более принимать такую реализации как "по умолчанию" используемую в Unity — есть заблуждение. Надеюсь эта статья будет полезной, даст верное понимание и устранит заблуждения. Ну а в конце статьи затронем грядущие серьезные изменения в Unity.

Читать далее
Всего голосов 18: ↑18 и ↓0+21
Комментарии8

Префиксы is, has, can, should… в нейминге переменных и функций

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

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

Читать далее
Всего голосов 70: ↑66 и ↓4+71
Комментарии56

Мощный инструмент для работы с GCOV покрытием кода C/C++

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

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

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

Но пусть это все равно лежит здесь, возможно эта статья будет кому-то полезна в качестве методического материала или HOWTO. Все, сказанное ниже является продуктом моего текущего опыта разработки и не претендует на идеальное решение.

Читать далее
Всего голосов 6: ↑6 и ↓0+9
Комментарии15

Лазеры, сервопривод, WiFi MESH-сети и сноуборд

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

Первое мое воспоминание про горные лыжи было примерно в 5 летнем возрасте. Я лечу вниз по горке, а ко мне неумолимо приближается бетонный забор. Несмотря на эту неприятность, я все равно освоил горные лыжи, благо жили мы недалеко от гор. Правда после поступления в Москве в институт временно пришлось забыть об этом. Но оказалось, что и в Москве тоже есть горки и я решил уже попробовать более модное увлечение - сноуборд. И первые самостоятельно заработанные 300$ были потрачены на покупку самого дешевого комплекта. Ближе к окончанию института я уже уверенно катался, так что даже попробовал поучаствовать в реальных соревнованиях. В результате у меня теперь есть даже FIS код и суммарно 7,3 балла, набранные в сезоне 2002-2003 годов, когда я сумел три раза доехать до финиша без падений и гордо занять последние места в результирующих списках. Это была вершина моей спортивной карьеры, после чего я решил дальше сосредоточиться на профессии, полученной в институте - электронике. А сноуборд и горные лыжи окончательно перевести в разряд хобби.

Читать далее
Всего голосов 23: ↑23 и ↓0+26
Комментарии29

Что учесть если используешь SignalR и захочешь масштабировать .Net-приложение?

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

Все мы любим «магию», которую дает нам такой инструмент как SignalR и с удовольствием внедряем это в проекты.

Конечно, кто откажется от динамики, мгновенного отклика на действия и мигающих иконочек с подписью «что же делает система в данный момент и не стоит ли перезагрузить страницу чтобы клацнуть ее еще раз?» ?

Однако и тут есть пара подводных камней, с которым я с командой столкнулся на продакшне...

Читать далее
Всего голосов 10: ↑9 и ↓1+13
Комментарии13

NET hosting. Обзор вариантов и пример деплоя приложения

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

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

Читать далее
Всего голосов 12: ↑10 и ↓2+11
Комментарии8
1
23 ...

Информация

В рейтинге
2 514-й
Зарегистрирован
Активность