Pull to refresh
125
3.2
Александр Рябиков @rsashka

Системный архитектор

Send message

Взгляд на асинхронность в JavaScript: роль Event Loop, промисов и async/await

Level of difficultyMedium
Reading time10 min
Views13K

В этой статье мы сосредоточимся на ключевых элементах асинхронного программирования в Java Script: Event Loop, Event Bus, промисы и синтаксический сахар async/await. Разберемся, как эти концепции взаимодействуют между собой и как их использование помогает нам создавать более эффективные и отзывчивые веб-приложения.

Мы начнем с изучения роли Event Loop - механизма, ответственного за управление выполнением асинхронного кода. Затем мы перейдем к рассмотрению Event Bus, который обеспечивает коммуникацию между различными компонентами приложения. После этого мы ознакомимся с промисами и синтаксическим сахаром async/await, которые значительно упрощают работу с асинхронным кодом и делают его более читаемым и понятным.

Читать далее
Total votes 14: ↑10 and ↓4+13
Comments15

Протокол защищенного обмена для индустриальных систем CRISP: поддержка в устройствах Рутокен

Level of difficultyMedium
Reading time10 min
Views1.7K

Приветствую уважаемую публику Хабра от лица условно анонимного представителя компании «Актив», занимающейся производством небезызвестных средств аутентификации и электронной подписи.

В этой статье хотелось бы рассказать об одном из менее известных направлений деятельности подразделения Рутокен, связанного с обеспечением киберфизической безопасности. В рамках данного направления компания уже не первый год производит встраиваемые в управляющее и управляемое оборудование устройства линейки Рутокен Модуль. Не так давно в эти устройства (а заодно в токены и смарт-карты Рутокен ЭЦП 3.0) добавилась поддержка протокола CRISP, и это отличный повод рассказать и о самом протоколе, и о принципах интеграции устройств Рутокен Модуль, и об организации процессов разработки в компании.

Читать далее
Total votes 7: ↑7 and ↓0+7
Comments8

Julia. Метапрограммирование и макросы

Level of difficultyMedium
Reading time20 min
Views2.2K

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

Механизм макросов используется в Julia довольно часто. Макрос при использовании начинается с символа @ и имеет вид @show, @benchmark… А также, в неявной форме, макросами являются регулярные выражения r"[a..z]" (это макрос с полным именем r_str), а также многочисленные другие способы применения, включая примеры Modia.jl / Unitful.jl с макросом u_str, где физическая величина «вшита» в число:

L = 0.8u"m",
m = 1.0u"kg",
d = 0.5u"Nms/rad",
g = 9.81u"m/s^2",

Читать далее
Total votes 13: ↑13 and ↓0+13
Comments0

Переворачивающиеся при умножении числа

Level of difficultyMedium
Reading time7 min
Views21K

Здравствуйте!

Расскажу о серии задач, которая случайно возникла в процессе решения другой задачи. Мне на глаза попалось равенство:

81 * 27 = 2187

– Интересно, – подумал я. – А бывают ли ещё такие числа, чтобы цифры слева и справа повторялись?

Читать далее
Total votes 71: ↑71 and ↓0+71
Comments52

Оффлайновое использование Git

Level of difficultyEasy
Reading time6 min
Views13K

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

Система контроля версий Git вполне благополучно работает без удалённого репозитория. Такова её природа. При таком подходе можно создавать ветви репозитория, можно индексировать файлы и коммитить их в репозиторий. Всё выглядит так же, как и при обычной работе.

Читать далее
Total votes 27: ↑25 and ↓2+36
Comments17

Основы Rust: синтаксис и структуры данных

Level of difficultyEasy
Reading time5 min
Views14K

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

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

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

Читать далее
Total votes 34: ↑20 and ↓14+9
Comments15

Bootloader. Part 1. Нюансы Cortex-M, устройство памяти stm32 и преднастройка

Reading time8 min
Views10K

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

Читать далее
Total votes 29: ↑29 and ↓0+29
Comments31

Основы многопоточности в Rust

Reading time7 min
Views7.5K

Привет!

Думаю, уже всем известно, что многопоточность – это мастхев для большинства приложений.

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

Читать далее
Total votes 21: ↑19 and ↓2+19
Comments6

Отправляем и принимаем SMS с помощью SIM868 и Repka Pi

Level of difficultyMedium
Reading time19 min
Views3.9K

В этой статье мы продолжим рассказ об использовании модуля GSM/GPRS/GNSS Bluetooth HAT, созданного на базе SIM868, для беспроводной передачи данных в виде СМС-сообщений через Российский одноплатник Repka Pi. Такой способ даже в наше время актуален, когда нужно управлять автоматикой или другими устройствами, когда 2G/3G/4G и даже GPRS не позволяет это делать из за удалённости/помех или по иным причинам и важно обеспечить высокую надёжность управления.

Это третья статья данного цикла и из первой статьи вы узнали, как с помощью упомянутого модуля обмениваться данными между микрокомпьютером Repka Pi с JSON-сервисом, доступным в интернете, по каналу GPRS. Вторая статья рассматривает такой обмен глубже, на уровне AT-команд, передаваемых в модуль через UART.

Теперь настала очередь рассказать об отправке и приеме коротких текстовых сообщений SMS (Short Message Service). Этот канал передачи данных пригодится, например, в тех случаях, если в месте расположения вашего оборудования недоступен ни WiFi, ни GPRS.

Сообщения SMS можно передавать в текстовом режиме, а также в так называемом режиме PDU (Protocol Data Unit). В первом случае длина сообщения не может превышать 160 байт, и в нем не должно быть символов кириллицы. Пользоваться режимом PDU сложнее, но в нем нет этих недостатков.

Далее мы рассмотрим работу в обоих режимах как с помощью Python и библиотеки RoverConnect, так и через AT-команды.

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

Читать далее
Total votes 10: ↑9 and ↓1+12
Comments8

Что делать, если заказчик не заплатил за работу, а договора не было

Level of difficultyEasy
Reading time3 min
Views5K

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

Разберём конкретный пример: Елисей заказал у Прохора разработку простенького бота. ТЗ такое: «чтобы регистрировал на мероприятие участников, собирал ФИО и оплату за билет».

Заказ Елисей сделал популярной соцсети, в сообщениях.

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

Три дня и три ночи Прохор не спал, собрал бота - загляденье. Всё работает без багов. Написал Елисею: «Когда оплата? Я всё сделал».

Узнать, что дальше
Total votes 16: ↑7 and ↓9+3
Comments11

Как художники за рабочие места с ИИ борются

Level of difficultyEasy
Reading time8 min
Views6.5K

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

Наверное, поэтому все мы стали в той или иной мере, но скажем честно, опасаться ИИ заранее. А пока фантазировали, он зашёл не совсем оттуда, откуда его ждали. 

Читать далее
Total votes 14: ↑12 and ↓2+14
Comments10

Строительные кирпичики в языках программирования

Level of difficultyMedium
Reading time6 min
Views6.5K


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


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


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

Читать дальше →
Total votes 5: ↑2 and ↓3+2
Comments35

Маршрутизация по DNS на OpenWrt

Level of difficultyMedium
Reading time10 min
Views13K

Написать данную статью меня побудили следующие обстоятельства:

Обновление ОС на своём роутере до OpenWrt 23.05, сломавшее мой предыдущий setup, где я делал роутинг по GeoIP.

Многочисленные вопросы знакомых и в дискуссиях в постах на Хабре.

Статья на Хабре, по которой я стал делать и понял, что так делать не надо.

Читать далее
Total votes 11: ↑11 and ↓0+11
Comments41

Постоматы в оффлайн-магазине (или обратная связь для ДНС)

Level of difficultyEasy
Reading time3 min
Views6.6K


Прочитал материал "М.Видео: Нам всё равно" и невольно восхитился терпению его автора (Mike-M):


3 месяца и 40 обращений. Ровно столько времени и усилий мне потребовалось, чтобы прийти к выводу в заголовке статьи.

Тогда как мне хватило всего одного раза столкнуться с непониманием продавца-консультанта, чтобы решить написать обратную связь. Правда не для сети М.Видео, а для магазина ДНС, но это разница не принципиальная.


А поводом ко всему послужили установленные в магазине ДНС постоматы, хотя все началось с покупки SSD диска для ноутбука в магазине Озон :-)

Читать дальше →
Total votes 15: ↑8 and ↓7+5
Comments68

Биологическая нейросеть и эффективность обучения. Сравнение БИ с ИИ

Level of difficultyEasy
Reading time8 min
Views4K

Сейчас очень много размышлений над сильным ИИ, нейросетями, влиянием нейросетей.

Но у нас и так есть миллиарды сильных И в биологическом исполнении. Зачем грезить/бояться/строить теории относительно будущего с сильным искусственным интеллектом, когда есть огромное количество плохо настроенных БИ. Достаточно чуть улучшить их механизмы обучения, и мир станет значительно более приятным местом.
В связи с этим актуальным становится вопрос сравнения ИИ и обычного биологического интеллекта. Ведь если создатели перцептрона вдохновлялись и черпали идей из природы и биологи, то почему бы не черпать идеи из искусственных нейросетей и добавлять эти идеи к обычным.

Искусственные нейросети уже развиваются довольно давно и по некоторым показателям приближаются к биологическим. У chatgpt5 1 триллион синаптических контактов у человека 15 триллионов. Числа сопоставимые. Датасет с изображениями ИИ стал определять лучше человека уже в 2015 году. Если рассматривать количество слоев(6 в коре у человека), то ИИ давно уже обошел биологические нейросети. Вполне разумно посмотреть на свое создание.

Читать далее
Total votes 8: ↑6 and ↓2+8
Comments12

Размышления о структурном программировании

Level of difficultyMedium
Reading time3 min
Views21K


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


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


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

Читать дальше →
Total votes 45: ↑38 and ↓7+35
Comments80

Управление памятью и разделяемыми ресурсами без ошибок

Level of difficultyHard
Reading time7 min
Views4.1K


Мельком пробежал статью Синхронизация операций в .NET на примерах / Хабр, после чего захотелось поделиться с пользователями Хабра некоторыми мыслями насчет синхронизации доступа к объектам в различных языках программирования.


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

Читать дальше →
Total votes 3: ↑2 and ↓1+3
Comments38

Многорукие бандиты в задаче ритейла

Reading time9 min
Views3.4K

В настоящее время набирают популярность модели Reinforcement Learning для решения прикладных задач бизнеса. В этой статье мы рассмотрим подмножество этих моделей, а именно многоруких бандитов (multi-armed bandits). Также мы:

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

Читать далее
Total votes 11: ↑9 and ↓2+8
Comments5

Искусственный интеллект для игры в Тетрис

Level of difficultyMedium
Reading time5 min
Views5.4K

Работая над своей реализацией Тетриса на Javascript, я столкнулся с необходимостью тестирования игры. Тестировать хотелось в условиях, максимально приближенных к реальности, т.е., играя в него. Самому тратить часы на игру не было ни желания, ни времени. Я решил разработать бота, который будет играть в тетрис вместо меня. Такого бота можно оставить играть на несколько часов и отловить редкие ошибки, которые слишком трудно воспроизвести вручную. Кроме того, мне было просто интересно написать такого бота.

Читать далее
Total votes 26: ↑25 and ↓1+30
Comments33

Information

Rating
910-th
Location
Россия
Works in
Date of birth
Registered
Activity

Specialization

Embedded Software Engineer, Software Architect
Lead
C++
OOP
Linux
Programming microcontrollers
Embedded system
C
Qt
Software development