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;
}
Выше дан код на С++. Что с ним не так?
Anonymous Quiz
39%
Нельзя сравнивать число с указателем
11%
Нельзя записывать значение в указатель через std::cin
13%
У функции main() обязательно должны быть аргументы
37%
Возможна утечка памяти
Джуны больше не нужны
Ничего себе заявленьеце, да? 😦
И самое интересное, что оно совсем не беспочвенное и напрямую связано с развитием ИИ.
Kirimgeray Kirimli, руководитель Snapshot Reviews, считает, что задачи джунов скоро будет выполнять ИИ. Предпосылки к этому есть. В условиях хорошо составленного технического задания ИИ сможет дать адекватное решение.
Что же тогда делать джунам?
Да то же, что и всегда, - учиться. Каким бы крутым не был ИИ, доверия к нему мало, а его решения должны быть верифицированы. Kirimgeray Kirimli предполагает, что именно этим и будут заниматься джуны - присматривать за ИИ. А это в любом случае потребует устойчивых знаний компьютерных наук. Может даже более серьёзных, чем от джуна ожидают сейчас.
—
Имхо, даже на сегодня это довольно смелая идея. Для меня ИИ все ещё не стал инструментом повседневной работы. То ли нет нужды, то ли я так себе программист 🙃
Не знаю в общем, присматриваюсь пока.
А вы используете ИИ в разработке?
📍Say goodbye to "junior" engineering roles
Ничего себе заявленьеце, да? 😦
И самое интересное, что оно совсем не беспочвенное и напрямую связано с развитием ИИ.
Kirimgeray Kirimli, руководитель Snapshot Reviews, считает, что задачи джунов скоро будет выполнять ИИ. Предпосылки к этому есть. В условиях хорошо составленного технического задания ИИ сможет дать адекватное решение.
Что же тогда делать джунам?
Да то же, что и всегда, - учиться. Каким бы крутым не был ИИ, доверия к нему мало, а его решения должны быть верифицированы. Kirimgeray Kirimli предполагает, что именно этим и будут заниматься джуны - присматривать за ИИ. А это в любом случае потребует устойчивых знаний компьютерных наук. Может даже более серьёзных, чем от джуна ожидают сейчас.
—
Имхо, даже на сегодня это довольно смелая идея. Для меня ИИ все ещё не стал инструментом повседневной работы. То ли нет нужды, то ли я так себе программист 🙃
Не знаю в общем, присматриваюсь пока.
А вы используете ИИ в разработке?
📍Say goodbye to "junior" engineering roles
👍3
Выше даны два списка. Сортировка какого списка займет меньше времени?
Anonymous Quiz
24%
Неизвестно
27%
Списка 1
22%
Списка 2
27%
Время сортировки примерно одинаково
Недооценённые навыки
1. Это первый навык, который мы обычно недооцениваем: принятие некоторых неудобств и пустяков, если этого требует действительность.
Без этого навыка мы каждый день будем превозмогать, нервничать и опускать руки из-за всякой ерунды.
2. Уважительное отношение к человеку, с которым вы не согласны.
Трюк состоит в том, чтобы найти в таком человеке точку соприкосновения и в конце концов сказать себе: "ок, не такой уж он и сумасшедший". Иначе можно слишком легко его "списать".
3. Способность вести 10-минутную беседу с любым человеком.
В наше время онлайна беседовать с глазу на глаз с незнакомым человеком - тот ещё челендж. Хотя раньше это и не назвали бы каким-то особенным скилом.
4. Кратко и ёмко донести суть.
Все очень заняты. Меньше слов, больше дела.
5. Вежливо сказать "нет".
Люди, которые колеблются сказать "нет", либо медлят, либо говорят "да", откладывая неминуемое "нет". В итоге "нет" становится более разрушительным. Другая крайность - это очень резкое "нет", после которого к нам вообще перестанут обращаться. Нужен баланс.
5-й пункт сильно про меня. Я уже не один раз попадал в "ситуацию" из-за того, что медлил с ответом "нет". Сначала обнадёживаешь почём зря, а потом выглядишь еще большим придурком, чем мог бы 😶
Еще больше навыков и интересных примеров здесь
📍 Morgan Housel - Useful and Overlooked Skills
Если вы не можете ходить и вам приносят молоко вместо апельсинового сока, который вы хотели, то вы скажете: "все нормально", и выпьете его.
1. Это первый навык, который мы обычно недооцениваем: принятие некоторых неудобств и пустяков, если этого требует действительность.
Без этого навыка мы каждый день будем превозмогать, нервничать и опускать руки из-за всякой ерунды.
2. Уважительное отношение к человеку, с которым вы не согласны.
Трюк состоит в том, чтобы найти в таком человеке точку соприкосновения и в конце концов сказать себе: "ок, не такой уж он и сумасшедший". Иначе можно слишком легко его "списать".
3. Способность вести 10-минутную беседу с любым человеком.
В наше время онлайна беседовать с глазу на глаз с незнакомым человеком - тот ещё челендж. Хотя раньше это и не назвали бы каким-то особенным скилом.
4. Кратко и ёмко донести суть.
Все очень заняты. Меньше слов, больше дела.
5. Вежливо сказать "нет".
Люди, которые колеблются сказать "нет", либо медлят, либо говорят "да", откладывая неминуемое "нет". В итоге "нет" становится более разрушительным. Другая крайность - это очень резкое "нет", после которого к нам вообще перестанут обращаться. Нужен баланс.
5-й пункт сильно про меня. Я уже не один раз попадал в "ситуацию" из-за того, что медлил с ответом "нет". Сначала обнадёживаешь почём зря, а потом выглядишь еще большим придурком, чем мог бы 😶
Еще больше навыков и интересных примеров здесь
📍 Morgan Housel - Useful and Overlooked Skills
👍4
Troubleshooting. Метод деления пополам
Продолжаю серию постов по траблшутингу. Сегодня поговорим про локализацию проблемы методом деления пополам.
Метод деления пополам используется, например, в электротехнике⚡️ для поиска обрыва в цепи. Для этого участок цепи визуально разбивается пополам и каждая половина проверяется на предмет наличия тока. Та половина, в которой тока нет, считается содержащей обрыв. Она в свою очередь снова разбивается пополам и половинки снова проверяются. Так продолжается до тех пор, пока мы не придём к проблемному месту.
А мы придём к нему в общем случае быстрее, чем если бы последовательно проверяли цепь по маленьким "кусочкам".
Вот такой итерационный метод можно использовать и при отладке программ.
Представим, что у нас в программе есть ошибка из-за дефектных данных в некоторой переменной. По-моему не сложно представить 😅
Наша задача состоит в том, чтобы найти в коде место, где данные становятся дефектными, то есть локализовать проблему:
1️⃣ Для начала выбираем большой участок программы от ее старта до места проявления ошибки. Мы уверены, что в начале выполнения программы наши данные корректные.
2️⃣ Теперь визуально делим выбранный участок программы пополам и проверяем корректность данных в месте разделения. Если данные корректные, то выбираем следующий по ходу участок программы. Если данные не корректные, то - предыдущий.
3️⃣ Продолжаем пункт 2 до тех пор, пока не "спустимся" к источнику проблемы.
Кстати, таким же методом можно искать ошибки не только по процессу выполнения программы, но и по истории коммитов.
Для этого нужно знать коммит, на котором проблемы еще не было, и коммит, на котором проблема была обнаружена. Тогда путем деления истории коммитов пополам можно быстро найти коммит, который занёс в код ошибку. В git, например, этот метод реализуется командой git bisect. Почитайте, если ещё не слышали.
#Troubleshooting
Продолжаю серию постов по траблшутингу. Сегодня поговорим про локализацию проблемы методом деления пополам.
Метод деления пополам используется, например, в электротехнике
А мы придём к нему в общем случае быстрее, чем если бы последовательно проверяли цепь по маленьким "кусочкам".
Вот такой итерационный метод можно использовать и при отладке программ.
Представим, что у нас в программе есть ошибка из-за дефектных данных в некоторой переменной. По-моему не сложно представить 😅
Наша задача состоит в том, чтобы найти в коде место, где данные становятся дефектными, то есть локализовать проблему:
Кстати, таким же методом можно искать ошибки не только по процессу выполнения программы, но и по истории коммитов.
Для этого нужно знать коммит, на котором проблемы еще не было, и коммит, на котором проблема была обнаружена. Тогда путем деления истории коммитов пополам можно быстро найти коммит, который занёс в код ошибку. В git, например, этот метод реализуется командой git bisect. Почитайте, если ещё не слышали.
#Troubleshooting
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Что такое инкапсуляция в терминах ООП?
Anonymous Quiz
16%
Реализация иерархии "родитель-потомок"
73%
Изоляция абстракции от её реализации
5%
Создание множества конструкторов одного типа
5%
Реализация разных форм одного типа
Zip-бомба и Qt Network
Zip-бомба - это архив, распаковка которого может вызвать нарушения в работе системы🥶
Как правило такой архив выглядит очень маленьким, но распаковывается в нечто огромное, заполняющее все свободное пространство в памяти или на носителе. Создается архив либо многократным архивированием данных, либо однократным, но с применением сильного сжатия.
Давайте проверим, что случится, если такой архив получит QNetworkAccessManager из модуля Qt Network. Есть ли там какая-то защита?
Так в действительности и происходит. Но в случае с zip-бомбой есть и хорошие новости. Многократно запакованный архив
А вот архив с сильным сжатием ожидаемо будет распакован.
В эксперименте архив размером 1,2Мб, содержащий 1,2Гб данных, был распакован
Такие пироги. Если Qt Network работает по незащищенному протоколу, то такой тип атаки можно ожидать. С защищенным протоколом (HTTPS) вероятность гораздо ниже.
Если интересно как еще проверить свою систему на прочность, читайте пост про выполнение DOS-атаки.
Zip-бомба - это архив, распаковка которого может вызвать нарушения в работе системы
Как правило такой архив выглядит очень маленьким, но распаковывается в нечто огромное, заполняющее все свободное пространство в памяти или на носителе. Создается архив либо многократным архивированием данных, либо однократным, но с применением сильного сжатия.
Давайте проверим, что случится, если такой архив получит QNetworkAccessManager из модуля Qt Network. Есть ли там какая-то защита?
QNetworkAccessManager умеет работать с HTTP-запросами и ответами. И если в HTTP-заголовке ответного сообщения будет установлено поле Content-Encoding: gzip, то QNetworkAccessManager должен автоматически разархивировать полученные данные.Так в действительности и происходит. Но в случае с zip-бомбой есть и хорошие новости. Многократно запакованный архив
QNetworkAccessManager распаковывает только один раз, рекурсивной процедуры там нет. По крайней мере в Qt5. Значит такого типа zip-бомб можно не опасаться.А вот архив с сильным сжатием ожидаемо будет распакован.
В эксперименте архив размером 1,2Мб, содержащий 1,2Гб данных, был распакован
QNetworkAccessManager-ом за несколько минут с потреблением в пике до 2,4Гб оперативки. Как минимум, это может привести к фризам приложения в процессе распаковки, а при определенных условиях и к падению.Такие пироги. Если Qt Network работает по незащищенному протоколу, то такой тип атаки можно ожидать. С защищенным протоколом (HTTPS) вероятность гораздо ниже.
Если интересно как еще проверить свою систему на прочность, читайте пост про выполнение DOS-атаки.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
За какое время выполнится код выше? Дайте ответ в О-нотации
Anonymous Quiz
12%
O( 1 )
69%
O( n )
8%
O( lg n )
12%
O( n * n )