Pull to refresh
8
-0.1
Евгений @Genoik

User

Send message

60 антипаттернов для С++ программиста, часть 7 (совет 31 — 35)

Level of difficultyEasy
Reading time5 min
Views3.1K

1053_60_cpp_antipatterns_ru/image2.png


Перед вами обновлённая коллекция вредных советов для C++ программистов, которая превратилась в целую электронную книгу. Всего их 60, и каждый сопровождается пояснением, почему на самом деле ему не стоит следовать. Всё будет одновременно и в шутку, и серьёзно. Как бы глупо ни смотрелся вредный совет, он не выдуман, а подсмотрен в реальном мире программирования.

Читать дальше →
Total votes 12: ↑11 and ↓1+10
Comments23

Вредные советы: как заставить программиста работать лучше

Reading time5 min
Views35K

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

Узнать правила
Total votes 53: ↑39 and ↓14+25
Comments72

USB4: все тот же USB?

Reading time8 min
Views31K

В конце 2020 года ожидается выход устройств с поддержкой интерфейсов нового поколения USB4/Thunderbolt 4. Данные интерфейсы похожи, однако имеют ряд принципиальных отличий. Среди таких отличий можно выделить наиболее значимое: спецификации на USB4 общедоступные и любой желающий может изучить основные принципы работы данного интерфейса, в отличие от Thunderbolt 4.


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


Более подробную информацию можно найти в спецификации на USB4.

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

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

Reading time11 min
Views110K

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

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

История потоковых мультипроцессоров Nvidia

Reading time9 min
Views16K

Последние выходные я потратил на освоение программирования CUDA и SIMT. Это плодотворно проведённое время закончилось почти 700-кратным ускорением моего «рейтрейсера на визитке» [1] — с 101 секунд до 150 мс.

Такой приятный опыт стал хорошим предлогом для дальнейшего изучения темы и эволюции архитектуры Nvidia. Благодаря огромному объёму документации, опубликованному за долгие годы «зелёной» командой, мне удалось вернуться назад во времени и вкратце пройтись по удивительной эволюции её потоковых мультипроцессоров.

В этой статье мы рассмотрим:

Год    Поколение       Серия      Кристалл    Техпроцесс      Самая мощная карта
===========================================================================
2006    Tesla      GeForce 8          G80        90 nm             8800 GTX 
2010    Fermi      GeForce 400      GF100        40 nm              GTX 480
2012    Kepler     GeForce 600      GK104        28 nm              GTX 680
2014    Maxwell    GeForce 900      GM204        28 nm          GTX  980 Ti
2016    Pascal     GeForce 10       GP102        16 nm          GTX 1080 Ti
2018    Turing     GeForce 20       TU102        12 nm          RTX 2080 Ti

Тупик


Вплоть до 2006 года архитектура GPU компании NVidia коррелировала с логическими этапами API рендеринга[2]. GeForce 7900 GTX, управлявшаяся кристаллом G71, состояла из трёх частей, занимавшихся обработкой вершин (8 блоков), генерацией фрагментов (24 блоков), и объединением фрагментов (16 блоков).


Кристалл G71. Обратите внимание на оптимизацию Z-Cull, отбрасывающую фрагмент, не прошедший бы Z-тест.

Эта корреляция заставила проектировщиков угадывать расположение «узких места» конвейера для правильной балансировки каждого из слоёв. С появлением в DirectX 10 ещё одного этапа — геометрического шейдера, инженеры Nvidia столкнулись со сложной задачей балансировки кристалла без знания того, насколько активно будет использоваться этот этап. Настало время для перемен.
Читать дальше →
Total votes 26: ↑25 and ↓1+24
Comments3

История моей трудовой деятельности в ООО «Опен Продукт»

Reading time12 min
Views104K


Часть первая. Конфликт



Среда, 4 марта 2020, полдень

Я отдыхаю дома. Звонит наш техдир Рома:
— Миша, когда ты будешь на работе?
— Я решил сегодня остаться дома.
— Хорошо, я передам руководству
— По ТК есть норма, что если 15 дней задержка, то можно не выходить
(на тот момент я не видел зарплаты больше месяца)
— Да, я знаю
Рома перезванивает мне через 15 мин:
— Во сколько ты можешь приехать за зарплатой?
— Давай уже завтра, как обычно
— Хорошо, тогда до завтра

Читать дальше →
Total votes 368: ↑348 and ↓20+328
Comments590

Анатомия накопителей: жёсткие диски

Reading time8 min
Views114K
image

Он магнитный. Он электрический. Он фотонный. Нет, это не новое супергеройское трио из вселенной Marvel. Речь идёт о хранении наших драгоценных цифровых данных. Нам нужно где-то их хранить, надёжно и стабильно, чтобы мы могли иметь к ним доступ и изменять за мгновение ока. Забудьте о Железном человеке и Торе — мы говорим о жёстких дисках!

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

You spin me right round, baby


Механический накопитель на жёстких дисках (hard disk drive, HDD) был стандартом систем хранения для компьютеров по всему миру в течение более 30 лет, но лежащие в его основе технологии намного старше.

Первый коммерческий HDD компания IBM выпустила в 1956 году, его ёмкость составляла аж 3,75 МБ. И в целом, за все эти годы общая структура накопителя не сильно изменилась. В нём по-прежнему есть диски, которые используют для хранения данных намагниченность, и есть устройства для чтения/записи этих данных. Изменился же, и очень сильно, объём данных, который можно на них хранить.

В 1987 году можно было купить HDD на 20 МБ примерно за 350 долларов; сегодня за такие же деньги можно купить 14 ТБ: в 700 000 раз больший объём.

Мы рассмотрим устройство не совсем такого размера, но тоже достойное по современным меркам: 3,5-дюймовый HDD Seagate Barracuda 3 TB, в частности, модель ST3000DM001, печально известную своим высоким процентом сбоев и вызванных этим юридических процессов. Изучаемый нами накопитель уже мёртв, поэтому это будет больше похоже на аутопсию, чем на урок анатомии.
Total votes 45: ↑44 and ↓1+43
Comments26

Как работает тайловый растеризатор

Reading time29 min
Views8.3K
Если вы следили за моей серией постов «Растеризация за одни выходные», но не компилировали и не запускали демо, то для вас станет большим сюрпризом, если я скажу, насколько медленными они оказались. В конце серии постов я упомянул существующие техники, позволяющие ускорить мучительно тормозной растеризатор. Теперь настало время двигаться дальше и посмотреть, как они применяются на практике.

Как часть этого проекта я реализовал Tyler — тайловый растеризатор, который мы проанализируем в данной статье. Моей целью при разработке этого проекта были масштабируемость. настраиваемость и понятность растеризатора для людей, которые хотят немного больше понять в этой теме и поэкспериментировать с ней. Эта статья достаточно сильно связана с тем, что объяснено в серии «Растеризация за одни выходные», поэтому лучше будет прочитать и её. Я не буду предполагать, что вы её изучили, но в статье будет больше высокоуровневых объяснений — я не хочу повторять уже сказанное и то, что можно найти в других источниках.

Краткий обзор


Тайловый рендеринг (tile-based rendering или tiled rendering) — это улучшенный по сравнению с традиционным immediate-mode-рендерингом; в нём render target (RT) разделяется на тайлы (т.е. субрегионы кадрового буфера), каждый из которых содержит примитивы, которые можно рендерить в тайлы по отдельности.


Обратите внимание на выражение «по отдельности», потому что оно подчёркивает одно из самых больших преимуществ этой техники по сравнению с immediate-mode: ограничение всех операций доступа внутри тайла буферами цветов/глубин, которые остаются в «медленной» DRAM благодаря использованию отдельного тайлового кэша на чипе.
Читать дальше →
Total votes 13: ↑13 and ↓0+13
Comments2

Оживляем гексапода. Часть третья

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

Цикл предыдущих статей:


Как мы печатали гексапода и что из этого получилось
Оживляем гексапода. Часть первая
Оживляем гексапода. Часть вторая
Читать дальше →
Total votes 13: ↑13 and ↓0+13
Comments4

Вредные советы работодателю. Как “правильно” взаимодействовать с разработчиком

Reading time12 min
Views21K
В последнее время мне везет — я работаю в компаниях, где по-настоящему уважают разработчиков. Но так было не всегда, приходилось сталкиваться с разными подходами к взаимодействию. Хотел бы я сказать, что “дикие нравы” уходят в прошлое, но рассказы коллег об их предыдущих местах работы да и мои наблюдения за рынком опровергают это утверждение.

Что ж, поговорим о том, как “правильно” взаимодействовать с разработчиком, например лично со мной…

image

(Если всей семьей купаться вы отправились к реке,
не мешайте папе с мамой загорать на берегу.
Не устраивайте крика, дайте взрослым отдохнуть.
Ни к кому не приставая, постарайтесь утонуть, — Григорий Остер)...

Читать дальше →
Total votes 35: ↑34 and ↓1+33
Comments31

Оживляем гексапода. Часть вторая

Reading time12 min
Views3.2K

Видео двигающегося гексапода


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

Total votes 11: ↑11 and ↓0+11
Comments4

Оживляем гексапода. Часть первая

Reading time9 min
Views8.9K
В прошлой статье мы поделились опытом создания гексапода с использованием технологии 3D печати. Теперь речь пойдет о программной составляющей, которая позволила его оживить.

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

Устройство гексапода


На текущий момент в качестве основного контроллера используется плата UNO R3 с Wi-Fi ESP8266. По сути эта плата с двумя контроллерами на борту, взаимодействующих между собой через UART-интерфейс.



Несмотря на то, что Uno имеет довольно ограниченный объем вычислительных ресурсов, ее достаточно чтобы научить робота выполнять базовые команды:

  • движение по прямой с заданной скоростью и продолжительностью
  • круговое движение влево или вправо (разворот на месте)
  • принимать заданные положения конечностей

ESP8266 отвечает за организацию беспроводного канала связи и служит шлюзом, через который Uno получает управляющие команды.
Читать дальше →
Total votes 21: ↑21 and ↓0+21
Comments19

TDD для микроконтроллеров. Часть 2: Как шпионы избавляют от зависимостей

Reading time17 min
Views6.6K
TDD для микроконтроллеров. Часть 1: Первый полет
TDD для микроконтроллеров. Часть 2: Как шпионы избавляют от зависимостей
TDD для микроконтроллеров. Часть 3: Запуск на железе


В предыдущей статье мы начали освещать тему эффективности применения методологии TDD для микроконтроллеров (далее – МК) на примере разработки прошивки для STM32. Мы выполнили следующее:


  1. Определили цель и инструменты разработки.
  2. Настроили IDE и фреймворк для написания тестов.
  3. Написали тест-лист для разрабатываемого функционала.
  4. Создали первый простой тест и запустили его.

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

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

Как мы потеряли «Мир»: пожар на космической станции, столкновение с грузовиком «Прогресс», разгерметизация

Reading time23 min
Views86K
20-го февраля 2020-го года исполняется 34 года с момента запуска и ввода в эксплуатацию космической станции «Мир». Станции, которая была обитаема с 13 марта 1986 года по 16 июня 2000 года. И могла быть обитаема ещё, если бы…

Наверняка многие из вас смотрели фильм «Гравитация», который был признан одним из лучших фильмов о космосе в истории мирового кино, но мало кто знает, что на космической станции «Мир» произошли не менее драматичные события.



23 февраля 1997 года на станции «Мир» должен был погибнуть весь международный экипаж – 4 российских космонавта, один немецкий и один американский астронавт. И тогда станцию «Мир» пришлось бы затопить не планово – весной 2001 года, а вынужденно, на 4 года раньше, с мертвым экипажем на борту. Об этой экспедиции до 2006 года принято было молчать, и до сих пор о ней мало что известно, кроме самих космонавтов и руководителей полета, никто не знал подробностей случившегося. В 2006-м, космонавты 23 международной экспедиции согласились рассказать, что же на самом деле происходило на космической станции, заложниками которой они оказались и Первый канал снял отличный документальный фильм об этом — «Некуда бежать. Пожар на космической станции», который сегодня доступен на Youtube, сайт студии Роскосмоса, почему-то выдаёт ошибку. Возможно потому, что там сказали не всю правду или потому, что правда не совсем та.

Пожар потушили, но он имел страшные последствия. Несколько месяцев космонавтам пришлось жить при температуре более +40 С, дышать ядовитыми парами этиленгликоля, а затем спасать станцию от разгерметизации, вызванной столкновением с 10-тонным грузовым кораблем «Прогресс».

И совсем недавно мой друг нашёл версию произошедшего столкновения от американцев (смотреть с 1:18:00), где астронавт Майкл Фоул, непосредственный участник событий, утверждает, что столкновение было результатом эксперимента по ручной стыковке со станцией, а что самого эксперимента не должно было быть.
Читать дальше →
Total votes 188: ↑172 and ↓16+156
Comments526

DirectX 12 — от Леонардо да Винчи к современному искусству

Reading time10 min
Views14K

Компьютерная графика — обширная и быстроразвивающаяся дисциплина. С каждым годом интерфейсы прикладного программирования становятся более гибкими, что позволяет на их основе реализовывать более сложные алгоритмы формирования и обработки изображений. Однако возможности интерактивной графики не достигли уровня пакетов 3d-моделирования и визуализации. Все это подталкивает к активным исследованиям в данной области.


image


DirectX 12 — компонент интерфейса программирования высокопроизводительной графики. Основные цели нового интерфейса — снижение CPU-оверхеда драйвера, понижение уровня абстрагирования оборудования, возможность объединения графических карт на уровне API (до этого существовали только vender-specific решения CrossFireX, NVIDIA SLI). Официально выпущен Microsoft в июле 2015.

Читать дальше →
Total votes 10: ↑8 and ↓2+6
Comments5

Learn OpenGL. Урок 6.4 – IBL. Зеркальная облученность

Reading time26 min
Views18K
OGL3
В предыдущем уроке мы подготовили нашу модель PBR для работы вместе с методом IBL – для этого нам потребовалось заранее подготовить карту облученности, которая описывает диффузную часть непрямого освещения. В этом уроке мы обратим внимание на вторую часть выражения отражающей способности – зеркальную:

$L_o(p,\omega_o) = \int\limits_{\Omega} (k_d\frac{c}{\pi} + k_s\frac{DFG}{4(\omega_o \cdot n)(\omega_i \cdot n)}) L_i(p,\omega_i) n \cdot \omega_i d\omega_i$


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

Готовим Physically Based Rendering + Image-based Lighting. Теория+практика. Шаг за шагом

Reading time24 min
Views36K
Хей, привет. 2017 год на дворе. Даже простенькие мобильные и браузерные приложения начинают потихоньку рисовать физически корректное освещение. Интернет пестрит кучей статей и готовых шейдеров. И кажется, что это должно быть так просто тоже обмазаться PBR… Или нет?

В действительности же честный PBR сделать достаточно сложно, потому что легко достичь похожего результата, но сложно правильного. И в интернете полно статей, которые делают именно похожий результат, вместо правильного. Отделить мух от котлет в этом хаосе становится сложно.
Поэтому цель статьи не только разобраться, что же такое PBR и как он работает, но и научиться писать его. Как отлаживать, куда смотреть, и какие ошибки типично можно допустить.
Статья рассчитана на людей, которые в достаточной мере уже знают hlsl и неплохо знакомы с линейной алгеброй, и можете написать свой простейший неPBR Phong свет. В общем я постараюсь как можно проще объяснить, но рассчитываю на то, что некоторый опыт работы с шейдерами вы уже имеете.
Читать дальше →
Total votes 46: ↑46 and ↓0+46
Comments11

Шесть задачек для Front-End разработчика

Reading time2 min
Views45K

1. Форма кредитной карты


Клёвая форма кредитной карты с гладкими и приятными микровзаимодействиями. Включает форматирование чисел, проверку и автоматическое определение типа карты. Она построена на Vue.js, а также полностью адаптивная. (Посмотреть можно здесь.)

image

credit-card-form

Чему научитесь:

  • Обрабатывать и валидировать формы
  • Обрабатывать события (например, при изменении полей)
  • Разберетесь как отображать и размещать элементы на странице, особенно данные кредитной карты, которая поверх формы
Читать дальше →
Total votes 46: ↑41 and ↓5+36
Comments43

«Скользкие» места C++17

Reading time9 min
Views34K
image

В последние годы C++ шагает вперед семимильными шагами, и угнаться за всеми тонкостями и хитросплетениями языка бывает весьма и весьма непросто. Уже не за горами новый стандарт, однако внедрение свежих веяний — процесс не самый быстрый и простой, поэтому, пока есть немного времени перед C++20, предлагаю освежить в памяти или открыть для себя некоторые особо «скользкие» места актуального на данный момент стандарта языка. 

Сегодня я расскажу: почему if constexpr не является заменой макросов, каковы «внутренности» работы структурного связывания (structured binding) и его «подводные» камни и правда ли, что теперь всегда работает copy elision и можно не задумываясь писать любой return. 

Если не боишься немного «испачкать» руки, копаясь во «внутренностях» языка, добро пожаловать под кат.
Читать дальше →
Total votes 95: ↑94 and ↓1+93
Comments112

Когда история ненастоящая: винзавод «Коктебель», фейковые вина и уроки маркетинга

Reading time7 min
Views65K
Наверное, странно видеть на Хабре пост про винзавод (ладно бы пиво), однако речь, на самом деле, пойдет про сторителлинг и фактчекинг. За основу взята экскурсия по заводу марочных вин «Коктебель», в которой много легенд, баек и вредного маркетинга.



Читать дальше →
Total votes 141: ↑128 and ↓13+115
Comments250
1
23 ...

Information

Rating
Does not participate
Location
Киров (Кировская обл.), Кировская обл., Россия
Registered
Activity