Pull to refresh
10
0.2
Send message

Quansheng UV-K5/K6, трансивер, из которого можно сделать что угодно: аппаратные доработки

Reading time7 min
Views9.9K

Привет, Хабр! В прошлый раз мы рассказывали о трансивере Quansheng UV-K5/K6 и его возможностях. Сегодняшняя статья посвящена аппаратным доработкам этого дешёвого и доступного китайского девайса. С их помощью можно расширить принимаемый диапазон, обзавестись большим количеством памяти для контактов, реализовать своеобразный TeamViewer для удалённого управления трансивером и обеспечить работу в сети APRS. Приятного чтения!

Читать далее
Total votes 41: ↑41 and ↓0+61
Comments18

Разглядывая JTAG: самый быстрый программный JTAG на Arduino

Level of difficultyMedium
Reading time26 min
Views8.3K

В предыдущих статьях цикла был приведен пример реализации ведомого модуля JTAG на Verilog. Я предположил, что количество инженеров, знающих Verilog, меньше, чем количество инженеров, которым требуется понимание принципов работы JTAG. Поэтому, помимо реализации на Verilog, модуль JTAG был также реализован на Си.

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

Субъективно, практическое применение программного JTAG мне по‑прежнему видится не вполне оправданным.
Но, во‑первых, это хороший повод рассмотреть предельные возможности микроконтроллеров.
А во‑вторых, есть формальная причина сказать, что в данной статье предлагается Решение Прикладной Задачи :)

Итак, сегодня мы поговорим про прерывания, поллинг и прочее. А протокол JTAG станет фоном для повествования.

jmp start
Total votes 39: ↑39 and ↓0+54
Comments23

Почему для меня так важен алгоритм CORDIC

Level of difficultyMedium
Reading time8 min
Views15K

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

Перейду сразу к делу и скажу, почему я так сильно люблю этот алгоритм, а затем займёмся изучением принципов его работы. По сути, фактические операции CORDIC весьма просты — как я уже сказал, это сдвиги и сложение — но выполняет он их путём комбинирования векторной арифметики, тригонометрии, доказательств сходимости и продуманных техник компьютерных наук. Лично я считаю, что именно это имеют ввиду, описывая его природу, как «элегантную».
Читать дальше →
Total votes 85: ↑85 and ↓0+111
Comments27

HackBat: мощная DIY альтернатива Flipper Zero на базе открытого исходного кода

Reading time4 min
Views21K

Встречайте HackBat: DIY (сделай сам) устройство, основанное на открытом исходном коде и аппаратном обеспечении, разработанное Пабло Трухильо Хуаном как мощная альтернатива Flipper Zero. Оно пропагандирует свободу разработки и модификации, обеспечивая пользователям возможность сами создавать и настраивать свои устройства. В отличие от Flipper Zero, HackBat позволяет пользователям самим программировать MCU и взаимодействовать с Wi-Fi и RF-трансиверами, что обеспечивает большую гибкость и возможности для настройки.

Самое интересное в этом небольшом проекте — это то, насколько много общего у него с Flipper Zero. Hackbat также позиционируется в качестве "швейцарского армейского ножа" для проведения тестов на проникновение и использует некоторые из тех же функций, что и NFC. Однако, в отличие от Flipper Zero, Hackbat является открытым проектом и стоит дешевле, чем его родственник с ценником в $169. Фактически, после недавнего исчезновения Flipper One, люди, которые такие устройства, могут обнаружить, что Hackbat является подходящей заменой.

Пабло Трухильо опубликовал проект на Hackster, где подробно рассказал о проекте. Основной идеей Hackbat является создание устройств для тестирования на проникновение, доступных для всех.

Читать далее
Total votes 57: ↑43 and ↓14+51
Comments33

Связь между Arduino по оптоволокну через SFP трансиверы

Level of difficultyEasy
Reading time8 min
Views10K

Изучаем оптический SFP трансивер. Рассматриваем его внутреннее устройство, элементный состав, электрические подключения. Для закрепления материала попробуем отправить и принять сообщение по оптоволокну, используя платформу Arduino.

Читать далее
Total votes 48: ↑47 and ↓1+68
Comments30

Оптимизация JavaScript. Inline Caches

Reading time13 min
Views4.3K

Думаю, ни для кого не секрет, что все популярные JavaScript движки имеют схожий пайплайн выполнения кода. Выглядит он примерно следующим образом. Интерпретатор быстро компилирует JS-код в байт "на лету". Полученный байт код начинает исполняться и параллельно обрабатывается оптимизатором. Оптимизатору требуется время на такую обработку, но в итоге может получиться высоко-оптимизированный код, который будет работать в разы быстрее. В движке V8 роль интерпретатора выполняет Ignition, а оптимизатором является Turbofan. В движке Chakra, который используется в Edge, вместо одного оптимизатора целых два, SimpleJIT и FullJIT. А в JSC (Safari), аж три Baseline, DFG и FTL. Конкретная реализация в разных движка может отличаться, но принципиальная схема, в целом одинакова.

Сегодня мы будем говорить об одном из множества механизмов оптимизации, который называется Inline Caches.

Читать далее
Total votes 11: ↑10 and ↓1+10
Comments3

Язык Terra — низкоуровневый партнёр Lua

Reading time12 min
Views17K
Terra — низкоуровневый язык системного программмирования, встраиваемый и имеющий возможность метапрограммирования с помощью языка Lua.

Читать дальше →
Total votes 57: ↑57 and ↓0+57
Comments28

Фен и нижний подогрев. Снятие/установка BGA без реболлинга

Reading time5 min
Views7.8K

Приветствую, Хабр!

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

Читать далее
Total votes 46: ↑45 and ↓1+68
Comments28

Раздача файлов на смартфоны без интернета. Опенсорсные альтернативы AirDrop

Level of difficultyMedium
Reading time7 min
Views12K


Формулировка задачи. У нас есть настольный компьютер и мобильные устройства под Android. Задача простая — как быстро перебросить файлы с компьютера на телефоны и планшеты. Например, скачанные подкасты и HD-фильмы 1080p, файлы apk для установки, рабочие файлы с персоналки, бэкапы. Хранилище телефона можно использовать как резервный внешний диск или как «беспроводную» флешку, которая работает по Wi-Fi.

Конечно, можно это сделать через веб-сервисы Wormhole/PairDrop/FilePizza, через телеграм/вайбер или инструменты синхронизации ПК и смартфона, такие как syncthing. Да, это удобно и привычно. Но процесс можно 1) ускорить; 2) избавиться от подключения к интернету. То есть файлы будут передаваться напрямую между устройствами, как Apple AirDrop, только лучше.
Читать дальше →
Total votes 41: ↑40 and ↓1+57
Comments68

Build.prop — улучшение качества звука

Level of difficultyMedium
Reading time8 min
Views14K

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

Читать далее
Total votes 5: ↑4 and ↓1+3
Comments5

Tree-sitter: обзор инкрементального парсера

Reading time5 min
Views7.9K

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

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

Как устроены функции Мультирум и Стереопара на устройствах Sber

Level of difficultyMedium
Reading time14 min
Views2.8K

В феврале 2023 года на части устройств SberDevices мы анонсировали поддержку двух новых режимов работы — Мультирум и Стереопара.

Мультирум позволяет прослушивать музыку на нескольких устройствах различного типа одновременно. Например, колонка SberBoom может находиться в спальне, а SberPortal — в гостиной, и в таком режиме музыка на этих устройствах будет играть синхронно. Стереопара отличается от Мультирума тем, что в Cтереопаре могут участвовать только две одинаковые колонки, при этом устройства, воспроизводя звук так же синхронно, делят его на каналы — левый и правый (каждое устройство проигрывает свой канал), в зависимости от выбранных пользователем настроек.

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

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

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

Как работают трансформеры: разбираем математику

Level of difficultyMedium
Reading time28 min
Views17K

В этом посте я представлю подробный пример математики, используемой внутри модели трансформера, чтобы вы получили хорошее представление о работе модели. Чтобы пост был понятным, я многое упрощу. Мы будем выполнять довольно много вычислений вручную, поэтому снизим размерность модели. Например, вместо эмбеддингов из 512 значений мы используем эмбеддинги из 4 значений. Это позволит упростить понимание вычислений. Мы используем произвольные векторы и матрицы, но при желании вы можете выбрать собственные значения.

Как вы увидите, математика модели не так уж сложна. Сложность возникает из-за количества этапов и количества параметров. Перед прочтением этой статьи я рекомендую прочитать пост Illustrated Transformer (или читать их параллельно) [перевод на Хабре]. Это отличный пост, объясняющий модель трансформера интуитивным (и наглядным!) образом, поэтому я не буду объяснять то, что уже объяснено в нём. Моя цель заключается в том, чтобы объяснить, как работает модель трансформера, а не что это такое. Если вы хотите углубиться в подробности, то изучите известную статью Attention is all you need [перевод на Хабре: первая и вторая части].

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

Пишем GPT в 60 строк NumPy (часть 1 из 2)

Level of difficultyMedium
Reading time16 min
Views72K

В этом посте мы начнём реализацию с нуля GPT всего в 60 строках numpy. Во второй части статьи мы загрузим в нашу реализацию опубликованные OpenAI веса обученной модели GPT-2 и сгенерируем текст.
Читать дальше →
Total votes 73: ↑71 and ↓2+92
Comments33

С новым годом: GPT в 500 строках на SQL

Reading time42 min
Views38K

В минувшем году все только и говорили об ИИ и о том, как он может всё за вас сделать.

Мне нравится, когда кто-то или что-то работает за меня. Поэтому решил: попрошу-ка ChatGPT написать за меня новогодний пост:

«Эй, ChatGPT. А ты можешь реализовать большую языковую модель на SQL?»
«Нет, SQL не подходит для реализации больших языковых моделей. Язык SQL предназначен для выполнения запросов к данным, хранящимся в РСУБД и для управления этими запросами. Для реализации большой языковой модели требуются сложные алгоритмы, обширные датасеты, а зачастую — и фреймворки для глубокого обучения. SQL всеми этими возможностями не обладает.»

Что ж, лишний раз убеждаешься, что, если хочешь что‑то сделать хорошо – сделай это сам.

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

Читать далее
Total votes 181: ↑177 and ↓4+207
Comments21

Разработка стековой виртуальной машины и компилятора под неё (итог)

Reading time16 min
Views10K

Для завершения реализации компилятора потребовалось около месяца времени (вечерами), чтобы на практике познакомиться с такими темами как BNF (Backus Naur Form), Abstract Syntax Tree (AST), Symbol Table, способами генерации кода, разработки самого компилятора (front-end, back-end), а также модификации виртуальной машины CVM. Ранее с этими темами был не знаком, но благодаря комментаторам погрузился. Хоть затрагиваемых тем много, постараюсь рассказать очень лаконично. Но обо всём по порядку.

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

Производственный календарь в PostgreSQL

Level of difficultyEasy
Reading time6 min
Views12K

Новый Год уже совсем на носу, а значит нужен свежий производственный календарь в базе данных PostgreSQL. Но как совершенно обленившийся IT-шник, заводить его руками не хочется. Хочется, чтобы вызовом одной функции он сразу появился. Ну а уж из этой функции можно его сохранить в табличку и спокойно использовать до следующего Нового Года. А тогда опять просто вызвать вызвать функцию и с чистой совестью отрапортовать о выполненной работе. Цель статьи - показать возможности COPY ... FROM PROGRAM и простейшие приемы парсинга XML в PostgreSQL.

Читать далее
Total votes 15: ↑14 and ↓1+20
Comments20

Потрошим golang: как устроена память

Reading time18 min
Views24K


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

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

Единственным надежным решением таких проблем является глубокое погружение в теорию и исследования инструмента, которым решаются поставленные проблемы. В нашем случае таким инструментом является язык Go. И как же замечательно, что исследование его внутренностей — совсем легкое дело. В том числе когда дело касается использования памяти.
Читать дальше →
Total votes 50: ↑48 and ↓2+55
Comments17

Как я стал IEEE Senior Member

Level of difficultyEasy
Reading time12 min
Views5.7K

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

Читать далее
Total votes 26: ↑17 and ↓9+16
Comments3

Локальные нейросети. Аналог ChatGPT-3.5 на домашнем ПК: OpenChat 7B превосходящая 70B, DeepSeek для кода уровня ChatGPT

Reading time8 min
Views82K

Есть много локальных аналогов ChatGPT, но им не хватает качества, даже 65B модели не могут конкурировать хотя бы с ChatGPT-3.5. И здесь я хочу рассказать про 2 открытые модели, которые всё-таки могут составить такую конкуренцию.

Речь пойдет о OpenChat 7B и DeepSeek Coder. Обе модели за счет размера быстры, можно запускать на CPU, можно запускать локально, можно частично ускорять на GPU (перенося часть слоев на GPU, на сколько хватит видеопамяти) и для такого типа моделей есть графический удобный интерфейс.

И бонусом затронем новую модель для качественного подробного описания фото.

UPD: Добавлена информация для запуска на Windows с ускорением на AMD.

Читать далее
Total votes 89: ↑87 and ↓2+103
Comments87
1
23 ...

Information

Rating
2,106-th
Registered
Activity