All streams
Search
Write a publication
Pull to refresh
-4
Эдуард Зиганшин @e-zigread⁠-⁠only

Разработка электроники

Send message

Как оптимально проектировать печатные платы

Level of difficultyMedium
Reading time16 min
Views16K

Привет, на связи Андрей Шведов, руководитель проектов ГРАН Груп!

Разработчики электроники стремятся сделать свой проект с минимальным количеством вопросов и доработок со стороны производителя. Служба качества всегда хочет получить минимальный уровень брака. Сотрудникам монтажного производства хотелось бы видеть оптимизацию под линию монтажа для достижения максимальной производительности. А вопросы минимизации стоимости печатных плат и сокращения сроков поставки всегда крайне важны для компании в целом. Но как возможно отвечать всем этим требованиям одновременно?

Всего этого можно добиться, соблюдая набор принципов концепции DFM (англ. design for manufacturing) – "проектирование с учетом производства". Она имеет довольно простой смысл: задуманные в проекте решения следует реализовывать, учитывая особенности технологических процессов и возможности производств.

Следуя принципам DFM, вы получаете надежные и соответствующие функциональным характеристикам печатные платы, поставленные в срок, с минимальным риском дефектов и по оптимальной стоимости.

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

Читать далее

Как правильно готовить std::span

Reading time6 min
Views6.8K

Сегодня мы поговорим про std::span и как не порезаться на острых углах C++.

Согласно определению на cppreference, шаблон класса span описывает объект, который может ссылаться на непрерывную последовательность объектов, где первый элемент последовательности находится на позиции ноль.

Вообще, с учётом того, что, начиная с С++17 мы уже знакомы с понятием string_view, можно представить, что std::span — это нечто подобное, только действующее для непрерывных участков памяти, которые ещё можно и модифицировать. Но не будем забегать вперед, обо всех свойствах по-порядку.

Читать далее

Пиши простой код

Level of difficultyEasy
Reading time4 min
Views54K

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

Читать далее

Весь китайский автопром от A(vatr) до Z(eekr)

Reading time19 min
Views75K

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

Читать далее

Текст без опечаток в документации и не только: внедряем CSpell

Level of difficultyMedium
Reading time26 min
Views2.7K

В статье приведен обзор возможностей спеллчекера CSpell, а также проанализированы сложности, с которыми я столкнулся при адаптации этого инструмента для работы с нашей документацией в парадигме Docs as Code.

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

Помимо работы в командной строке, в статье рассматриваются примеры прекоммитных проверок и интеграции с VS Code.

Читать далее

Путеводитель по когнитивной перегрузке

Reading time23 min
Views8.5K

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

О том, что такое “когнитивная перегрузка” с точки зрения нейробиологии и когнитивных исследований, о влиянии цифровой среды и том, как снизить негативные последствия — в статье. 

Читать далее

HowTo: создание двоичного SDK(набора библиотек) для Windows с использованием vcpkg

Reading time7 min
Views1.3K

В этом HowTo мы рассмотрим подготовку пакетов vcpkg для использования в двоичном виде.

В качестве "подопытных кроликов" будут выступать Qt6, QCustomPlotи я.

Spoiler: с QCustomPlot придется немного пострадать, но обычно все проще.

TLDR: vcpkg export

Далее

Разгон Мандельброта: SIMD с бубнами, OpenMP и CUDA

Level of difficultyMedium
Reading time16 min
Views4K

Построение множества Мандельброта — классический пример чрезвычайно параллельной задачи (embarrassingly parallel problem).

На первом курсе я впервые столкнулся с такой проблемой: тогда мы изучали SIMD-инструкции в курсе архитектур вычислительных систем. Эта тема сразу меня увлекла, и я захотел углубиться в дальнейшие оптимизации, но в течение семестра мне не хватало ни времени, ни знаний. Спустя год я решил восполнить этот пробел.

Вначале мы разберем наивную реализацию, поиграемся с интринсиками (intrinsics) и, не теряя переносимости, заставим компилятор генерировать нам SIMD-инструкции. Далее добавим многопоточность и в заключение обесценим все наши старания несколькими строчками на CUDA.

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

Читать далее

Проблемы текстовых ИИ. Почему текущие промпты не спасают? Решение

Level of difficultyEasy
Reading time10 min
Views12K

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

Одна из причин таких казусов – отсутствие направленного мышления. Мы, пользователи, подаём запросы, но не задаём структуру мышления: то, как должна думать нейросеть. А ведь тут нужен не просто вероятностный алгоритм, а цепочка рассуждений. Модель же вынуждена угадывать наш контекст, стиль мышления, уровень абстракции, и, как итог, часто ошибается.

Читать далее

Chisel, первый взгляд RTL-разработчика

Level of difficultyMedium
Reading time18 min
Views920

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

Читать далее

Извлекаем файлы из образа повреждённого диска: ddrescue, losetup и немного магии

Level of difficultyMedium
Reading time6 min
Views12K

Проблема повреждённых жёстких дисков знакома многим. Диск начинает работать со сбоями, система зависает, файлы исчезают. В этой статье мы разберём, как спасти данные: создадим образ повреждённого диска с ddrescue, подключим его через losetup, смонтируем разделы и извлечём файлы. Также рассмотрим восстановление удалённых данных с помощью утилит TestDisk и PhotoRec и разберём, что делать в случае проблем с NTFS.

Читать далее

Разбираемся как работать с wine на Unix-based системах

Level of difficultyMedium
Reading time40 min
Views32K

Давно хотели научиться работать с Wine в Linux или Mac Для запуска Windows приложений? Мой обзор-гайд для вас. Я в подробностях расскажу о том как запускать прилоежния, дебажить их, решать проблемы и покажу различные wine-loaders для работы.

Читать далее

VSCode, SourceCraft Code Assistant и микроконтроллеры

Level of difficultyMedium
Reading time34 min
Views11K

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

В этой статье я расскажу, как использовать VSCode для разработки прошивок под разные архитектуры и как мне в этом помогает SourceCraft Code Assistant от разработчиков Yandex Cloud & Yandex Infrastructure.

Читать далее

Сетевое программирование для разработчиков игр. Часть 2: прием и передача пакетов данных

Reading time9 min
Views108K
От переводчика: Это перевод второй статьи из цикла «Networking for game programmers». Мне очень нравится весь цикл статей, плюс всегда хотелось попробовать себя в качестве переводчика. Возможно, опытным разработчикам статья покажется слишком очевидной, но, как мне кажется, польза от нее в любом случае будет.
Первая статья — http://habrahabr.ru/post/209144/



Прием и передача пакетов данных


Введение

Привет, меня зовут Гленн Фидлер и я приветствую вас в своей второй статье из цикла “Сетевое программирование для разработчиков игр”.


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

А сейчас я собираюсь рассказать вам, как на практике использовать UDP для отправки и приема пакетов.

BSD сокеты

В большинстве современных ОС имеется какая-нибудь реализация сокетов, основанная на BSD сокетах (сокетах Беркли).

Сокеты BSD оперируют простыми функциями, такими, как “socket”, “bind”, “sendto” и “recvfrom”. Конечно, вы можете обращаться к этим функциями напрямую, но в таком случае ваш код будет зависим от платформы, так как их реализации в разных ОС могут немного отличаться.

Поэтому, хоть я далее и приведу первый простой пример взаимодействия с BSD сокетами, в дальнейшем мы не будем использовать их напрямую. Вместо этого, после освоения базового функционала, мы напишем несколько классов, которые абстрагируют всю работу с сокетами, чтобы в дальнейшем наш код был платформонезависимым.
Читать дальше →

Использование неполных объявлений в C++

Reading time15 min
Views5.5K


Продолжаем серию «C++, копаем вглубь». Цель этой серии — рассказать максимально подробно о разных особенностях языка, возможно довольно специальных. Это восьмая статья из серии, список предыдущих статей приведен в разделе 6.


C++ относится к языкам со статической типизацией, то есть тип переменных определяется на стадии компиляции, но в ряде случаев компилятору для компиляции без ошибок достаточно знать, что то или иное имя является именем какого-то пользовательского типа (класса, структуры, объединения, перечисления), а полное объявление типа не нужно. В этом случае можно использовать неполное объявление (incomplete declaration), называемое еще упреждающим или предваряющим (forward declaration). Типы с неполным объявлением называются неполными.


Использование неполных объявлений позволяет решить ряд проблем, традиционно свойственных коду, написанному на С++. Отметим следующие:


  1. Можно уменьшить количество включений заголовочных файлов в другие файлы проекта, что сокращает время компиляции, снижает замусоривание пространств имен неиспользуемыми именами, предупреждает потенциальные конфликты имен;
  2. Можно реализовать решения, полностью разделяющие интерфейс и реализацию (непрозрачные указатели);
  3. Можно разрывать циклические зависимости;
  4. Можно снизить использование нетипизированных указателей void*, что повышает надежность и читаемость кода.

Грамотное использование неполных объявлений — один из признаков профессионального кода.

Читать дальше →

Ужасное состояние двоичной совместимости Linux (и что с ним делать)

Level of difficultyMedium
Reading time20 min
Views19K

Двоичная совместимость в Linux омрачена одним аспектом, который часто упускают из виду при рассмотрении выпуска ПО для Linux. В этой статье я расскажу, как можно увидеть этот аспект, как решать эту проблему при выпуске современного ПО и что же именно нужно сделать, чтобы устранить её полностью.

Читать далее

Необычный интерфейс

Level of difficultyMedium
Reading time10 min
Views16K

Собрал для вас подборку редких, необычных и малоизвестных UI-библиотек — для построения интерфейсов в играх, на устройствах и десктопном ПО.

Читать далее

Scala/Chisel против SystemVerilog: генерируем сложные цифровые схемы

Level of difficultyMedium
Reading time16 min
Views7.8K

В наши дни общепризнанный стандарт для RTL-описаний — это язык SystemVerilog, но популярность сейчас набирает его альтернатива, Chisel. Далее я расскажу подробней об этом языке, его преимуществах, недостатках и рисках, связанных с переходом на Chisel со стандартного стека. Отдельно остановлюсь на функциональном программировании — возможности Chisel, которой нет в SystemVerilog, — и на дополнительных возможностях Chisel, улучшающих механизм переиспользования модулей. А также о том, почему код на Chisel менее подвержен ошибкам и всегда работает. Ну, почти всегда.

Читать далее

Как malloc() и free() управляют памятью в C

Level of difficultyEasy
Reading time8 min
Views20K

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

Сегодня рассмотрим, почему free() не всегда освобождает память, как работает malloc(), когда glibc действительно возвращает память в ОС, и как избежать фрагментации хипа. А так же напишем кастомный аллокатор.

Читать далее

Стандарты и шаблоны для ТЗ на разработку ПО

Reading time7 min
Views855K

Введение


Недавно ко мне обратились, чтобы я посоветовал стандарты для написания технического задания (ТЗ) на разработку автоматизированных систем (АС) и программного обеспечения (ПО). Вот думаю, сейчас зайду в Яндекс, найду подходящую статейку и отправлю её. Но не тут-то было! Одной статьи, где перечисляются стандарты для ТЗ, включая шаблоны и примеры готовых документов, я не нашел. Придется сделать такую статейку самому…

И так, основные стандарты, методологии и своды знаний, где упоминается ТЗ или SRS (Software (or System) Requirements Specification):

• ГОСТ 34
• ГОСТ 19
• IEEE STD 830-1998
• ISO/IEC/ IEEE 29148-2011
• RUP
• SWEBOK, BABOK и пр.
Читать дальше →

Information

Rating
Does not participate
Location
Мытищи, Москва и Московская обл., Россия
Date of birth
Registered
Activity

Specialization

System Software Engineer, Hardware Engineer
Senior
From 225,000 ₽
C++
Qt
Verilog HDL
VHDL
C
Git
Linux