RoadMap для системного программиста

@rchM@stUrb@t0r а какова цель? хобби?
grayich
@rchM@stUrb@t0r а какова цель? хобби?
будущая работа. да и дело всей жизни
@rchM@stUrb@t0r
План:
1. Граф. приложения писать не умею - изучить хотя бы qt
2. fopen, fread, fwrite, и др. в голове имеются
3. пропишу несколько ветвлений для подстветки синтаксиса
4. теперь сложное - написать свой скриптовый язык для файлов плагина моего редактора

Пройдёмся по плану:
1. qt только Linux, в винду она уже тянет библиотеки, а никто не захочет для какой нибудь утилиты с двумя кнопками, например GUI для проверки жёсткого диска используя чекдиск, тянуть для крохотульки 40 Мб, да даже редактор который мог бы весить 5 Мб. Во вторых в Linux возможно урезанный qt, так как лицензия на настоящий стоит 300 тыс. рублей или долларов в год. Возможно эта цена за инструментарий и модули бесплатно, подробностей не знаю. Автор "Crow Translate" пишет на qt. PureBasic позволяет при компилировании использовать движок qt, ну там ещё выбор gtk2, а по умолчанию gtk3. Си вообще не содержит движков создания форм-окон, для этого есть готовые ещё wxWidgets (бывшая wxWindows), но опять же нужно знать их API а это целая история, выучил qt, потом передумал, а время ушло, там годами изучают.
2. fopen, fread, fwrite - это конечно интересно, но в каком формате они пишут? В бинарном? А чтобы это было на вменяемое, надо же это бинарное ещё подготовить. Текст в форматах UTF8, UTF16, ucs-2, ANSI в бинарном виде имеют разное представление, они не одинаковы бинарно. К примеру на AutoIt3 есть функция FileRead() вот есть без разницы в каком формате файл, она автоматически распознаёт формат и получает данные в переменную в виде UTF16. То есть под капотом вам ещё предстоит написать распознаватель данных, один из которых прочитать метку BOM. Но её может и не быть, например HTML файлы в кодировке utf8 не содержат метки BOM, а также многие конфигурационные файлы программ, авторы которых пишут в нужном формате и не считают что кто-то будет открывать эти файлы в редакторе и что для них надо указать эту метку, тот же desktop-файл в формате UTF8 без метки BOM, а нафиг ему метка если Linux все файлы по умолчанию в этом формате. И вот на этой теме можно застрять на долго или думать что ты написал прогу, а потом выяснилось что она ничего не умеет. А тем людям которые виндовые файлы открывают в линуксе в кодировке cp1251? Линукс по умолчанию ничего не знает о виндовой кодировке и откроет её в cp1252, точнее откроет её в UTF8, которые в первых 256 байтах совпадает с англоязычной кодировкой cp1252. Вот поэтому я пишу на PureBasic, потому что он после AutoIt3 почти также имеет готовые функции и мне не придётся писать самостоятельно, ну и повторимся что он использует qt, gtk2, gtk3, winapi из коробки.
3. Я не представляю как писать подсветку синтаксиса не написав свой движок элемента редактор. Ну как бы аналог RTF в винде или аналог Scintilla или аналог в AkelPad какой то свой движок. В PureBasic есть элемент canvas, который использует 2D-графику и там есть функции рисования шрифта и вот в купе всего этого человек на канвасе написал движок редактора PBEdit, опять же в линукс я его не смог запустить, а там кода 12 тыс. строк и вес исходника на 1 Мб. Автор IceDesign применил его у себя в коде (не стал писать свой). А у Scintilla в описании рассказывали хвалились как они чуть ли не с драйвером видюхи скрещивали чтобы ускорить вывод, то есть не через виндовую прокладку, ну типа как видео плеер выводит, что даже скриншоты с экрана сделать невозможно без ухищрений.
4. На самом деле написать плаг это проще чем всё остальное. Я естественно подсмотрел у Notepad++ и IDE PureBasic. На этой задаче редактор должен иметь структуру данных и передать плагу указатель на эту структуру, плаг читает её и получает идентификаторы окон, а дальше имея прямой доступ просто вызывает функции отправляя действия непосредственно идентификатору Scintilla. То есть прочитал текст обработал, вставил обратно. В данном случае Scintilla предоставляет указатель на текстовые данные, или используя функции Scintilla выполнить запрос получения текста в объекте. Ну или самому повторять движок Scintilla. Он бесплатный, в качестве лицензии требуется сопроводить лицензию лицензионным файлом Scintilla, прочти о лицензии тут, третий абзац где написано "Важно:".

На счёт форматов в PureBasic есть функции UTF8() и Ascii(), чтобы из переменной превратить текст в бинарные данные в этом формате, которые потом можно скинуть в файл функцией WriteData(). Дело в том что обработка текста (поиск, замена, изменение регистра, обрезка и т.д. и т.п.) выполняется в одном формате с одинаковой шириной буквы 2 байта (UTF16). Так проще сделать сдвиг на 2 байта для посимвольного анализатора в любой функции. То есть самостоятельно можно написать свои функции по работе с текстом. Посмотрите строковые функции написанные мной (почти все в этом разделе) с использованием посимвольного разбора.

Я веду к тому что либо вы с нуля будете писать все эти функции, либо воспользуетесь готовыми. НО!!! будут ли предложенные аналоги на Си кроссплатформенными? Будут ли они совместимы с вашим кодом, не окажутся ли старыми с какими нибудь косяками, какова у них лицензия? Поэтому я выбрал PureBasic с поддержкой совместимости одним автором, кроссплатформенным винда, линукс, мак, малинка. А кроме того код не сложно адаптировать к андроид и айфон используя SpiderBasic от того же автора, у меня пару игр и проги по работе написаны для андроида.
Можете даже 3D игрушку написать, вот примеры.
мои программы
AZJIO
Я веду к тому что либо вы с нуля будете писать все эти функции, либо воспользуетесь готовыми. НО!!! будут ли предложенные аналоги на Си кроссплатформенными? Будут ли они совместимы с вашим кодом, не окажутся ли старыми с какими нибудь косяками, какова у них лицензия?

Кроссплатформенность не важна. Буду писать утилиты (или как ещё называть системные программы низкого уровня для обслуживания аппаратного обеспечения) под Линукс. А если завирусится и люди захотят аналог на винду - ок, перепишу

AZJIO
Поэтому я выбрал PureBasic с поддержкой совместимости одним автором, кроссплатформенным винда, линукс, мак, малинка. А кроме того код не сложно адаптировать к андроид и айфон используя SpiderBasic от того же автора, у меня пару игр и проги по работе написаны для андроида.
Можете даже 3D игрушку написать, вот примеры.

3Д игрушка реально годнота (правда подвел Wayland, там текстуры все черные).

Текстовый редактор я указал как пример. Мы (я) случайно перескочили на тему прикладных программ. Моя же цель - создание системного ПО. Системное ПО бывает разное: операционки, ядра, загрузчики, системные утилиты. Да блин, даже прошивка для микроконтроллера - это сис. ПО. Я хочу чуть-чуть побыть Терри Девисом и разработать что-то своё для себя (ту же самую операционку, в котором есть текстовый редактор, часы и пару игр), а для сообщества GNU или для своей "будущей" работы - продукты системного ПО (утилиты, программы нижнего уровня - parted например) или какие-то дополнения (будь даже это модулем). Вот возьмем в пример Memtest86+, вот что то такое хочу от себя. Или переписать (исключительно своими знаниями) модуль ядра для поддержки Bluetooth. Ну и немного побаловаться с прикладными тоже (совсем немного). Например написать клиент-серверное приложение (что-то типо irssi или рогалик онлайн :D). Вот так
@rchM@stUrb@t0r
будущая работа. да и дело всей жизни
конечно могу ошибаться, но ничего не выйдет
программирование оно мало чем в сути отличается от музыки или художества
здесь или есть "слух" или его нет

судя по задаваемым вопросам, его нет, нет предрасположенности к этому занятию
поэтому делать на программирование профессиональную ставку, такая себе идея
а вот как хобби - норм
@rchM@stUrb@t0r
в пример Memtest86+
В железе надо разбираться, полное знание работы всех устройств в компе, куда какие сигналы идут, кто-что их получает и обрабатывает, то есть БИОС, как начинает исполнятся, то есть первое чтение загрузочных устройств. Знать что необходимо для работы дос-программ, как записывать в память, как считывать, откуда начать, где закончить по адресам. Но мне кажется достаточно по-изучать Grub2, чтобы вынести себе мозг, там только на нём простыня не пару метров мелким текстом. Мне кажется по изучать загрузчики можно несколько месяцев. Набери в гугле типа как происходит загрузка компьютера. Переформулируй запросы по разному, всё это есть, всё можно найти. Почитай про MBR. На счёт исходников погугли, вроде попадались исходники Grub4Dos. Вот что-то. Но если вам нужно чтобы кто-то вас вёл к великому написанию, а в конце мы получим только обещания, нам на обещания нет смысла делать свои телодвижения. У вас же нет конкретной цели, вы просто бросаетесь великими лозунгами чтобы мне крутое пописать. Это же отличается от конкретики, типа хочу написать эту прогу, гуглил тут и тут решение по такому то вопросу нет. А так лить воду в общем для этого хватает неинтересных тем, вот одна, где я тоже хотел втисаться, но разговоры обо всём и ниачём не по мне.
На счёт сервера вот что-то на PureBasic
Обмен по сети между компами TCP и UDP
мои программы
AZJIO
@rchM@stUrb@t0r
в пример Memtest86+
В железе надо разбираться, полное знание работы всех устройств в компе, куда какие сигналы идут, кто-что их получает и обрабатывает, то есть БИОС, как начинает исполнятся, то есть первое чтение загрузочных устройств. Знать что необходимо для работы дос-программ, как записывать в память, как считывать, откуда начать, где закончить по адресам. Но мне кажется достаточно по-изучать Grub2, чтобы вынести себе мозг, там только на нём простыня не пару метров мелким текстом. Мне кажется по изучать загрузчики можно несколько месяцев. Набери в гугле типа как происходит загрузка компьютера. Переформулируй запросы по разному, всё это есть, всё можно найти. Почитай про MBR. На счёт исходников погугли, вроде попадались исходники Grub4Dos. Вот что-то.

Вот что-то подобное мне нужно.

AZJIO
Но если вам нужно чтобы кто-то вас вёл к великому написанию,

нененене, мне нужна литература и источники. я для этого сюда пришел.

AZJIO
У вас же нет конкретной цели, вы просто бросаетесь великими лозунгами чтобы мне крутое пописать.

Что?)

AZJIO
На счёт сервера вот что-то на PureBasic
Обмен по сети между компами TCP и UDP


Еще раз спасибо за источники
 
Зарегистрироваться или войдите чтобы оставить сообщение.