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

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

Контент: https://taplink.cc/atrotsenko
Download Telegram
Поиск информации по проекту

Согласно опросу на Stack Overflow, четверть разработчиков тратят более часа в день на поиск информации, необходимой для работы. Много? Ну, it depends, как говорится. В исследовательских проектах поиск информации вообще является непосредственной работой. Но сейчас немного не об этом.

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

Во вторую очередь обращаются к экспертам. Это спецы, которые досконально знают если не весь проект, то какую-то его часть. Все вместе эти ресурсы отвечают на все вопросы проекта.

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

В Compass от Atlassian для решения проблемы предлагают вести каталог компонентов проекта. Кто работает над компонентом, как с ними связаться, где лежит репозиторий, какие у проекта зависимости, где техническая документация и ссылки на дополнительную информацию. В общем все, что хотелось бы знать о конкретной части проекта содержится в каталоге. Причем за разработчиками остается право на расширение информации. Что логично в свете развития проекта.

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

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

Who owns this tool? A software component catalog to help devs find answers
👍3🔥1
Без труда...

С детства мы знаем, что “без труда не вытащишь и рыбку из пруда” и “если долго мучиться, то что-нибудь получится”. Шутки конечно, но суть понятна - работай.

На этом фоне вспомнил еще несколько изречений, которые мне в разное время попались.

“Увы, наскоком загадки мироздания не решаются”. - Сергей Лукьяненко, “Спектр”.

“Где, когда, какой великий выбирал путь, чтобы протоптанней и легше?” - Владимир Маяковский, “Сергею Есенину”.

И самое любимое:

“Дрянь, говорю…, вдохновение — дрянь! Порыв к работе важнее. На одном вдохновении далеко не ускачешь. Гений — это лишь талант, который работает, работает, работает..., пока не сдохнет. Разве не так, Ванюшка? Корпеть надо — тогда получится”. - Валентин Пикуль, “Полет и капризы гения”.

Что еще знаете?

#КнижнаяПолка
👍5🔥1
Функция, метод или процедура

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

Так функция всегда возвращает значение. А если функция не возвращает значение, то это - процедура. Функцию, принадлежащую классу или объекту, называют методом.

Method vs Function vs Procedure
#Словарь
👍2
“Напишем и исправим”

Небольшая заметка про решение задач "в лоб".

Почти 75% коллективов разработчиков начинают работу, налетая на глыбу и пытаясь подвинуть ее при помощи грубой силы. Такой подход – сразу хвататься за написание программ, не позаботившись о планировании и проектировании – получил наименование «напишем и исправим».


Разработка по принципу «напишем и исправим» неэффективна во всех проектах, за исключением самых мелких.


Коллективы, практикующие более сложные подходы, формируют структуру, позволяющую проекту выйти на высокий уровень производительности и эффективно завершить его.


По результатам некоторых исследований, от 40 до 80% бюджета типичного проекта ПО расходуется на исправление дефектов, которые появились в нем ранее.


Макконнелл С - Профессиональная разработка ПО (глава 2)
👍3
Переполнение буфера

В C++ записать данные мимо буфера - раз плюнуть. Называется это buffer overflow (BO). Вот пример как это происходит в стековой памяти.

#include <stdio.h>

int main()
{
char a[4] = "aaa";
int b = 23;
char c[4] = "ccc";

printf( "a = %s\n", a );
printf( "b = %d\n", b );
printf( "c = %s\n", c );

printf( "Assign 'c' with overflow\n" );
sprintf( c, "%d", 1234567089 );

printf( "a = %s\n", a );
printf( "b = %d\n", b );
printf( "c = %s\n", c );

return 0;
}


Вывод программы будет такой:
a = aaa
b = 23
c = ccc
Assign 'c' with overflow
a = 89
b = 808924725
c = 1234567089


После записи избыточных данных в буфер c, оказываются поврежденными данные в переменных a и b, находящихся ниже по стеку.

Но есть и хорошая новость. Современные статические анализаторы такие вещи обычно диагностируют.

Кстати, на собеседованиях это популярный вопрос.
👍3
YouTube Analyzer 3.0

Выпустили новую версию YouTube Analyzer - анализатора поисковой выдачи YouTube.

Добавлено:
- Боковая панель с превью и тегами выбранного видео.
- Экспорт данных в таблицу HTML.

YouTube Analyzer - классическое desktop-приложение, написанное на Python/PySide(Qt). Его решения можно использовать как шаблон для своих приложений.
🔥2
Когда заменять легаси на новую технологию?

Понятно, что переписывать легаси “только потому что” не нужно. Надо понимать, что мы хотим получить от новой технологии и какие преследуем цели.
А цели и их предпосылки могут быть такие:

1. Снижение стоимости изменений. Когда внесение изменений обходится дорого или легаси-система начинает диктовать объем доработок.

2. Улучшение бизнес-процессов. Когда ограничения легаси-системы не позволяют улучшить продуктовые бизнес-процессы.

3. Отказ от устаревшей системы. Когда сложно и дорого поддерживать старый софт или железо.

4. Предотвращение неминуемой катастрофы продукта. Когда внешние факторы, будь то регуляторика или конкуренты, ведут систему к неизбежному провалу.

5. Приоритетные новые технологии. Когда новая технология лучше соответствует потребностям бизнеса сейчас и в будущем.

Patterns of Legacy Displacement
👍2
Внедрение DLL в EXE

Попалась статья с инструкцией по внедрению DLL в EXE. Инструкция хорошая, но остается вопрос, зачем это вообще может понадобиться?

Написал этот вопрос в комментарии автору статьи и... вопрос не прошел модерацию😁 Потёрли.

Полазил по сети, может кто-то так делал. И да, конечно делал. Мотивов, в общем-то, два:

1. "Кидаю дружбану exe-шник, а он у него не запускается из-за отсутствия dll. Как встроить эти dll в exe-шник?". Это самый популярный мотив. Оставим его сразу в покое.

2. "Требования/коллеги/заказчик не допускают, чтобы конкретная dll была видна пользователю. Как спрятать ее в exe-шник?". В этом мотиве веса больше. Но это скорее "костыль", прикрывающий проблемы реализации.

Поэтому вопрос остается открытым.
Может ли внедрение DLL в EXE быть действительно полезным на практике?

Есть идеи?
👍1😁1
Управление памятью: “парашют”

Для обеспечения стабильной работы программы в условиях недостатка оперативной памяти можно использовать так называемый "парашют".

В самом начале работы программы резервируется какой-то объем памяти. Когда вся память будет заполнена, этот объем можно освободить и корректно завершить программу.

Макконнелл С - Совершенный код (глава 13.2)
👍1
"Голос науки"

Зарегистрировался на платформе “Голос науки”. Это социальная сеть для российских ученых.
Как раз для меня 😉
https://golos-nauki.ru/u/2495217

Говорят, эта платформа должна импортозаместить ResearchGate. Ну, посмотрим-посмотрим. Понаблюдаю в режиме read only. Пока.

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

Тем не менее, система в бетке. Все впереди.
🔥3👍1
Путаница в интерфейсах (часть 2)

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

Моя самая больная троица: git restore / git revert / git reset.
Ну когда бы не вводил одну из команд, обязательно перепутаю! Как проклятие. Осложняется еще и тем, что используешь их не каждый день. Не получается запомнить.

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

В ООП оба термина описывают отношение между классами как “часть-целое”. Но у каждого своя оговорочка.

Агрегация - это отношение по ссылке, когда оба объекта могут существовать сами по себе, независимо.

Композиция - это отношение по значению, когда включаемый объект не может существовать без своего класса-контейнера.

Новичкам это надо запомнить. Как минимум для собеса. Как максимум, чтобы не впадать в ступор после фразы “давай здесь наследование композицией заменим”.

В википедии в принципе норм примеры, можно почитать поподробней.

P.S.
Получается уже целая серия постов с терминами - студенты сами подсказывают примеры😉
Хорошая кладовочка для быстрых ответов)

#Словарь
🔥2
void Transmogrify( int, int );

int count = 5;
Transmogrify( ++count, ++count );
Иногда я отхожу от основной темы канала. Бывает редко, но бывает. Я писал и про технику, и про природу, и про людей.

Чем шире наш кругозор, тем лучше. Особенно в тех сферах деятельности, где есть место творчеству и изобретательству. А в разработке ПО этого хоть отбавляй.

В общем… киты.
Киты

Киты, конечно, не обезьяны и не тигры, но тоже очень интересные. Это млекопитающие, которые устали ходить по земле и эволюционировали обратно в воду. Это самые крупные животные за всю историю жизни на Земле. Да-да, крупнее синего кита мы не знаем никого!

Еще несколько фактов о синем гиганте:

- За один выдох он выпускает столб пара высотой с двухэтажный дом.

- Воздухом, прошедшим через его легкие, можно наполовину заполнить бетономешалку.

- Его сердце с сосудами размером с суповую тарелку питает тело сквозь 500 млн км артерий, капилляров и вен.

- Среди всех организмов он издает самый мощный звук, распространяющийся более чем на 1500 км.

- Самая большая зафиксированная длина тела - 33,22 м.

- Самая большая зафиксированная масса тела - 136,4 т при длине 27 м.

Палеонтологи уверяют, что киты никогда не были такими крупными как сегодня. Самостоятельно изучить останки древних китов можно по 3D-сканам в открытом доступе. Кстати, просмотр 3D-моделей там вертится на Voyager, написанном на TypeScript. Опенсорс.

Ник Пайенсон - Наблюдая за китами
#КнижнаяПолка
👍4❤1
void func( std::vector<int>& v )
{
v[ 0 ]; // A
v.at( 0 ); // B
}
Как запустить приложение на PySide6 под Windows 7

Если вкратце, то никак 🤷‍♂️

PySide6 (Qt6) использует рантайм Windows 10 и выше. Поэтому на старых виндах он работать не будет. Но если очень надо, то можно попробовать откатить проект до PySide2 и Python 3.8. Это последние версии, поддерживающие Windows 7.

В статье я начал собирать чек-лист по миграции проекта с PySide6 до PySide2 на примере YouTubeAnalyzer. Там сейчас есть такая необходимость. Чек-лист будет пополняться, пока не прекратим поддержку Windows 7.

Чек-лист преследует цель не только показать как перейти на PySide2, но и остудить горячие головы, которым вдруг вздумается это делать. YouTubeAnalyzer - это маленький проект. На проектах побольше я бы перед началом хорошо подумал.
👍4
В каком паттерне проектирования при изменении состояния одного объекта, все зависимые объекты получают оповещения?
Anonymous Quiz
68%
Наблюдатель
18%
Нет такого паттерна
0%
Одиночка
14%
Команда
Шаблонный UI

Если шаблоны кодирования у всех на слуху, то с шаблонами UI (user interface) ситуация поскучнее. И хорошо, что предпринимаются попытки шаблонизировать UI для систем определенной направленности. Например, систем разработки неважно чего.

Это отличная статья, мастрид. Шаблон описан детально, с вредными и полезными советами.

Ключевые пункты:

1. Вверху окна располагаются вкладки для переключения рабочего контекста.

2. Чуть ниже - панель с рабочими инструментами (тулбар).

3. Слева - панель навигации по структуре документа, проекта, директории и т.п.

4. Справа - панель свойств для выбранных элементов.

5. Центральное пространство занимает основная рабочая область с самой ценной информацией.

Кстати, последнее время наблюдается тенденция к расширению рабочей области до размера окна (Blender). Все панели при этом остаются на своих привычных местах, но отображаются поверх рабочей области.

Keep it together: 5 essential design patterns for dev tool UIs
👍4🔥1