Как стать автором
Обновить
2
0

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

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

Делители часов

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

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

Большинству цифровых схем требуется несколько (или даже десятки) различных тактовых сигналов для управления различными подсистемами. Например, система на основе ППВМ может использовать тактовую частоту 48 кГц для создания аудиопотока, тактовую частоту 1 кГц для запуска таймера, тактовую частоту 10 МГц для запуска небольшого процессора и тактовую частоту 12 кГц для запуска контроллера двигателя. Было бы слишком дорого использовать отдельные внешние схемы осциллятора для создания такого количества различных тактовых сигналов, поэтому системы обычно производят необходимые им тактовые сигналы всего из одного или двух основных тактовых входов.

Читать далее
Всего голосов 7: ↑5 и ↓2+8
Комментарии9

Тварь ли я дрожащая или право имею? Берем чужие сайты под свой контроль. Chrome расширение на Angular 18. Часть 1

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

Как многие сказки начинаются с уже привычных фраз «жили‑были...» или «в некотором царстве, в некотором государстве...», так многие пет‑проекты или просто творческие эксперименты, опыты программиста начинаются с фразы «дело было вечером, делать было нечего...». Точно так же и в моем случае — появилось свободное время, так почему бы не потратить его с пользой?

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

Цель минимум — повторить базовый функционал уже существующих решений, цель максимум — добавить новый функционал и внести те изменения, которых мне не хватает. Весь процесс буду выкладывать на GitHub, проект полностью открытый и свободный.

Читать далее
Всего голосов 18: ↑18 и ↓0+24
Комментарии5

Опенсорсные альтернативы Discord на своём сервере

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров20K
Мессенджер Revolt

После блокировки Discord в РФ люди начали искать варианты решения проблемы. Легально это можно сделать двумя способами:

  1. Перейти на альтернативный мессенджер с централизованным управлением от сторонней компании (TeamSpeak, Skype и др.). Правда, некоторые аналоги Discord уже упали под нагрузкой и вынуждены ограничить доступ пользователям из РФ, как Guilded.
  2. Поднять собственный сервер.

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

В итоге остаётся только свой сервер. Желательно в локальной сети или хотя бы на виртуальном хостинге.
Читать дальше →
Всего голосов 26: ↑25 и ↓1+36
Комментарии21

Я ускорил генерацию blurhash в 3̶6̶ 8̶7̶ 128 раз

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

Старую собаку новым трюкам не обучишь, вот и я взялся за старое. Blurhash — это компактный способ представления размытой превьюшки изображения в виде ASCII-строки. Разработан финской компанией Wolt (аналог Delivery Club). Давно хотелось внедрить такое к себе в API, чтобы любой клиент мог более плавно и изящно делать загрузку контент на своем сайте. Но сколько я на него смотрел — всегда не давала покоя скорость работы, уж больно медленно и «в лоб» он был написан. Но вот время пришло наконец-то разобраться, что же он так медленно работает.

Читать далее
Всего голосов 80: ↑80 и ↓0+95
Комментарии33

RISC-V — звезда родилась: x86 не у дел, ARM сломала обе ноги

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

Привет, постоянные и не очень читатели :) 

Это снова я — с четвёртой статьей из цикла про архитектуры, процессоры и всё такое. Напомню, как всё было:

Part I: Скандальное разоблачение x86: ARM врывается с двух ног

Part II: Этой индустрии нужен новый герой: ARM врывается с двух ног

Part III: Китайский киднеппинг: похищение дочки

Part IV: RISC-V — звезда родилась: x86 не у дел, ARM сломала две ноги← ВЫ ЗДЕСЬ

Как по мне, сейчас идеальное время для четвёртой статьи из цикла — в процессорах и архитектурах всё скучно (со времён M1 ничего удивительного не было) + вашему покорному слуге нужно было убедиться, что сабж не помрёт, а расцветёт, как стронгилодон крупнокистевой.

Дропдаун
Всего голосов 66: ↑59 и ↓7+65
Комментарии205

Рабочая C++ IDE в docker container

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

Привет, хабр! Программирую на C++ / Qt / QML в среде разработки QtCreator уже 6-ой год. У меня есть определенные пересечения мыслей с мозгом груга и еще мне постоянно хочется избавиться от глупой и рутинной работы, которая есть на разных этапах разработки. Одна из таких работ - возня с IDE и рабочим окружением, особенно в мире C++ разработки. В статье постараюсь раскрыть проблему и описать свой текущий подход к решению.

Читать далее
Всего голосов 13: ↑13 и ↓0+15
Комментарии28

Создаем свою библиотеку на C++ с тестированием, CMake и блекджеком: часть 2

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

В мире программирования создание собственных библиотек — это не просто возможность пополнения своего портфолио или способ структурировать код, а настоящий акт творческого самовыражения (и иногда велосипедостроения). Каждый разработчик иногда использовал в нескольких своих проектах однообразный код, который приходилось каждый раз перемещать. Да и хотя бы как упаковать свои идеи и знания в удобный и доступный формат, которым можно будет поделиться с сообществом.

Если вы ловили себя на мысли: «А почему мне бы не создать свою полноценную библиотеку?», то я рекомендую прочитать вам мою статью.

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

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

Добро пожаловать во вторую, скорее всего финальную часть статьи! Здесь мы окончательно допишем код, исправим некоторые ошибки.

Читать далее
Всего голосов 23: ↑23 и ↓0+31
Комментарии19

Кодирование с кодеком HEVC простым языком — гайд на FFmpeg. Высокое качество, но низкий вес

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

Казалось бы, довольно простой вопрос: «Чем сжать видео?». На ум сразу приходят Handbrake, Movavi Converter или ещё что-нибудь пострашнее. Однако когда речь заходит о более гиковском подходе с упором на максимальное качество и экономию места, такие программы сложно назвать инструментами. Равно как и для обратной ситуации, когда картинку нужно сильно сжать и сохранить в целостности большую часть полезной информации. Все эти программы только лишь предоставляют набор наиболее общих конфигов для обычной съёмки и 2D.

В этой статье мы изучим, как при помощи самого большого сборника свободных библиотек FFmpeg научиться кодировать видео самому именно под ваши задачи.
Читать дальше →
Всего голосов 91: ↑90 и ↓1+118
Комментарии131

Знакомство с гипермедийными системами на ASP.NET Core 8.0

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

Быстрый старт с HTMX 2.0. Знакомство с гипермедийными системами на основе современной серверной платформы ASP.NET Core.

Гипермедийные системы облегчают создание прежде всего низконагруженных веб-приложений.

Читать далее
Всего голосов 8: ↑5 и ↓3+6
Комментарии9

std::array в С++ не медленнее массива в С

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

Или почему не нужно бояться того, что удобно работает. Узнаем, что по этому поводу пишет стандарт, потом заглянем в реализации std::array в libc++ и libstdc++, затем посмотрим на ассемблер некоторых операций с этими объектами. Завершим всё это дело, как и полагается, бенчмаркингом.

Проверить, так ли это
Всего голосов 40: ↑39 и ↓1+53
Комментарии46

Создаем свою простую (C++) библиотеку с документацией, CMake и блекджеком

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

В мире программирования создание собственных библиотек — это не просто возможность пополнения своего портфолио или способ структурировать код, а настоящий акт творческого самовыражения (и иногда велосипедостроения). Каждый разработчик иногда использовал в нескольких своих проектах однообразный код, который приходилось каждый раз перемещать. Да и хотя бы как упаковать свои идеи и знания в удобный и доступный формат, которым можно будет поделиться с сообществом.

Если вы ловили себя на мысли: ‭«А почему мне бы не создать свою полноценную библиотеку?‭», то я рекомендую прочитать вам мою статью.

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

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

Читать далее
Всего голосов 49: ↑48 и ↓1+59
Комментарии68

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

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

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

На этом уроке мы изучим новые команды и воспользуемся этими знаниями, чтобы перенести на язык ассемблера первую конструкцию высокого уровня: условные конструкции.
Читать дальше →
Всего голосов 44: ↑42 и ↓2+55
Комментарии11

Ассемблер для программистов на языках высокого уровня: Hello World

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

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

Рассмотрим следующий код:

section .data
  msg db "Hello, World!"

section .text
  global _start

_start:
  mov rax, 1
  mov rdi, 1
  mov rsi, msg
  mov rdx, 13
  syscall

  mov rax, 60
  mov rdi, 0
  syscall

К счастью, по второй строке мы можем понять, что он делает.

Здесь нет ничего привычного нам: мы не видим ни условных операторов, ни циклов, нет никакого способа создавать функции… Да даже у переменных нет имён!

С чего же вообще начать?

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

Завершив прочтение этого руководства, вы сможете ориентироваться в ассемблерном коде, будете знать, где искать информацию, и даже сможете самостоятельно писать простые программы.
Читать дальше →
Всего голосов 61: ↑57 и ↓4+69
Комментарии41

Программирование на C в Linux на примере создания своей командной оболочки

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

Привет, хабр! Язык программирования C — основополагающий, как я считаю. И его знать, нет, не обходимо, но довольно желательно. Большинство языков отсылают к C, и зная C (или C++) другой язык будет даваться намного легче.

Я решил недавно улучшить свой навык владения C, путем написания проектов. Самая первая мысль, которая пришла мне на ум — это командный интерпретатор, командная оболочка, shell проще говоря. А также я расскажу о системе сборки make, и о том, как правильно писать и документировать C-код.

В этом туториале я буду использовать компилятор CLANG, а не GCC, и расскажу его преимущества

Итак, для создания своего шелла на C для Linux вам понадобится простой советский копеечный...

Узнать
Всего голосов 28: ↑25 и ↓3+36
Комментарии42

Программирование на C в Linux на примере создания командной оболочки: часть 2

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

Я решил недавно улучшить свой навык владения C, путем написания проектов. Самая первая мысль, которая пришла мне на ум — это командный интерпретатор, командная оболочка, shell проще говоря. А также я расскажу о системе сборки make, и о том, как правильно писать и документировать C-код.

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

Да-да, мы превратим наш велосипед в мопед! Я вынес из прошлой статьи итоги, и попытался решить все проблемы и замечания. Продолжаем погружение в пучины разработки под Linux!

Читать далее
Всего голосов 25: ↑24 и ↓1+33
Комментарии12

Почему я предпочитаю исключения, а не значения ошибок

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

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

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

Давайте рассмотрим пример, в котором применено защищённое от ошибок целочисленное деление:

int safeDiv(int a, int b) {
   if (b == 0)
      throw Div0(); // Исключения передаются особым образом
   return a / b; // Теперь-то всё абсолютно безопасно, ведь так?
}

Новые языки программирования склонны применять сообщения об ошибках в функциональном стиле и кодировать ошибки в возвращаемый тип. Например, Go кодирует ошибку в возвращаемый тип при помощи кортежа (res, err), а Rust возвращает Result<T, E> — тип-сумму результата и ошибки.
Читать дальше →
Всего голосов 65: ↑57 и ↓8+67
Комментарии214

KC868-E16P: всё брутальнее и брутальнее (теперь с тумблерами прямо на контроллере)

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


Мне нравится подход Kincony к своей работе — видно, что они занимаются любимым делом, никого не стесняются и ни в чём не отказывают своему креативу: на этот раз они сделали то, чего не делал никто до них — установили прямо на плату контроллера 16 «кондовых» тумблеров. С технической точки зрения это решение спорное, но, надо отдать им должное, выглядит E16P очень круто и брутально.

Это уже ближе к натуральному киберпанку и если вы установите такого красавца в свой электрощит, то, несомненно, станете звездой легендой местных электриков (смайл).

Разумеется тумблеры — это не единственное достоинство KC868-E16P, о прочих характеристиках и нововведениях E16P мы поговорим далее в этой статье.
Читать дальше →
Всего голосов 20: ↑19 и ↓1+28
Комментарии24

Игрушечная телеметрия на Arduino

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

Все началось в какой-то из вечеров, когда после работы очень хотелось просто полежать на диване, но у ребенка были другие планы на папу. Мне было поручено управлять игрушечным светофором и включать машинкам красный и зеленый свет, причем светофор должен был располагаться как можно дальше от дивана. И тут родилась идея! А что, если сделать светофор на радиоуправлении?

Читать далее, что из этого получилось
Всего голосов 32: ↑32 и ↓0+39
Комментарии15

Управление для DIY-проекта с помощью Bluetooth геймпада. Часть 1 (Arduino)

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

Некоторые DIY-проекты включают в себя тот или иной вид дистанционного управления. Есть множество способов и протоколов для его реализации, и один из них – Bluetooth. В этой статье будет рассказано о подключении Bluetooth геймпада к Arduino.

Читать далее
Всего голосов 6: ↑6 и ↓0+8
Комментарии11

Управление для DIY-проекта с помощью Bluetooth геймпада. Часть 2 (ESP32)

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

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

Читать далее
Всего голосов 11: ↑11 и ↓0+15
Комментарии1
1
23 ...

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность