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

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

Контент: https://taplink.cc/atrotsenko
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
Бакалаврский диплом: Шаблон специальной системы автоматизированного проектирования (САПР)

Решил, что буду складывать здесь брифы ярких работ студентов. Для истории.

Я уже писал раньше про учебный проект EduCad. Это комплекс библиотек на основе Qt и OpenCasCade (C++), позволяющий упростить создание САПР-приложений в рамках образовательного процесса.

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

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

В перспективе хотим дойти до реализации этого шаблона в виде мастера создания проекта в среде разработки (QtCreator, VSCode). Тогда можно будет "натыкать" минимальную функциональность приложения перед началом основной работы. Генерация кода как она есть 🙂
🔥5👍1
Мем в презентации (часть 2)

Возвращаясь к теме мемов в презентациях, обратил внимание на отношение к юмору на курсе "Визуальные презентации" от Яндекса.

Отдельно там этого не касались, но пару пунктов я выделил:

1. Юмор уместен на живом выступлении. В презентациях на печать он совсем ни к чему.

2. Уместность шутки определяется полезным действием презентации. Полезное действие должно решать проблему слушателя.

То есть здесь шутки не отметают напрочь. Но они должны прямым образом соответствовать цели презентации.

Вообще, лейтмотив курса состоит в принуждении сокращать любой визуальный шум. Только конкретика, только по делу.
👍4
Какой паттерн получим, если отделим все части приложения, в которых создаются экземпляры конкретных классов, от другой части приложения?
Anonymous Quiz
26%
Шаблонный метод
11%
Заместитель
26%
Строитель
37%
Фабричный метод
Обратил внимание на the component gallery - каталог компонентов пользовательских интерфейсов (UI). Помимо очевидной каталогизации, он решает еще 2 проблемы:

1. Именование компонентов. Если забыли или не знаете как называется компонент, можно восполнить пробел.

2. Насмотренность. Стоит потратить несколько минут, чтобы пробежаться по каталогу и открыть для себя что-то новое. Или закрепить старое)

Есть смысл добавить в закладки🔖 Каталог обновляется.

#ui
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
Какой принцип проектирования гласит, что код должен зависеть от абстракций, а не от конкретных классов?
Final Results
70%
Принцип инверсии зависимостей
20%
Принцип открытости/закрытости
0%
Принцип подстановки Лисков
10%
Принцип японской Годзиллы
🤯3
⬆️ ❌ В этой викторине я вмазал правильный ответ не туда 😁
Когда-то это должно было случиться) Видимо принял желаемое за действительное...
Давайте заново!
Какой принцип проектирования гласит, что код должен зависеть от абстракций, а не от конкретных классов?
Anonymous Quiz
40%
Принцип инверсии зависимостей
30%
Принцип открытости/закрытости
5%
Принцип подстановки Лисков
25%
Принцип японской Годзиллы
Конкуретность или параллелизм

Оба понятия говорят об одновременном выполнении задач. Разница в деталях. #Словарь

Конкуретность - это одновременное выполнение N задач на одной вычислительной единице.

Параллелизм - это одновременное выполнение N задач на N вычислительных единиц.

При параллелизме "одновременность" обеспечиваются многопроцессорным “железом”, а при конкуретности - преимущественно логикой программы с управлением конфликтами.

Эта картинка хорошо показывает различие:
👍2
#include <iostream>

struct B { int n; };
class X : virtual public B {};
class Y : virtual public B {};
struct AA : X, Y
{
AA()
{
X::n = 1;
Y::n = 2;
std::cout << X::n << Y::n << '\n';
}
};

int main()
{
AA a;
return 0;
}
😱3
Выше дан код на C++. Какой вывод будет у программы?
Anonymous Quiz
25%
22
5%
11
30%
12
40%
Никакой. Ошибка сборки
🙏2
Аутсорсинг или аутстаффинг

И то, и другое - это форма взаимоотношений, при которой одна организация привлекает к своей работе другую организацию как внешний ресурс.

При аутсорсинге (outsourcing) компания-заказчик передает выполнение какой-то части своих задач компании-подрядчику. Заказчику не важно как подрядчик будет выполнять работу. Важен результат.

При аутстаффинге (outstaffing) компания-заказчик берет в штат сотрудника компании-подрядчика. Заказчик сам заботится об организации работы сотрудника на аутстаффе.

В ИТ распространены оба формата. Мне, например, удалось поработать и аутсорсером, и аутстаффером 😏

#Словарь
👍3
git worktree

Команда git worktree создает копию репозитория в отдельной папке.

Главное отличие этой команды от обычного клонирования - это отсутствие дублирования репозитория. Мы остаемся в пределах его локальной копии. Все локальные ветки и коммиты видны из каждого worktree.

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

📍Git. Скачем между ветками как древесные лягушки
📍Картинка взята отсюда
👍2
Известно, что тормозной путь автомобиля со скорости 50 км/ч равен 14 метрам. Дайте оценку, каким будет тормозной путь со скорости 100 км/ч
Anonymous Quiz
13%
10 - 20 метров
17%
20 - 30 метров
42%
30 - 50 метров
29%
50 - 70 метров
Как использовать исключения. Рекомендация

💬 "Либо генерируй исключение, либо обрабатывай его, либо уходи с дороги!"

Используйте оператор throw там, где обнаружена ошибка, но нет возможности обработать ее самостоятельно.

Используйте ключевые слова try и catch там, где вы обладаете достаточной информацией для обработки ошибки, ее преобразования или обеспечения границы, определенной стратегией обработки ошибок (например, catch(...) на границе подсистемы).

📍Саттер Г. - Новые сложные задачи на С++
👍1🙏1
#include <iostream>

class Base
{
public:
Base() {}
virtual ~Base(){}
void print()
{
std::cout << "Base" << std::endl;
}
};

class Derived : public Base
{
public:
Derived() {}
virtual ~Derived(){}
void print()
{
std::cout << "Derived" << std::endl;
}
};

int main()
{
Base* b = new Derived;
b->print();
delete b;
return 0;
}
Выше дан код на C++. Какой вывод будет у программы?
Anonymous Quiz
27%
Base
45%
Derived
14%
BaseDerived
14%
Одна строка “Base”, вторая строка “Derived”
😢2
Идиот

Наконец-то познакомился с “Идиотом” Достоевского. И я никак не ожидал, что история действительно будет про идиота 😁. Думал, мол, “идиот” это игра слов и все такое. Но нет, герой натурально себе на уме. Странный малый.

Но вот что зацепило ⬇️

🔜 Обыкновенные люди
Есть люди, о которых трудно сказать что-нибудь такое, что представило бы их разом и целиком, в их самом типическом и характерном виде; это те люди, которых обыкновенно называют людьми «обыкновенными», «большинством», и которые действительно составляют огромное большинство всякого общества.

Достоевским делается акцент на самого обыкновенного человека. Ну что-то вроде моего так себе программиста, понимаете?
“образование порядочное, но не знаешь, на что его употребить; ум есть, но без своих идей”… Да-да! Вроде бы всё при себе, но ничего выдающегося. Зато обыкновенным людям нашлось место в достоевщине ☝️

🔜 “Муравейники”
Дом был огромной величины, одна из тех громадин, которые строятся аферистами для мелких квартир; в иных из таких домов бывает иногда нумеров до ста.

До ста… Не смешите мои кхм-кхм. 150 лет прошло, а ситуация та же. Но тогда хоть голову не ломали, куда свою самоходную колесницу приткнуть.

🔜 Изобретательство
Изобретатели и гении почти всегда при начале своего поприща (а очень часто и в конце) считались в обществе не более как дураками, - это уж самое рутинное замечание, слишком всем известное.

Точно. Над первыми авиастроителями тоже смеялись: камень кинь, и он полетит. Но отрицание и гнев через торг сменились принятием. Таков уж путь идеи в массы. Не унывайте, гении 😉

P.S. Читать было сложно. Бесконечные монотонные разговоры утомляли. Но финал удивил. Чего-чего, а такого финта я не ожидал.

#КнижнаяПолка
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
git без GitHub

Если мы пишем курсач или дипломный проект. Если изучаем что-то новое или экспериментируем. Если завели пет-проект без каких-либо планов. То ничто нам не мешает сразу сделать “git init” и коммитить!

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

Зачем? Объясняю.

Так мы получаем немножко выгод:
✅ Необходимость коммитить провоцирует нас работать структурно и разбивать задачу на мелкие итерации.
✅ Косяки случаются. Имея стройную историю коммитов, нам легче восстановиться.
✅ В учебной работе история коммитов поможет составить отчёт.

И конечно же есть невыгода:
❌придется работать с git-ом.
Аж с тремя командами:
- git init, чтобы инициализировать репозиторий;
- git add, чтобы подготовить файлы к коммиту;
- git commit, чтобы, собственно, зафиксировать изменения.

Не стесняйтесь помогать себе подходящими инструментами. А то можно запутаться в бесконечных kursach_v1.zip … kursach_v42.zip 😉
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1
Какой из предложенных выше интерфейсов более корректный?
Anonymous Quiz
100%
Левый
0%
Правый