Search
Write a publication
Pull to refresh
1
0
Sergey Kaleev @skaleev

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

Send message

Настройка location в Angie. Разделение динамических и статических запросов

Level of difficultyEasy
Reading time6 min
Views1.9K

В этой статье погрузимся в основы конфигурации веб‑сервера Angie — директиву location. Она используется во всех конфигурациях при работе с HTTP‑модулем и отвечает за разделение настроек обработки запросов по URL. В том числе, с помощью location происходит разделение запросов на статические и динамические. Начнём с последнего: разберёмся, что такое динамические и статические запросы.

Читать далее

Диспетчеризация склада за один день? Такое вообще бывает?

Reading time7 min
Views2.8K

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

Заказчик поставил задачу: срочно внедрить систему диспетчеризации и снизить риски, связанные с человеческим фактором. Инженеры взялись за работу — и за один день превратили склад в Бухаре в современный объект с онлайн-контролем. Рассказываем, как это удалось.

Читать далее

Разбор уязвимости умного Bluetooth-замка

Level of difficultyEasy
Reading time6 min
Views3.8K

Привет, Хабр! Сегодня предлагаем разобрать успешный взлом коммерческого умного замка с поддержкой Bluetooth, который открывается по отпечатку пальца или через беспроводное соединение. Здесь будет реверс‑инжиниринг мобильного приложения, манипуляции с API‑запросами и перехват протокола связи Bluetooth Low Energy (BLE).

Читать далее

Проектирование Информационных систем. Часть 5. Формализация потребностей заказчика

Reading time16 min
Views1.7K

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

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

Читать далее

Дескрипторы Python. Подробное руководство

Level of difficultyHard
Reading time34 min
Views7.3K

Привет, хабр! В этой статье хочу рассказать вам про дескрипторы в python. Покажу как и где их применять, а также расскажу о некоторых особенностях, которые могут не знать даже опытные разработчики. Надеюсь многие смогут найти что-то новое для себя.

Читать далее

Электронная нагрузка для разряда аккумуляторов на микроконтроллере PIC16F628A

Level of difficultyMedium
Reading time16 min
Views5.5K


Привет, Хабр! У данного микроконтроллера отсутствует встроенный аналогово-цифровой преобразователь (АЦП), зато есть цифро-аналоговый (ЦАП) и компараторы. Это позволяет использовать PIC16F628A для управления разрядным устройством с довольно продвинутым функционалом.
Читать дальше →

Веб-воркеры — многопоточность в JavaScript

Level of difficultyMedium
Reading time8 min
Views4.3K

Даже самые зелёные новички в вебе знаю, что скрипты JS, нужно располагать в самом низу страницы перед закрывающим тегом `` и всё знаю что это повышает скорость загрузки страницы. Но Вы когда-нибудь задумывалась почему оно так?

JavaScript по своей природе однопоточный язык, но мало того, он делит этот единственный поток сразу с HTML и CSS. Это приводит к тому, что встречая тег <script>, браузер начинает, исполнять его код, при этом останавливая дальнейшую обработку HTML и CSS и в результате пользователь наблюдает белый экран, вместо сайта, до тех самых пор пока, браузер не закончит с кодом JavaScript. Именно потому убирая подключения скриптов, в самый конец страницы, мы даём интерфейсу сайта максимально быстро погрузится и не бесить пользователей белой простынёй.

Но подобный подход годен не везде, иногда жизненно необходимо, чтобы код JS, начал исполнение как можно раньше. Да и при подключении в самом низу, крупный JS-бандл, может здорово подкосить перфоманс сайта. Как быть в таких ситуациях? Смирится с тем что пользователи будут испытывать определённый дискомфорт во время загрузки сайта? Конечно же нет, можно попробовать вынести наш код в веб-воркеры!

Так что такое эти ваши веб-воркеры?

Летнее чтение на английском: небанальные книги для каждого уровня и советы, которые помогут полюбить чтение

Level of difficultyEasy
Reading time4 min
Views21K

Привет! Я Маша Фадеева, методист и преподаватель курсов английского языка в Практикуме. В этой статье хочу поделиться своими любимыми книгами и комиксами на английском — теми, которые с удовольствием читала сама, а теперь рекомендую студентам и вам.

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

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

Читать далее

Об (отсутствии) синтаксической поддержки обработки ошибок в Go

Level of difficultyEasy
Reading time10 min
Views5K

Программисты на Go уже давно и долго жалуются на слишком многословную обработку ошибок. Все мы близко (а иногда и болезненно) знакомы со следующим шаблоном кода:

x, err := call()
if err != nil {
// обработка err}

Проверка if err != nil встречается настолько часто, что может становиться объёмнее остального кода. Обычно это происходит в программах, выполняющих много вызовов API, в которых обработка ошибок рудиментарна и они просто возвращаются. Некоторые программы в итоге выглядят примерно так:

func printSum(a, b string) error {
x, err := strconv.Atoi(a)
if err != nil {
return err
}
y, err := strconv.Atoi(b)
if err != nil {
return err
}
fmt.Println("result:", x + y)
return nil }

Из десятка строк кода тела этой функции реальную работу выполняют только четыре (вызовы и последние две строки). Остальные шесть строк — это шум. Код слишком многословен, поэтому неудивительно, что жалобы на обработку ошибок уже годами находятся на вершине списков в опросах разработчиков. (Какое-то время жалобы на обработку ошибок обгоняла только досада из-за отсутствия дженериков, но теперь, когда Go поддерживает дженерики, обработка ошибок снова вернулась на первое место.)

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

Читать далее

Как построить свою ферму устройств и упростить работу с устройствами и эмуляторами: делимся опытом создания DeviceHub

Level of difficultyEasy
Reading time11 min
Views2.2K

Без качественного и ответственного тестирования не может быть сложного продукта. Для такого тестирования нужен большой парк устройств. Это позволит находить баги до релиза и выдавать качественный продукт. А ещё — максимально оперативно реагировать на обращения пользователей в поддержку и обеспечивать ещё большую стабильность в работе.

Читать далее

Корпоративная система обучения «своими руками» при небольшом бюджете

Reading time12 min
Views449

Сегодня на просторах интернета можно изучить интересные статьи о реализации современных HR-проектов, обучающих технологичных платформах, необычных деловых играх (они же – бизнес-симуляции, квизы, кэмпы и многое другое) и получить много креативной информации. Для HRD эти статьи и рекомендации понятны, интересны и полезны. Но когда я читаю комментарии к таким статьям, то вижу, что сотрудникам чаще всего не интересно любое обучение и поступают рекомендации авторам таких статей «не мешать работать».

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

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

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

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

Читать далее

Структурированные логи + локальный стек вызовов: эволюция обработки ошибок в Go

Reading time1 min
Views3K

return fmt.Errorf(«otherMethod %w with val %v», err, val)
}
return nil
}


Проблемы такого подхода:
— **Дублирование названий методов** в сообщениях об ошибках
— **Ручное добавление метаданных** (аргументы, переменные) в каждое место
— **Сложность отслеживания** места возникновения ошибки при нескольких точках выхода
— **Засорение кода** — повторяющийся boilerplate
— **Отсутствие структуры** — все метаданные упакованы в одной строке

Что если объединить мощь структурированного логирования (`slog`) с автоматическим сбором локального стека вызовов. Результат — чистый код и информативные логи.
d

## Решение: структурированные ошибки + автоматический стек

**Было:**
```go
func (*SomeObject) SomeMethod(val any) error {
if err := otherMethod(val); err != nil {
slog.Error(err, «val», val) // дублирование
return fmt.Errorf(«someMethod %w with val %v», err, val)
}
return nil
}

Красно-зеленые деревья: обзор

Level of difficultyMedium
Reading time11 min
Views3.8K

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

Читать далее

Исчисление геометрии Часть 1. Алгебры Клиффорда

Level of difficultyMedium
Reading time21 min
Views4.5K

Это начало серии статей, дающих достаточно мягкое, но последовательное введение в геометрические алгебры, известные также как алгебры Клиффорда. Её можно считать естественным продолжением цикла «Изобретаем числа», в котором мы знакомились с разнообразной арифметической экзотикой: двойными, дуальными и гиперболическими числами, а так же с методикой расширения числовых колец и полей всевозможными добавками, мнимыми и не очень. Теперь мы эти добавки смешаем, не взбалтывая так, чтобы получающимися числами можно было моделировать целые геометрии.

Предлагаемый цикл я рассматриваю как дополнение к популярным введениям и обзорам геометрической алгебры, хотя оно может быть полезным и как первое знакомство с предметом. Его отличает больший чем обычно акцент на алгебраическую часть, а также следование оригинальному подходу Эрика Ленгэля (Eric Lengyel) к построению геометрических алгебр, который мне представляется наиболее последовательным и логически непротиворечивым.

Читать далее

Редизайн Яндекс Карт: почему мы перекрасили дороги

Level of difficultyEasy
Reading time16 min
Views82K

Не выразить словами, как волнительно и, чего уж там, страшно презентовать редизайн Яндекс Карт!

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

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

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

Читать далее

Как ускорить сложение и вычитание при помощи 2^51

Level of difficultyEasy
Reading time8 min
Views10K

Помните, как долго выполняется сложение на бумаге?

¹¹ ¹
6876
+ 3406
------
10282

Начиная с единиц, мы складываем 6 + 6 = 12, записываем 2 и переносим 1. Затем пошагово двигаемся влево, пока складываемые разряды не закончатся.

При реализации сложения больших чисел (например, от 264 и выше) обычно пишут код, похожий на этот алгоритм. Любопытно здесь то, что существует простой трюк, позволяющий существенно ускорить этот процесс на современных CPU.

Но сначала я задам вопрос: почему сложение столбиком мы начинаем с самого младшего разряда? Почему бы не начать слева?

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

Читать далее

RISC-V против x86 и ARM: когда открытая архитектура становится новым железным стандартом

Reading time9 min
Views6.9K

Современные процессоры - как сверхдержавы: у каждой архитектуры есть своя сфера влияния, которую они не готовы уступать никому другому. x86 давно закрепился на серверах и рабочих станциях, а ARM занял все мобильные и IoT-территории. Время от времени они сталкиваются на территориях друг друга, но глобально расклад сил не меняется вот уже многие годы. Всё так бы и оставалось, если бы на сцену не вышел RISC-V, который незаметно перерос из разряда хобби для гиков в настоящую альтернативу существующим архитектурам.

Читать далее

Сложный способ писать программы

Level of difficultyMedium
Reading time12 min
Views6.4K

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

Читать далее

«Кобра»: персоналка эпохи социализма, о которой вы не знали

Level of difficultyEasy
Reading time7 min
Views4.7K

30 августа 1988 года в Москве на ВДНХ открылась национальная выставка «РУМЫНИЯ 88». Посреди центрального павильона в специально огороженном пространстве, на возвышении, разместилась экспозиция продукции электронной промышленности. Здесь были представлены большие электронно-вычислительные машины, специальное оборудование для них, бытовая радиоэлектроника, медицинская техника, переносные средства связи и многое другое. Но самый живой интерес у посетителей вызывал стенд, на котором демонстрировался компактный персональный компьютер «CoBra» — первый и единственный ПК, полностью разработанный и собранный в Румынии.
Читать дальше →

Information

Rating
Does not participate
Location
Сургут, Тюменская обл. и Ханты-Мансийский АО, Россия
Date of birth
Registered
Activity