Как стать автором
Поиск
Написать публикацию
Обновить
-1
0

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

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

Bluetooth Low Energy: подробный гайд для начинающих

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

Создание кастомного сервиса и тем более клиента Bluetooth Low Energy – прогулка по граблям с завязанными глазами. По крайне мере так было для меня 4 года назад, когда я только начинал работать с BLE-устройствами. Сейчас почти каждый мой проект предусматривает использование этого протокола, поэтому в свое время пришлось в нем долго и мучительно разбираться. 

Разложить все по полкам помогла книга Мохаммада Афане "Intro to Bluetooth Low Energy" и серия постов на Novel Bits. Лично для меня эта книга стала настоящим открытием. Изначально я делал ее перевод на русский для своих коллег, не имеющим опыт работы с BLE. С согласия автора (огромное ему спасибо) решил опубликовать свою работу здесь. Надеюсь, перевод окажется полезным.

Это первая часть перевода (всего их будет 5), которая рассказывает, что такое BLE, ее возможности и отличия от Bluetooth Classic и описывает архитектуру протокола.

Читать далее

Теория типов

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

Мы так привыкли к типам, что редко задаёмся вопросом, что же они такое на самом деле? А главное - почему возникла необходимость в их использовании? Этот поверхностный обзор сделан для того, чтобы продемонстрировать, как типы и другие связанные абстракции являются следствием из обобщения условий различных задач.

Что можно узнать из этой статьи?

Технология FPGA для тысячи применений

Время на прочтение4 мин
Количество просмотров66K
Трудно представить другую технологию, которая настолько разносторонняя как FPGA.
FPGA — Field-Programmable Gate Array, то есть программируемая логическая матрица (ПЛМ), программируемая логическая интегральная схема (ПЛИС). Это технология, при которой создается микросхема с набором логических элементов, триггеров, иногда оперативной памяти и программируемых электрических связей между ними. При этом программирование FPGA оказывается похоже на разработку электрической схемы, а не программы. Пользуюсь данной технологией давно и попробую описать самые полезные с моей точки зрения применения по мере их усложнения.

1. Помощь при разводке плат


Многие наверняка сталкивались, что центральный процессор, память, другие многоногие микросхемы создавали люди, редко задумывающиеся о том, как они будут соединяться на печатной плате. Протянуть шину разрядностью 32 или 64 бита — задача не решаемая без многослойной платы. Но стоит поставить между микросхемами FPGA как разводка становится на несколько порядков проще:


И все это благодаря возможности внутренней перекоммутации сигналов внутри FPGA.
Читать дальше →

Почему здесь так жарко? Взламываем умный кондиционер

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


Многие производители кондиционеров сегодня выпускают устройства, которые можно подключать к Wi-Fi и управлять ими через приложение. Включение кондиционера и охлаждение воздуха дома, пока вы едете с работы — это настоящая мечта. Однако пользоваться приложениями производителей часто не так удобно, как более совершенным ПО для автоматизации дома, которое может интегрироваться с голосовыми помощниками Google и Amazon. Поэтому, когда один из нас переехал в квартиру с умным контроллером кондиционера, одной из приоритетных целей стал взлом этого устройства для работы с Home Assistant.

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

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

Яндекс выводит за границу заработанные в России деньги, пока это возможно

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

Яндекс отчитался за 2 квартал (и первое полугодие) 2023 года, и в отчете я обнаружил много интересного. Я уже на протяжении 4 лет разбираю каждый квартал отчетность Яндекса, и это 16-й по счёту отчет (и, возможно, это последний разбор в общем доступе). Так что я уже знаю, куда смотреть и что там можно увидеть.

Читать далее

Лучшие головоломки, про которые не знает никто*

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

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

Огромный недостаток головоломки по сравнения с какими-нибудь ММОРПГ — очень малая реиграбельность. Я всегда думал, что технология стирания памяти в «Вечном сиянии чистого разума» использовалась не по назначению. Вместо того, чтобы изжить из воспоминаний какую-то женщину, не лучше ли забыть своё прохождение любимой игры, а потом пройти её заново? К сожалению, пока что это фантастика. Поэтому всё, что я могу — изнывая от ностальгии, в письменной форме вспоминать все эти прекрасные вещи, вернуться к которым мне, увы, не суждено.

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

Суперэллипс — фигура, которую многие видят каждый день, но не догадываются об этом

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

Оглянитесь вокруг. Какие фигуры вы видите? Скорее всего, большинство фигур имеет либо прямые (острые, тупые) углы либо эллипсоидные (не всегда идеально круглые) границы. Однако, существуют и гибриды. Суперэллипсы — это семейство кривых, которые лежат где‑то между эллипсами и прямоугольниками.

Читать далее

Интересные приемы программирования на Bash

Время на прочтение6 мин
Количество просмотров133K
Эти приемы были описаны во внутреннем проекте компании Google «Testing on the Toilet» (Тестируем в туалете — распространение листовок в туалетах, что бы напоминать разработчикам о тестах).
В данной статье они были пересмотрены и дополнены.
Читать дальше →

Создание API: в рамку и на стену

Время на прочтение5 мин
Количество просмотров57K
Каждый программист — проектировщик API. Хорошие программы состоят из модулей, а протокол взаимодействия модулей — это тоже API. Хорошие модули используются повторно.

API — это большая сила и большая ответственность. У хорошего API будут благодарные пользователи; поддержка плохого превратится в кошмар.

Публичный API — не воробей, опубликуешь — не уберешь. Есть только одна попытка сделать все правильно, поэтому постарайся.

API должно быть легко использовать, но сложно использовать неправильно. Сделать что-то простое с помощью такого API должно быть просто; сложное — возможно; сделать что-то неправильно должно быть невозможно, или, по крайней мере, трудно.

API должен описывать сам себя. Изучение кода на таком API не вызывает желания читать комментарии. Вообще, комментарии редко нужны.

Перед разработкой API собери требования с долей здорового скептицизма. Осознай общие задачи и реши их.

Оформляй требования как шаблоны использования API. Сверяйся с ними в процессе проектирования.
Читать дальше →

Робот-не-пылесос с ножом или как мы делали смарт-ножницы на колесах

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

Эта история началась в октябре 2019 года. К нам пришел владелец  крупного производства натяжных потолков и сказал: «Хочу максимально оптимизировать производство, избежать ошибок, вызванных человеческим фактором, повысить производительность и точность, не теряя качества готовой продукции». Подумав и оценив свои силы, мы решили попробовать создать робота-раскройщика. Мы - это тимлид, 3 программиста, инженер-конструктор и безопасник

Читать далее

Что может быть проще (сложнее), чем упорядочивание чисел?

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

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

>>> "120" <= "1132"
False

Сравнение двух чисел на Brainfuck оставим в качестве упражнения для читателя.

Ой. Ну, строго говоря, это строки, а не числа, а строки обычно сортируются лексикографически. Но это всё-таки числа, хотя и представленные в виде строк. Это может показаться глупым, но такая проблема очень распространена в интерфейсах пользователя, например, в списках файлов. Именно поэтому нужно отбивать числовые имена файлов нулями (frame-00001.png) или использовать описания, сохраняющие лексикографический порядок, например, ISO 8601 для дат.

Впрочем, я отклонился от темы. Предположим, числа действительно представлены числовыми типами. Тогда всё просто и <= отлично работает:

>>> 120 <= 1132
True

Но так ли это?
Читать дальше →

Электронный конструктор, не бьющий током

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

Дайте угадаю: вы в детстве заворожённо рассматривали печатные платы? Вам было любопытно узнать, как работает этот мини-город из разноцветных деталек? Возможно, у вас был опыт сборки электронных схем по книгам Борисова и Свореня? Советский сорокаваттный паяльник, кусочек канифоли в спичечном коробке? А ещё штаны с намертво влипшей в ткань каплей припоя?

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

Заражённый разум

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

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

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

Читать далее

Земля круглая, вода мокрая, JPEG шакалит, небо голубое… Или нет?

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

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

Читать далее

Заблуждения программистов относительно времени

Время на прочтение3 мин
Количество просмотров92K
За последние пару лет я потратил много времени на дебаггинг чужих тестов. Это была интересная работа, иногда расстраивающая, но всегда поучительная. Кто-то может подумать, что в тестах нет багов, но конечно баги есть везде, и тесты не исключение.

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

На самом деле, я повидал так много заблуждений, которые оставляют след в чужих (и моих собственных) программах, что посчитал полезным составить список самых частых проблем.
Читать дальше →

Заблуждения программистов о времени

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

Музей-скансен эпохи Средневековья в Дании в режиме обычной работы (слева) ставит целью воссоздать повседневную жизнь города на стыке XIV и XV веков. Для съёмок фильма (справа) он «погрязнел»

Для киносъёмок в музей под открытым небом Middelaldercentret внесли несколько изменений. Вместо аккуратной каменной улицы развели неприятную кашицу из грязи, не самые роскошные стеклянные окна прикрыли досками и развесили везде выцветшее тряпьё. Здания как следует измазали чем-то коричневым, кое-где зачем-то перемешав субстанцию с соломой. В случайное здание воткнули факел, а не попытались изобразить лучину или фонарь.

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

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

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

Заблуждение 1. В сутках 24 часа или 86 400 секунд


Иногда и кое-где стрелки часов переводят, создавая сутки длиной в 23 и 25 часов — всё очевидно. Будет неплохо углубиться в случаи поэкзотичней.
Читать дальше →

Почему умножение матриц такое

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

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

Читать далее

Введение в алгоритм A*

Время на прочтение10 мин
Количество просмотров197K
При разработке игр нам часто нужно находить пути из одной точки в другую. Мы не просто стремимся найти кратчайшее расстояние, нам также нужно учесть и длительность движения. Передвигайте звёздочку (начальную точку) и крестик (конечную точку), чтобы увидеть кратчайший путь. [Прим. пер.: в статьях этого автора всегда много интерактивных вставок, рекомендую сходить в оригинал статьи.]


Для поиска этого пути можно использовать алгоритм поиска по графу, который применим, если карта представляет собой граф. A* часто используется в качестве алгоритма поиска по графу. Поиск в ширину — это простейший из алгоритмов поиска по графу, поэтому давайте начнём с него и постепенно перейдём к A*.

Что будет, если от разработчиков не отстать: умирающая команда

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


Источник

15 человек, из них — один руководитель проекта, три фронта, два бэка, три аналитика, девопс. Симптомы обычные: процессы всем не нравятся, соседи — козлы, потому что не то и не так делают, а как нужно — не знают, ответственности ни на ком толком нет ни за что.

Вроде бы когда-то это был настроенный конвейер, но теперь его куски — как будто в разных зданиях. Особо не заботятся о том, что было «до» и что будет «после». А если всё падает, то люди поднимают руки: «Я не виноват. Я не знаю, как поднять».

Проект — внутренний банка, он нужен для улучшения работы внутри компании. Традиционных решений в кровавом энерпрайзе — два: нанять новую команду (но вгружать мидла на проект такой сложности — три-четыре месяца) или же оставить проект на поддержке, через два года найти ему замену, а команду тихо похоронить в подвале. Точнее, не так: те, кто плывет по течению и не заботится о карьере, остаются тихо сидеть «на пенсии», то есть в бесконечной поддержке проекта. А самые проактивные тут же перейдут в другие команды или другие компании.

Почему процессы разваливались? На первый взгляд, потому, что была куча ненужных совещаний и встреч с теми, кого разработчики вообще не должны были видеть. Плюс местами странноватые KPI. Как это ни странно, но если психологически давить на разработчика пару лет, то ничем хорошим это не закончится. Руководство подразделения дало мне карт-бланш на исправления, и я начал разбираться, что же случилось.
Читать дальше →

Как НЕ надо строить надежные системы

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


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

Информация

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

Специализация

Backend Developer, Frontend Developer
Lead
Git
Linux
Python
React
TypeScript
JavaScript
Ansible
Rust