Соискатели
В канун Нового года предлагаю поговорить о действительно важных вещах🤨
Помню, в аспирантуре помимо аспирантов были соискатели. Соискатель - это тот, кто тоже хочет защитить кандидатскую диссертацию, но не учится при этом в аспирантуре.
И меня всегда забавляло это слово, соискатели. Ну есть же, например, слова "сотрудники" и "сослуживцы". Сотрудники совместно трудятся над чем-то, а сослуживцы совместно служат где-то.
Что же тогда совместно ищут соискатели, и, главное, совместно с кем? Диссертации то, по сути, авторские.
Наверное, все ищут научную истину. Только аспиранты делают это в стенах университета, а соискатели - дома за компом. Но тогда и аспиранты тоже должны называться соискателями 🤨!
Но не называются.
Короче, вопрос открыт 🤷♂️
---
А пока вы раздумываете над "соискателями", принимайте поздравление с наступающим Новым годом!
🧦 🎁 🌲
В канун Нового года предлагаю поговорить о действительно важных вещах
Помню, в аспирантуре помимо аспирантов были соискатели. Соискатель - это тот, кто тоже хочет защитить кандидатскую диссертацию, но не учится при этом в аспирантуре.
И меня всегда забавляло это слово, соискатели. Ну есть же, например, слова "сотрудники" и "сослуживцы". Сотрудники совместно трудятся над чем-то, а сослуживцы совместно служат где-то.
Что же тогда совместно ищут соискатели, и, главное, совместно с кем? Диссертации то, по сути, авторские.
Наверное, все ищут научную истину. Только аспиранты делают это в стенах университета, а соискатели - дома за компом. Но тогда и аспиранты тоже должны называться соискателями 🤨!
Но не называются.
Короче, вопрос открыт 🤷♂️
---
А пока вы раздумываете над "соискателями", принимайте поздравление с наступающим Новым годом!
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉9🔥3
#include <iostream>
struct A
{
int a1;
int a2;
void afoo() {}
};
struct B
{
int b1;
int b2;
};
int main()
{
std::cout << (sizeof(A) == sizeof(B)) << std::endl;
return 0;
}
CMake. Подключение внешних библиотек
По просьбетрудящихся учащихся записал видео-инструкцию по подключению внешних библиотек в проектах на CMake.
Рассмотрены 2 способа подключения:
1. С использованием функции find_package(). Способ самый простой и лаконичный.
2. Прямое подключение заголовочных файлов и библиотек с использованием функций target_include_directories(), target_link_directories().
Второй способ подойдет, если библиотека поставляется без конфигурационных файлов вида
В качестве примера подключается библиотека Qt.
В следующий раз рассмотрим организацию проекта на CMake с созданием и подключением собственных библиотек.
📱 YouTube | 📱 ВКонтакте
По просьбе
Рассмотрены 2 способа подключения:
1. С использованием функции find_package(). Способ самый простой и лаконичный.
2. Прямое подключение заголовочных файлов и библиотек с использованием функций target_include_directories(), target_link_directories().
Второй способ подойдет, если библиотека поставляется без конфигурационных файлов вида
*Config.cmake. В остальных случаях лучше использовать первый способ.В качестве примера подключается библиотека Qt.
В следующий раз рассмотрим организацию проекта на CMake с созданием и подключением собственных библиотек.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5
Исключение или код ошибки
В C++ и некоторых других языках программирования обработка ошибок может быть организована как с помощью механизма исключений, так и путем возврата кода ошибки.
И главная проблема - решить, какой из этих способов использовать в своем проекте. А мнений тут не одно и не два 🤭
Я обычно использую и то, и другое, руководствуясь следующим:
🔜 Исключение - для исключительной ситуации, когда ошибка не позволяет продолжить работу программы.
Далее:
🔜 На исключениях не должна строиться логика программы. Тогда лучше использовать статус-коды, которые могут определять как ошибки, так и известные неошибочные состояния.
🔜 Если код ошибки приходится "поднимать" по стеку высоко наверх, то вместо него лучше использовать исключение.
🔜 Напротив, если ошибка должна быть обработана вызывающим элементом, то вместо исключения подойдет код ошибки.
🔜 Исключения C++ не ABI-совместимые и это надо учитывать. Если отдельные компоненты программы собраны разными компиляторами, то исключение, брошенное из одного компонента, не может быть обработано другим компонентом. Тут - только коды ошибок.
И последнее:
🔜 Если на проекте определена стратегия обработки ошибок, то надо просто ей следовать.
А что используете вы?
👍 - исключения,
🔥 - коды ошибок,
🤓 - it depends
В C++ и некоторых других языках программирования обработка ошибок может быть организована как с помощью механизма исключений, так и путем возврата кода ошибки.
И главная проблема - решить, какой из этих способов использовать в своем проекте. А мнений тут не одно и не два 🤭
Я обычно использую и то, и другое, руководствуясь следующим:
Далее:
И последнее:
А что используете вы?
👍 - исключения,
🔥 - коды ошибок,
🤓 - it depends
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥2🤓1
int main()
{
char const* buf = "hello";
++buf; // 1
buf[0] = 'u'; // 2
return 0;
}
Выше дан код на C++. В каком месте будет ошибка компиляции?
Anonymous Quiz
31%
1
31%
2
9%
Ошибок нет
28%
Оба места с ошибкой
Павлов об уме
Прошлым летом я посетил дом Ивана Петровича Павлова в Рязани (на фото). Да, того самого Павлова, который на собаках что-то там исследовал.
По своему обыкновению я приобрел местной литературки со сборником лекций Ивана Петровича. Лекции, конечно, производят впечатление. Особенно зацепили выводы о нашем уме. Именно нашем, не собак. Потому что собаки собаками, а все таки они у Павлова были инструментом познания человека.
Говоря об уме, Павлов выделял несколько его особенностей. Хороших и не очень. Все я здесь приводить не буду, а остановлюсь на сосредоточенности и преимуществах молодого ума.
По Павлову к сосредоточенности "мы не наклонны". Предпочитаем скорее беготню мысли.
Ничего не напоминает? Совещание, митинг, статус, дейлик, ретро - как хотите назовите😵💫
Согласитесь, что хотя бы раз, но вы ловили себя на мысли: "что мы здесь вообще делаем..."
В то же время:
Не знаю как у вас, а у меня с сосредоточенностью ума все в порядке. Я легко могу неожиданно сосредоточиться на какой-нибудь ерунде, совершенно забыв, что вообще должен был сделать 😅
Особняком Павлов выделяет молодой ум.
Поэтому:
Думай головой, пока молодой 😉
Я бы сюда добавил еще один аргумент: свободное время. Чем мы моложе, тем его больше. Надо этим пользоваться.
Короче, читайте лекции Павлова. Среди них есть очень простые, понятные не только физиологам. Как-никак они отражают опыт большого человека и большого ученого.
#КнижнаяПолка
Прошлым летом я посетил дом Ивана Петровича Павлова в Рязани (на фото). Да, того самого Павлова, который на собаках что-то там исследовал.
По своему обыкновению я приобрел местной литературки со сборником лекций Ивана Петровича. Лекции, конечно, производят впечатление. Особенно зацепили выводы о нашем уме. Именно нашем, не собак. Потому что собаки собаками, а все таки они у Павлова были инструментом познания человека.
Уже 18 лет, как я занимаюсь изучением высшей нервной деятельности на одном близком и родном для нас животном, на нашем друге - собаке. И можно себе представить, что то, что в нас сложно, у собаки проще, легче выступает и оценивается.
Говоря об уме, Павлов выделял несколько его особенностей. Хороших и не очень. Все я здесь приводить не буду, а остановлюсь на сосредоточенности и преимуществах молодого ума.
По Павлову к сосредоточенности "мы не наклонны". Предпочитаем скорее беготню мысли.
Возьмем наши заседания. ... До чего заседания длинны, многоречивы и в большинстве случаев безрезультатны и противоречивы! Мы проводим многие часы в бесплодных, ни к чему не ведущих разговорах. Ставится на обсуждение тема, и сначала обыкновенно и благодаря тому, что задача сложная, охотников говорить нет. Но вот выступает один голос, и после этого уже все хотят говорить, говорить без всякого толку, не подумав хорошенько о теме, не уясняя себе, осложняется ли этим решение вопроса или ускоряется.
Ничего не напоминает? Совещание, митинг, статус, дейлик, ретро - как хотите назовите
Согласитесь, что хотя бы раз, но вы ловили себя на мысли: "что мы здесь вообще делаем..."
В то же время:
Возьмите гениальных людей. Ведь они сами говорят, что не видят никакой разницы между собой и другими людьми, кроме одной черты, что могут сосредотачиваться на определенной мысли, как никто. И тогда ясно, что эта сосредоточенность есть сила, а подвижность, беготня мысли есть слабость.
Не знаю как у вас, а у меня с сосредоточенностью ума все в порядке. Я легко могу неожиданно сосредоточиться на какой-нибудь ерунде, совершенно забыв, что вообще должен был сделать 😅
Особняком Павлов выделяет молодой ум.
Молодой ум - ум деятельный. Едва ли можно сомневаться, что в молодости человек читает больше, чем какой-либо записной ученый, весь погруженный в книги. А восторг, когда одолеваешь какую-нибудь трудную задачу. А отчаяние, когда сила новых фактов, идей разрушает твоих старых богов.
Молодой ум - ум философский. ... Молодой ум восприимчивый, свободный, без предрассудков.
Поэтому:
Основной целью молодости - должно приучить себя думать. Думать - это упорно исследовать предмет, иметь его в виду и ныне и завтра, писать и говорить о нем, подходить к нему и с одной и с другой стороны, короче испытать и радость и горе серьезного умственного напряжения, умственного труда.
Думай головой, пока молодой 😉
Я бы сюда добавил еще один аргумент: свободное время. Чем мы моложе, тем его больше. Надо этим пользоваться.
Короче, читайте лекции Павлова. Среди них есть очень простые, понятные не только физиологам. Как-никак они отражают опыт большого человека и большого ученого.
#КнижнаяПолка
Please open Telegram to view this post
VIEW IN TELEGRAM
🤓5❤2
Red Team или Blue Team
Оба термина относятся к информационной безопасности.
Red Team - это команда атакующих, цель которых состоит в нарушении работы информационной системы и кражи данных с помощью кибератак. "Плохие" ребята, так сказать. А иногда "плохие" и без кавычек.
Blue Team - это команда защиты информационной системы, призванная обнаруживать и предотвращать кибератаки.
#Словарь
Оба термина относятся к информационной безопасности.
Red Team - это команда атакующих, цель которых состоит в нарушении работы информационной системы и кражи данных с помощью кибератак. "Плохие" ребята, так сказать. А иногда "плохие" и без кавычек.
Blue Team - это команда защиты информационной системы, призванная обнаруживать и предотвращать кибератаки.
#Словарь
👍3🤓2
#include <iostream>
int main()
{
int a = 1, b = 3, c = 6, d = 8;
d += c = b += a;
std::cout << d << std::endl;
return 0;
}
Сопротивление новому
Вычитал в мемуарах полярного летчика Водопьянова М.В. сразу два примера сопротивления прогрессу.
1️⃣ - извозчики в Москве, которые недолюбливали водителей машин и искали возможность их подколоть на поломках техники. Машины тогда только появлялись и сновали по улицам вперемежку с гужевым транспортом.
2️⃣ пример - когда те же извозчики, но уже на востоке, не обрадовались появлению авиации. Водопьянов тогда перегонял самолет для работы на маршруте Хабаровск-Сахалин:
🔽🔽🔽
Как же мне всё это напоминает сегодняшнее сопротивление со стороны части разработчиков развивающимся чат-ботам ИИ. Чего стоит только битва на Хабре между авторами, поющими оды ИИ как вундервафле, и теми, кто смеется: "Все это пустая ерунда!"
Истина, наверное, где-то между. А если так, то игнорировать инструменты ИИ будет нерационально.
Поэтому можно и лошадку пока оставить, но и мотор завести 😉
📍 Водопьянов М.В. "Полярный летчик"
#КнижнаяПолка
Вычитал в мемуарах полярного летчика Водопьянова М.В. сразу два примера сопротивления прогрессу.
Если же у автомобиля посередине улицы глох мотор или случалась какая-нибудь другая неприятность, шофёр подвергался издёвкам со стороны почтенных, бородатых извозчиков. Эти представители умирающего средства передвижения были очень рады, когда приключалась беда с передовым транспортом.
Если приходилось подливать воду в закипевший радиатор грузовика, они «сочувственно» подсказывали:
– Овса, овса теперь маленько подсыпь, она и пойдёт!… Без овса далеко не уедешь. Уж мы-то знаем…
И тут они поднимали хохот на всю улицу.
Теперь, когда я еду по блестящим магистралям столицы, мне кажется, что это совсем другой город, а тот, по которому я ездил более сорока лет назад, существует только в моих воспоминаниях.
А вот в большом селе Мариинском, где была тоже предусмотрена посадка, нас встретили очень недружелюбно. Никто не позвал даже в дом погреться, выпить чаю. В чём дело? Оказывается, в селе жило много богатеев, которые хорошо зарабатывали на извозном промысле. Они держали по многу лошадей и кучеров и за большие деньги брались перевозить людей через Татарский пролив. Кулаки не без причин смотрели на лётчиков как на опасных конкурентов. Самолёт приходил на смену лошадям, напряжённым в розвальни. Встретились в селе на берегу Амура прошлое с будущим.
🔽🔽🔽
Как же мне всё это напоминает сегодняшнее сопротивление со стороны части разработчиков развивающимся чат-ботам ИИ. Чего стоит только битва на Хабре между авторами, поющими оды ИИ как вундервафле, и теми, кто смеется: "Все это пустая ерунда!"
Истина, наверное, где-то между. А если так, то игнорировать инструменты ИИ будет нерационально.
Поэтому можно и лошадку пока оставить, но и мотор завести 😉
📍 Водопьянов М.В. "Полярный летчик"
#КнижнаяПолка
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍2
Дорожная карта разработчика
Если вам надо изучить какую-то тему, но вы не знаете с чего начать, куда идти и чем закончить, то предлагаю обратить внимание на сборник дорожных карт для разработчиков Developer Roadmaps.
Дорожная карта разработчика - это своего рода план развития специалиста в определенной теме. Структурный, последовательный, компактный.
На Developer Roadmaps собрано множество дорожных карт, разделенных по специализациям и технологиям:
🔜 Каждая карта содержит последовательность тем с обозначенным уровнем сложности.
🔜 Темы сопровождаются содержательными тезисами с практическими примерами.
🔜 Некоторые темы предлагают материалы для дополнительного изучения.
🔜 Есть возможность отслеживания прогресса обучения при регистрации на ресурсе.
Также вы можете создавать свои собственные карты и делиться ими с сообществом. Или не делиться 🤐🤫
Пользуйтесь)
📍 https://roadmap.sh
Если вам надо изучить какую-то тему, но вы не знаете с чего начать, куда идти и чем закончить, то предлагаю обратить внимание на сборник дорожных карт для разработчиков Developer Roadmaps.
Дорожная карта разработчика - это своего рода план развития специалиста в определенной теме. Структурный, последовательный, компактный.
На Developer Roadmaps собрано множество дорожных карт, разделенных по специализациям и технологиям:
Также вы можете создавать свои собственные карты и делиться ими с сообществом. Или не делиться 🤐🤫
Пользуйтесь)
📍 https://roadmap.sh
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👌1
#include <iostream>
struct A
{
uint32_t a:4;
uint32_t b:4;
uint32_t c:8;
uint32_t d:16;
};
struct B
{
uint32_t a:4;
uint32_t b:4;
};
int main()
{
A a;
B b;
std::cout << int(sizeof(a) == sizeof(b));
return 0;
}
Выше дан код на C++. Какой вывод будет у программы?
Anonymous Quiz
27%
0
32%
1
9%
4
32%
Никакой. Ошибка компиляции
🤬1
Путаница в интерфейсах (часть 3)
Спонтанное желание писать пост 😡
Я случайно одним махом удалил поля из более чем 700 своих заметок в Obsidian! Я не хотел, но интерфейс поспособствовал.
Смотрите скриншот. У таблицы есть поле "Изучить". Я могу его скрыть или удалить. Две кнопочки рядом. И одна из них фатальная. Не просто так она выделена красным.
Ну и конечно же я ПРОМАЗАЛ! Не нарочно. Я хотел скрыть столбец и просто не попал в "Hide field".
И началось! Столбец исчез и следом загудел комп. Стало понятно, что пошло удаление поля "Изучить" из всех файлов в хранилище! Мне оставалось сидеть и наблюдать. Отменить действие нельзя!
И хорошо, что это был столбец "Изучить". Жалко, но не катастрофа. А вот если бы я так удалил столбец "Ссылка"... ууух😨
Ладно.
Зато подвернулся повод напомнить всем разработчикам:
Если удаление чего-либо нельзя отменить, то мы обязаны запросить у пользователя подтверждение!
—-
Читать "Путаница в интерфейсах (часть 2)"
Спонтанное желание писать пост 😡
Я случайно одним махом удалил поля из более чем 700 своих заметок в Obsidian! Я не хотел, но интерфейс поспособствовал.
Смотрите скриншот. У таблицы есть поле "Изучить". Я могу его скрыть или удалить. Две кнопочки рядом. И одна из них фатальная. Не просто так она выделена красным.
Ну и конечно же я ПРОМАЗАЛ! Не нарочно. Я хотел скрыть столбец и просто не попал в "Hide field".
И началось! Столбец исчез и следом загудел комп. Стало понятно, что пошло удаление поля "Изучить" из всех файлов в хранилище! Мне оставалось сидеть и наблюдать. Отменить действие нельзя!
И хорошо, что это был столбец "Изучить". Жалко, но не катастрофа. А вот если бы я так удалил столбец "Ссылка"... ууух😨
Ладно.
Зато подвернулся повод напомнить всем разработчикам:
Если удаление чего-либо нельзя отменить, то мы обязаны запросить у пользователя подтверждение!
—-
Читать "Путаница в интерфейсах (часть 2)"
😱4😢2
Логирование в космосе
В 1965 году Алексей Леонов совершил первый выход в открытый космос. На последнем инструктаже главный конструктор Сергей Королев сказал Леонову:
🔽🔽🔽
Мы с вами в большинстве своем, конечно, не космонавты, но к логированию тоже должны подходить ответственно. Чтобы если что "знать, где оборвалась песня".
📍 Алексей Леонов "Время первых. Судьба моя - я сам..."
#КнижнаяПолка
В 1965 году Алексей Леонов совершил первый выход в открытый космос. На последнем инструктаже главный конструктор Сергей Королев сказал Леонову:
- Прошу быть предельно внимательным и обо всем, что делаешь, докладывай, как минёр, - мы должны знать, где оборвется песня... Если она оборвется.
🔽🔽🔽
Мы с вами в большинстве своем, конечно, не космонавты, но к логированию тоже должны подходить ответственно. Чтобы если что "знать, где оборвалась песня".
📍 Алексей Леонов "Время первых. Судьба моя - я сам..."
#КнижнаяПолка
❤3🔥1🤔1
Атрибуты в C++
В C++ есть стандартные атрибуты, с помощью которых мы можем управлять предупреждениями компилятора и добавлять ясности в код.
Например:
Атрибут может применяться с классами, функциями, переменными и др.
Может применяться с классами, функциями, аргументами функций, переменными и др.
Может применяться с классами, функциями и перечислениями.
И все бы хорошо, но я, честно говоря, забываю про существование этих атрибутов 😵💫
Дремучий стал, что ли.
🔤 🔤 🔤 Плюсовики, а вы используете у себя атрибуты? Как широко? Какие используете, а какие вам и даром не нужны?
В C++ есть стандартные атрибуты, с помощью которых мы можем управлять предупреждениями компилятора и добавлять ясности в код.
Например:
[[deprecated]] - говорит компилятору, что эта сущность устарела и лучше ее не использовать. В случае использования компилятор сгенерирует предупреждение.Атрибут может применяться с классами, функциями, переменными и др.
[[fallthrough]] - говорит компилятору, что в этом месте конструкции switch case оператор break пропущен намеренно. При наличии этого атрибута компилятор не выдаст предупреждение об отсутствии break. [[maybe_unused]] - говорит компилятору, что указанная сущность действительно может быть не использована, поэтому ругаться не нужно.Может применяться с классами, функциями, аргументами функций, переменными и др.
[[nodiscard]] - говорит компилятору, что никто не может игнорировать возвращаемое значение указанной функции. То есть если мы вызвали функцию и никак не обработали ее возврат, то компилятор выдаст предупреждение.Может применяться с классами, функциями и перечислениями.
[[noreturn]] - говорит компилятору, что указанная функция никогда ничего не вернет вызывающей функции, то есть она завершает программу, бросает исключение или висит в бесконечном цикле. А если мы вдруг напишем в такой функции return, то компилятор выдаст предупреждение.И все бы хорошо, но я, честно говоря, забываю про существование этих атрибутов 😵💫
Дремучий стал, что ли.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Ну и не отходя от кассы, вспомним
(не надо искать подвох, все прозрачно)
Тест 🔽
switch case и проверим себя.(не надо искать подвох, все прозрачно)
#include <iostream>
int main()
{
switch(1)
{
case 1:
std::cout << "1";
[[fallthrough]];
case 2:
std::cout << "2";
break;
default:
std::cout << "0";
}
return 0;
}
Тест 🔽