• Реализация оператора in в С++

      Привет! Сегодня я надеюсь показать вам немного магии. Моим хобби является придумывание всяких казалось бы невозможных штук на С++, что помогает мне в изучении всевозможных тонкостей языка ну или просто развлечься. Оператор in есть в нескольких языках, например Python, JS. Но в С++ его не завезли, но иногда хочется чтобы он был, так почему бы его не реализовать.

      	std::unordered_map<std::string, std::string> some_map = 
      	{
      		{ "black", "white" },
      		{ "cat", "dog" },
      		{ "day", "night" }
      	};
      
      	if (auto res = "cat" in some_map)
      	{
      		res->second = "fish";
      	}
      

      Читать дальше →
    • Доклады с весенней конференции С++ Russia 2018


        С 19 по 21 апреля в Санкт-Петербурге прошла конференция С++ Russia 2018. Из года в год организация и проведение становится на уровень выше, что не может не радовать. Спасибо бессменному организатору С++ Russia Сергею Платонову за его вклад в развитие этого направления.
        Читать дальше →
        • +45
        • 12,1k
        • 3
      • Как подготовиться к деловой поездке? Советы от биздевов ISPsystem



          Мы давно ездим на конференции и вот что заметили: многие люди приезжают туда и — сюрприз! — ничего не делают. Назначат пару встреч, а остальное время слоняются без дела, собирают раздатку со стендов или сидят за ноутбуком и слушают все подряд: даже те доклады и выступления, где им явно что-то пытаются продать. О каких продажах и успешных переговорах речь? Трата времени, трата денег компании, парад упущенных возможностей. Мы тоже в свое время много ошибались, но исправились. Поэтому хотим рассказать, что сейчас делаем иначе. Если интересно, добро пожаловать под кат!
          Читать дальше →
          • +26
          • 5,8k
          • 6
        • Психология читабельности кода

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

          Каждый программист старается писать хороший код. Читабельность — один из главных признаков такого кода. О ней написано достаточно много книг, но всё же в теме есть пробелы. Например, те самые книги сфокусированы больше на советах КАК написать читабельный код, а не на причинах того, почему один код является хорошо читабельным, а другой — нет. Книга говорит нам «используйте подходящие названия переменных» — но что делает одно название более подходящим, чем другое? Работает ли это для всех примеров подобного кода? Работает ли это для всех программистов, которым попадётся на глаза этот код? Как раз о последнем я и хотел бы поговорить чуть детальнее. Давайте погрузимся немного в человеческую психику. Наш мозг — главный наш инструмент, хорошо бы изучить специфику его работы.
          Читать дальше →
        • Конференция HOPE X. «Взлом лифта: от подвала до пентхауза». Часть 2. «Системы безопасности»

          • Перевод
          Начало здесь: Конференция HOPE X. «Взлом лифта: от подвала до пентхауза». Часть 1. «Лифтовое оборудованиe»

          Дивиант Оллам: можно сказать, что в многих отношениях лифтовая индустрия застряла в прошлом.



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

          Дивиант Оллам: то есть он считал, что трубчатые замки являются новейшей и величайшей разработкой в сфере безопасности.
          Читать дальше →
        • Что каждый программист на C должен знать об Undefined Behavior. Часть 3/3

          • Перевод
          Часть 1
          Часть 2
          Часть 3

          В первой части цикла мы рассмотрели неопределённое поведение в С и показали некоторые случаи, которые позволяют сделать С более быстрым, чем «безопасные» языки. В части 2 мы рассмотрели некоторые неожиданные баги, которые могут противоречить представлениям многих программистов об языке С. В этой части, мы рассмотрим проблемы, которые компилятор Clang решает, чтобы достичь высокого быстродействия, и устранить некоторые сюрпризы.
          image
          Читать дальше →
          • +19
          • 7,6k
          • 7
        • Что каждый программист на C должен знать об Undefined Behavior. Часть 2/3

          • Перевод
          Часть 1
          Часть 2
          Часть 3

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

          Мне нравится называть это «Почему неопределённое поведение часто пугает и ужасает программистов на C».

          image
          Читать дальше →
        • Что каждый программист на C должен знать об Undefined Behavior. Часть 1/3

          • Перевод
          Часть 1
          Часть 2
          Часть 3

          Люди иногда спрашивают, почему код, скомпиливанный в LLVM иногда генерирует сигналы SIGTRAP, когда оптимизация была включена. Покопавшись, они обнаруживают, что Clang сгенерировал инструкцию «ud2» (подразумевается код X86) — то же, что генерируется __builtin_trap(). В этой статье рассматривается несколько вопросов, касающихся неопределённого поведения кода на C и того, как LLVM его обрабатывает.

          image

          В этой статье (первой из трёх) мы попытаемся объяснить некоторые из этих вопросов, чтобы вы могли лучше понять связанные с ними компромиссы и сложности, и возможно, изучить немного больше тёмные стороны С. Мы выясним, что C не является «высокоуровневым ассемблером», как многие опытные программисты на C (особенно те, кто сфокусирован на низком уровне) предпочитают думать, и что C++ и Objective-C напрямую унаследовали множество таких проблем.
          Читать дальше →
        • История взлома одного WordPress плагина — или о том, как вы допускаете уязвимости в своих проектах

            Давным давно, когда я был молод и писал сайты на PHP, я написал SEO плагин для маскировки внешних ссылок для Wordpress. Поскольку с воображением у меня плохо, то назвал его WP-NoExternalLinks. За всю историю у него было 360.000 установок и, кажется, до 50.000 активных установок.

            Дальше я расскажу, каким именно образом он попал в недобросовестные руки и был злонамеренно использован — но для этого придётся немного погрузиться в его историю и обстановку разработки. Сразу предупрежу, что эта история абсолютно реальная.

            Читать дальше →
          • Бестиарий С++. Справочник по загадочным персонажам

            • Перевод


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

            Читать дальше →
          • Начальник, что мне делать для того, чтобы получать больше денег

              Как часто вы слышали от своих подчиненных такой вопрос? Почему именно этот вопрос о повышении верный? Давайте разбираться вместе.

              Представим себе программиста Ивана, который работает в компании какое-то время. По разным причинам так могло получиться, что у него уже давно не было повышения. А он его очень ждет. Ходить к менеджеру и просить повышения Ивану не хочется, не такой он человек, чтобы заводить разговор о повышении и выпрашивать, доказывать, что достоин повышения.
              Читать дальше →
            • Четыре типажа программистов

                Привет.


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

                Читать дальше →
              • BIM: как мы строим строителей на стройке

                  По нашей примерной оценке, основанной на 20-летней практике, на земляных работах можно «потерять» до 50-60 % бюджета. На железобетоне и отделке точно 30 %. На ошибках перезаказа при коллизиях стоимость инженерки увеличивается примерно на 10 %. Именно по этой простой причине, когда «злой заказчик» внедряет BIM-модель здания, со всех сторон начинаются дикие крики и стоны.

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


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

                  Что такое BIM-модель? Это трёхмерная модель здания, где все системы состыкованы и увязаны в одном едином плане. Поставили розетку в комнате — в общей смете тут же появилась новая розетка и соответствующий метраж кабеля. Погрешность такой модели по материалам — 2 %. На бумаге обычно берут запас 15 %, и излишки этого запаса отчаянно «теряются».

                  Давайте лучше покажу примеры, чем буду рассказывать.
                  Читать дальше →
                • Скрытые возможности Windows. Как BitLocker поможет защитить данные?

                  • Tutorial

                  По мнению специалистов, именно кража ноутбука является одной из основных проблем в сфере информационной безопасности (ИБ).


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

                  Читать дальше →
                • Ускоряем std::shared_mutex в 10 раз

                    В этой статье мы детально разберем атомарные операции и барьеры памяти C++11 и генерируемые ими ассемблерные инструкции на процессорах x86_64.

                    Далее мы покажем как ускорить работу contfree_safe_ptr<std::map> до уровня сложных и оптимизированных lock-free структур данных аналогичных по функциональности std::map<>, например: SkipListMap и BronsonAVLTreeMap из библиотеки libCDS (Concurrent Data Structures library): github.com/khizmax/libcds

                    И такую многопоточную производительность мы сможем получить для любого вашего изначально потоко-небезопасного класса T используемого как contfree_safe_ptr<T>. Нас интересуют оптимизации повышающие производительность на ~1000%, поэтому мы не будем уделять внимание слабым и сомнительным оптимизациям.
                    Читать дальше →
                  • Статический анализ → уязвимость → профит

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

                      Читать дальше →
                    • Интернет-контрразведка в действии: создаем персональную систему менеджмента информационной безопасности

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


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


                        Читать дальше →
                      • Сертификаты CISSP, CISA, CISM: как получить и стоит ли овчинка выделки?

                          А почему у тебя на визитке написано «КИСА»?
                          Ты вроде серьезный человек…
                          (из разговора с приятелем)

                          Мы все знаем, что нас встречают всегда по одежке, но не всегда задумываемся, а что именно стоит за этим словом «одежка». «Одежкой» являются наши атрибуты, которые позволяют другим людям легко вписать нас в свое представление о мире или, проще говоря, навесить на нас ярлык. Соответственно, управляя своими атрибутами, мы можем управлять тем, как нас воспринимают другие люди. В среде специалистов по информационной безопасности устоявшимися атрибутами, позволяющие другим причислять вас к серьезным ИБ-специалистам, являются такие статусы, как CISSP, CISA, CISM.

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


                          Читать дальше →
                        • Тренировка кислотного аккумулятора кое-как и своими руками

                            Печаль. Сдох аккумулятор, незаслуженно забытый зимой в гараже. Я его вынул из мотоцикла, то ли сигнализация сожрала всё, то ли не зарядился в прошлые покатушки. Напряжометр показывал 9В, что есть криминал.

                            Я принёс батарею домой, отогрел, подключил к заряднику. Зарядник через полчаса показал ОК. Врал. Ничего там не ок. Лампочка ближнего света горела примерно 10 минут и потом быстро перешла в состояние «слабо грею воздух». Аккумулятор 6Ач, лампочка 55Вт.

                            Не покупать же новый аккумулятор? Зима, время есть. Есть ардуина даже и коробка всяких чипсов из Китая. Зря пылятся там что ли?

                            image

                            В далёкой советской армии 30 лет назад я проходил курс ухода за аккумуляторами. Основное отличие его от инструкций 21 века было таким: батарея должна проходить серию циклов заряда и разряда. Без этого, сколько её в заряднике не держи, какой бы он ни был умный, она сдохнет.
                            Читать дальше →
                          • Что в имени тебе моем: как качественно «пробить» человека в сети Интернет?

                            Мы постоянно встречаемся в своей жизни с новыми людьми, и стоит констатировать, что помимо хороших друзей нам попадаются мутные товарищи, а иногда и отъявленные мошенники. Любовь наших сограждан оставить свой след в интернете и старания наших ИТ-компаний по автоматизации всего и вся позволяют нам довольно оперативно собирать интересующую информацию о конкретных персонах по открытым источникам. Чтобы это делать быстро и качественно, нам нужно владеть простой методологией разведывательной работы и знать, где и какую информацию о человеке можно добыть в интернете.
                            Читать дальше →