Так себе программист
98 subscribers
185 photos
7 videos
1 file
183 links
Меня зовут Александр Троценко. Разработчик, преподаватель, к.т.н. Пишу о программировании и профессии.

10 лет в разработке desktop на C/С++

Контент: https://taplink.cc/atrotsenko
Download Telegram
Завандалил

Глядя на разрисованный лифт, я вспомнил случай с моими студентами.

На картинке выше фрагмент гугло-дока, куда ребята должны были самостоятельно вписать выбранные темы курсовых работ. Они это и сделали, все большие молодцы)

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

Получилось так, что кто-то из ребят взял и размалевал гугло-док словно лифт в пятиэтажке. С той же пестротой, тональностью и безрассудством.

Почему, зачем? Да кто его знает. Потому что может. Потому что анонимно. Человек сам же там написал: "анонимочка так что по..."

🤦‍♂️

Анонимность и безнаказанность воистину срывают тормоза.
Please open Telegram to view this post
VIEW IN TELEGRAM
😁2
Как создать оконное приложение на Qt в среде QtCreator

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

Библиотека Qt - это набор классов C++ для создания кросс-платформенных приложений с графическим интерфейсом. С помощью этой библиотеки созданы, например, среда разработки QtCreator и инструмент для записи видео OBS Studio.

✍️ Статья | 📱 YouTube | 📱 ВКонтакте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
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
А вы игнорируете warnings?

😁 - Да
👍 - Нет
🤷‍♂️ - Бывает
👍8😁6🤷‍♂3
Анонимные пространства имен в C++

Пространства имен namespace в C++ служат для решения конфликтов имен классов, функций, переменных и прочего. Другое назначение - смысловое; чтобы повысить читаемость кода.

Например, у стандартной библиотеки STL есть свое пространство имен по названием std. Благодаря этому имена в нашем пользовательском коде никогда не пересекутся с именами стандартной библиотеки. Если конечно мы не будем везде лепить using namespace std; 🤨

Но есть в C++ отдельный тип пространств имен - анонимные (unnamed). Анонимные пространства имен объявляются... 🥁 без указания имени. Вот так:

namespace 
{
// Что-то внутри нейм-спейса
}


У анонимных пространств есть 2 важных свойства:

1️⃣ Они ограничивают область видимости всех сущностей внутри себя только тем файлом исходного кода, в котором они объявлены.

2️⃣ Они являются закрытыми. То есть из разных исходных файлов нельзя добавить сущности в одно и то же анонимное пространство имен.

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

А о том, почему не стоит запихивать свои символы в пространство имен std, мы вспоминали на прошлой неделе. Смотрите комментарии под постом.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔1
😁 Да-да, опять этот сиплюсплюс

Но в этот раз подвоха нет, простой расчет ⤵️

#include <iostream>

int main()
{
int a = 0b001010;
int b = 0b100101;
std::cout << (a | b) * (a & b) << "\n";
return 0;
}
😁1
Выше дан код на C++. Какой вывод будет у программы?
Anonymous Quiz
47%
0
16%
0b000001
16%
0b101111
21%
1
🥴2
Моргнул свет и потух комп.

Пробую включать. Он не реагирует. Перещёлкнул блок питания - включился.

Запускаю веб-сервер Apache - не алё. Контрольная панель что-то там ругается, что апача больше нет.
Слабо верится.
Иду смотреть, может конфиги какие слетели, а там... А там реально нет апача. Ну, в смысле нет бинаря httpd. Удалился.

Уже интереснее. Восстановил бинарь. Запускаю его и узнаю, что куча библиотек-зависимостей тоже не в чате...

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

Вот такая фишечка
👍👍👍

Похоже, пятница сегодня у апача. Будьте бдительны 😁
Please open Telegram to view this post
VIEW IN TELEGRAM
😢3
А вы помните свой тот самый мьютекс? 😅

Я вот вспомнить не могу. Чаще в deadlock-и залетал 🙃
🤓2
Библиотека или фреймворк

🔜 Библиотека - это набор функциональности, решающий определенную задачу.

🔜 Фреймворк - это набор функциональности, определяющий структуру приложения.

То есть понятия похожие, но фреймворк рассматривается в более широком смысле, чем библиотека. Фреймворк навязывает нам определенную структуру приложения, проникая во все его части. Библиотека же предполагает более изолированное использование.

Например, 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 описывал в статье
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Скинули вакансию на технического директора с интересным требованием:

Нам подойдут те управленцы, которые читали книжки по инженерии, а поэтому понимают, что:
- Тестировщики не нужны – разработчики должны сдавать работающий код


Уж простите, но не удержался 😁⤵️
😁3🤡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)
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;
}


Ну да, шаблоны... Но должны же мы были к ним хоть раз зайти!