LINUX.ORG.RU

Оценки хелловорлда тред

 , , ,


2

3

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

★★★

Pauses media when headphones get plugged out and plays it when they get plugged in

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

EXL ★★★★★ ()
Ответ на: комментарий от EXL

в той же пульсе

Разделение обязанностей, похоже. Звуковой сервер не должен знать о плеерах и тем более уметь ставить их на паузу.

в популярных DE

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

f1u77y ★★★ ()
Ответ на: комментарий от f1u77y

Интересно, на каком уровне это сделано в том же Android.

EXL ★★★★★ ()

Я бы взял glibmm.

UVV ★★★★★ ()
Ответ на: комментарий от EXL

Каждое приложение должно ловить событие ACTION_AUDIO_BECOMING_NOISY и обрабатывать его. Посылает его, похоже, аудиосистема. Вполне себе неплохой вариант, с учётом того, что на андроиде она всего одна.

f1u77y ★★★ ()
Ответ на: комментарий от UVV

Я тоже об этом думал, но gdbus-codegen умеет генерировать только код на C. Не хочется смешивать.

f1u77y ★★★ ()
Ответ на: комментарий от f1u77y

но gdbus-codegen умеет генерировать только код на C

Я тоже так думал, но потом понял, что для кода на C++ gdbus-codegen не нужен в принципе :)

UVV ★★★★★ ()

CMakeLists.txt

фтопку такие hell'оворды

mittorn ★★★★★ ()

Обращаю ваше внимание

Данное ПО -- проприетарное. Вам не следует читать, загружать, транслировать, запускать, модифицировать и распространять данное ПО, так как иначе могут быть нарушены чьи либо права.

d_a ★★★★★ ()
Ответ на: комментарий от UVV

Если в glibmm те же методы, что и в glib, но на C++, то я не очень понимаю, почему там не нужен gdbus-codegen.

И чем будет лучше писать на C++ (даже если не учитывать, что я хотел написать именно на C, дабы узнать его как-то получше)?

f1u77y ★★★ ()
Ответ на: комментарий от mittorn

А что, есть что-то лучше и популярнее божественного CMake?

slovazap ★★★★★ ()
Ответ на: комментарий от f1u77y

то я не очень понимаю, почему там не нужен gdbus-codegen.

В glibmm это делается в run-time. Ты подставляешь свой интерфейс в gstring и скармливаешь его Gio::DBus::NodeInfo::create_for_xml. Всё, у тебя готов интерфейс, который осталось зарегистрировать на шине. Если залезть в glibmm/examples, то там примеры будут.

И чем будет лучше писать на C++

Тем, что в С++ есть умные указатели и RAII.

UVV ★★★★★ ()
Ответ на: комментарий от mittorn

А, ну-ну. Как научится кроссплатформенности, искать зависимости, проекты для IDE генерить и сколь-либо эффективно параллельно собирать, приходите.

slovazap ★★★★★ ()

Автор, в CMakeLists.txt нужно явно задать используемый стандарт [set(CMAKE_C_STANDARD 99)], но сделать PR, очевидно, нет юридической возможности.

d_a ★★★★★ ()
Последнее исправление: d_a (всего исправлений: 1)

 Pauses media when headphones get plugged out and plays it when they get plugged in

А я просто выкрутил громкость на динамиках до нуля.

sudopacman ★★★★★ ()

А видеоплееры будут работать (mpv/totem)?

nvl ★★ ()
Последнее исправление: nvl (всего исправлений: 1)
Ответ на: комментарий от slovazap

По факту - cmake не работает самостоятельно и использует другие среды для сборки. При этом проекты и мейкфайлы которые он генерирует не работают без cmake и привязаны к абслютным путям (это основная причина моей ненависти к cmake)
При этом у cmake постоянные проблемы из-за устаревших значений в CMakeCache и инопланетные названия переменных.
Например чтобы собрать что-то под мультилиб придётся указывать -m32 в десяток разных флагов.
В cmake постоянно что-то добавляют и вечно какому-нибудь проекту нужна версия посвежее, даже если не обновлял систему всего пару месяцев.
помимо всего он громоздкий и ему нужен c++ рантайм. Вроде мелочь, а не приятно.

mittorn ★★★★★ ()
Ответ на: комментарий от mittorn

При этом проекты и мейкфайлы которые он генерирует не работают без cmake и привязаны к абслютным путям (это основная причина моей ненависти к cmake)

Но ведь cmake может ещё в новомодную ninja (которую я так и не попробовал)

Например чтобы собрать что-то под мультилиб придётся указывать -m32 в десяток разных флагов.

Нет, нужно всего лишь нормальный TOOLCHAIN_FILE, проверено под 3 архитектуры под yocto

UVV ★★★★★ ()
Ответ на: комментарий от slovazap

make должен искать зависимости внутри проекта, что он успешно делает. Кроссплатформенность он умеет. Что такое проекты для IDE? И кто их умеет? cmake не умеет т.к генерирует костыль вместо проекта.
С параллельной сборкой проблем нет и не было. есть опции распределения нагрузки и ограничения для создания потоков. make отлично справляется с параллельной сборкой при использовании distcc на многих машинах. У cmake же нету параллельной сборки, он нахлебничает у make, xcode и msbuild.

mittorn ★★★★★ ()
Ответ на: комментарий от mittorn

К сожалению да. хотя для работы java нужна, так что затея это сомнительная.

lol, т.е. чтобы собрать С/С++ нужна java. Ещё раз LOL

UVV ★★★★★ ()
Ответ на: комментарий от UVV

Слышал я про ninja, но это ведь уже отдельный проект. Будь он частью cmake и используйся по умолчанию, cmake можно было бы называть системой сборки. Не удобных названий переменных, глючного кэша и невозможности разобраться без документации и алкоголя это не отменяет.

mittorn ★★★★★ ()
Ответ на: комментарий от UVV

градл был приведён как сарказм. Разумеется нормальные люди не станут его использовать.

mittorn ★★★★★ ()
Ответ на: комментарий от mittorn

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

UVV ★★★★★ ()
Ответ на: комментарий от mittorn

Поздно. Теперь ты специалист по граблям ))

UVV ★★★★★ ()
Ответ на: комментарий от mittorn

невозможности разобраться без документации

Это пять.

i-rinat ★★★★★ ()
Ответ на: комментарий от UVV

Кстати, он с С/С++ тоже дружит?

Да, может собирать сам. А в связке с Android может вызывать make (ndk-build) или CMake.

EXL ★★★★★ ()
Ответ на: комментарий от UVV

т.е. чтобы собрать С/С++ нужна java. Ещё раз LOL

Ещё Groovy и кучу разных либ. Впрочем, DSL у Gradle достаточно приятный: https://docs.gradle.org/current/userguide/native_software.html в отличие от наркоманской макросной лапши CMake'а.

Жаль QBS от Qt-разработчиков так и не взлетел. Он действительно напоминает Gradle по удобству написания сборочных сценариев.

EXL ★★★★★ ()
Ответ на: комментарий от d_a

Тогда наверное будет лучше так:

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

andreyu ★★★★★ ()
Ответ на: комментарий от EXL

Жаль QBS от Qt-разработчиков так и не взлетел. Он действительно напоминает Gradle по удобству написания сборочных сценариев.

Он удобнее premake5, у которого конфиг - это lua-скрипт?

andreyu ★★★★★ ()
Ответ на: комментарий от d_a

Ну только не CXX.

Угу, сделал копипаст из своего проекта, забыв пофиксить перед отправкой.

andreyu ★★★★★ ()
Ответ на: комментарий от UVV

Ну я просто написал makefile и заодно портировал rehlds на gcc когда он мне понадобился. Даже патчем им кинул. Правда там порт на отвали был, одноразовый, как и мейкфайл, но зато на это ужёл час, а не весь день.

mittorn ★★★★★ ()
Ответ на: комментарий от andreyu

Понятие удобства растяжимое, можешь посмотреть на их декларативщину: http://doc.qt.io/qbs/language-introduction.html

Я нахожу её удобнее, чем наркоманскую макросню CMake'а и ту же регистронезависимость. Так уж повелось, что в IT часто выигрывает самое отвратное и угрёбищное решение. В результате CMakeLists.txt по сути стал стандартом в мире C/C++ и это прискорбно.

EXL ★★★★★ ()
Ответ на: комментарий от mittorn

Почему здесь Make лучше? Меньше build-time зависимостей, да.

Я использую CMake, например, потому что он является файлом проекта для некоторых популярных IDE и текстовых редакторов. Автодополнение из коробки (особенно при использовании glib) — хороший аргумент, я щитаю.

f1u77y ★★★ ()
Ответ на: комментарий от EXL

Qbs действительно менее наркоманский, но можно пожертвовать им ради того, что я написал комментом выше.

f1u77y ★★★ ()
Ответ на: комментарий от sudopacman

Дело в том, что я хочу ещё и продолжить слушать с того же места.

f1u77y ★★★ ()
Ответ на: комментарий от nvl

Не знаю про totem, щас проверю.

mpv из коробки не будет, но к нему можно прикрутить скрипт, который сделает его работать.

http[s]//:your-favourite-search-engine/?q=mpv+mpris

f1u77y ★★★ ()
Ответ на: комментарий от mittorn

make должен искать зависимости внутри проекта, что он успешно делает

Когда говорят о зависимостях, говорят о зависимостях вне проекта.

Кроссплатформенность он умеет

Ну давай покажи мне без страницы if'ов проект который собирается gcc, clang, icc и msvc с отладочной инфой, c++14.

Что такое проекты для IDE? И кто их умеет? cmake не умеет т.к генерирует костыль вместо проекта.

Т.е. вы даже не скрываете что первым вопросом прикинулись дурачком? И потрудитесь рассказать что костыльного в проектах генерируемых cmake, я вот что-то проблем никаких не видел.

С параллельной сборкой проблем нет и не было

То-то его везде где можно на ninja заменяют.

slovazap ★★★★★ ()
Ответ на: комментарий от mittorn

Что такое проекты для IDE?

Файлы или их наборы, которые распознаются IDE как проект.

И кто их умеет? cmake не умеет т.к генерирует костыль вместо проекта.

Костыль костылём, а всякие плюшки вроде автокомплита с ним работают, потому что экспортируются команды сборки. А с Make никакого автокомплита в сложных проектах. Ну или руками отдельно писать эти всякие .ycm_extra_conf.py

f1u77y ★★★ ()

Код дословно не смотрел, но упражнение хорошее.

Тестами покрыл уже?

yoghurt ★★★★★ ()
Ответ на: комментарий от UVV

В glibmm это делается в run-time. Ты подставляешь свой интерфейс в gstring и скармливаешь его Gio::DBus::NodeInfo::create_for_xml. Всё, у тебя готов интерфейс, который осталось зарегистрировать на шине. Если залезть в glibmm/examples, то там примеры будут.

Интересно, спасибо. Может, даже переделаю.

RAII

Как раз хотел написать, что он и в C есть (только в виде расширений GCC/Clang, правда).

умные указатели

тоже есть

f1u77y ★★★ ()
Ответ на: комментарий от mittorn

По факту - cmake не работает самостоятельно и использует другие среды для сборки. При этом проекты и мейкфайлы которые он генерирует не работают без cmake и привязаны к абслютным путям (это основная причина моей ненависти к cmake)

И почему тебя это вообще волнует? Не видишь разницы между исходниками и генерёнными файлами? Может ты ещё и объектные файлы таскаешь между системами?

slovazap ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.