Как это развидеть?
Как испортить дизайн интерфейса? Легко! И спец-курс не нужен 😅 Но даже легкая теория и небольшая насмотренность поможет меньше портачить.
Насмотренность не появляется сама по себе, здесь нужна практика. Вдумчивая практика.
Есть забавный игровой тренажёр Can’t Unsee, где можно потренироваться. Принцип простой: из двух предложенных вариантов интерфейса нужно выбрать более корректный.
Попробуйте. Лично мне уже на среднем уровне было сложно что-то разглядеть.
Как испортить дизайн интерфейса? Легко! И спец-курс не нужен 😅 Но даже легкая теория и небольшая насмотренность поможет меньше портачить.
Насмотренность не появляется сама по себе, здесь нужна практика. Вдумчивая практика.
Есть забавный игровой тренажёр 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 этим и не ограничивается.
Продолжаем пополнять #Словарь. Чем отличается API от SDK?
Грубо говоря, 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 градуса ниже нуля” #КнижнаяПолка
Если вы мало знаете об освоении Антарктиды, то “72 градуса ниже нуля” Владимира Санина подойдёт как нельзя лучше для начала знакомства.
Это очень яркая кинематографичная повесть 1975 года об одном санно-гусеничном походе по маршруту между советскими антарктическими станциями Мирный и Восток. Складывается ощущение, что автор свалил на головы героев весь спектр трудностей: сверхнизкие температуры, пурга, выход из строя техники и экипажа, дефицит провизии и долгие недели пути по тёмной ледяной пустыне. Пустыне, где полярники могут рассчитывать только на себя.
Владимир Санин, имея собственный опыт экспедиций в Арктике и Антарктике, подробно и убедительно описывает труд полярников. Заметно особенное внимание к людям, к коллективу. Каждый герой со своим характером, своими мотивами, своей историей и своими слабостями. Вчерашний подвиг человека сменяется досадной ошибкой, просчетом. Кто-то проявит стойкость, кто-то смалодушничает. Живые люди.
А вот несколько фактов о станции Восток, которые точно не помешают перед началом чтения. Так сказать, для лучшего понимания сеттинга.
Санин В - “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? Посоветуете что-то?
С 9 сентября Notion пока-пока
Эх, а хорошо дружили. Я к нему прям прикипел. Построил себе приличную базу знаний с задачами, проектами, библиотекой и прочей писаниной. Теперь надо переезжать. И все знаки указали переезжать на Obsidian.
В Obsidian есть все для миграции. Экспортируем воркспейс Notion и импортируем его в 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. Не пессимизируйте преждевременно. Что бы вы тут не подумали, это значит "делайте сразу хорошо". Простой пример: если нужно использовать число
2. Работайте с предупреждениями компилятора (или что у вас там). В пределе их не должно быть совсем. Игнорируя предупреждения, мы... См. пункт 1... Правильно, пессимизируем.
3. Используйте статические анализаторы. Это отличное усиление компилятора (или что у вас там). Множество проверок, в том числе проверок безопасности, поможет выявить косяки на раннем этапе.
Когда проблема зарегистрирована, но ее решение не очевидно, мы можем прибегать к пунктам 2 и 3. Проверьте, что включен максимальный уровень проверок компилятора (или что у вас там), а также ещё раз прогоните проблемные исходники через анализаторы. Есть шанс, что источник проблемы будет найден ✅
Кто знает, какие еще есть способы предупреждать проблемы?
#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;
}Выше дан код на C++. Какой алгоритм реализован?
Anonymous Quiz
38%
Пузырьковая сортировка
32%
Сортировка вставками
24%
Назначение ключей
6%
Поиск максимального значения
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
И можно работать.
Первый способ. Самый логичный и простой. Идём на официальный сайт 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;
}