Как будто это какая-то редкость. Для PyQt нужен интерпретатор Python со своей стандартной библиотекой, сам PyQt и, вдобавок, прекомпилированные бинарники Qt. Установить всё это может быть не так уж просто, особенно если в системе нет нормального пакетного менеджера. А если вы вдруг захотите самостоятельно пересобрать PyQt из исходников, вам точно понадобится и компилятор C++.
желательно приличная среда (Qt Сreator очень хорош)
Для питона тоже неплохо бы иметь хорошую среду с диагностиками и зачатками статического анализа (PyCharm?). Более того, как мне кажется, динамически типизированные языки предъявляют намного большие требования к качеству IDE: без них последствия банальной опечатки вы увидите уже после запуска программы.
и много времени на ожидание компиляции и отладку.
В Qt практически не используется высокооктановая шаблонная магия, зато широко применяется идиома PIMPL — это здорово ускоряет компиляцию. Времени на компиляцию столь простого приложения, как описывается в статье, потребуется немного.
Но зачем ждать, если Python запускается сразу, как язык он гораздо лаконичней C++
Для того, чтобы убрать два лишних звена (Python и PyQt) из технологического стека, получив в результате более отзывчивое приложение, потенциально более кроссплатформенное, с более простым процессом развёртывания и пакетирования.
а через PyQt можно пользоваться всей мощью Qt.
Через Qt можно делать то же самое. Как фреймворк Qt очень удобен: если приложение написано целиком на Qt, необходимости думать о низкоуровневых деталях практически не появляется.
И что самое вкусное — практически без потери производительности.
Ваше приложение пока что слишком простое, чтобы заметить разницу.
Следущие шаги в черной магии процессоростроения после того, как вы освоили Харрис & Харрис
ЕМНИП, в русском языке есть интересный момент касательно склонения мужских и женских имён собственных с нулевым окончанием. Думаю, правильнее было бы написать «Харриса & Харрис».
UPD: в статье JavaScript как мыслевирус pnovikov оскорбил всё сообщество JavaScript, назвав их фанатиками.
JavaScript пока не канонизирован православной церковью, чтобы так оскорбляться в ответ на вполне невинную статью, да ещё и не лишённую справедливости. Немного самоиронии не помешало ещё ни одному сообществу.
Как вы считаете, это этично?
Считаю, что вы этой припиской только подтвердили исходный тезис о мыслевирусе.
Сама эта тема оказалась настолько для меня интересной, что я потом даже диссертацию про это написал.
По ссылке ожидал увидеть PDF, но не 120-мегабайтный архив с чем-то, похожим на профиль браузера вместе с кешем. Это точно именно то, что вы имели в виду?
Поддержу.
Вместо android: можно выбрать префикс покороче (например, a:), либо вообще установить пространством имён по умолчанию (тогда префиксы не понадобятся):
Более того, ещё пару дней назад требований о визуалстудии и недопустимости использования сторонних библиотек в условии тестовой задачи не было, как и о том, что решение должно быть оформлено в виде единственного CPP-файла и проходить автоматическую проверку.
Было весьма неприятно узнать об этом, имея на руках готовое решение, сделанное с расчётом на оценивание человеком: с Boost.Coroutine и Boost.Range, разбиением функциональности на кучу классов, комментариями и coverletter на английском. Написал им на мыло — код смотреть даже не стали.
Я перестал отвечать на его тикеты. Иногда я удалял их (а если не мог, то нажимал «редактировать» и стирал весь текст). Иногда в негодовании спрашивал, кем он себя возомнил, когда приходит в трекер и требует от меня объяснений по тем аспектам моей библиотеки, с которыми он не согласен. В конце концов я забанил его на проекте.
Даже если человек открыто называет ваши архитектурные решения неправильными, это не повод так с ним себя вести. Кто-то потратил своё время, думая над тем, как сделать ваш проект лучше, не поленился зайти в трекер и написать об этом, а вы удаляете его сообщения. Даже если его предложения абсолютно и безкомпромисно противоречат вашему видению, так делать нельзя — вам следовало закрыть тикет с «wontfix» и оставить его в истории проекта. Лично я не увидел в предоставленной вами переписке абсолютно ничего такого, что могло бы оправдать ваш модераторский произвол.
«Из диода и картошки» было бы, действительно, честнее.
Однако, как по мне, главная ценность материала — в эксперименте: про схему с картофелиной многие если не знали, то где-то слышали (пусть на правах байки), а у автора оно и правда делает «пшш-пшш». :)
Вовсе нет, если при получении фильтровать их них внутренние нулевые байты, после чего добивать строку нулём. Если эти ребята по каким-то причинам не пользовались нуль-терминированными строками, то нужно не strncmp юзать, а соответствующую функцию из их строковой библиотеки, или хотя бы memcmp.
А ещё правильнее, наверное, было бы использовать в этом случае просто strcmp и не передавать вообще никакую длину. Нужно же строки целиком сравнивать, а не их подстроки. Интересно, почему программист из Intel так сделал: это «микрооптимизация» такая или иррациональный страх не обнаружить завершающего нуля в конце строки?
Нужно: 1) проставить во всех файлах комментарии "this file is checked with pvs-..."; 2) запустить pvs studio; 3) удалить комментарии.
Этот сценарий использования является пиратством, так как явно запрещён лицензией (секция «Update»). Правильней всего просто не использовать этот анализатор (и, тем более, не делать ему рекламы) если не согласны с лицензией.
«… или идите купите лицензию, или превратите свой проект в нашу рекламную вывеску.»
Да, так и задумано. Не вижу ничего в этом плохого или нечестного.
Я тоже не вижу ничего нечестного. Но анализатор ваш не порекомендую использовать никому и никогда.
Ай, это же мёртвый код. Фи, нехорошо.
Для этого совершенно не обязательно использовать PVS-Studio. Опция -Wunreachable-code, вовремя переданная в clang++ (жаль, что из GCC её молча выпилили), позволит разработчику сэкономить немного денег/самоуважения.
Лично я нахожу условия неприемлемыми для любого публикуемого проекта, независимо от его лицензии. Как с таким убеждением можно кому-то рекомендовать принять эти условия?
(...) когда делал срочные правки, смог поймать ошибки с индексами.
У нас возможностей запутаться в индексах просто море, но мы возлагаем большие надежды на ассерты и valgrind.
Не каждый менеджер будет рад видеть в проекте компании такие комментарии.
Я не менеджер, но совершенно не рад видеть строчки с сюрным текстом первыми в файле. При этом, я бы вполне смирился с упоминание об анализаторе (со ссылкой на сайт разработчика), но в более нейтральной формулировке и сразу после информации о лицензии проекта.
Не могу представить подобного рода комментарии, например, в Boost или Qt. Выдвигая такие условия, вы достаточно ясно говорите своей аудитории: «На самом деле, мы не хотим, чтобы вы использовали наш анализатор бесплатно для чего-то серьёзного — поэтому или идите купите лицензию, или превратите свой проект в нашу рекламную вывеску.»
Давно есть возможность использовать PVS-Studio бесплатно.
Недавно думал посоветовать одному из своих студентов прикрутить PVS-Studio к дипломному проекту. Посмотрел на формулировку вида «Dear PVS-Studio, would you kindly check my stupid project, please.» и передумал советовать. Формально вы правы: вы даёте возможность пользоваться своим продуктом бесплатно, но «вы делаете это без уважения».
В особенности я не согласен с вашей политикой размещать этот комментарий именно на первых двух строках файла с кодом: если каждый условно-бесплатный инструмент начнёт требовать подношений таким образом, то больше одного такого инструмента подключить к проекту не получится.
Впрочем, вы, наверняка, все подобные аргументы уже слышали. Уверен, вы сознательно выбрали именно такие формулировки и ограничения, и это целиком ваше право. Право недовольных — предпочесть ваших конкурентов, несмотря на тот информационный шум, что вы устраиваете на Хабре.
ИМХО, предложения, одновременно содержащие в своём составе слова «C++» и «всегда», должны также содержать ссылку на стандарт. В стандарте C# размер int постулируется, но не в C и C++, где мало в чём можно быть уверенным наверняка.
На какой ОС и с каким компилятором std::cout << sizeof(int); выведет число, отличное от 4.
К сожалению, ваш вопрос подразумевает наличие заголовочного файла iostream (а также операционной системы), поэтому я не могу дать на него эффектный ответ. Однако, например, компиляторы Turbo C++ и Borland C++ в системе DOS или Windows 3.x умеют в std::cout и выведут число 2. При желании, можно и сейчас скомпилировать в каком-нибудь DOS-Box.
Раз уж вы ниже обращаетесь к своему опыту, обращусь к своему: доводилось писать прошивки для AVR, где длина int равна двум байтам. Да, на большинстве распространённых архитектур используются 32-битные целые, но не всегда — ребята из PVS-studio даже небольшую табличку составили. И пусть суперкомпьютеры Cray едва ли представляют практический интерес, комитет стандартизации C++ помнит о них. Как помнит он и о совсем дикой экзотике.
Кстати, вот цитата из одного ответа по предыдущей ссылке:
CHAR_BIT is 16 bits for 1750a, dsp16xx architectures.
CHAR_BIT is 24 bits for dsp56k architecture.
CHAR_BIT is 32 bits for c4x architecture.
Насколько я могу судить, на этих платформах sizeof(int) == 1. Хотя вряд ли там найдётся iostream и компилятор C++, если только вы сами их не напишете.
Не знаю, как в других языках, а в С/С++ инты всегда 32-битные.
Это самая вопиющая ложь о C и C++, что мне приходилось слышать в этом календарном году. Возможно, вы имели в виду C#, но всё равно, пожалуйста, не делайте так больше.
У вас какой-то идеальный случай: клиент долгосрочный, рейт высокий, за валютный контроль и вывод средств банк денег не берёт, патент оформлен не в столицах (например, у нас в Воронеже он стоит 18 тысяч). Я не уверен, что так часто бывает на практике. Чтобы получилось 5%, нужно работать с заказчиком очень долго, а до того — терпеть грабительскую комиссию. Стоимость патента и взносов на соцстрахование тоже не каждый фрилансер-ИП может считать пренебрежимо малыми.
Кстати, ЕМНИП, патент территориально привязан к субъекту федерации: деятельность должна вестись именно там, где выдан патент. Как налоговая смотрит на ВЭД на патенте? Не пыталась доказать, что деятельность вы ведёте где-то не здесь?
Позвольте не согласиться с вашими тезисами.
Как будто это какая-то редкость. Для PyQt нужен интерпретатор Python со своей стандартной библиотекой, сам PyQt и, вдобавок, прекомпилированные бинарники Qt. Установить всё это может быть не так уж просто, особенно если в системе нет нормального пакетного менеджера. А если вы вдруг захотите самостоятельно пересобрать PyQt из исходников, вам точно понадобится и компилятор C++.
Для питона тоже неплохо бы иметь хорошую среду с диагностиками и зачатками статического анализа (PyCharm?). Более того, как мне кажется, динамически типизированные языки предъявляют намного большие требования к качеству IDE: без них последствия банальной опечатки вы увидите уже после запуска программы.
В Qt практически не используется высокооктановая шаблонная магия, зато широко применяется идиома PIMPL — это здорово ускоряет компиляцию. Времени на компиляцию столь простого приложения, как описывается в статье, потребуется немного.
Для того, чтобы убрать два лишних звена (Python и PyQt) из технологического стека, получив в результате более отзывчивое приложение, потенциально более кроссплатформенное, с более простым процессом развёртывания и пакетирования.
Через Qt можно делать то же самое. Как фреймворк Qt очень удобен: если приложение написано целиком на Qt, необходимости думать о низкоуровневых деталях практически не появляется.
Ваше приложение пока что слишком простое, чтобы заметить разницу.
ЕМНИП, в русском языке есть интересный момент касательно склонения мужских и женских имён собственных с нулевым окончанием. Думаю, правильнее было бы написать «Харриса & Харрис».
JavaScript пока не канонизирован православной церковью, чтобы так оскорбляться в ответ на вполне невинную статью, да ещё и не лишённую справедливости. Немного самоиронии не помешало ещё ни одному сообществу.
Считаю, что вы этой припиской только подтвердили исходный тезис о мыслевирусе.
По ссылке ожидал увидеть PDF, но не 120-мегабайтный архив с чем-то, похожим на профиль браузера вместе с кешем. Это точно именно то, что вы имели в виду?
Поддержу.
Вместо
android:
можно выбрать префикс покороче (например,a:
), либо вообще установить пространством имён по умолчанию (тогда префиксы не понадобятся):С точки зрения XML — разницы никакой. Проблему с выражениями это, конечно же, не решает.
Более того, ещё пару дней назад требований о визуалстудии и недопустимости использования сторонних библиотек в условии тестовой задачи не было, как и о том, что решение должно быть оформлено в виде единственного CPP-файла и проходить автоматическую проверку.
Было весьма неприятно узнать об этом, имея на руках готовое решение, сделанное с расчётом на оценивание человеком: с Boost.Coroutine и Boost.Range, разбиением функциональности на кучу классов, комментариями и coverletter на английском. Написал им на мыло — код смотреть даже не стали.
Простите, не заметил.
Даже если человек открыто называет ваши архитектурные решения неправильными, это не повод так с ним себя вести. Кто-то потратил своё время, думая над тем, как сделать ваш проект лучше, не поленился зайти в трекер и написать об этом, а вы удаляете его сообщения. Даже если его предложения абсолютно и безкомпромисно противоречат вашему видению, так делать нельзя — вам следовало закрыть тикет с «wontfix» и оставить его в истории проекта. Лично я не увидел в предоставленной вами переписке абсолютно ничего такого, что могло бы оправдать ваш модераторский произвол.
Однако, как по мне, главная ценность материала — в эксперименте: про схему с картофелиной многие если не знали, то где-то слышали (пусть на правах байки), а у автора оно и правда делает «пшш-пшш». :)
Вовсе нет, если при получении фильтровать их них внутренние нулевые байты, после чего добивать строку нулём. Если эти ребята по каким-то причинам не пользовались нуль-терминированными строками, то нужно не
strncmp
юзать, а соответствующую функцию из их строковой библиотеки, или хотя быmemcmp
.А ещё правильнее, наверное, было бы использовать в этом случае просто
strcmp
и не передавать вообще никакую длину. Нужно же строки целиком сравнивать, а не их подстроки. Интересно, почему программист из Intel так сделал: это «микрооптимизация» такая или иррациональный страх не обнаружить завершающего нуля в конце строки?Этот сценарий использования является пиратством, так как явно запрещён лицензией (секция «Update»). Правильней всего просто не использовать этот анализатор (и, тем более, не делать ему рекламы) если не согласны с лицензией.
Я тоже не вижу ничего нечестного. Но анализатор ваш не порекомендую использовать никому и никогда.
Для этого совершенно не обязательно использовать PVS-Studio. Опция
-Wunreachable-code
, вовремя переданная вclang++
(жаль, что из GCC её молча выпилили), позволит разработчику сэкономить немного денег/самоуважения.Лично я нахожу условия неприемлемыми для любого публикуемого проекта, независимо от его лицензии. Как с таким убеждением можно кому-то рекомендовать принять эти условия?
У нас возможностей запутаться в индексах просто море, но мы возлагаем большие надежды на ассерты и valgrind.
Я не менеджер, но совершенно не рад видеть строчки с сюрным текстом первыми в файле. При этом, я бы вполне смирился с упоминание об анализаторе (со ссылкой на сайт разработчика), но в более нейтральной формулировке и сразу после информации о лицензии проекта.
Не могу представить подобного рода комментарии, например, в Boost или Qt. Выдвигая такие условия, вы достаточно ясно говорите своей аудитории: «На самом деле, мы не хотим, чтобы вы использовали наш анализатор бесплатно для чего-то серьёзного — поэтому или идите купите лицензию, или превратите свой проект в нашу рекламную вывеску.»
Недавно думал посоветовать одному из своих студентов прикрутить PVS-Studio к дипломному проекту. Посмотрел на формулировку вида «Dear PVS-Studio, would you kindly check my stupid project, please.» и передумал советовать. Формально вы правы: вы даёте возможность пользоваться своим продуктом бесплатно, но «вы делаете это без уважения».
В особенности я не согласен с вашей политикой размещать этот комментарий именно на первых двух строках файла с кодом: если каждый условно-бесплатный инструмент начнёт требовать подношений таким образом, то больше одного такого инструмента подключить к проекту не получится.
Впрочем, вы, наверняка, все подобные аргументы уже слышали. Уверен, вы сознательно выбрали именно такие формулировки и ограничения, и это целиком ваше право. Право недовольных — предпочесть ваших конкурентов, несмотря на тот информационный шум, что вы устраиваете на Хабре.
ИМХО, предложения, одновременно содержащие в своём составе слова «C++» и «всегда», должны также содержать ссылку на стандарт. В стандарте C# размер
int
постулируется, но не в C и C++, где мало в чём можно быть уверенным наверняка.К сожалению, ваш вопрос подразумевает наличие заголовочного файла
iostream
(а также операционной системы), поэтому я не могу дать на него эффектный ответ. Однако, например, компиляторы Turbo C++ и Borland C++ в системе DOS или Windows 3.x умеют вstd::cout
и выведут число 2. При желании, можно и сейчас скомпилировать в каком-нибудь DOS-Box.Раз уж вы ниже обращаетесь к своему опыту, обращусь к своему: доводилось писать прошивки для AVR, где длина
int
равна двум байтам. Да, на большинстве распространённых архитектур используются 32-битные целые, но не всегда — ребята из PVS-studio даже небольшую табличку составили. И пусть суперкомпьютеры Cray едва ли представляют практический интерес, комитет стандартизации C++ помнит о них. Как помнит он и о совсем дикой экзотике.Кстати, вот цитата из одного ответа по предыдущей ссылке:
Насколько я могу судить, на этих платформах
sizeof(int) == 1
. Хотя вряд ли там найдётсяiostream
и компилятор C++, если только вы сами их не напишете.Это самая вопиющая ложь о C и C++, что мне приходилось слышать в этом календарном году. Возможно, вы имели в виду C#, но всё равно, пожалуйста, не делайте так больше.
У вас какой-то идеальный случай: клиент долгосрочный, рейт высокий, за валютный контроль и вывод средств банк денег не берёт, патент оформлен не в столицах (например, у нас в Воронеже он стоит 18 тысяч). Я не уверен, что так часто бывает на практике. Чтобы получилось 5%, нужно работать с заказчиком очень долго, а до того — терпеть грабительскую комиссию. Стоимость патента и взносов на соцстрахование тоже не каждый фрилансер-ИП может считать пренебрежимо малыми.
Кстати, ЕМНИП, патент территориально привязан к субъекту федерации: деятельность должна вестись именно там, где выдан патент. Как налоговая смотрит на ВЭД на патенте? Не пыталась доказать, что деятельность вы ведёте где-то не здесь?
Итого, я правильно понимаю, что с суммы, заплаченной заказчиком,
а суммарно это будет 35–45%? Что-то получается весьма люто.
Или 18% процентов нужно посчитать не от полной суммы, а от комиссии Upwork?