Как стать автором
Обновить
0
0

Пользователь

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

Тайные знания: библиотеки для С++

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

Рун не должен резать
Тот, кто в них не смыслит.
В непонятных знаках
Всякий может сбиться.
Десять знаков тайных
Я прочел и знаю...(Сага об Эгиле)

Многие начинающие программисты, уже освоив синтаксис C++, обнаруживают, что нет простого способа, как подключить библиотеку, так и собрать программу для другой ОС, или чего хуже, под другим компьютером с той же ОС. Эта проблема отчасти порождается спорной практикой обучения, когда код учат писать и запускать лишь средствами IDE, таких как Visual Studio, Code::Blocks, и других.
Поначалу такой подход работает, но лишь до первой реальной задачи сделать что-то, что запустится не только на вашей машине. Тут-то новички и сталкиваются с отсутствием стандартной системы сборки и менеджера зависимостей. После осознания этой сложности, большинство студентов, как правило, переходят на другие языки, попутно тиражируя в индустрии миф о том, что C++ де не кроссплатформенный язык, а вот мой Python/Java/C# - да.
Между тем нас окружает множество замечательных кроссплатформенных программ написанных на C++. Если вы обучаетесь C++ и хотите понять как создавать такое ПО, то эта статья для вас.

Узнать заклинания кроссплатформености
Всего голосов 11: ↑6 и ↓5+1
Комментарии34

Как достичь максимального счастья в обществе? (теория игр)

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

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

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

Ознакомиться
Всего голосов 6: ↑6 и ↓0+6
Комментарии10

Cisco IOS Internal VLANs

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

Небольшая заметка о том, что происходит "под капотом" MLS (Multi Layer Switch) Cisco при создании routed интерфейсов.


В MLS интерфейс может находиться в одном из двух режимов:


  • "switchport"
  • "routed interface" или "no switchport"

При переводе интерфейса в последний, коммутатор позволяет присвоить ip address непосредственно порту и использовать его как интерфейс маршрутизатора.


Однако это всего лишь абстракция. Вот что происходит "под капотом" MLS при переводе интерфейса в режим "no switchport":

Читать дальше →
Всего голосов 5: ↑4 и ↓1+5
Комментарии2

Сертификация CCNP Service Provider

Время на прочтение8 мин
Количество просмотров25K
Приветствую, хабр!

В силу профессиональных интересов, я довольно часто натыкаюсь на статьи о том, как готовиться и сдавать те или иные сертификационные экзамены небезызвестного вендора Cisco. Но вот беда! Не все направления сертификации одинаково популярны. Про всеми любимый Routing and Switching (R&S) пишут всегда и везде, чуть реже обсуждают Voice и Security, а некоторые треки и вовсе остаются без внимания. На днях я закончил сдавать трек CCNP Service Provider. Достижение небольшое, то ли дело коллеги, сдающие CCIE. Цель, как ни крути, благородная, даже если работаешь с разными вендорами.
Уровень «Professional» можно достичь гораздо быстрее, о нём и поговорим.

Читать дальше →
Всего голосов 18: ↑14 и ↓4+10
Комментарии42

Собеседование в луже крови

Время на прочтение9 мин
Количество просмотров143K
Так, собираем истории самых шизанутых собеседований, приемов на работу и компаний, где вам приходилось бывать. Мне как-то везло обычно, сильно больших отклонений от нормы не встречал. Ну там полиграф бывал, посылать интервьюера приходилось, однажды даже устроил обратное собеседование – начальник ИТ, узнав мою зарплату на текущем месте, захотел ко мне работать пойти, даже простым программистом.

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

Итак, я, по политическим соображениям (обидели меня, чё уж там), увольнялся с должности начальника ИТ агрохолдинга (курицы, свиньи, колбаса, шашлыки и т.д.). На резюме откликнулся аналогичный работодатель – тоже колбасу делают и свиней выращивают, только без куриц. Вроде, всё один к одному. К тому же, на этом предприятии работал знакомый. Я ему звякнул, узнал – он достаточно лаконично ответил, что всё нормально, работа как работа.
Читать дальше →
Всего голосов 241: ↑211 и ↓30+239
Комментарии317

Удалёнка на период коронавируса: домашний «арест» или время возможностей?

Время на прочтение7 мин
Количество просмотров22K
Отношение к удалённой работе в IT никогда не было однозначным, хотя в целом всегда оказывалось демократичнее, чем в других отраслях. Пока одни компании ультимативно заявляли о том, что «только офис и глаза в глаза», другие активно развивали распределённые команды. Точек над i не было. Но всё изменилось, когда пришёл коронавирус: перед лицом возможного заболевания лояльность к удалёнке резко выросла, мировые корпорации стали раздавать свои инструменты для распределённых команд бесплатно, даже некоторые российские компании попробовали втиснуться в этот пиар (правда, в силу ограниченности маркетологов получилось топорно, ну да ладно, об этом поговорим по итогам). 

Всё круто, но как-то за скобками остаётся главное: а каково людям, самим сотрудникам? Если ты не был удалёнщиком или фрилансером работа из дома после спада первой эйфории напоминает лютый карантин, тюрьму, пытку и т.д. Нередко крайне сложно перестроиться психологически. Я «в деле» почти 7 лет и, пожалуй, расскажу, что ожидает сотрудников и компании, выбравшие такой путь на какое-то время.   

image
Когда остался поработать из дома
Читать дальше →
Всего голосов 23: ↑19 и ↓4+28
Комментарии43

STM32 Чаcть 2: Инициализация

Время на прочтение4 мин
Количество просмотров14K
Программирование — это разбиение чего-то большого и невозможного на что-то маленькое и вполне реальное.


Всем привет, для начала я хотел бы поблагодарить модераторов за то что пропустили мой первый (отвратительный) пост, и передать привет маме! А также я хотел бы поблагодарить всех читателей и людей которые указали на мои ошибки и помогли их исправить. Я сразу оговорюсь что по русски я не писал с 6 класса, в общем не серчайте.

STM32 Часть 1: Основы

Итак, давайте приступим. В прошлой статье я бегло пробежался по самым первым пунктам. Это был наш startup.c файл, который отвечал за 2 вектора (stack, Reset_Handler) и немного про линкер скрипт. Сегодня мы дополним наш код инициализации, разберем линкер на запчасти и узнаем как все устроено.
Читать дальше →
Всего голосов 12: ↑11 и ↓1+16
Комментарии15

Создание Minecraft за одну неделю на C++ и Vulkan

Время на прочтение8 мин
Количество просмотров31K
Я поставил перед собой задачу воссоздания с нуля Minecraft за одну неделю с помощью собственного движка на C++ и Vulkan. Меня вдохновил на это Hopson, который сделал то же самое при помощи C++ и OpenGL. В свою очередь, его вдохновил Шейн Бек, которого вдохновила Minecraft, источником вдохновения для которой была Infiniminer, при создании которой, предположительно, вдохновлялись реальными горными промыслами.


Репозиторий GitHub этого проекта находится здесь. У каждого дня есть своя git-метка.

Разумеется, я не планировал в буквальном смысле воссоздавать Minecraft. Этот проект должен был стать обучающим. Я хотел изучить использование Vulkan в чём-то более сложном, чем vulkan-tutorial.com или демо Саши Виллема. Поэтому основной упор сделан на проектирование Vulkan-движка, а не на дизайн игры.

Задачи


Разработка на Vulkan намного медленнее, чем на OpenGL, поэтому я не смог включить в игру многие функции настоящей Minecraft. Нет ни мобов, ни крафта, ни красного камня, ни физики блоков, и т.п. С самого начала цели проекта были следующими:

  • Создание системы рендеринга рельефа
    • Мешинг
    • Освещение
  • Создание системы генератора рельефа
    • Рельеф
    • Деревья
    • Биомы
  • Добавление возможности изменения рельефа и перемещения блоков

Мне нужно было найти способ реализовать всё это без добавления в игру GUI, потому что я не смог найти никаких библиотек GUI, работающих с Vulkan и простых в интеграции.
Всего голосов 14: ↑10 и ↓4+13
Комментарии11

Как мы приучили коллег брать вещи без спроса

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


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


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


Меня зовут Антон Чистяков, я работаю в хелпдеске Яндекса. Сегодня расскажу, как мы придумали и сделали необычный и полезный вендинговый автомат. Автомат, который вместо колы и шоколадных батончиков выдает зарядки, бейджики и клавиатуры.


Читать дальше →
Всего голосов 156: ↑152 и ↓4+201
Комментарии265

Ликбез по передаче параметров по значению в конструкторы и сеттеры (современный C++, примеры)

Время на прочтение4 мин
Количество просмотров20K
Судя по комментам habr.com/ru/post/460831/#comment_20416435 в соседнем посте и развернувшейся там дискуссии, на Хабре не помешает статья, как правильно передавать аргументы в конструктор или сеттер. На StackOverflow подобного материала полно, но тут что-то я не припомню.

Потому что пример в той статье полностью корректен, и автор статьи абсолютно прав. Вот этот пример:

// Хорошо.
struct person {
  person(std::string first_name, std::string last_name)
    : first_name{std::move(first_name)} // верно
    , last_name{std::move(last_name)} // std::move здесь СУЩЕСТВЕНЕН!
  {}
private:
  std::string first_name;
  std::string last_name;
};

Такой код позволяет покрыть все (ну ладно, почти все) возможные варианты использования класса:
Читать дальше →
Всего голосов 46: ↑45 и ↓1+44
Комментарии76

Проблема частого создания и удаления объектов в C++

Время на прочтение11 мин
Количество просмотров9.9K
Компания, в которой я работаю, пишет свою собственную систему фильтрации трафика и защищает с помощью нее бизнес от DDoS-атак, ботов, парсеров, а также многого другого. В основе продукта лежит такой процесс, как реверсивное проксирование, с помощью которого мы в реальном времени анализируем большие объемы трафика и, в конце концов, пропускаем только легитимные пользовательские запросы, отсеивая все вредоносные.

Основной особенностью является то, что наши сервисы работают с нелимитированным входящим трафиком, поэтому очень важно использовать все ресурсы рабочих станций максимально эффективно. В этом нам помогает большой опыт разработки на современном C++, включая последние стандарты и набор библиотек под названием Boost.
Читать дальше →
Всего голосов 21: ↑18 и ↓3+15
Комментарии11

Руководство Google по стилю в C++. Часть 1

Время на прочтение4 мин
Количество просмотров60K
Часть 1. Вступление
Часть 2. Заголовочные файлы
Часть 3. Область видимости
Часть 4. Классы
Часть 5. Функции
Часть 6. Специфика Google
Часть 7. Ещё возможности C++
Часть 8. Именование
Часть 9. Комментарии
Часть 10. Форматирование
Часть 11. Исключения из правил

Изменения 2019-2024


Все мы при написании кода пользуемся правилами оформления кода. Иногда изобретаются свои правила, в других случаях используются готовые стайлгайды. Хотя все C++ программисты читают на английском легче, чем на родном, приятнее иметь руководство на последнем.
Эта статья является переводом части руководства Google по стилю в C++ на русский язык.
Исходная статья (fork на github), обновляемый перевод.
Это вступительная часть руководства, в которой рассматриваются общие вопросы «Зачем?»
Также после перевода будет несколько ответов на возможные вопросы.
Читать дальше →
Всего голосов 5: ↑5 и ↓0+5
Комментарии0

Немного размышлений и советов по оптимизации кода на С++

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


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

Как правило, язык C++ используют там, где требуется высокая скорость работы. Но на C++ без особых усилий можно получить код, работающий медленнее какого-нибудь Python/Ruby. Именно подобным кодом оперируют многочисленные сравнения Any-Lang vs C++.

Вообще, оптимизация бывает трех типов:

  1. Оптимизация уже готового, проверенного и работающего кода.
  2. Изначально написание оптимального кода.
  3. Просто использование оптимальных конструкций.

Специально заниматься оптимизацией готового кода следует только после того, как проект закончен и используется. Как правило, оптимизация потребуется только в небольшой части проекта. Поэтому сначала нужно найти места в коде, которые съедают большую часть процессорного времени. Ведь какой смысл ускорять код, пусть даже на 500%, если он отнимает только 1% машинного времени? И следует помнить, что, как правило, гораздо больший выигрыш в скорости дает оптимизация самих алгоритмов, а не кода. Именно про данный ее вид говорят: «преждевременная оптимизация — зло» (с).

Второй тип оптимизации — это изначальное проектирование кода с учетом требований к производительности. Такое проектирование не является ранней оптимизацией.

Третий тип даже не совсем оптимизация. Скорее это избегание неоптимальных языковых конструкций. Язык C++ довольно сложный, при его использовании частенько нужно знать, как реализован используемый код. Он достаточно низкоуровневый, чтобы программисту пришлось учитывать особенности работы процессоров и операционных систем.
Читать дальше →
Всего голосов 81: ↑68 и ↓13+55
Комментарии89

Помощь компилятору С++ в разрешении перегрузки функций

Время на прочтение4 мин
Количество просмотров4.2K
В некоторых случаях компиляторы С++ не могут выбрать подходящую перегружаемую функцию, например, в очевидной с человеческой точки зрения ситуации — возникает ошибка компиляции:

void f(int i){}
void f(string s){}

vector<int> int_c = { 1, 2, 3, 4, 5 };
vector<string> string_c = { "Sic" ,"transit" ,"gloria" ,"mundi" };
for_each(begin(int_c), end(int_c), f);//error C2672: "for_each": не найдена соответствующая перегруженная функция
Читать дальше →
Всего голосов 15: ↑15 и ↓0+15
Комментарии8

Мы приближаемся к пределу вычислительных мощностей – нам нужны новые программисты

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

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




Давно, ещё в 1960-х, Гордон Мур, один из основателей компании Intel, заметил, что количество транзисторов, которые можно уместить на кремниевом чипе, удваивается примерно каждые два года. Поскольку количество транзисторов связано с вычислительной мощностью, это означало, что, по сути, вычислительная мощность удваивается каждые два года. Так родился закон Мура, обеспечивший для работающих в компьютерной индустрии людей – по крайней мере, для тех, кому ещё нет сорока – такую же надёжную основу, какую ньютоновские законы движения обеспечили для инженеров-механиков.
Читать дальше →
Всего голосов 87: ↑65 и ↓22+59
Комментарии502

Неблагодарный opensource: разработчик самого быстрого веб сервера удалил его репозиторий

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


Краткая суть ситуации: наш соотечественник fafhrd91 на протяжении 3 лет практически самостоятельно (см. кдпв) писал actix-webодин из популярнейших крейтов в инфраструктуре раста, лидер в большинстве различных бенчмарков, и за это время подвергался как минимум трём волнам гонений за "неправильное использование раста". После последнего раза автор психанул, и перенес репозиторий к себе в аккаунт с пометкой "Планирую скрыть репозиторий". Конечно, куча людей сразу наделало зеркал и бекапов, но на мой взгляд это не сильно исправляет ситуацию.


На месте репозитория автор оставил единственный postmortem, который я ниже и цитирую целиком:

Читать дальше →
Всего голосов 197: ↑190 и ↓7+244
Комментарии925

Почему translit в именовании это плохо и другие интересные особенности нашего восприятия кода

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

Есть неожиданно много людей, считающих, что писать код можно как угодно, а все эти правила и рекомендации просто занудство. Что же, у каждого каждого человека есть право на своё мнение.

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

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

Код это тоже текст. И написать его можно так, что чтение станет крайне неприятным и энергозатратным занятием. Если вам вдруг во время работы с особенно ужасными фрагментами корпоративного портала хочется закрыть редактор и посмотреть котиков, то дело, скорее всего, не в том, что вам лень или внезапно случилось то самое выгорание. Всё дело в том, что именно вы читаете.
Читать дальше →
Всего голосов 25: ↑24 и ↓1+35
Комментарии105

[Конспект админа] Что делать, если программа хочет прав администратора, а вы нет

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


(с) Вася Ложкин.


К сожалению, в работе сисадмина нет-нет да и приходится разрешать пользователям запускать всякий софт с админскими правами. Чаще всего это какие-нибудь странные китайские программы для работы с оборудованием. Но бывают и другие ситуации вроде небезызвестного bnk.exe.


Выдавать пользователю права администратора, чтобы решить проблему быстро и просто, противоречит нормам инфобезопасности. Можно, конечно, дать ему отдельный компьютер и поместить в изолированную сеть, но — это дорого и вообще…


Попробуем разобрать решения, которые позволят и программу запустить, и безопасника с финансистом не обозлить.

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

Пишем драйвер для ноутбука for fun and profit, или как закоммитить в ядро даже если ты дурак

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

С чего всё началось


Начнём с постановки проблемы. Дано: один ноутбук. Новый ноутбук, геймерский. С RGB-подсветкой. Вот такой примерно ноутбук:

image
Картинка взята с lenovo.com

Есть ещё программа к этому ноутбуку. Программа как раз этой подсветкой и управляет.

Одна только проблема – программа под Windows, а хочется чтоб в любимом линуксе всё работало. И лампочки чтоб светились, и чтоб цвета красивые мелькали. Да вот только как это сделать, чтоб без реверс-инжиниринга и без написания своих драйверов? Простой ответ пришёл быстро – никак. Ну что ж, пошли писать драйвер.
Читать дальше →
Всего голосов 103: ↑102 и ↓1+131
Комментарии20

Тренинг Cisco 200-125 CCNA v3.0. Сертифицированный сетевой специалист Cisco (ССNA). День 1. Основы сети

Время на прочтение11 мин
Количество просмотров45K
Данный 46-дневный видеокурс актуализирован по состоянию на 2018 год и содержит 49 видеоуроков продолжительностью от 17 до 65 минут.



Добро пожаловать, я ваш преподаватель Имран Рафаи, сегодня мы начнём нашу серию лекций с темы «Основы сети». Этот видеокурс идеально подходит не только тем, кто собирается сдавать экзамены на сертифицированного сетевого специалиста Cisco, но и тем, кто интересуется сетями или хочет начать карьеру в области сетей. Сертификат CCNA очень ценная вещь, и я призываю всех, кто стремится к совершенству в этой области, получить этот сертификат, потому что он имеет большое значение для оценки вашего профессионализма. Прежде чем продолжить, я попрошу вас сосредоточиться на первых 3-х днях обучения, потому что в эти дни я буду освещать фундаментальные понятия, которые станут основой вашей сетевой карьеры и пригодятся вам, может быть, даже через 20 лет.
Всего голосов 19: ↑16 и ↓3+13
Комментарии13
1
23 ...

Информация

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