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

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

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

Захват видео с USB камер на устройствах под управлением Linux

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

Предыстория


Некоторое время назад я загорелся желанием “улучшить” танк из известного набора “Танковый бой”, добавив возможность играть, как «если бы я был водителем танка». Идея появилась после прочтения нескольких статей на Хабре (например здесь: geektimes.ru/post/257528), в них же я нашел, как это можно сделать имея маленький WiFi-роутер и USB-камеру. Решение выглядело подкупающе простым: роутер прошивается специальной прошивкой, к нему подключается камера, танк управляется родным пультом, а видео смотрится в браузере. Быстро собрав прототип, я обнаружил, что видео захватывается в отвратительном качестве. Это было либо 320х240х30, либо 640х480х30. При включении режима 1280х720 в лучшем случае было рваное видео с артефактами, в худшем — его не было вообще. Режим 1920х1080 не работал в принципе. Меня это сильно расстроило, так как на PC камера поддерживала режимы вплоть до 1920х1080х30 и имела аппаратное MJPG сжатие. Моя интуиция подсказывала, что реализация далека от совершенства.
Читать дальше →
Всего голосов 25: ↑25 и ↓0+25
Комментарии12

Знакомимся с Javassist

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

Всем большой привет! Перед началом стоит сказать, что библиотека Javassist довольно мощный инструмент, так как стирает почти все границы у того безграничного языка JAVA, позволяя разработчику осуществлять манипуляции связанные с байткодом.

Конечно, получив доступ к байткоду, а ровно и к возможности воздействовать на этот самый байткод вам совсем не обязательно вклиниваться в него. Javassist можно использовать и в “мирных” целях!

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

Итак, если после всех предостережений вы все же решили использовать эту библиотеку, то давайте начинать!

В этой статье мы рассмотрим Javassist, как инструмент, с помощью которого мы будем вклиниваться в существующий байткод и трансформировать его.

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

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

Ответ очевиден – приложение не может само себя изменять. Т.е. приложение не может само изменять свой же байткод. Это должен делать кто-то другой. Этот кто-то другой – такое же Java приложение, но заточенное на работу с байткодом.

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

Генерация звука на микроконтроллерах AVR методом волновых таблиц с поддержкой полифонии

Время на прочтение12 мин
Количество просмотров32K
Микроконтроллеры AVR довольно дешевы и широко распространены. Наверно, с них начинает почти любой embedded разработчик. А среди любителей правит балом Arduino, сердцем которого обычно является ATmega328p. Наверняка многие задумывались: как можно заставить их звучать?

Если посмотреть на существующие проекты, то они бывают нескольких типов:

  1. Генераторы квадратных импульсов. Генерация с помощью ШИМ или дергать пины в прерываниях. В любом случае, получается очень характерный пищащий звук.
  2. Использование внешнего оборудования типа MP3 декодера.
  3. Использование ШИМ для вывода 8 битного (иногда 16 битного) звука в формате PCM или ADPCM. Поскольку памяти в микроконтроллерах для этого явно не достаточно, то обычно используют SD карту.
  4. Использование ШИМ для генерации звука на основе волновых таблиц, подобных MIDI.

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



Заинтересовавшихся прошу под кат.
Читать дальше →
Всего голосов 60: ↑59 и ↓1+58
Комментарии71

Лучший способ использовать аннотацию Spring Transactional

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

В этой статье я собираюсь показать вам лучший способ использования аннотации Spring Transactional.

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

Читать далее
Всего голосов 10: ↑7 и ↓3+4
Комментарии17

Превращаем одноплатник Cubietruck в Wi-Fi Hotspot с Captive portal, VPN-шлюзом и Ad block

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

Для построения Wi-Fi сети обычно используют готовые маршрутизаторы, функциональность которых всегда ограничен прошивкой. А если необходимо добавить блокировщик рекламы, VPN шлюз и красивый Captive portal, покупать новую железку? Стоимость устройства с такими возможностями будет уже весьма высока. Можно взять Linux с Hostapd и сделать точку доступа с Wi-Fi, но в отличие от готовых маршрутизаторов не будет наглядного Web-интерфейса. И для решения этой задачи был создан проект RaspAP, который на базе устройств с ОС Debian создает Wi-Fi Hotspot с Captive portal, VPN-шлюзом, Ad block. Для RaspAP в отличие от OpenWrt не требуется непосредственная поддержка устройства, достаточно поддержки последней версии Debian. RaspAP работает поверх уже установленных ОС: Raspberry Pi OS, Armbian, Debian, Ubuntu. Как сделать Wi-Fi Hotspot на RaspAP прошу под кат.
Всего голосов 35: ↑33 и ↓2+31
Комментарии19

HTML трюки

Время на прочтение2 мин
Количество просмотров14K
image

1. Атрибут `loading=lazy`


Совет по производительности. Вы можете использовать атрибут loading = lazy, чтобы отложить загрузку изображения до тех пор, пока пользователь не домотает до них.

<img src='image.jpg' loading='lazy' alt='Alternative Text'>  
Всего голосов 40: ↑31 и ↓9+22
Комментарии16

Управление ESP32 через BLE

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

Интро


Уже сравнительно давно микроконтроллер ESP32 стал неким стандартом для множества DIY проектов. И действительно, возможность работы с Wi-Fi, Bluetooth, встроенная энергонезависимая память, а так же большое число выводов позволяют сделать массу интересных проектов.

В этой статье, мы поговорим про управление конроллером с помощью BLE используя доступные в AppStore приложения. А в следующей, если она будет, про создание собственного приложения для iOS.
Читать дальше →
Всего голосов 7: ↑7 и ↓0+7
Комментарии2

Взлом цветного картриджа HP: превращаем его в ручной принтер

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

Введение


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

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

Недавно моя девушка занялась рисованием, поэтому это стало хорошим оправданием для возврата к струйным картриджам в надежде, что и мне удастся нарисовать что-то на холсте. На этот раз мне повезло: удалось найти способ привязки всех сопел к правильным сигналам. Кроме того, сегодня картриджи принтеров управляют бОльшим количеством сопел используя меньшее количество сигналов, что упрощает управление картриджем и увеличивает поверхность, которую можно покрыть за один проход.
Всего голосов 156: ↑155 и ↓1+154
Комментарии43

«Привет, Хабр» на частоте 835 кГц

Время на прочтение5 мин
Количество просмотров22K
Как-то раз в голове возникла мысль, а что бы сделать такое, чтобы скрестить старый радиоприемник в деревянном корпусе и современный контроллер для интернета-вещей ESP32? То ли с головой не так что-то, то ли делать мне нечего, но скрестить получилось. Не шаблонно, в целом, хотя судить вам, дорогие читатели Хабра).

За подробностями прошу под кат.
Читать дальше →
Всего голосов 35: ↑35 и ↓0+35
Комментарии10

DBA: когда почти закончился serial

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

"Шеф, всё пропало, у нас serial на мегатаблице кончился!" - а это значит, что либо вы его неаккуратно накрутили сами, либо у вас действительно данных столько, что разрядности integer-столбца уже не хватает для вашей большой и активной таблицы в PostgreSQL-базе.

Да и столбец этот не простой, а целый PRIMARY KEY, на который еще и ряд других немаленьких таблиц по FOREIGN KEY завязан. А еще и приложение останавливать совсем не хочется, ибо клиентам 24x7 обещано...

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

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

Exports в package.json

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

Привет. Я работаю в команде, занимающейся улучшением пользовательского опыта
при работе с деньгами. Front-end мы поставляем npm-пакетами.

В какой-то момент я столкнулся с проблемами, которые привели меня к использованию
поля exports в package.json

Читать дальше →
Всего голосов 12: ↑10 и ↓2+8
Комментарии4

createRef, setRef, useRef и зачем нужен current в ref

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

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

В этой статье попробуем разобрать большинство непонятных базовых принципов при взаимодействии с ref. Например чем детально отличается createRef от useRef, зачем в этих объектах отдельное свойство current и многое другое. Одним словом попытаемся открыть много черных ящиков по работе с ref, из-за которых у вас возможно накопились вопросы. (Данная статья, является расшифровкой видео)

Read more
Всего голосов 13: ↑13 и ↓0+13
Комментарии5

Почему Джеф Безос – самый опасный политикан на планете

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


Вы не сможете стать супербогатым, если будете соблюдать общепринятые правила…

Шесть способов стать богатым


Несколько лет назад я прочитал книгу – что-то типа — Как стать миллиардером.
Автор проанализировал 400 самых богатых людей из списка Форбс и обнаружил что есть только несколько способов для того чтобы попасть в этот список сверхбогачей.
Всего голосов 180: ↑131 и ↓49+82
Комментарии757

Настраиваем домашний почтовый сервер и уходим с «бесплатной» почты

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

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

Читать далее
Всего голосов 108: ↑100 и ↓8+92
Комментарии338

Перехват и обработка событий в файловой системе Linux

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

В предыдущей статье мы рассмотрели сборку и установку пакета на Linux системах, в которой упомянули про Linux Kernel Module (LKM) и обещали раскрыть позднее подробности о пути к нему и его создании. Ну что ж, настало его время. LKM – мы выбираем тебя.

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

Таков путь! Эволюция бэкапов в Timeweb: от rsync до ZFS

Время на прочтение3 мин
Количество просмотров10K
Мы постарались кратко описать путь, который прошла команда Timeweb за 10 лет: от rsync, LVM и DRBD до ZFS. Эта статья будет полезна тем, кто занимается серверной масштабируемой инфраструктурой, планирует делать бэкапы и заботится о бесперебойной работе систем.

image

Расскажем о:

  • rsync (remote synchronization)
  • DRBD (Distributed Replicated Block Device)
  • инкрементальные бэкапы под DRBD с помощью LVM
  • DRBD + ThinLVM
  • ZFS (Zettabyte File System)
Читать дальше →
Всего голосов 26: ↑24 и ↓2+22
Комментарии23

Взлом хешей с помощью HashCat

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


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


Hashcat поддерживает:


  • Процессоры:
    • CPU
    • GPU
  • Другие аппаратные ускорители в:
    • Linux
    • Windows
    • macOS

Также hashcat имеет средства, которые помогают включить распределенный взлом паролей.


HashCat поддерживает следующие режимы атаки:


  • Брутфорс
  • Комбинаторная атака
  • Гибридная атака
  • Атака по Маске
  • Перестановочная атака
  • Атака на основе правил
  • Табличная атака
  • Атака с переключением регистра

С помощью данной команды можно проверить все доступные параметры:


hashcat –h


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


Содержание:


  • MD5-хеши
  • MD5-хеши с солью
  • Хеш-суммы MD5Crypt
  • HMAC-SHA1 key
    • Хеш-суммы SHA-1
  • Хеши SHA2–384
  • Хеши SHA3–512
  • NTLM-хеши
  • CRC32-хеши

MD5-хеши


Убедитесь, что входные хеши имеют совместимый с hashcat формат.


Пример:


8743b52063cd84097a65d1633f5c74f5 >hash.txt


Команда:


hashcat -m 0 -a 0 hash.txt passwordlist.txt
Читать дальше →
Всего голосов 12: ↑7 и ↓5+2
Комментарии16

Безумный дом

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

Мы часто думаем о том, как автоматизировать свое жилище, но часто этот вопрос упирается в то, что готовые системы слишком негибки и дороги, а разбираться, как сделать что-нибудь самому совершенно нет времени.

Под катом - подробный гайд по настройке системы умного дома: сделаем возможным работу устройств ZWave и кастомных MQTT-устройств на базе ESP8266, настроим управление домом при помощи HomeKit и Яндекс Алисы.

Читать далее
Всего голосов 24: ↑23 и ↓1+22
Комментарии62

Визуальное представление разложения числа на множители с помощью тригонометрических функций

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

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

Как можно показать разложение на множители
Всего голосов 17: ↑10 и ↓7+3
Комментарии7

Коды Рида — Соломона в RAID 6

Время на прочтение12 мин
Количество просмотров6.5K
В интернете много статей о восстановлении информации в массиве RAID-6 и о том, как сделать собственную реализацию такого массива. Но большинство этих статей напичканы математическими формулами. Чтобы понять реальный алгоритм, приходится тратить очень много времени.

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

В качестве бонуса информация о том, как работает исправление ошибок в RAID-5, потому что RAID-6 — это улучшенная версия RAID-5.
Читать дальше →
Всего голосов 24: ↑23 и ↓1+22
Комментарии10
1
23 ...

Информация

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