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

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

Send message

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

Level of difficultyMedium
Reading time20 min
Views2.1K

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
Views13K

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

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

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

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

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

Reading time8 min
Views9.9K

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

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

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

Reading time7 min
Views7.4K

Привет!

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

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

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

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

Level of difficultyMedium
Reading time19 min
Views3.8K

В этой статье мы продолжим рассказ об использовании модуля 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.4K

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

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

Читать далее
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
Views12K

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

Обновление ОС на своём роутере до 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

Обходим обязательную привязку телефонного номера к своей учетной записи на GitHub

Level of difficultyMedium
Reading time2 min
Views16K

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


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


Enable 2FA now. You'll be able to continue on with your work right after.

Но как обычно, дьявол в деталях. Ведь чтобы добавить аппаратный ключ нужно, чтобы двухфакторная аутентификация была УЖЕ активирована.


Другими словами, чтобы использовать аппаратный ключ, нужно предварительно включить двухфакторную аутентификацию с использование SMS (читай номера телефона), либо программы, которая привязана к сетевой учетной записи Googgle, Microsoft или другого сервиса и опять же с привязкой к номеру телефона.


И в данном случае фокус с отправкой SMS на левый номер какого нибудь сервиса для временных телефонных номер вряд ли будет хорошей идеей.


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

Читать дальше →
Total votes 23: ↑8 and ↓15-4
Comments112

Что вы знаете о символьном программировании?

Level of difficultyMedium
Reading time15 min
Views17K

Кликбейтный заголовок, риторический вопрос и обещание раскрыть тайну! Не самый лучший набор, но нормального названия для статьи мне в голову не пришло. Что же здесь все таки будет? Речь пойдет о реализации символьного программирования в Wolfram Language (WL). Я не буду рассказывать про отличия от других парадигм. А также здесь точно не будет общих определений. Вместо этого я попытаюсь ответить на несколько вопросов исходя из своего личного опыта и наблюдений.

Внимание! Я не математик и не знаю haskell и lisp! И буду рад если меня поправят настоящие математики, которые с ними знакомы.

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

Information

Rating
622-nd
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