Поиск информации по проекту
Согласно опросу на Stack Overflow, четверть разработчиков тратят более часа в день на поиск информации, необходимой для работы. Много? Ну, it depends, как говорится. В исследовательских проектах поиск информации вообще является непосредственной работой. Но сейчас немного не об этом.
Где разработчики ищут информацию о проекте? Гугл тут бесполезен - он поможет только в общих вопросах по открытым технологиям. Поэтому в первую очередь разработчик идет в базу знаний проекта: вики, данные репозитория, трекер задач, пользовательская документация и т.п.
Во вторую очередь обращаются к экспертам. Это спецы, которые досконально знают если не весь проект, то какую-то его часть. Все вместе эти ресурсы отвечают на все вопросы проекта.
Но что искать, где искать и у кого спрашивать? Для ответа тут тоже нужен эксперт. Тимлид например. Но эти вопросы сами по себе типовые и ответы на них могут быть в базе знаний. Поэтому надо ее правильно организовать.
В Compass от Atlassian для решения проблемы предлагают вести каталог компонентов проекта. Кто работает над компонентом, как с ними связаться, где лежит репозиторий, какие у проекта зависимости, где техническая документация и ссылки на дополнительную информацию. В общем все, что хотелось бы знать о конкретной части проекта содержится в каталоге. Причем за разработчиками остается право на расширение информации. Что логично в свете развития проекта.
Также в Compass предлагают наполнять каталог шаблонов, которые автоматизируют некоторые операции. Например, создание нового репозитория. Одной кнопкой можно создать репозиторий, отвечающий требованиям проекта, с уже настроенной непрерывной интеграцией.
Конечно, я не призываю использовать Compass, а говорю о его структурной идее, которая на мой взгляд действительно поможет ориентироваться в проекте и без привлечения эксперта. Каталог компонентов и каталог шаблонов до определенного уровня можно реализовать и в рамках вики. Главное - структура и содержание. А каталог шаблонов не обязательно автоматизировать. Достаточно зафиксировать шаблонные конструкции кода, которые легко переиспользовать в проекте.
Who owns this tool? A software component catalog to help devs find answers
Согласно опросу на 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
#Словарь
Все три сущности, на мой взгляд, значат примерно одно и тоже. Всё это про какой-то именованный кусок кода с входом и выходом. В то же время сообщество пытается их как-то определить.
Так функция всегда возвращает значение. А если функция не возвращает значение, то это - процедура. Функцию, принадлежащую классу или объекту, называют методом.
Method vs Function vs Procedure
#Словарь
👍2
“Напишем и исправим”
Небольшая заметка про решение задач "в лоб".
Макконнелл С - Профессиональная разработка ПО (глава 2)
Небольшая заметка про решение задач "в лоб".
Почти 75% коллективов разработчиков начинают работу, налетая на глыбу и пытаясь подвинуть ее при помощи грубой силы. Такой подход – сразу хвататься за написание программ, не позаботившись о планировании и проектировании – получил наименование «напишем и исправим».
Разработка по принципу «напишем и исправим» неэффективна во всех проектах, за исключением самых мелких.
Коллективы, практикующие более сложные подходы, формируют структуру, позволяющую проекту выйти на высокий уровень производительности и эффективно завершить его.
По результатам некоторых исследований, от 40 до 80% бюджета типичного проекта ПО расходуется на исправление дефектов, которые появились в нем ранее.
Макконнелл С - Профессиональная разработка ПО (глава 2)
👍3
Переполнение буфера
В C++ записать данные мимо буфера - раз плюнуть. Называется это buffer overflow (BO). Вот пример как это происходит в стековой памяти.
Вывод программы будет такой:
После записи избыточных данных в буфер
Но есть и хорошая новость. Современные статические анализаторы такие вещи обычно диагностируют.
Кстати, на собеседованиях это популярный вопрос.
В 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). Его решения можно использовать как шаблон для своих приложений.
Выпустили новую версию YouTube Analyzer - анализатора поисковой выдачи YouTube.
Добавлено:
- Боковая панель с превью и тегами выбранного видео.
- Экспорт данных в таблицу HTML.
YouTube Analyzer - классическое desktop-приложение, написанное на Python/PySide(Qt). Его решения можно использовать как шаблон для своих приложений.
🔥2
Когда заменять легаси на новую технологию?
Понятно, что переписывать легаси “только потому что” не нужно. Надо понимать, что мы хотим получить от новой технологии и какие преследуем цели.
А цели и их предпосылки могут быть такие:
1. Снижение стоимости изменений. Когда внесение изменений обходится дорого или легаси-система начинает диктовать объем доработок.
2. Улучшение бизнес-процессов. Когда ограничения легаси-системы не позволяют улучшить продуктовые бизнес-процессы.
3. Отказ от устаревшей системы. Когда сложно и дорого поддерживать старый софт или железо.
4. Предотвращение неминуемой катастрофы продукта. Когда внешние факторы, будь то регуляторика или конкуренты, ведут систему к неизбежному провалу.
5. Приоритетные новые технологии. Когда новая технология лучше соответствует потребностям бизнеса сейчас и в будущем.
Patterns of Legacy Displacement
Понятно, что переписывать легаси “только потому что” не нужно. Надо понимать, что мы хотим получить от новой технологии и какие преследуем цели.
А цели и их предпосылки могут быть такие:
1. Снижение стоимости изменений. Когда внесение изменений обходится дорого или легаси-система начинает диктовать объем доработок.
2. Улучшение бизнес-процессов. Когда ограничения легаси-системы не позволяют улучшить продуктовые бизнес-процессы.
3. Отказ от устаревшей системы. Когда сложно и дорого поддерживать старый софт или железо.
4. Предотвращение неминуемой катастрофы продукта. Когда внешние факторы, будь то регуляторика или конкуренты, ведут систему к неизбежному провалу.
5. Приоритетные новые технологии. Когда новая технология лучше соответствует потребностям бизнеса сейчас и в будущем.
Patterns of Legacy Displacement
👍2
Внедрение DLL в EXE
Попалась статья с инструкцией по внедрению DLL в EXE. Инструкция хорошая, но остается вопрос, зачем это вообще может понадобиться?
Написал этот вопрос в комментарии автору статьи и... вопрос не прошел модерацию😁 Потёрли.
Полазил по сети, может кто-то так делал. И да, конечно делал. Мотивов, в общем-то, два:
1. "Кидаю дружбану exe-шник, а он у него не запускается из-за отсутствия dll. Как встроить эти dll в exe-шник?". Это самый популярный мотив. Оставим его сразу в покое.
2. "Требования/коллеги/заказчик не допускают, чтобы конкретная dll была видна пользователю. Как спрятать ее в exe-шник?". В этом мотиве веса больше. Но это скорее "костыль", прикрывающий проблемы реализации.
Поэтому вопрос остается открытым.
Может ли внедрение DLL в EXE быть действительно полезным на практике?
Есть идеи?
Попалась статья с инструкцией по внедрению DLL в EXE. Инструкция хорошая, но остается вопрос, зачем это вообще может понадобиться?
Написал этот вопрос в комментарии автору статьи и... вопрос не прошел модерацию😁 Потёрли.
Полазил по сети, может кто-то так делал. И да, конечно делал. Мотивов, в общем-то, два:
1. "Кидаю дружбану exe-шник, а он у него не запускается из-за отсутствия dll. Как встроить эти dll в exe-шник?". Это самый популярный мотив. Оставим его сразу в покое.
2. "Требования/коллеги/заказчик не допускают, чтобы конкретная dll была видна пользователю. Как спрятать ее в exe-шник?". В этом мотиве веса больше. Но это скорее "костыль", прикрывающий проблемы реализации.
Поэтому вопрос остается открытым.
Может ли внедрение DLL в EXE быть действительно полезным на практике?
Есть идеи?
👍1😁1
Управление памятью: “парашют”
Для обеспечения стабильной работы программы в условиях недостатка оперативной памяти можно использовать так называемый "парашют".
В самом начале работы программы резервируется какой-то объем памяти. Когда вся память будет заполнена, этот объем можно освободить и корректно завершить программу.
Макконнелл С - Совершенный код (глава 13.2)
Для обеспечения стабильной работы программы в условиях недостатка оперативной памяти можно использовать так называемый "парашют".
В самом начале работы программы резервируется какой-то объем памяти. Когда вся память будет заполнена, этот объем можно освободить и корректно завершить программу.
Макконнелл С - Совершенный код (глава 13.2)
👍1
"Голос науки"
Зарегистрировался на платформе “Голос науки”. Это социальная сеть для российских ученых.
Как раз для меня 😉
https://golos-nauki.ru/u/2495217
Говорят, эта платформа должна импортозаместить ResearchGate. Ну, посмотрим-посмотрим. Понаблюдаю в режиме read only. Пока.
Интересно, что в процессе регистрации нужно доказать, что ты действительно имеешь отношение к науке. Только в этом случае заявка на регистрацию может быть одобрена... А как же будут следить за обновлениями обычные читатели?
Тем не менее, система в бетке. Все впереди.
Зарегистрировался на платформе “Голос науки”. Это социальная сеть для российских ученых.
Как раз для меня 😉
https://golos-nauki.ru/u/2495217
Говорят, эта платформа должна импортозаместить ResearchGate. Ну, посмотрим-посмотрим. Понаблюдаю в режиме read only. Пока.
Интересно, что в процессе регистрации нужно доказать, что ты действительно имеешь отношение к науке. Только в этом случае заявка на регистрацию может быть одобрена... А как же будут следить за обновлениями обычные читатели?
Тем не менее, система в бетке. Все впереди.
🔥3👍1
Путаница в интерфейсах (часть 2)
Писал уже кое-что про неоднозначности в графических интерфейсах, теперь коснусь и командных.
Моя самая больная троица:
Ну когда бы не вводил одну из команд, обязательно перепутаю! Как проклятие. Осложняется еще и тем, что используешь их не каждый день. Не получается запомнить.
Но, стоит сказать, других подобных штук в консоли мне больше не попадалось.
Писал уже кое-что про неоднозначности в графических интерфейсах, теперь коснусь и командных.
Моя самая больная троица:
git restore / git revert / git reset.Ну когда бы не вводил одну из команд, обязательно перепутаю! Как проклятие. Осложняется еще и тем, что используешь их не каждый день. Не получается запомнить.
Но, стоит сказать, других подобных штук в консоли мне больше не попадалось.
👍2
Композиция или агрегация
В ООП оба термина описывают отношение между классами как “часть-целое”. Но у каждого своя оговорочка.
Агрегация - это отношение по ссылке, когда оба объекта могут существовать сами по себе, независимо.
Композиция - это отношение по значению, когда включаемый объект не может существовать без своего класса-контейнера.
Новичкам это надо запомнить. Как минимум для собеса. Как максимум, чтобы не впадать в ступор после фразы “давай здесь наследование композицией заменим”.
В википедии в принципе норм примеры, можно почитать поподробней.
P.S.
Получается уже целая серия постов с терминами - студенты сами подсказывают примеры😉
Хорошая кладовочка для быстрых ответов)
#Словарь
В ООП оба термина описывают отношение между классами как “часть-целое”. Но у каждого своя оговорочка.
Агрегация - это отношение по ссылке, когда оба объекта могут существовать сами по себе, независимо.
Композиция - это отношение по значению, когда включаемый объект не может существовать без своего класса-контейнера.
Новичкам это надо запомнить. Как минимум для собеса. Как максимум, чтобы не впадать в ступор после фразы “давай здесь наследование композицией заменим”.
В википедии в принципе норм примеры, можно почитать поподробней.
P.S.
Получается уже целая серия постов с терминами - студенты сами подсказывают примеры😉
Хорошая кладовочка для быстрых ответов)
#Словарь
🔥2
void Transmogrify( int, int );
int count = 5;
Transmogrify( ++count, ++count );
Выше дан код на С++. В каком порядке будут вычислены аргументы функции?
Anonymous Quiz
46%
Прямой порядок: сначала первый аргумент, затем второй
0%
Обратный порядок: сначала второй аргумент, затем первый
15%
Прямой порядок до стандарта С++14 и обратный - после
38%
Порядок вычислений не известен
Иногда я отхожу от основной темы канала. Бывает редко, но бывает. Я писал и про технику, и про природу, и про людей.
Чем шире наш кругозор, тем лучше. Особенно в тех сферах деятельности, где есть место творчеству и изобретательству. А в разработке ПО этого хоть отбавляй.
В общем… киты.
Чем шире наш кругозор, тем лучше. Особенно в тех сферах деятельности, где есть место творчеству и изобретательству. А в разработке ПО этого хоть отбавляй.
В общем… киты.
Киты
Киты, конечно, не обезьяны и не тигры, но тоже очень интересные. Это млекопитающие, которые устали ходить по земле и эволюционировали обратно в воду. Это самые крупные животные за всю историю жизни на Земле. Да-да, крупнее синего кита мы не знаем никого!
Еще несколько фактов о синем гиганте:
- За один выдох он выпускает столб пара высотой с двухэтажный дом.
- Воздухом, прошедшим через его легкие, можно наполовину заполнить бетономешалку.
- Его сердце с сосудами размером с суповую тарелку питает тело сквозь 500 млн км артерий, капилляров и вен.
- Среди всех организмов он издает самый мощный звук, распространяющийся более чем на 1500 км.
- Самая большая зафиксированная длина тела - 33,22 м.
- Самая большая зафиксированная масса тела - 136,4 т при длине 27 м.
Палеонтологи уверяют, что киты никогда не были такими крупными как сегодня. Самостоятельно изучить останки древних китов можно по 3D-сканам в открытом доступе. Кстати, просмотр 3D-моделей там вертится на Voyager, написанном на TypeScript. Опенсорс.
Ник Пайенсон - Наблюдая за китами
#КнижнаяПолка
Киты, конечно, не обезьяны и не тигры, но тоже очень интересные. Это млекопитающие, которые устали ходить по земле и эволюционировали обратно в воду. Это самые крупные животные за всю историю жизни на Земле. Да-да, крупнее синего кита мы не знаем никого!
Еще несколько фактов о синем гиганте:
- За один выдох он выпускает столб пара высотой с двухэтажный дом.
- Воздухом, прошедшим через его легкие, можно наполовину заполнить бетономешалку.
- Его сердце с сосудами размером с суповую тарелку питает тело сквозь 500 млн км артерий, капилляров и вен.
- Среди всех организмов он издает самый мощный звук, распространяющийся более чем на 1500 км.
- Самая большая зафиксированная длина тела - 33,22 м.
- Самая большая зафиксированная масса тела - 136,4 т при длине 27 м.
Палеонтологи уверяют, что киты никогда не были такими крупными как сегодня. Самостоятельно изучить останки древних китов можно по 3D-сканам в открытом доступе. Кстати, просмотр 3D-моделей там вертится на Voyager, написанном на TypeScript. Опенсорс.
Ник Пайенсон - Наблюдая за китами
#КнижнаяПолка
👍4❤1
Выше дан код на С++. В чем разница между строками A и B?
Anonymous Quiz
29%
Разницы нет
36%
В строке B будет исключение, если вектор пуст
21%
В строке A будет исключение, если вектор пуст
14%
В строке B элемент изымается из вектора
Как запустить приложение на PySide6 под Windows 7
Если вкратце, то никак 🤷♂️
PySide6 (Qt6) использует рантайм Windows 10 и выше. Поэтому на старых виндах он работать не будет. Но если очень надо, то можно попробовать откатить проект до PySide2 и Python 3.8. Это последние версии, поддерживающие Windows 7.
В статье я начал собирать чек-лист по миграции проекта с PySide6 до PySide2 на примере YouTubeAnalyzer. Там сейчас есть такая необходимость. Чек-лист будет пополняться, пока не прекратим поддержку Windows 7.
Чек-лист преследует цель не только показать как перейти на PySide2, но и остудить горячие головы, которым вдруг вздумается это делать. YouTubeAnalyzer - это маленький проект. На проектах побольше я бы перед началом хорошо подумал.
Если вкратце, то никак 🤷♂️
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
Если шаблоны кодирования у всех на слуху, то с шаблонами UI (user interface) ситуация поскучнее. И хорошо, что предпринимаются попытки шаблонизировать UI для систем определенной направленности. Например, систем разработки неважно чего.
Это отличная статья, мастрид. Шаблон описан детально, с вредными и полезными советами.
Ключевые пункты:
1. Вверху окна располагаются вкладки для переключения рабочего контекста.
2. Чуть ниже - панель с рабочими инструментами (тулбар).
3. Слева - панель навигации по структуре документа, проекта, директории и т.п.
4. Справа - панель свойств для выбранных элементов.
5. Центральное пространство занимает основная рабочая область с самой ценной информацией.
Кстати, последнее время наблюдается тенденция к расширению рабочей области до размера окна (Blender). Все панели при этом остаются на своих привычных местах, но отображаются поверх рабочей области.
Keep it together: 5 essential design patterns for dev tool UIs
👍4🔥1