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

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

Контент: https://taplink.cc/atrotsenko
Download Telegram
#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%
Правый
Как это развидеть?

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

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

Есть забавный игровой тренажёр 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