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

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

Контент: https://taplink.cc/atrotsenko
Download Telegram
Антарктика

Если вы мало знаете об освоении Антарктиды, то “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
Идем по пути от “так себе” вчера к “немного лучше” сегодня.

Авторский образовательный контент по неустанной борьбе с так себе программистом.

Даже рубрики есть:

#КнижнаяПолка 📚
О книгах. Полезно мне - полезно вам 😉

#ЖизньДругих 👀
Об интересных решениях в открытых проектах.

#Словарь 📕
О сложной и запутанной терминологии в формате конфликта.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Так себе программист pinned «Идем по пути от “так себе” вчера к “немного лучше” сегодня. Авторский образовательный контент по неустанной борьбе с так себе программистом. Даже рубрики есть: #КнижнаяПолка 📚 О книгах. Полезно мне - полезно вам 😉 #ЖизньДругих 👀 Об интересных решениях…»
Какой паттерн определяет объект, который инкапсулирует запрос на выполнение некоей операции с другим объектом?
Anonymous Quiz
69%
Команда
11%
Одиночка
11%
Фабрика
8%
Парковка
#include <iostream>

int main()
{
int* val = new int(0);
std::cout << "Enter a number: ";
std::cin >> *val;

if (*val == 42)
{
std::cout << "Wow! Your number is 42!" << std::endl;
return 0;
}

std::cout << "Good choice!" << std::endl;
delete val;
return 0;
}
Джуны больше не нужны

Ничего себе заявленьеце, да? 😦
И самое интересное, что оно совсем не беспочвенное и напрямую связано с развитием ИИ.

Kirimgeray Kirimli, руководитель Snapshot Reviews, считает, что задачи джунов скоро будет выполнять ИИ. Предпосылки к этому есть. В условиях хорошо составленного технического задания ИИ сможет дать адекватное решение.

Что же тогда делать джунам?

Да то же, что и всегда, - учиться. Каким бы крутым не был ИИ, доверия к нему мало, а его решения должны быть верифицированы. Kirimgeray Kirimli предполагает, что именно этим и будут заниматься джуны - присматривать за ИИ. А это в любом случае потребует устойчивых знаний компьютерных наук. Может даже более серьёзных, чем от джуна ожидают сейчас.

—

Имхо, даже на сегодня это довольно смелая идея. Для меня ИИ все ещё не стал инструментом повседневной работы. То ли нет нужды, то ли я так себе программист 🙃
Не знаю в общем, присматриваюсь пока.

А вы используете ИИ в разработке?

📍Say goodbye to "junior" engineering roles
👍3
dark_theme_fun.gif
11.1 MB
Когда захотелось ну очень тёмную тему 🌘

Отсюда
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰5
Список 1
{1, 2, 3, 4, 5, 6, 7, 8}


Список 2
{3, 5, 4, 1, 2}
Выше даны два списка. Сортировка какого списка займет меньше времени?
Anonymous Quiz
24%
Неизвестно
27%
Списка 1
22%
Списка 2
27%
Время сортировки примерно одинаково
Недооценённые навыки

Если вы не можете ходить и вам приносят молоко вместо апельсинового сока, который вы хотели, то вы скажете: "все нормально", и выпьете его.


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

2. Уважительное отношение к человеку, с которым вы не согласны.
Трюк состоит в том, чтобы найти в таком человеке точку соприкосновения и в конце концов сказать себе: "ок, не такой уж он и сумасшедший". Иначе можно слишком легко его "списать".

3. Способность вести 10-минутную беседу с любым человеком.
В наше время онлайна беседовать с глазу на глаз с незнакомым человеком - тот ещё челендж. Хотя раньше это и не назвали бы каким-то особенным скилом.

4. Кратко и ёмко донести суть.
Все очень заняты. Меньше слов, больше дела.

5. Вежливо сказать "нет".
Люди, которые колеблются сказать "нет", либо медлят, либо говорят "да", откладывая неминуемое "нет". В итоге "нет" становится более разрушительным. Другая крайность - это очень резкое "нет", после которого к нам вообще перестанут обращаться. Нужен баланс.

5-й пункт сильно про меня. Я уже не один раз попадал в "ситуацию" из-за того, что медлил с ответом "нет". Сначала обнадёживаешь почём зря, а потом выглядишь еще большим придурком, чем мог бы 😶

Еще больше навыков и интересных примеров здесь
📍
Morgan Housel - Useful and Overlooked Skills
👍4
Мощь!
Железный подход 💪

Жмите 🔥, если интересна тема реверс-инжиниринга
🔥10😁1
Troubleshooting. Метод деления пополам

Продолжаю серию постов по траблшутингу. Сегодня поговорим про локализацию проблемы методом деления пополам.

Метод деления пополам используется, например, в электротехнике ⚡️ для поиска обрыва в цепи. Для этого участок цепи визуально разбивается пополам и каждая половина проверяется на предмет наличия тока. Та половина, в которой тока нет, считается содержащей обрыв. Она в свою очередь снова разбивается пополам и половинки снова проверяются. Так продолжается до тех пор, пока мы не придём к проблемному месту.
А мы придём к нему в общем случае быстрее, чем если бы последовательно проверяли цепь по маленьким "кусочкам".

Вот такой итерационный метод можно использовать и при отладке программ.

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

1️⃣ Для начала выбираем большой участок программы от ее старта до места проявления ошибки. Мы уверены, что в начале выполнения программы наши данные корректные.

2️⃣ Теперь визуально делим выбранный участок программы пополам и проверяем корректность данных в месте разделения. Если данные корректные, то выбираем следующий по ходу участок программы. Если данные не корректные, то - предыдущий.

3️⃣ Продолжаем пункт 2 до тех пор, пока не "спустимся" к источнику проблемы.

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

Для этого нужно знать коммит, на котором проблемы еще не было, и коммит, на котором проблема была обнаружена. Тогда путем деления истории коммитов пополам можно быстро найти коммит, который занёс в код ошибку. В git, например, этот метод реализуется командой git bisect. Почитайте, если ещё не слышали.

#Troubleshooting
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7