Pull to refresh
0
0
Send message

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

Reading time5 min
Views30K

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

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

Узнать заклинания кроссплатформености
Total votes 11: ↑6 and ↓5+1
Comments34

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

Reading time4 min
Views6.6K

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

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

Ознакомиться
Total votes 6: ↑6 and ↓0+6
Comments10

Cisco IOS Internal VLANs

Reading time5 min
Views14K

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


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


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

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


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

Читать дальше →
Total votes 5: ↑4 and ↓1+5
Comments2

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

Reading time8 min
Views25K
Приветствую, хабр!

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

Читать дальше →
Total votes 18: ↑14 and ↓4+10
Comments42

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

Reading time9 min
Views143K
Так, собираем истории самых шизанутых собеседований, приемов на работу и компаний, где вам приходилось бывать. Мне как-то везло обычно, сильно больших отклонений от нормы не встречал. Ну там полиграф бывал, посылать интервьюера приходилось, однажды даже устроил обратное собеседование – начальник ИТ, узнав мою зарплату на текущем месте, захотел ко мне работать пойти, даже простым программистом.

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

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

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

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

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

image
Когда остался поработать из дома
Читать дальше →
Total votes 23: ↑19 and ↓4+28
Comments43

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

Reading time4 min
Views14K
Программирование — это разбиение чего-то большого и невозможного на что-то маленькое и вполне реальное.


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

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

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

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

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


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

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

Задачи


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

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

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

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

Reading time6 min
Views78K


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


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


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


Читать дальше →
Total votes 156: ↑152 and ↓4+201
Comments265

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

Reading time4 min
Views20K
Судя по комментам 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;
};

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

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

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

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

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

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


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

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

Reading time13 min
Views65K


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

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

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

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

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

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

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

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

Reading time4 min
Views4.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": не найдена соответствующая перегруженная функция
Читать дальше →
Total votes 15: ↑15 and ↓0+15
Comments8

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

Reading time3 min
Views129K

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




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

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

Reading time5 min
Views135K


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


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

Читать дальше →
Total votes 197: ↑190 and ↓7+244
Comments925

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

Reading time7 min
Views15K
image

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

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

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

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

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

Reading time7 min
Views196K


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


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


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


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

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

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

Reading time5 min
Views37K

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


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

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

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

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

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

Reading time11 min
Views45K
Данный 46-дневный видеокурс актуализирован по состоянию на 2018 год и содержит 49 видеоуроков продолжительностью от 17 до 65 минут.



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

Information

Rating
Does not participate
Registered
Activity