Pull to refresh
4
0

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

Send message

Осваиваем 3-рублёвые микроконтроллеры PADAUK

Level of difficultyMedium
Reading time8 min
Views38K
image

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

Сказ о том, как я за год решил более 600 leetcode задач

Level of difficultyEasy
Reading time7 min
Views134K

Всем салют!

Хочу рассказать вам историю о том, как я начинал с уровня — «не могу решить даже 1 easy задачу из 10» до уровня — «могу решить каждую вторую medium задачу» и прошел несколько coding сессий в таких компаниях как Meta, Booking, Careem, Avito...

Читать далее

Осваиваем простейший микроконтроллер PIC. Часть 1

Reading time7 min
Views395K
Выбор микроконтроллера обычно осуществляется под необходимые задачи. Для изучения хорошо подойдет популярный МК с минимальным набором периферии: PIC16F628A.
Читать дальше →

Оптимизируя неоптимизируемое: ускорение компиляции C++

Level of difficultyMedium
Reading time7 min
Views8.5K

В этой статье речь пойдёт о повышении скорости компиляции библиотеки {fmt} до уровня библиотеки ввода-вывода Cи stdio.

Дня начала немного теории. {fmt} – это популярная открытая библиотека С++, представляющая более эффективную альтернативу С++ библиотеке iostreams и библиотеке Си stdio. Последнюю она обошла по целому ряду аспектов:

  • Безопасность типов с проверками форматирующих строк во время компиляции. Эти проверки включены по умолчанию начиная с С++ 20, и присутствуют в качестве дополнения для С++ 14/17. Форматирующие строки среды выполнения в {fmt} также оказываются безопасными, чего невозможно достичь в printf.
  • Расширяемость. Определяемый пользователем тип можно сделать форматируемым. При этом большинство типов стандартных библиотек, например, контейнеры и пакеты для обработки даты и времени, предлагают возможность форматирования изначально.
  • Производительность. {fmt} намного быстрее любой распространённой реализации printf, порой на несколько порядков (например, в форматировании чисел с плавающей запятой).
  • Возможность переноса поддержки Unicode.

Тем не менее одной из областей, в которой stdio по-прежнему опережала {fmt}, являлось время компиляции.
Читать дальше →

Pet-проект «Наручные часы на светодиодах»

Level of difficultyEasy
Reading time9 min
Views18K

Что стоит самому разработать электронные наручные часы. Можно ли сделать часы простыми и одновременно эффектными. Как совместить в одних часах отладочное средство для изучения программирования и полезный гаджет.

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

Про наручные часы со светодиодами

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

Reading time6 min
Views34K

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

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

Как польские математики взломали Энигму

Level of difficultyMedium
Reading time10 min
Views12K

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

Читать далее

Релиз RetroSpriteEditor 0.2.8 [open source]

Level of difficultyEasy
Reading time2 min
Views2.2K

Добрый день дорогие разработчики для NES (У нас же была Денди). Я занялся электроникой и пока не освоил нужных знаний, решил пописать на ассемблере для NES какие-нибудь игры и погонять байты туда-сюда. Я обнаружил, что для Linux нет нормального редактора и поэтому я написал свой редактор. Хочу показать его возможности, может кому-то будет интересно и я буду рад, если кто-то будет пользоваться кроме меня.

Итак, интерфейс. Я писал его на GTK4. Доступна версия для windows. Для Linux можно готовую сборку взять на flathub

https://flathub.org/ru/apps/io.github.xverizex.RetroSpriteEditor

А для Windows можно взять на github

https://github.com/xverizex/RetroSpriteEditor

Окно с открытым проектом выглядит так.

Читать далее

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

Reading time9 min
Views72K

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

(1) Школа. (2) Матанализ. (3) Аналитическая геометрия. (4) Линейная алгебра.

Все плейлисты, материалы, курсы в открытом доступе и бесплатны.

Читать далее

Как мы переводили проект на CMake

Level of difficultyMedium
Reading time12 min
Views8.8K

В статье мы расскажем о том, как переводили проект с рекурсивной сборочной подсистемы ЗОСРВ "Нейтрино", представляющей собой набор расширений инструмента GNU Make на сборочную систему CMake: с какими нюансами нам пришлось столкнуться, какие преимущества мы получили в результате перевода и как это повлияло на нашу команду разработчиков.

Читать далее

Как написать хороший генератор

Level of difficultyEasy
Reading time6 min
Views4.4K

В интернете невероятное количество статей о том "как написать свой генератор на С++20", но почти все они сводятся к новичковым хело вордам и почти ни одной статьи о том как написать хороший генератор. Что ж, это нужно исправлять!

next

How to send messages over sockets and create your own messanging protocols in C++

Level of difficultyMedium
Reading time28 min
Views9.6K

Network programming in C++ can be challenging. But even a greater challenge is to find educational content that will arm you with the knowledge on how to apply your networking skills in real applications.

In this article you can learn the basics of socket communication and many ways how you can design your internal messaging protocols.

Read more

Редактор коннектома

Level of difficultyEasy
Reading time13 min
Views2.6K

Приветствую, дорогие друзья! Хочу рассказать о своём проекте. Моё хобби это исследование нервной системы и мозга в целом и попытки провести реверс‑инжиниринг этих систем. Этому собственно и посвящены мои статьи на habr. И сейчас я пришел к идеи, что мне нужно разработать некий инструмент который бы упростил работу над моими поисками и изысканиями, и сделал бы их более доступными. Да, существует множество фреймворков на эту тему, но мне всё это не подходит, во‑первых, у меня сложился несколько альтернативный взгляд на проблему, во‑вторых, мне кажется я смогу сделать лучше и доступней.)

Более шести лет назад я презентовал статьёй на habr свой проект OpenTadpole. Это был редактор коннектома некой спайковой нейронной сети которая управляла телом головастика лягушки в симуляции среды. Этот проект показывает возможность формировать с помощью достаточно простых нейронов сложное рефлекторное поведение. Тут речь идет конечно только о безусловных рефлексах, без какого либо обучения. Интересным моментом для меня стало, то что многие интересовались есть ли web версия (это же проект сделанный на unity) или есть ли версия для Mac, linux. По существу, даже людям которым тема проекта была интересна и были обладателями windows не спешили что‑то скачивать, распаковывать, пробовать. И это понятно, куда удобнее просто пройти по ссылке и получить нужный опыт работы с редактором. К сожалению, web версию я не мог представить, так как использовал для симуляции жидкости сторонние плагины которые конфликтовали с компилятором под WebGL unity, ну очень уж капризный этот компилятор. С того момента зародилось идея сделать подобный редактор и делать его еще более доступным.

Читать далее

Алгоритм MiniMax. Использование минимакса в Unity на примере игры Поймай Овечку

Level of difficultyEasy
Reading time14 min
Views7.4K

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

Читать далее

Алгоритм поиска в глубину для процедурной генерации лабиринтов

Level of difficultyEasy
Reading time2 min
Views5.5K

В этой статье я расскажу об алгоритме процедурной генерации лабиринтов методом поиска в глубину (Randomized depth-first search with recursive backtracking).

Читать далее

Сортировка Конфигов для Make Сборок

Level of difficultyEasy
Reading time5 min
Views2.3K

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

Все передают конфиги по-разному.

В этом тексте представлен способ передавать конфиги через скрипты сборки.

Читать далее

Как написать простую решалку тсумего

Reading time11 min
Views21K
гобан 2 на 2 Примерно год назад друг показал мне что такое го и как в него играют. Хорошо помню как в одной из первых партий я гордо построил цепочку из камней которая соединяла нижнюю сторону доски с верхней, а также цепочку соединяющую левую сторону с правой, на что друг мне сказал, что это конечно хорошо, но я проиграл. У меня тогда ушло много времени, чтобы понять почему. С тех пор я продвинулся до примерно первого дана KGS, а друг перестал со мной играть.
Читать дальше →

Метод Reverse Engineering на практике: как расшифровать исходный код

Level of difficultyMedium
Reading time11 min
Views7.8K

Всем привет!

Сегодня в нашем эфире новый автор - Никита Синкевич, руководитель группы анализа и реагирования Инженерного центра Angara Security. Итак, начинаем!

Иногда в ходе расследования инцидента информационной безопасности необходимо понять, имеет ли та или иная программа вредоносное воздействие на систему. Если для данной программы у вас нет исходного кода, то приходится применять метод исследования "обратная разработка", или Reverse Engineering. Я покажу, что такое "обратная разработка" на примере задания "RE-101" с ресурса cyberdefenders.

CyberDefenders — это платформа для развития навыков blue team по обнаружению и противодействию компьютерным угрозам. В этой статье будет разбор последней, шестой подзадачи из задания "RE-101". На мой взгляд, она лучше раскрывает процесс реверс-инжиниринга, чем остальные: нам предстоит восстановить из исполняемого файла кастомный алгоритм шифрования, написать скрипт-дешифратор и расшифровать флаг.

Используемые инструменты:

1.       Detect it Easy
2.       IDA
3.       Python3
4.       Notepad++
5.       CyberChef

Задание

Описание намекает, что в предложенном файле malware201 кто-то реализовал свой собственный криптографический алгоритм.

Читать далее

Увлекательный лексический анализ языка Rust

Reading time7 min
Views6.7K

Давайте поговорим о лексическом анализе. Сначала я собирался назвать этот пост «Реализуем токенайзер», но ветер переменился, времена изменились… и, чтобы не утонуть в потоке комментариев вида «фыр, а где мой BPE-токенизатор LLama, который вы мне обещали», ограничимся пока лексическим анализом.

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

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

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

Довольно слов, приступим.

Читать далее

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

Level of difficultyMedium
Reading time7 min
Views8K
Когда я только начинал изучать компиляторы, я не понимал одного важного момента: Разработка языка программирования и написание компилятора — это два почти совершенно разных навыка. Конечно, между ними есть некоторое пересечение, но меньшее, чем может показаться на первый взгляд!

Я думаю, что это важно знать, потому что обе эти задачи очень сложны! Легче овладеть этими навыками, если решать их по очереди. Ваше первое решение сложной задачи, скорее всего, будет… ну, не таким хорошим, как десятое! Однако довольно часто разработчики создают игрушечный язык, когда пишут свой первый компилятор, а это значит, что они совершают ошибки и учатся сразу на двух сложных проблемах. Хуже того, эти две проблемы взаимосвязаны: Ошибка в одной из них усложняет жизнь в другой. Кроме того, как мы увидим, хотя компиляторы и сложны на первых порах, они, по сути, являются решенной проблемой, в то время как разработка языка программирования — это, скажем так, область продолжающихся исследований.
Читать дальше →

Information

Rating
7,268-th
Registered
Activity