namespace std
{
struct A
{
int _array[256];
bool _filled;
};
}
bool is_filled(std::A obj)
{
return obj._filled;
}
int main()
{
std::A a;
return is_filled(a);
}
Выше дан код на C++. Проведите код-ревью и напишите в комментариях свои замечания. Если ваши замечания уже кто-то написал, ставьте палец 👍 комментатору)
Лично мне здесь принципиально не нравятся 4 момента 🧐
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Анонимные пространства имен в C++
Пространства имен
Например, у стандартной библиотеки STL есть свое пространство имен по названием
Но есть в C++ отдельный тип пространств имен - анонимные (unnamed). Анонимные пространства имен объявляются... 🥁 без указания имени. Вот так:
У анонимных пространств есть 2 важных свойства:
1️⃣ Они ограничивают область видимости всех сущностей внутри себя только тем файлом исходного кода, в котором они объявлены.
2️⃣ Они являются закрытыми. То есть из разных исходных файлов нельзя добавить сущности в одно и то же анонимное пространство имен.
При этом не стоит объявлять анонимные пространства имен в заголовочных файлах. Это приведет к тому, что в каждой единице компиляции, где включается этот заголовочник, будут созданы копии символов этого пространства.
А о том, почему не стоит запихивать свои символы в пространство имен std, мы вспоминали на прошлой неделе. Смотрите комментарии под постом.
Пространства имен
namespace в C++ служат для решения конфликтов имен классов, функций, переменных и прочего. Другое назначение - смысловое; чтобы повысить читаемость кода.Например, у стандартной библиотеки STL есть свое пространство имен по названием
std. Благодаря этому имена в нашем пользовательском коде никогда не пересекутся с именами стандартной библиотеки. Если конечно мы не будем везде лепить using namespace std; 🤨Но есть в C++ отдельный тип пространств имен - анонимные (unnamed). Анонимные пространства имен объявляются... 🥁 без указания имени. Вот так:
namespace
{
// Что-то внутри нейм-спейса
}
У анонимных пространств есть 2 важных свойства:
При этом не стоит объявлять анонимные пространства имен в заголовочных файлах. Это приведет к тому, что в каждой единице компиляции, где включается этот заголовочник, будут созданы копии символов этого пространства.
А о том, почему не стоит запихивать свои символы в пространство имен std, мы вспоминали на прошлой неделе. Смотрите комментарии под постом.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔1
Выше дан код на C++. Какой вывод будет у программы?
Anonymous Quiz
47%
0
16%
0b000001
16%
0b101111
21%
1
🥴2
Моргнул свет и потух комп.
Пробую включать. Он не реагирует. Перещёлкнул блок питания - включился.
Запускаю веб-сервер Apache - не алё. Контрольная панель что-то там ругается, что апача больше нет.
Слабо верится.
Иду смотреть, может конфиги какие слетели, а там... А там реально нет апача. Ну, в смысле нет бинаря httpd. Удалился.
Уже интереснее. Восстановил бинарь. Запускаю его и узнаю, что куча библиотек-зависимостей тоже не в чате...
Получается, все бинари, которые были загружены апачем в память, теперь удалены с диска.
Вот такая фишечка
👍 👍 👍
Похоже, пятница сегодня у апача. Будьте бдительны 😁
Пробую включать. Он не реагирует. Перещёлкнул блок питания - включился.
Запускаю веб-сервер Apache - не алё. Контрольная панель что-то там ругается, что апача больше нет.
Слабо верится.
Иду смотреть, может конфиги какие слетели, а там... А там реально нет апача. Ну, в смысле нет бинаря httpd. Удалился.
Уже интереснее. Восстановил бинарь. Запускаю его и узнаю, что куча библиотек-зависимостей тоже не в чате...
Получается, все бинари, которые были загружены апачем в память, теперь удалены с диска.
Вот такая фишечка
Похоже, пятница сегодня у апача. Будьте бдительны 😁
Please open Telegram to view this post
VIEW IN TELEGRAM
😢3
Библиотека или фреймворк
🔜 Библиотека - это набор функциональности, решающий определенную задачу.
🔜 Фреймворк - это набор функциональности, определяющий структуру приложения.
То есть понятия похожие, но фреймворк рассматривается в более широком смысле, чем библиотека. Фреймворк навязывает нам определенную структуру приложения, проникая во все его части. Библиотека же предполагает более изолированное использование.
Например, minizip - это библиотека, работающая с архивами, то есть решающая конкретную задачу. А Qt - это уже фреймворк, определяющий все основные элементы приложения: интерфейс, обработка событий, ввод/вывод и др.
#Словарь
То есть понятия похожие, но фреймворк рассматривается в более широком смысле, чем библиотека. Фреймворк навязывает нам определенную структуру приложения, проникая во все его части. Библиотека же предполагает более изолированное использование.
Например, minizip - это библиотека, работающая с архивами, то есть решающая конкретную задачу. А Qt - это уже фреймворк, определяющий все основные элементы приложения: интерфейс, обработка событий, ввод/вывод и др.
#Словарь
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Какой паттерн обеспечивает несколько вариантов алгоритмов, которые легко заменяют друг друга в процессе работы программы?
Anonymous Quiz
6%
Наблюдатель
71%
Стратегия
0%
Одиночка
23%
MVC
🤯1
Продолжая тему проектирования.
Эта картинка - супер-иллюстрация бардака с абстракциями на проекте 😁
Надеюсь, все помнят эту сцену и Гарри Поттера)
Пофантазируем ⤵️
Был проект, где машины ездили, поезда ходили, самолеты летали. Как-то это работало.
Потом в рамках рефакторинга выделили из самолета абстракцию Транспорт и унаследовали от нее Машину, Самолет и Поезд. При этом забыли перенести методы полета в Самолет, оставив их в Транспорте.
Получилось, что теперь Машина умеет летать!
Поезд, кстати, тоже умеет летать, но об этом пока никто не знает. Да никому это и не надо. А вот Уизли докопались и берут от абстракций всё: если есть методы полета, будем их вызывать!
Рон Уизли идет еще дальше и при решении своих задач пробует поставить Машину на Железную дорогу. И ему это удается, так как Железная дорога, оказывается, работает с абстракцией Транспорт 🫢
В итоге в процессе выполнения на проде возникает состояние гонки, и Поезд вступает в конфликт с Машиной.
😨 Все в панике!
Но не понятно из-за чего паника больше: из-за ошибки абстракций или из-за того, что на Поезд подтянулись скины вообще из другого проекта...
Эта картинка - супер-иллюстрация бардака с абстракциями на проекте 😁
Надеюсь, все помнят эту сцену и Гарри Поттера)
Пофантазируем ⤵️
Был проект, где машины ездили, поезда ходили, самолеты летали. Как-то это работало.
Потом в рамках рефакторинга выделили из самолета абстракцию Транспорт и унаследовали от нее Машину, Самолет и Поезд. При этом забыли перенести методы полета в Самолет, оставив их в Транспорте.
Получилось, что теперь Машина умеет летать!
Поезд, кстати, тоже умеет летать, но об этом пока никто не знает. Да никому это и не надо. А вот Уизли докопались и берут от абстракций всё: если есть методы полета, будем их вызывать!
Рон Уизли идет еще дальше и при решении своих задач пробует поставить Машину на Железную дорогу. И ему это удается, так как Железная дорога, оказывается, работает с абстракцией Транспорт 🫢
В итоге в процессе выполнения на проде возникает состояние гонки, и Поезд вступает в конфликт с Машиной.
😨 Все в панике!
Но не понятно из-за чего паника больше: из-за ошибки абстракций или из-за того, что на Поезд подтянулись скины вообще из другого проекта...
😁4😱1
Как начать работать с репозиторием Git на GitHub
В этом видео мы рассмотрим базовые приемы работы с репозиторием git. Мы создадим простой проект из пары файлов, инициализируем на нем репозиторий, научимся делать коммиты и загрузим весь код на GitHub.
📱 YouTube | 📱 ВКонтакте
✍️ Другие способы загрузки кода на GitHub описывал в статье
В этом видео мы рассмотрим базовые приемы работы с репозиторием git. Мы создадим простой проект из пары файлов, инициализируем на нем репозиторий, научимся делать коммиты и загрузим весь код на GitHub.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Скинули вакансию на технического директора с интересным требованием:
Уж простите, но не удержался 😁⤵️
Нам подойдут те управленцы, которые читали книжки по инженерии, а поэтому понимают, что:
- Тестировщики не нужны – разработчики должны сдавать работающий код
Уж простите, но не удержался 😁⤵️
😁3🤡2
Так себе программист
Скинули вакансию на технического директора с интересным требованием: Нам подойдут те управленцы, которые читали книжки по инженерии, а поэтому понимают, что: - Тестировщики не нужны – разработчики должны сдавать работающий код Уж простите, но не удержался…
This media is not supported in your browser
VIEW IN TELEGRAM
😁5🤡2
#include <iostream>
namespace First
{
int var = 1;
}
namespace Second
{
int var = 2;
}
int main()
{
{
using namespace First;
var = 3;
}
std::cout << First::var << Second::var << std::endl;
return 0;
}
Выше дан код на C++. Какой вывод будет у программы?
Anonymous Quiz
30%
12
48%
32
7%
13
15%
Никакой. Ошибка сборки
This media is not supported in your browser
VIEW IN TELEGRAM
😠 Хэй, все знают, что даже у старых жигулей есть душа!
😁4
Так себе программист
😠 Хэй, все знают, что даже у старых жигулей есть душа!
Кстати, про ИИ, нейросети и все такое.
В "Аэлите" Толстого есть эпизод, где прибывшие на Марс люди изучают язык местных с помощью специальной приспособы. Там что-то крутится-вертится, и азбука, фразы и понятия постепенно проникают в сознание.
После "загрузки" знания в голову, им оставалось лишь вздремнуть для закрепления)
Но я что подумал...
Если нам сейчас кажется, что созданные нами нейросети в будущем заменят специалистов, то почему мы не думаем от том, что вместо компьютерных нейросетей, мы будем обучать мозг человека напрямую?
Ну, возьмем и построим все необходимые нейросвязи прямо в мозгу. Врачу - свои, инженеру - свои. Не будем писать учебники, статьи, посты в тележке, а начнём распространять нейросетевые модели обучения. Коммерческие и бесплатные. Специальные и общеобразовательные.
Представьте, грузишь в голову базу и работаешь, копишь опыт. Как скопил что-нибудь интересное, извлекаешь свою нейросеть и выставляешь её на маркетплейс.
Фантастика
#КнижнаяПолка
В "Аэлите" Толстого есть эпизод, где прибывшие на Марс люди изучают язык местных с помощью специальной приспособы. Там что-то крутится-вертится, и азбука, фразы и понятия постепенно проникают в сознание.
Лось чувствовал, – мозг его яснеет, будто поднимается туманная пелена, и новые слова и понятия отпечатлеваются в памяти.
После "загрузки" знания в голову, им оставалось лишь вздремнуть для закрепления)
Но я что подумал...
Если нам сейчас кажется, что созданные нами нейросети в будущем заменят специалистов, то почему мы не думаем от том, что вместо компьютерных нейросетей, мы будем обучать мозг человека напрямую?
Ну, возьмем и построим все необходимые нейросвязи прямо в мозгу. Врачу - свои, инженеру - свои. Не будем писать учебники, статьи, посты в тележке, а начнём распространять нейросетевые модели обучения. Коммерческие и бесплатные. Специальные и общеобразовательные.
Представьте, грузишь в голову базу и работаешь, копишь опыт. Как скопил что-нибудь интересное, извлекаешь свою нейросеть и выставляешь её на маркетплейс.
Фантастика
#КнижнаяПолка
👍2😁2🥴1
Путаница в интерфейсах (часть 5)
Рубрика "Нам пишут" 🤓
Прислали диалог подтверждения отмены записи в одной из МИС (медицинская информационная система).
Если подумать, то диалог вполне логичный. Решение понятно. Но это если подумать.
В моменте же красный цвет для утвердительного действия и зелёный цвет для отрицательного вносят путаницу. Так посмотришь, и уже не уверен, хочешь ли отменять😁
🔜 Как вариант, можно было бы оставить кнопки вообще без цветов.
🔜 Другой вариант - это оставить красный цвет на кнопке "Да, отменить", а зеленый цвет и "галочку" с "крестиком" убрать. Тогда конфликтующих элементов интерфейса станет меньше.
—
Читать Путаница в интерфейсах (часть 4)
Рубрика "Нам пишут" 🤓
Прислали диалог подтверждения отмены записи в одной из МИС (медицинская информационная система).
Если подумать, то диалог вполне логичный. Решение понятно. Но это если подумать.
В моменте же красный цвет для утвердительного действия и зелёный цвет для отрицательного вносят путаницу. Так посмотришь, и уже не уверен, хочешь ли отменять😁
—
Читать Путаница в интерфейсах (часть 4)
Please open Telegram to view this post
VIEW IN TELEGRAM
😁2👍1
#include <iostream>
template<class T>
void func(const std::initializer_list<T>& input)
{
for (const auto& val : input )
std::cout << val << " ";
}
int main()
{
func({1, 2, 3});
return 0;
}
Ну да, шаблоны... Но должны же мы были к ним хоть раз зайти!
Выше дан код на C++. Какой вывод будет у программы?
Anonymous Quiz
14%
0 0 0
55%
1 2 3
14%
val val val
18%
Никакой. Ошибка компиляции.
От "научного тыка" к осознанной отладке в C++
Раньше я не пользовался отладчиком. Вместо этого алгоритм поиска багов был такой:
1. Метод научного тыка - менял какие-то строки и надеялся.
2. Гуглил - иногда везло, но чаще нет.
3. Нагружал код логами -
4. Отправлялся к ментору - последняя надежда.
Хороший алгоритм, кстати. К последнему пункту обязательно срабатывал! Но это было очень долго.
А про отладчик я знал. Но он казался сложным. Думалось, что проще написать 100 логов, чем нажимать на кнопку с жуком 🤨
Но это не могло продолжаться вечно. После жёсткого нагоняя на 4-м пункте я необратимо узнал, что отладчик это:
- видеть состояние программы на каждой строке кода;
- пошагово двигаться по строкам, заходя во все функции;
- анализировать сложные ситуации, которые невозможно залогировать.
С отладчиком часы мучений превратились в минуты отладки. Но, правда, и баги стали позаковыристей 🤭
Если вы все еще логируете, то вот вам мой нагоняй. Смотрим видео, где за 10 минут разберемся в основных аспектах отладчика.
Видео:📱 YouTube | 📱 ВКонтакте
Раньше я не пользовался отладчиком. Вместо этого алгоритм поиска багов был такой:
1. Метод научного тыка - менял какие-то строки и надеялся.
2. Гуглил - иногда везло, но чаще нет.
3. Нагружал код логами -
cout << "Я тут! var = " << var << endl;.4. Отправлялся к ментору - последняя надежда.
Хороший алгоритм, кстати. К последнему пункту обязательно срабатывал! Но это было очень долго.
А про отладчик я знал. Но он казался сложным. Думалось, что проще написать 100 логов, чем нажимать на кнопку с жуком 🤨
Но это не могло продолжаться вечно. После жёсткого нагоняя на 4-м пункте я необратимо узнал, что отладчик это:
- видеть состояние программы на каждой строке кода;
- пошагово двигаться по строкам, заходя во все функции;
- анализировать сложные ситуации, которые невозможно залогировать.
С отладчиком часы мучений превратились в минуты отладки. Но, правда, и баги стали позаковыристей 🤭
Если вы все еще логируете, то вот вам мой нагоняй. Смотрим видео, где за 10 минут разберемся в основных аспектах отладчика.
Видео:
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👏1🕊1