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

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

Контент: https://taplink.cc/atrotsenko
Download Telegram
Как использовать исключения. Рекомендация

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

Используйте оператор 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%
Правый
Как это развидеть?

Как испортить дизайн интерфейса? Легко! И спец-курс не нужен 😅 Но даже легкая теория и небольшая насмотренность поможет меньше портачить.

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

Есть забавный игровой тренажёр Can’t Unsee, где можно потренироваться. Принцип простой: из двух предложенных вариантов интерфейса нужно выбрать более корректный.

Попробуйте. Лично мне уже на среднем уровне было сложно что-то разглядеть.
👍4👌2
#include <iostream>

struct MyStruct
{
int var1{0};
unsigned int var2{-1};
};

int main()
{
MyStruct s;
std::cout << "var1=" << s.var1 << "; "
<< "var2=" << s.var2 << std::endl;
return 0;
}
Выше дан код на C++. Какой вывод будет у программы?
Anonymous Quiz
20%
var1=0; var2=-1
5%
var1=0; var2=0
20%
var1=0; var2=4294967295
55%
Никакой. Ошибка компиляции.
bool как аргумент

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

Давайте посмотрим на эту функцию:
void SetData( std::string value, bool isFilePath );


Аргумент isFilePath призван менять логику функции при обработке строки value. Если isFilePath==true, то строка интерпретируется не как данные, а как путь к файлу данных. Это расхожий шаблон, который можно увидеть у новичков.

С технической точки зрения проблемы здесь нет. Трудности могут возникнуть при чтении такого кода. Например, использование функции может выглядеть так:
obj.SetData( value, true );

И думай-гадай, что тут за true... Придётся смотреть объявление функции.
А если сделать по-другому:
void SetDataString( std::string value );
void SetDataFile( std::string filePath );

То становится понятнее, правда? Да, больше слов. Да, ещё одна функция. Но понятнее.

Как бы то ни было, рубить с плеча тоже не стоит. Дурной тон дурным тоном, но булевым аргументам найдется место. Например, при реализации поведения вкл/выкл:
obj.SetEnabled( true );

Или ещё где-нибудь. Лишь бы читалось.

Ещё по теме - здесь.
🔥2👍1
API или SDK

Продолжаем пополнять #Словарь. Чем отличается API от SDK?

🔜 API (application programming interface) - это описание способа взаимодействия программ. Документ, если угодно.

🔜 SDK (software development kit) - это набор инструментов для разработки программ. То есть библиотеки, программы, скрипты и т.п.

Грубо говоря, API как бы описывает возможности программ “на бумаге”, а SDK их реализует. Хотя SDK этим и не ограничивается.
Please open Telegram to view this post
VIEW IN TELEGRAM
🙏2🔥1
Дайте оценку, какая минимальная зарегистрированная температура воздуха у поверхности Земли?
Anonymous Quiz
4%
-20 … -40 °C
4%
-40 … - 60 °C
30%
-60 … -80 °C
61%
-80 … -100 °C
Антарктика

Если вы мало знаете об освоении Антарктиды, то “72 градуса ниже нуля” Владимира Санина подойдёт как нельзя лучше для начала знакомства.

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

Владимир Санин, имея собственный опыт экспедиций в Арктике и Антарктике, подробно и убедительно описывает труд полярников. Заметно особенное внимание к людям, к коллективу. Каждый герой со своим характером, своими мотивами, своей историей и своими слабостями. Вчерашний подвиг человека сменяется досадной ошибкой, просчетом. Кто-то проявит стойкость, кто-то смалодушничает. Живые люди.

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

🔜 Мирный и Восток - это реальные станции в Антарктиде. Мирный находится на береговой линии, а Восток в глубине материка. Расстояние между станциями составляет почти 1500 км. Санно-гусеничные вездеходы 70-х годов преодолевали этот путь за 5 недель.

🔜 Станция Восток находится на 3,4 км выше станции Мирный. Горная болезнь на Востоке не редкость. Хотя на самом деле эта “гора” совсем не гора, а ледяной купол. Да, многокилометровый сплошной лёд.

🔜 Осадков на Востоке практически нет, но все постройки постепенно уходят под снег, который наносится ветрами. Летом (в декабре 🤨) воздух на станции прогревается до -14°C, а зимой (в июле) опускается до -88°C. Не жара.

Санин В - “72 градуса ниже нуля” #КнижнаяПолка
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Миграция с Notion на Obsidian

С 9 сентября Notion пока-пока ❌
Эх, а хорошо дружили. Я к нему прям прикипел. Построил себе приличную базу знаний с задачами, проектами, библиотекой и прочей писаниной. Теперь надо переезжать. И все знаки указали переезжать на Obsidian.

В Obsidian есть все для миграции. Экспортируем воркспейс Notion и импортируем его в Obsidian. С одной стороны, все выглядит просто. Особенно если в воркспейсе не было сложных структур. С другой стороны, есть особенности. Поговорим о них.

1️⃣ Obsidian культивирует немного другую структурную концепцию: файлы с тегами против табличной организации в Notion. Главная проблема - жёсткие свойства-теги (tags). На tags завязано много функциональности Obsidian. Но в Notion у меня свойства-теги были под другими именами. С помощью поиска/замены VSCode я эти свойства переименовал и всё встало на свои места.

2️⃣ Obsidian в отличие от Notion не поддерживает теги с пробелами. Пришлось также с помощью поиска/замены VSCode дописать в тегах нижние подчеркивания вместо пробелов.

3️⃣ Kanban-доски я организовал через плагин Projects. Получается очень похоже на Notion. Этот же плагин может формировать списки, таблицы и календари. Всё интерактивное, поддерживается фильтрация.

4️⃣ Там, где нужно сформировать из файлов простую таблицу с фильтрацией по тегам и свойствам, подойдет плагин Dataview. С помощью языка запросов можно создавать разные представления.

5️⃣ Календарь и уведомления событий в Obsidian я организовал с интеграцией Google-календаря через соответствующий плагин. Это личное предпочтение, я Google-календарём пользовался и до этого. К тому же к событиям календаря можно привязывать заметки Obsidian.

6️⃣ Синхронизацию между устройствами сделал через Яндекс-диск. Для этого хранилище Obsidian размещается в локальной папке Яндекс-диска, а клиент диска синхронизирует его с облаком. На остальных устройствах делается то же самое. На ПК работает отлично. На мобильном похуже.

В общем, переехать реально 👍
За несколько вечеров мне удалось привести в относительно рабочее состояние базу из более чем 2-х тысяч элементов. Буду осваивать Obsidian дальше, по ключевым моментам отпишусь.

Кто-нибудь уже работает с Obsidian? Посоветуете что-то?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Когда прикидываешь, сколько наберёшь подписчиков на своём новом канале

Это называется "адекватная оценка" 😁
😁4
Troubleshooting

Траблшутингом мы занимаемся каждый день. Баг такой, баг сякой. Мы либо исправляем баг, либо создаем его 🐞👋 (не специально, конечно). Но в наших интересах сводить наши проблемы к минимуму.

Небольшой серией постов я хочу разобрать практические подходы, которые нам в этом помогут. Начнем сначала: как проблемы предупредить?

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

2. Работайте с предупреждениями компилятора (или что у вас там). В пределе их не должно быть совсем. Игнорируя предупреждения, мы... См. пункт 1... Правильно, пессимизируем.

3. Используйте статические анализаторы. Это отличное усиление компилятора (или что у вас там). Множество проверок, в том числе проверок безопасности, поможет выявить косяки на раннем этапе.

Когда проблема зарегистрирована, но ее решение не очевидно, мы можем прибегать к пунктам 2 и 3. Проверьте, что включен максимальный уровень проверок компилятора (или что у вас там), а также ещё раз прогоните проблемные исходники через анализаторы. Есть шанс, что источник проблемы будет найден ✅

Кто знает, какие еще есть способы предупреждать проблемы?

#Troubleshooting
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2❤1🙏1
int arr[] = { 4, 2, 6, 0, 1 };

for ( int i = 1; i < 5; i++ )
{
int key = arr[i];
int j = i - 1;
while ( j >= 0 && arr[j] > key )
{
arr[j + 1] = arr[j];
j = j - 1;
}
arr[j + 1] = key;
}
Что может быть дороже бага в требованиях?

⌛

Правильно, баг в постановке цели!
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯4
Как установить среду разработки QtCreator на Windows

Первый способ. Самый логичный и простой. Идём на официальный сайт Qt, скачиваем нужный установщик QtCreator и устанавливаем. Для установки потребуется учетная запись Qt.

Если по каким-то причинам первый способ вам не подошёл 🤷‍♂️, то должен подойти...

...второй способ. Чуть более замороченный.

1. Идем в репозиторий GitHub qt-creator.

2. Там открываем страницу с релизами Releases. Записи релизов обозначаются версиями вроде "v14.0.1". Внизу каждой записи есть спойлер Assets - там лежат скомпилированные версии qt-creator под разные платформы и компиляторы. Они нам и нужны.

3. Скачиваем из Assets архив с именем, похожим на это: "qtcreator-windows-x64-msvc-14.0.1.7z".

4. Распаковываем архив на своём компьютере.

5. Запускаем файл bin/qtcreator.exe

И можно работать.
🙏3👍2