Pull to refresh
3
0
Send message

Когда private, но очень хочется public

Level of difficultyMedium
Reading time8 min
Views20K

В 2016 году меня пригласили помочь с разработкой экшн-очков "ORBI", это такие водонепроницаемые очки с несколькими камерами, которые могут стримить 360видео сразу на смартфон, ну а если с ними поплавать, тоже ничего сломаться не должно. (https://www.indiegogo.com/projects/orbi-prime-the-first-360-video-recording-eyewear#/). Собственно моей задачей было написать алгоритм склейки видео потока с четырех камер в одно большое 360* видео, на тот момент задача не очень сложная, но требующая немного специфичных знаний opencv и окружения. Но статья не об этом, потому что теперь это все оберегаемое IP, а про то как мы легальными и не очень средствами языка С++ писали тестовое окружение для используемых классов и соответственно алгоритмов. Да вы скажете, что там такого - сделал гетеры да тестируй себе на здоровье. А если гетера нет или переменная класса спрятана в private секцию и возможность изменить хедер отсутствует. Или вендор либы забыл положить хедеры, и прислал только скан исходников (китайские друзья они такие), а тестировать это надо? Помножив желание написать тесты на утренний кофф и приплюсовав дикий энтузиазм, можно получить очень много ошибок компиляции интересного опыта. Как говорил один мой знакомый лид: "Нет такого кода, который мы не сможем порефакторить, особенно за утренним кофф".

private not public?
Total votes 11: ↑10 and ↓1+13
Comments39

Проектируем узлы печатной платы с учетом особенностей монтажа при массовом производстве. Подход DFA

Reading time18 min
Views15K

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

Подход, на который мы будем опираться, называется DFA — Design for Assembly (проектирование для сборки). Набор методов DFA гарантирует возможность сборки компонентов на плате, когда она поступит на монтажный участок, и позволяет отправлять плату в тираж без страха потерять деньги и время.

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

5 книг, которые стоит прочесть С++-разработчику

Reading time4 min
Views17K

Современным разработчикам, чтобы совершенствовать профессиональные навыки, требуется постоянно заниматься самообразованием. Как говорила Алиса из небезызвестной книги Льюиса Кэрролла: «Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее». И это действительно так — останавливаться не стоит.

Один из самых распространённых инструментов самообразования — книги. Сегодня поговорим о полезных для разработчиков С++ изданиях, часть которых — просто must have. Всего в подборке пять вариантов, некоторые из них, вероятно, покажутся читателям необычным выбором. Но все они полезны для программистов. Если у вас есть собственные предпочтения, которые в подборку не попали, пишите о них в комментариях, с удовольствием ознакомимся.

Читать далее
Total votes 9: ↑7 and ↓2+14
Comments8

VS Code, python, контейнеры — как обуздать эту триаду и разрабатывать внутри контейнера

Level of difficultyMedium
Reading time16 min
Views41K

Как пользоваться VS Code в полную силу


image


Это небольшой туториал о настройке VS Code для работы с python. Здесь вы не увидите каких-то божественных откровений — тут будет просто мой опыт о том, как сделать свою работу/хобби немного комфортнее и почему я пришел именно к такой конфигурации.

Читать дальше →
Total votes 42: ↑40 and ↓2+55
Comments18

«Быть руководителем — скучно»: 0b100 ошибок, породивших популярный IT-миф

Reading time9 min
Views6.2K
Привет, меня зовут Вадим Карасев, я — руководитель группы разработки в команде KasperskyOS. Мои коллеги по «Лаборатории Касперского» недавно провели митап про карьерные ловушки тимлидов. Там в очередной раз подняли, на мой взгляд, достаточно острую проблему. Многие разработчики не хотят быть руководителями, потому что считают, что кодить будешь меньше, работа будет наполнена скучными управленческими обязанностями и все в таком духе. В итоге многие из тех, кто мог бы быть хорошим руководителем, не решаются даже попробовать.

image

На своем примере могу сказать, что это не так. Идти в руководство — логичный и захватывающий шаг.

В этой статье поговорим о стереотипе, будто переход из разработчика в руководители лишает человека интересных задач и карьерного развития. Разберу некоторые типовые ошибки начинающего (и не только) руководителя, приводящие к формированию этого впечатления. Постараюсь дать советы, на что смотреть, чтобы оценить ситуацию, и какие меры предпринять, чтобы жить стало «бодрее и веселее».
Читать дальше →
Total votes 10: ↑8 and ↓2+10
Comments10

Настраиваем удобную сборку проектов в Visual Studio

Reading time43 min
Views85K
Эта статья является руководством по настройке сборки C++ проектов Visual Studio. Частично она сводилась из материалов разрозненных статей на эту тему, частично является результатом реверс-инжениринга стандартных конфигурационных файлов Студии. Я написал ее в основном потому что полезность документации от самой Microsoft на эту тему стремится к нулю и мне хотелось иметь под рукой удобный референс к которому в дальнейшем можно будет обращаться и отсылать других разработчиков. Visual Studio имеет удобные и широкие возможности для настройки по-настоящему удобной работы со сложными проектами и мне досадно видеть что из-за отвратительной документации эти возможности очень редко сейчас используются.

В качестве примера попробуем сделать так чтобы в Студию можно было добавлять flatbuffer schema, а Студия автоматически вызывала flatc в тех случаях когда это нужно (и не вызывала — когда изменений не было) и позволяла задавать настройки напрямую через File Properties



Укрощаем MSBuild
Total votes 42: ↑39 and ↓3+36
Comments37

Feature freeze С++23. Итоги летней встречи комитета

Reading time8 min
Views24K

На недавней встрече комитет C++ «прорвало», и в черновую версию C++23 добавили:

  • std::mdspan
  • std::flat_map
  • std::flat_set
  • freestanding
  • std::print("Hello {}", "world")
  • форматированный вывод ranges
  • constexpr для bitset, to_chars/from_chars
  • std::string::substr() &&
  • import std;
  • std::start_lifetime_as
  • static operator()
  • [[assume(x > 0)]];
  • 16- и 128-битные float
  • std::generator
  • и очень много другого
Подробности
Total votes 63: ↑62 and ↓1+80
Comments225

Памятка/шпаргалка по SQL

Reading time29 min
Views995K

Доброго времени суток, друзья!


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

Читать дальше →
Total votes 41: ↑37 and ↓4+42
Comments18

Список ноотропов, покупка которых не окажется пустой тратой денег

Reading time5 min
Views305K

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

Читать далее
Total votes 95: ↑59 and ↓36+49
Comments238

Как я искал работу в США во время пандемии, подался на 200 вакансий и получил оффер на $380K

Reading time41 min
Views42K

Украинский профильный ресурс DOU.UA опубликовал статью о нелегком пути релокации специалиста в США во время пандемии, где он также отвечает на дополнительные вопросы и комментарии.

Адам Леос — Senior Software Engineer в Roku. Пару лет назад он принял решение о релокации и в итоге выбрал своей целью США. Всего за три месяца Адам с нуля собрал все необходимое для подачи на визу О1, но потом в историю вмешалась пандемия. О том, с какими трудностями он столкнулся из-за карантина, как искать работу на американском IT-рынке, как получить большое количество офферов и выторговать самую выгодную компенсацию, разработчик рассказал в интервью DOU.UA

Читать далее
Total votes 36: ↑28 and ↓8+31
Comments74

Multithreading

Reading time77 min
Views197K

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

Читать далее
Total votes 17: ↑15 and ↓2+18
Comments3

Приёмы неблокирующего программирования: полные барьеры памяти

Reading time9 min
Views9.1K

В первых двух статьях цикла мы рассмотрели четыре способа упорядочить доступ к памяти: load-acquire и store-release операции в первой части, барьеры чтения и записи в память — во второй. Теперь пришла очередь познакомиться с полными барьерами памяти, их влиянием на производительность, и примерами использования полных барьеров в ядре Linux.


Рассмотренные ранее примитивы ограничивают возможный порядок исполнения операций с памятью четырьмя различными способами:


  • Load-acquire операции выполняются перед последующими чтениями и записями.
  • Store-release операции выполняются после предыдущих чтений и записей.
  • Барьеры чтения разделяют предыдущие и последующие чтения из памяти.
  • Барьеры записи разделяют предыдущие и последующие записи в память.

Внимательный читатель заметил, что одна из возможных комбинаций в этом списке отсутствует:

Чтение выполняется... Запись выполняется...
… после чтения smp_load_acquire(), smp_rmb() smp_load_acquire(), smp_store_release()
… после записи ??? smp_store_release(), smp_wmb()
Оказывается, обеспечить глобальный порядок записей и последующих чтений из памяти гораздо сложнее. Процессоры вынуждены прилагать отдельные усилия для этого. Сохранение такого порядка стоит недёшево и требует явных инструкций. Чтобы понять причину этих особенностей, нам придётся спуститься на уровнь ниже и присмотреться к тому, как процессоры работают с памятью.
Читать дальше →
Total votes 10: ↑10 and ↓0+10
Comments4

Почему вы должны попробовать Rust

Reading time16 min
Views44K

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

Как убедиться, что в моем приложении нет проблем и уязвимостей, связанных с неправильной работой с памятью? Как быть уверенным в том, что любой доступ к общим объектам правильно защищен? Как свести к минимуму любую работу, не связанную напрямую с написанием кода?

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

Читать далее
Total votes 68: ↑60 and ↓8+76
Comments153

Шпаргалка полезных команд GDB

Reading time3 min
Views51K

Для кого она нужна?


1) начинающих реверсеров, знающих особенности обратного проектирования, и желающих изучить такой отладчик как GDB


2) как подсказка тем кто постоянно работает с IDA, Ghidra или любым другим мощным и надежным инструментом, но в силу тех или иных обстоятельств решить задачу проще и быстрее с помощью GDB, и не очень хочется залезать в официальную документацию и снова все вспоминать

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

40 ситуаций, о которых вас спросят на собеседовании

Reading time4 min
Views28K
Конечно, собрать все вопросы, которые могут быть вам заданы, невозможно. Но мы попытались. В основном это вопросы, касающиеся конкретных ситуаций из вашей жизни. По крайней мере, у вас есть время вспомнить такие и рассказать о них.

Читать дальше →
Total votes 11: ↑8 and ↓3+5
Comments0

11 фраз, которые нельзя произносить на собеседовании // Инфографика

Reading time2 min
Views28K
Да, мы знаем, что на собеседовании все самые важные слова вылетают из головы и получается что-то вроде «да я… это… работал в компании, у меня есть навыки… коммуникации». В общем, тренируемся и разбираемся в том, почему некоторые фразы лучше оставить при себе.


Читать дальше →
Total votes 20: ↑11 and ↓9+2
Comments9

Отладка Makefile /часть 1/

Reading time11 min
Views19K

Отладка makefile - это что-то из черной магии. К несчастью, не существует такой вещи как makefile отладчик, чтобы изучить ход выполнения конкретного правила или как разворачивается переменная. Большую часть отладки можно выполнить с помощью обычных print’ов и проверкой makefile. Конечно, GNU make немного помогает своими встроенными методами и опциями командной строки. Один из лучших методов отладки makefile это добавить отладочные перехваты (hooks) и использовать техники безопасного программирования, на которые можно будет опереться, когда дела пойдут совсем плохо. Далее представлено несколько основных техник отладки и практик безопасного программирования, которые будут, на мой взгляд, наиболее полезными.

Дай две!
Total votes 31: ↑31 and ↓0+31
Comments5

Эффекты травления

Reading time7 min
Views8K

До недавнего времени я думал, что люди, которые верят в прямоугольные печатные проводники, примерно столь же нормальны, как те, кто верит в квадратные волны и плоскую землю. Однако, когда меня еще раз спросили об этом, я понял, что всё не так очевидно, как мне казалось прежде, – причем не только для новичков, но и для всех остальных. За последние годы я изучил множество книг по проектированию печатных плат и целостности сигналов, но, читая большую часть отраслевой литературы, вы не узнаете, что проводники имеют не прямоугольную, а какую-то другую форму. Интересно, правда?
Читать дальше →
Total votes 24: ↑24 and ↓0+24
Comments5

std::atomic. Модель памяти C++ в примерах

Reading time11 min
Views118K

Для написания эффективных и корректных многопоточных приложений очень важно знать какие существуют механизмы синхронизации памяти между потоками исполнения, какие гарантии предоставляют элементы многопоточного программирования, такие как мьютекс, join потока и другие. Особенно это касается модели памяти C++, которая была создана сложной таковой, чтобы обеспечивать оптимальный многопоточный код под множество архитектур процессоров. Кстати, язык программирования Rust, будучи построенным на LLVM, использует модель памяти такую же, как в C++. Поэтому материал в этой статье будет полезен программистам на обоих языках. Но все примеры будут на языке C++. Я буду рассказывать про std::atomic, std::memory_order и на каких трех слонах стоят атомики.

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

Information

Rating
5,998-th
Registered
Activity