LINUX.ORG.RU

Любителю нужны советы профессионалов

 , ,


0

3

Я знаю, что ЛОР это не мой жж и конкретные технические вопросы будут, но начать я хотел с небольшого введения, вдруг кому интересно, если не интересно, пропускайте введение, я постараюсь выделить эти части для удобства.

Введение

Начну с того, что я не профессиональный разработчик, я геофизик, занимаюсь обработкой данных сейсморазведки уже почти 10 лет. Моя работа тесно связана с большими программными комплексами, в которых и происходит обработка. Первый такой комплекс, с которым я познакомился, содержал уйму багов и работа представляла из себя хождение по минному полю и постоянный поиск путей обхода. Это настолько меня измотало, что я задался вопросом «неужели написать программу без такой кучи багов это _так_ сложно?». Всё это сподвигло меня на изучение программирования. Учился дома по книжкам, с перерывами, от «hello world!» до минимально полезных программ для работы и друзей. Я читал книжки по разным языкам программирования, раздел development ЛОРа и некоторые статейки для нубов. Со временем почувствовал, что могу написать что-то более-менее полезное. На ЛОРе время от времени всплывают темы «чего вам не хватает из софта в gnu/linux?», мне вот всегда не хватало просмотрщика данных сейсморазведки в формате SEGY. Есть, конечно, упомянутые комплексы ПО для обработки, но они сложны. Есть также просмотрщик под windows, который работает под wine, но бывает сбоит. Есть gsegyview, нативный, но давно заброшенный. В общем начал я по вечерам и выходным пилить потихоньку свой просмотрщик, на праздниках допилил минимально рабочий макет и выложил на github. Там, конечно, ещё очень многого нет, но уже тем что есть можно пользоваться, идей очень много и чтобы не похоронить проект на полдороги к очередной фиче, я решил выложить уже сейчас и потихоньку допиливать. Создаю я эту тему не только для определённых вопросов, но также для того чтобы получить советы от опытных разработчиков. Заранее благодарен всем за конструктив.

Вопросы по существу

По gtk: можно ли подвесить на изменение какого-нибудь поля в gsettings функцию или только связывание с properties объектов?

По meson: на сайте meson я нашёл как установить schema в систему и скомпилировать её, но как ни искал не смог понять почему при ninja install не копируется куда-нибудь в */bin исполняемый файл. Также я не совсем понял как всё это работает, можно ли сделать так чтобы схема лежала рядом с бинарником и только при ninja install копировалась, будет ли это работать?

Deleted

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

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

В нем даже профессионалы регулярно ноги себе отстреливают.

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

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

Я боюсь, что ты или застрянешь там на долго и это кардинально снизит выхлоп, или придешь в ужас и захочешь всё это забыть как страшный сон. На яве со свингом можно достаточно просто и быстро наговнякать что-нибудь и это даже будет сносно работать и приносить радость. C/C++ же принесут тебе больше боли, особенно когда дойдет до чего-то сложного. Радость это всё приносит, только когда переписываешь тормозящей кусок, когда вся предметная область уже определена, перенесена и все логические дыры закрыты. С ноля что-то на нём писать, особенно, когда ты любитель - это боль, страдания и унижения.

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

Причём тут евангелизм, простите? Сколькими способами можно обосраться в си и в js или яве? Плюс в яве не нужно думать о сборке под разные ос, в отличии от c/c++, там нет всяких свистоплясок с либами и прочих вещей, которые надо понимать и о которых надо помнить. Написал код, собрал jar'ку, он работает (если ничего не мутил с путями/мутными платформозависимыми фичами, но это мелочи)

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

Плюс в яве не нужно думать о сборке под разные ос, в отличии от c/c++, там нет всяких свистоплясок с либами и прочих вещей, которые надо понимать и о которых надо помнить.

Если писать на Java с использованием GTK, то плясок со сборками под разные ОС гораздо больше. Для Си я просто беру gcc/mingw и компилирую, а к Java надо ещё как-то собрать gtk-4.0.jar из исходников (бинарник только для линуксов есть).

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

Если писать на Java с использованием GTK

Зачем писать на яве с GTK? Бери свинг и пиши. Без красивостей, но работать будет.

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

Зачем писать на яве с GTK? Бери свинг и пиши. Без красивостей, но работать будет.

Сам спросил, сам ответил. Если без красивостей, то лучше Tk взять. Пишется на порядок быстрее и настраивается очень легко через xrdb.

А если надо, чтобы было симпатично и не тормозило, то или Gtk или Qt. В Java с обеими очень грустно.

monk ★★★★★
()

А что интерфейс такой нелогичный? Или это первая проба?

Согласен с crutch_master, вместо Си надо было писать на Vala. Это позволяет сконцентрироваться на сути, а не на специфике сишно-гэтэкашного ООП.

Если правильно понял второй вопрос
GSettings ищет схему в путях $XDG_DATA_DIRS/glib-2.0/schemas

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

Если без красивостей, то лучше Tk взять.

Ну, ТСу, всё-таки что-то считать еще надо, ява как бы получше будет. Как переносить это всё опять же? Да и язык там не привычный.

В Java с обеими очень грустно.

Да вполне сносно он работает. Чему там тормозить? У него просто визуализация с выводом на форму и десятком кнопок/меню. Ты считаешь, что комп задумается, если ткнешь мышкой на «Файл»?

crutch_master ★★★★★
()

Надо подумать. На gtk периодически пишу, но ты написал большую эмоциональную простыню, поэтому нужно перечитать и подумать.
Вечером, после работы.

я геофизик, занимаюсь обработкой данных сейсморазведки уже почти 10 лет. Моя работа тесно связана с большими программными комплексами

Поздравляю. Живое дело, полезное обществу.

Deleted
()

Самый первый вопрос: а зачем ты начал проект с нуля, если даже уже нашел готовый? Что тебе помешало взять его и допиливать?

Дальше уже по коду.
1. Выбор С для написания UI — как минимум неоднозначный. Даже сам гном, главный пользователь ГТК, старается писать гуй на питоне. Бизнес-логику можешь писать на С если хочешь, хотя тоже странный выбор, ну да ладно. Но уж гуй на нем шкрябать, это крайне зря.
2. Пользуйся стилизаторами кода. А еще лучше, качни какой-нибудь эклипс, и настрой стилизатор там. Еще есть мнение что табы в коде — зло. Но это тема холиварная, так что убеждать не буду.
3. Комменты — твои друзья. Используй их! Каждая функция описанная в заголовочном файле их иметь просто обязана вообще без вариантов, все остальные — крайне желательно.

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

Сколько народу вкатилось столько и точек зрения.

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

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

Отрисовка тормозит и блокирует все окно, уже нужно с этим что-то делать...

Ну да. Надо в отдельный тред, чтобы не блокировало. Лол.

А Vala возьмет на себя всю специфику сишно-гэтэкашного ООП

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

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

Или я чего-то не понимаю, или там всё равно нужен объект с property. Просто на какую-то функцию не повесить.

Deleted
()
Ответ на: комментарий от crutch_master

Кроме этого ему же еще и считать что-то надо будет, кодить что-то.

- Так Vala это обертка над Си, пиши считай - на выходе все тоже самое без потери производительности.
- Никто не мешает использовать код на Си (если это так необходимо) в проекте на Vala

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

Так ноги отстреляет же себе все. Или поддерживать замучается и бросит. И потом начнет хейтить си. Как будто и так хейтеров у си мало.

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

придешь в ужас и захочешь всё это забыть как страшный сон

Не думаю, пока получается хоть что-то — это приносит радость.

C/C++ же принесут тебе больше боли, особенно когда дойдет до чего-то сложного

Да, подозреваю, что так и есть, но я думаю, лучше заранее подготовиться. Т.к. я не профессиональный разработчик, я больше смотрю на софт с которым работаю и пока я видел только одну программу, которая была полностью написана на яве и вычисления там были не очень тяжёлые, десктоп тянул.

Deleted
()
Ответ на: комментарий от crutch_master

Детские страхи, если не взваливать на себя управление указателями. Vala сама ими умеет управлять.

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

Самый первый вопрос: а зачем ты начал проект с нуля, если даже уже нашел готовый? Что тебе помешало взять его и допиливать?

Хотелось самому с нуля создать, а не разбираться в чужих решениях. Для опытного разработчика это выглядит наверняка как потеря времени, но я думаю, что не имея опыта, я бы просто не разобрался что и зачем сделано. Думаю, когда доведу набор фич до определённого уровня — попробую разобраться что там к чему. Одно отличие, кстати, уже есть. Мой код для чтения самого формата данных поддерживает последнюю версию формата от прошлого года :)

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

А что интерфейс такой нелогичный? Или это первая проба?

Ну, можно сказать, что первая, хотя я старался :( Если есть предложения по улучшению — буду только рад.

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

Да, подозреваю, что так и есть, но я думаю, лучше заранее подготовиться.

Понимание как надо приходит, когда раза 2-3 перепишешь свою софтину. Могу посоветовать пробовать разное, пока много не написал. Я в шараге и после неё быдлокодил десктопный софт на delphi, c++ builder, dotnet, яве и плавно перелез на веб. Херачил бекенд на вложенных процедурах mysql (на моей работе бекенд на pl-sql и это - ад). Сейчас угорел по микросервисам. Выбор инструмента обусловлен задачей его возможностями и твоими возможностями. Профессионального разработчика отличает от любителя, только то, что он знает где какие грабли есть и он может предугадать, что работать будет, а что нет. С чем он намучается, а что можно поддерживать и развивать без геморроя. Первая программа у тебя в любом случае выйдет кривой и ты всё будешь переписывать раза 3.

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

Если без красивостей, то лучше Tk взять.

Ну, ТСу, всё-таки что-то считать еще надо, ява как бы получше будет.

Tcl прекрасно умеет подхватывать С-шные модули. Это почти основная его задача:)
Вычислительная Java обычно удобна там где народ в С-шку принципиально не умеет:( Автор вроде не из таких.

Как переносить это всё опять же?

C-шные расчетки перекомпилять на mingw. Tcl/Tk сам подхватится ос-специфичным рантаймом.

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

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

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

Другой вопрос что что собщество тиклеров сильно усохло к нынешнему моменту. это может быть проблемой:(

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

C-шные расчетки перекомпилять на mingw. Tcl/Tk сам подхватится ос-специфичным рантаймом.

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

Tcl прекрасно умеет подхватывать С-шные модули. Это почти основная его задача:)

Ты представляешь геофизика, который будет отлаживать какой-то сложный си-код и искать почему там у него сегфолты, ну? Тебе его совсем не жалко?

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

И если сильно задолбает писать прикладуху на голом С посмотри например на Gambit там много чего сделано для упрощения жизни при почти той же производительности и все той жеС-шной базе. Или даже на варианты Common Lisp-a но это сильно более долгая история.

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

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

Он судя по тексту уже это делает и вполне успешно. Если бы он говорил что в С-шку не умеет я бы и не предлагал.

отлаживать какой-то сложный си-код

Расчеты - это обычно не очень сложный код, но С делает их сильно быстрее. Плюс математических библиотек под С довольно много тоже. А всю обвязку написать на чем-то высокоуовневом и tcl на мой личный вкус сильно удобнее питона например или сырого Gtk.

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

интерфейс не продуман, тот же виджет отрисовки можно было выделить в класс

Да, вчера я понял, что так и придётся сделать. Сделал в памяти зарубку, как появится время в следующий раз — переработаю.

Отрисовка тормозит и блокирует все окно, уже нужно с этим что-то делать...

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

Deleted
()

Если время будет можно еще посмотреть на Iup. Оно делает более человечный интерфейс поверх Gtk и Lua. Делали для бразильского нефтянки.

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

И потом начнет хейтить си. Как будто и так хейтеров у си мало.

Хех) Не начну, даже если врострелю себе все ноги и уйду в условную яву, я буду отдавать себе отчёт, что это в первую очередь я не справился с инструментом. А инструменты берут по задаче, я понимаю, что для просмотрщика выбор си — неудачная идея, но я сделал это выбор в попытке убить двух зайцев одним выстрелом. И всё же немного опыта в работе с си у меня появилось благодаря этому выбору.

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

Если есть предложения по улучшению — буду только рад

В кнопке открытия имя файла. Очень странно выглядит. Оптимальное мето для него - subtitle. Можно даже путь указать.

Пустое поле снизу. Пустая область белая над графиком.

Вертикальный тулбар с горизонтальными элементами (стрелками) - ненелогично. Да и сам тулбар лишний. Оптимально было бы все вынести в HeaderBar или разместить элементы поверх виджета drawing_area, например, в верхней белой пустой полосе горизрнтально (•<- <- -> ->•) используя GtkOverlay.

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

Выбор инструмента обусловлен задачей его возможностями и твоими возможностями.

Да, я это понимаю. Я посмотрел вокруг математики либо пишут прототипы в матлабе, на питоне, а потом переписывают или сразу пишут на си или си с классами. Потому я и сделал такой выбор.

Deleted
()
Ответ на: комментарий от antares0

Если бы он говорил что в С-шку не умеет я бы и не предлагал.

Ну так сишка коварная. Ты думаешь, что всё умеешь, а она бьет тебя по рылу.

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

В кнопке открытия имя файла. Очень странно выглядит. Оптимальное мето для него - subtitle. Можно даже путь указать.

Это дефолт, спасибо за предложение, попробую.

Пустое поле снизу. Пустая область белая над графиком.

Это задел на будущее :) По плану внизу будет statusbar, собственно это он и есть, просто пока пустой, а в будущем там будет кое-какая информация о данных. Сверху это место для горизонтальной оси и подписи, просто без неё прожить можно, а вот без вертикальной в моём понимании программа бесполезна вовсе. Там просто немало кода ещё надо будет написать связанного с самим данными, а также взаимодействия курсора и области рисования.

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

Вертикальный тулбар с горизонтальными элементами (стрелками) - ненелогично. Да и сам тулбар лишний.

Часть я ещё помещу в HeaderBar, но всего предполагается очень много элементов взаимодействия, по своему опыту знаю, что прятать всё в меню будет не очень удобно, хочется расположить элементы на экране, чтобы было удобно, но и не перегружено. За вариант с GtkOverlay — спасибо, подумаю как это будет выглядеть. Вертикальный — конечно не слишком удобно, но в одной из программ, которыми я пользовался такой был, вроде норм, горячие клавиши помогали в случаях когда надо было много жать на кнопки.

Deleted
()
Ответ на: комментарий от morse

1. Выбор С для написания UI — как минимум неоднозначный.

Софтина — не самоцель, а средство для применения языка. ООП в гтк, конечно, наркоманский, но я начинаю втягиваться.

2. Пользуйся стилизаторами кода.

Да, спасибо за совет, забыл как-то про это. Знаю про astyle, но может есть что лучше?

3. Комменты — твои друзья.

Спасибо за совет. Прокомментирую. В коде я старался выбирать имена переменных такими, чтобы было понятно из кода что к чему, а в тёмных местах я оставляю комментарии, понимаю, что потом самому разбираться во всём этом...

Deleted
()
Ответ на: комментарий от morse

Выбор С для написания UI — как минимум неоднозначный. Даже сам гном, главный пользователь ГТК, старается писать гуй на питоне. Бизнес-логику можешь писать на С если хочешь, хотя тоже странный выбор, ну да ладно. Но уж гуй на нем шкрябать, это крайне зря.

Нормальный выбор. Гуй для чего-то сложнее хэлловорлда рисуется мышкой в Glade. Большая часть гномоприложений до сих пор на Си, в последнее время новые начали на Вала писать. С Питона почти всё переписали ещё во времена первых версий ГТК+3.

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

А мне как раз казалось что валу хоронят в пользу питона. Все эти модные чаты-музыки и прочая прикладная мелочь пишется на питоне.

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