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

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

Контент: https://taplink.cc/atrotsenko
Download Telegram
Миграция с 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