Как стать автором
Обновить
11
0
Антон @antoxa950

Программист

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

Создание архитектуры программы или как проектировать табуретку

Время на прочтение25 мин
Количество просмотров693K
Взявшись за написание небольшого, но реального и растущего проекта, мы «на собственной шкуре» убедились, насколько важно то, чтобы программа не только хорошо работала, но и была хорошо организована. Не верьте, что продуманная архитектура нужна только большим проектам (просто для больших проектов «смертельность» отсутствия архитектуры очевидна). Сложность, как правило, растет гораздо быстрее размеров программы. И если не позаботиться об этом заранее, то довольно быстро наступает момент, когда ты перестаешь ее контролировать. Правильная архитектура экономит очень много сил, времени и денег. А нередко вообще определяет то, выживет ваш проект или нет. И даже если речь идет всего лишь о «построении табуретки» все равно вначале очень полезно ее спроектировать.

К моему удивлению оказалось, что на вроде бы актуальный вопрос: «Как построить хорошую/красивую архитектуру ПО?» — не так легко найти ответ. Не смотря на то, что есть много книг и статей, посвященных и шаблонам проектирования и принципам проектирования, например, принципам SOLID (кратко описаны тут, подробно и с примерами можно посмотреть тут, тут и тут) и тому, как правильно оформлять код, все равно оставалось чувство, что чего-то важного не хватает. Это было похоже на то, как если бы вам дали множество замечательных и полезных инструментов, но забыли главное — объяснить, а как же «проектировать табуретку».

Хотелось разобраться, что вообще в себя включает процесс создания архитектуры программы, какие задачи при этом решаются, какие критерии используются (чтобы правила и принципы перестали быть всего лишь догмами, а стали бы понятны их логика и назначение). Тогда будет понятнее и какие инструменты лучше использовать в том или ином случае.

Данная статья является попыткой ответить на эти вопросы хотя бы в первом приближении.
Читать дальше →
Всего голосов 88: ↑85 и ↓3+82
Комментарии45

Как стать лучшим в мире в какой-то нише

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


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


Давайте подумаем, что нужно, чтобы стать игроком НБА. Большинство профессиональных баскетболистов оттачивали мастерство практически с младенчества. Годы бесконечных тренировок, сборов и игр помогли им отработать различные важные в этом спорте навыки: броски, ведение мяча, пасы, защита и так далее.

Как вы можете себе представить, вероятность стать игроком НБА очень низкая: всего есть 30 команд по 15 игроков в каждой, что дает в общей сложности около 450 человек — не так уж много, особенно если учесть, что в молодежный баскетбол играет более полумиллиона ребят. Несложные подсчеты показывают, что меньше чем один из тысячи становится профессионалом.

image
Источник: Томас Пуэйо

Так что давайте будем реалистами: вы не попадете в НБА, не станете ни президентом, ни величайшим писателем в мире, ни лучшим шахматистом, ни самым искусным оратором. Вы никогда не станете лучшим в мире в каком-либо конкретном навыке: всегда найдется кто-то, кто выкладывается больше, у кого лучше генетические данные, кому больше везет (или всё сразу).

image
Большинство людей (в синей области) слабо владеют конкретным навыком. Если немного постараться, вы быстро попадете в 10% лучших (зеленая область). Но как только вы присоединились к этой элите, двигаться дальше становится всё сложнее, потому что ваши конкуренты всё чаще — люди, глубоко преданные этому делу.

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

Переведено в Alconost
Читать дальше →
Всего голосов 96: ↑89 и ↓7+82
Комментарии115

Менеджмент памяти или как реже стрелять себе в ногу

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

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


Зачем это необходимо? Программа — это последовательность команд по обработке данных (в самом общем случае). Эти данные необходимо некоторым образом хранить, загружать, передавать и т.д. Все эти операции не происходят мгновенно, следовательно, они непосредственно влияют на скорость работы вашего конечного приложения. Умение оптимально управлять данными в процессе работы позволит вам создавать весьма нетривиальные и очень требовательные к ресурсам программы.


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



Невозможно все держать в памяти. Но если не успел подгрузить, то получишь мыло

Читать дальше →
Всего голосов 63: ↑62 и ↓1+61
Комментарии49

Десятка лучших докладов C++ Russia и плейлист конференции в открытом доступе

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

Этот хабрапост объединяет десять лучших докладов от таких спикеров, как Nicolai Josuttis, Timur Doumler, Андрей Давыдов и многих других.


C++17/20/23, concepts, immutable data structures, concurrency, parallelism, metaprogramming — всё это темы конференции C++ Russia 2019, прошедшей этой весной в Москве. Более шести сотен участников, известные международные спикеры, глубокие доклады. Обратите внимание — доклады такие, что устареют очень нескоро, а применить полученные знания можно хоть сейчас.



Формат таков:


  • Обязательное видео на YouTube
  • Подробное описание доклада на русском языке (со слайдами, если они есть)
  • Краткая биография докладчика

Не стесняйтесь писать комментарии! Кстати, в плейлисте, опубликованном под катом, есть не только топ-10. И мы выключили рекламу на YouTube, так что никто не будет мешать.

Читать дальше →
Всего голосов 32: ↑31 и ↓1+30
Комментарии0

Почему const не ускоряет код на С/C++?

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

Несколько месяцев назад я упомянул в одном посте, что это миф, будто бы const помогает включать оптимизации компилятора в C и C++. Я решил, что нужно объяснить это утверждение, особенно потому, что раньше я сам верил в этот миф. Начну с теории и искусственных примеров, а затем перейду к экспериментам и бенчмаркам на реальной кодовой базе — SQLite.
Читать дальше →
Всего голосов 109: ↑99 и ↓10+89
Комментарии77

Профилирование со сверхсветовой скоростью: теория и практика. Часть 1

Время на прочтение13 мин
Количество просмотров11K
Привет! Из заголовка вы уже поняли, о чём я собираюсь рассказать. Тут будет много хардкора:
мы обсудим Java, С, С++, ассемблер, немного Linux, немного ядра операционной системы. А ещё разберём практический кейс, поэтому статья будет в трёх больших частях (достаточно объёмных).



В первой мы попробуем выжать всё возможное из существующих профилировщиков.
Во второй части сделаем собственный маленький профилировщик, а в третьей посмотрим, как же профилировать то, что профилировать не принято, потому что существующие инструменты не очень для этого подходят. Если готовы пройти этот путь — жду вас под катом :)
Читать дальше →
Всего голосов 29: ↑29 и ↓0+29
Комментарии3

Как работает видеопроцессор

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

[Прим. пер.: оригинал статьи называется GPU Performance for Game Artists, но, как мне кажется, она будет полезной для всех, кто хочет иметь общее представление о работе видеопроцессора]

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

Мы надеемся, что художники создадут ресурсы, которые не только хорошо выглядят, но и будут эффективны при рендеринге. Если художники немного больше узнают о том, что происходит внутри видеопроцессора, это может оказать большое влияние на частоту кадров игры. Если вы художник и хотите понять, почему для производительности важны такие аспекты, как вызовы отрисовки (draw calls), уровни детализации (LOD) и MIP-текстуры, то прочитайте эту статью. Чтобы учитывать то влияние, которое имеют ваши графические ресурсы на производительность игры, вы должны знать, как полигональные сетки попадают из 3D-редактора на игровой экран. Это значит, что вам нужно понять работу видеопроцессора, микросхемы, управляющей графической картой и несущей ответственность за трёхмерный рендеринг в реальном времени. Вооружённые этим знанием, мы рассмотрим наиболее частые проблемы с производительностью, разберём, почему они являются проблемой, и объясним, как с ними справиться.
Читать дальше →
Всего голосов 54: ↑53 и ↓1+52
Комментарии12

Lock-free структуры данных. Извне: введение в libcds

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

В этой статье я даю краткий обзор того, как применять библиотеку lock-free структур данных libcds. В реализацию я углубляться здесь не буду, — это просто взгляд извне, взгляд со стороны пользователя библиотеки.

Библиотека libcds имеет свою точку зрения на многие известные структуры данных. Отчасти это объясняется целевой областью – lock-free структуры данных довольно минималистичны по набору предоставляемых методов, — отчасти желанием выйти за ограничения и решения стандартной библиотеки STL. Что из этого получилось – решать пользователям libcds.

Кому интересно – добро пожаловать под кат
Читать дальше →
Всего голосов 49: ↑49 и ↓0+49
Комментарии5

Пробуем контрактное программирование С++20 уже сейчас

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


В С++20 появилось контрактное программирование. На текущий момент ни один компилятор ещё не реализовал поддержку этой возможности.


Но есть способ уже сейчас попробовать использовать контракты из C++20, так как это описано в стандарте.

Заинтересовавшихся прошу под кат
Всего голосов 61: ↑60 и ↓1+59
Комментарии54

Маркетинг для стартапа: как привлечь тысячи пользователей со всего мира не потратив и $200

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


Сегодня я расскажу, как подготовить стартап к выходу на Product Hunt, какие шаги стоит предпринять до этого, и как подогревать интерес к проекту в день и после публикации.
Читать дальше →
Всего голосов 24: ↑23 и ↓1+22
Комментарии5

Английский vs. Эсперанто: за кем будущее?

Время на прочтение7 мин
Количество просмотров33K
За последние 50 лет позиции английского языка на международной арене усилились до невиданного ранее уровня. На сегодня в мире примерно 378 миллионов людей говорят на английском в качестве родного и еще от 470 миллионов до 1 миллиарда указывают его как второй язык.

Что примечательно, на английском говорят в 138 государствах мира — такого показатели ранее не достигал ни один международный язык. Поэтому как раз у английского есть все ресурсы, чтобы в обозримом будущем стать lingua franca — всеобщим глобальным языком.

Но есть ли приемлемые альтернативы английскому? Некоторые ученые и энтузиасты считают, что язык эсперанто является одной из них. Действительно ли это так? Давайте узнаем.
Читать дальше →
Всего голосов 20: ↑16 и ↓4+12
Комментарии109

Алгоритм сжатия без потерь Broo и дельта-кодирование, сравнение с Xdelta3. Развитие домашнего проекта

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

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


image


Вступление


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

Читать дальше →
Всего голосов 15: ↑14 и ↓1+13
Комментарии27

Чтобы избавиться от боли в спине вам, возможно, придётся сидеть по-другому

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


Когда я сижу, у меня болит спина.

Это происходит уже последние 10 лет. И неважно, где я нахожусь – на работе, в ресторане, даже дома на диване. Моя поясница кричит: «Прекрати сидеть!»

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

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

Эти средства немного помогли – сначала. Но боль так и не ушла. Поэтому несколько лет назад я решила принять это как должное: сидячее положение причиняет мне боль, и так будет всегда.
Всего голосов 72: ↑62 и ↓10+52
Комментарии231

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

Время на прочтение3 мин
Количество просмотров15K
Как-то, анализируя дефект в разрабатываемом продукте, я наткнулся на архитектурную особенность менеджера памяти, который мы использовали. Дефект приводил к увеличению времени создания некоторых объектов. Особенность архитектуры заключалась в использовании паттерна Singleton при работе с менеджером памяти (далее X allocator). Схематично это выглядит так:

image
Рисунок 1 – Структурная схема работы X allocator

Из схемы видно, что доступ к глобальной куче защищен мьютексом. Такая архитектура, при интенсивном создании однотипных объектов из нескольких потоков, может привести к тому, что потоки будут вставать в очередь на этом мьютексе. А ведь одна из главных особенностей продукта – это возможность его масштабирования за счет увеличения количества потоков обработки (потоков выполняющих одинаковые действия). Поэтому такой подход потенциально может стать узким местом.
Читать дальше →
Всего голосов 20: ↑19 и ↓1+18
Комментарии9

Новая техника атаки WPA2, не требующая наличия клиента на AP

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

 
Участниками проекта hashcat обнаружен новый вектор атаки на беспроводной стандарт WPA2, не требующий классического перехвата "рукопожатия" между клиентом и точкой доступа. Данная уязвимость выявлена в рамках исследования потенциальных проблем безопасности нового протокола WPA3.

Читать дальше →
Всего голосов 44: ↑43 и ↓1+42
Комментарии50

Что каждый программист должен знать про оптимизации компилятора

Время на прочтение17 мин
Количество просмотров80K
Высокоуровневые языки программирования содержат в себе много абстрактных программистских конструкций, таких как функции, условные операторы и циклы — они делают нас удивительно продуктивными. Однако одним из недостатков написания кода на высокоуровневом языке является потенциальное значительное снижение скорости работы программы. Поэтому компиляторы стараются автоматически оптимизировать код и увеличить скорость работы. В наши дни логика оптимизации стала очень сложной: компиляторы преобразуют циклы, условные выражения и рекурсивные функции; удаляют целые блоки кода. Они оптимизируют код под процессорную архитектуру, чтобы сделать его действительно быстрым и компактным. И это очень здорово, ведь лучше фокусироваться на написании читабельного кода, чем заниматься ручными оптимизациями, которые будет сложно понимать и поддерживать. Кроме того, ручные оптимизации могут помешать компилятору выполнить дополнительные и более эффективные автоматические оптимизации. Вместо того чтобы писать оптимизации руками, лучше бы сосредоточиться на дизайне архитектуры и на эффективных алгоритмах, включая параллелизм и использование особенностей библиотек.

Данная статья посвящена оптимизациям компилятора Visual C++. Я собираюсь обсудить наиболее важные техники оптимизаций и решения, которые приходится применить компилятору, чтобы правильно их применить. Моя цель не в том, чтобы рассказать вам как вручную оптимизировать код, а в том, чтобы показать, почему стоит доверять компилятору оптимизировать ваш код самостоятельно.
Читать дальше →
Всего голосов 46: ↑42 и ↓4+38
Комментарии4

Курс MIT «Безопасность компьютерных систем». Лекция 4: «Разделение привилегий», часть 2

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

Массачусетский Технологический институт. Курс лекций #6.858. «Безопасность компьютерных систем». Николай Зельдович, Джеймс Микенс. 2014 год


Computer Systems Security — это курс о разработке и внедрении защищенных компьютерных систем. Лекции охватывают модели угроз, атаки, которые ставят под угрозу безопасность, и методы обеспечения безопасности на основе последних научных работ. Темы включают в себя безопасность операционной системы (ОС), возможности, управление потоками информации, языковую безопасность, сетевые протоколы, аппаратную защиту и безопасность в веб-приложениях.

Лекция 1: «Вступление: модели угроз» Часть 1 / Часть 2 / Часть 3
Лекция 2: «Контроль хакерских атак» Часть 1 / Часть 2 / Часть 3
Лекция 3: «Переполнение буфера: эксплойты и защита» Часть 1 / Часть 2 / Часть 3
Лекция 4: «Разделение привилегий» Часть 1 / Часть 2 / Часть 3
Всего голосов 24: ↑23 и ↓1+22
Комментарии0

В конфиге Aliens: Colonial Marines нашли опечатку, из-за которой четыре года глючил игровой ИИ

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


Вышедшую в 2013 году игру Aliens: Colonial Marines для персональных компьютеров не очень хорошо встретила публика. Игровые критики не могли понять, почему многообещающая игра, которая отлично смотрелась в предварительных версиях, превратилась в неюзабельный «плохо спроектированный, глючный кусок мусора» (цитата из одного обзора).

Впоследствии издатели столкнулись даже с судебным исками от покупателей игры по очень редкой для игровой индустрии причине. Пользователи требовали вернуть уплаченные деньги, потому что «игра дерьмо».

И только спустя четыре года стало понятно, в чём корень проблем. 1 ноября 2017 года один из разработчиков модов под ником jamesdickinson963 нашёл опечатку в конфигурационном файле .INI, после исправления которой игровой процесс улучшается кардинальным образом. Достаточно удалить лишнюю букву.
Читать дальше →
Всего голосов 104: ↑100 и ↓4+96
Комментарии188

Nvidia научила нейросеть замедлять видео

Время на прочтение2 мин
Количество просмотров23K
В нашей жизни может быть много моментов, которые нужно записать на камеру в замедленном режиме – первые шаги ребенка, первая поездка на море, трюк любимой собаки. Современный смартфон позволяет снимать с частотой 240 кадров в секунду или выше, но постоянно в таком режиме записывать не получится — памяти не хватит, и батарея сядет быстро. Созданная Nvidia нейросеть работает с уже отснятыми видео, превращая их в замедленные.

Всего голосов 51: ↑51 и ↓0+51
Комментарии54

Отрицательный отбор кадров в иерархической структуре предприятия

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

Вступление


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

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

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


Читать дальше →
Всего голосов 27: ↑24 и ↓3+21
Комментарии24
1

Информация

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