|
Обновите ArcaOS до уровня NeoWPS
- Установите набор PNG иконок, нарисованных дизайнером, специализирующемся на оформлении OS/2
- Установите eSchemes 2018, чтобы менять цвета и кнопки на рабочем столе
|
Введение в Sibyl, часть 1 |
TITLE: Введение в Sibyl, часть 1
DATE: 2003-06-04 11:08:20
AUTHOR: stVova
Все слышали о Borland Delphi - визуальной среде быстрой разработки приложений (RAD). Мощная штука, но
под Полуосью идет только версия 1.0 (16-разрядная). Поэтому немецкие парни придумали Sibyl - тот же
Дельфи, но подосевый. Версия 2.0 с третьим фикспаком лежит
на сайте производителя
(и на хоббесе).
В демо-версии недоступна справка, а также есть ограничение на три формы в проекте.
В остальном - берите и пользуйтесь на здоровье (6,9Мб).
По функциональности Sibyl 2.0 = Delphi 3.0.
После запуска, Sibyl создает новый проект. Посмотрим, что у нас на экране:
- Главное окно с палитрой компонентов.
Здесь можно увидеть меню, два ряда кнопок быстрого доступа к часто
используемым функциям среды и сотню компонентов на закладках палитры.
Именно использование компонентов ("независимых строительных блоков")
привело с одной стороны - к повышению производительности труда
разработчиков, а с другой - к снижению сложности разработки программ вообще.
- Инспектор объектов (Object Inspector).
Чтобы управлять компонентами, нужно иметь доступ к их свойствам.
Этот доступ предоставляет Инспектор Объектов. После создания пустого
проекта, единственное что в нем есть - это главное окно с заголовком
"Form1". Щелкните по нему мышкой - Инспектор Объектов отобразит информацию
о выделенном обьекте .
- Редактор кода (Unit1.pas).
"Постройка дома не избавляет от необходимости поселить в него
жителей" - кто сказал, не помню, но, согласитесь, что "программой движет код".
Соответственно где-то этот текст нужно набирать.
Причем, часто Sibyl сам создаст для Вас заготовки процедур и описания,
избавляя от рутины.
- Дизайнер форм (Form1).
Я уже упомянул главное окно будущей программы с заголовком "Form1".
Но подумайте, программа-то еще не запущена на выполнение, а окно уже есть.
Как? Этот непростой механизм и называется "Дизайнер форм".
Во время разработки программы он отображает окна этой самой программы.
Проект (программа) в Sibyl состоит из нескольких файлов: Файл_Проекта.spr, Файл_Программы.pas,
Файл_Модуля.pas и Файл_Формы.scu (по-умолчанию: Project1.spr, Project1.pas, Unit1.pas, Project1.scu).
В любой момент Вы можете сохранить все эти файлы на жесткий диск,
для этого воспользуйтесь пунктами меню Project\Save или Project\Save as....
Рекомендуется хранить каждый проект в своем каталоге. Так удобнее.
В визуальном проектировании приложений нет ничего сложного.
По-сути, визуальное программирование - это визуальное
Обьектно-Ориентированное Программирование.
Все, что есть в программе: окна, кнопки, поля ввода, рисунки - это обьекты (компоненты).
Каждый компонент представляет
собой кусок программного кода, который выполняет определенные функции
(например, кнопка нажимается, а текст в поле ввода можно редактировать).
Компонент может содержать в себе другие компоненты.
Такой подход позволяет использовать компоненты повторно,
что приводит к повышению производительности труда программиста.
В приведенном примере кнопка Button1 содержит в себе обьект-надпись
"Button1" и обьект-шрифт, которым текст надписи выводится на кнопке.
Обьекты имеют Свойства (Properties) (цвет, размер,
текст), Методы (Methods) (процедуры управления обьектом) и
они могут реагировать на События (Events) (движение мишью, нажатие клавиш, перерисовка).
Важным также является деление компонентов на визуальные (обычные элементы
пользовательского интерфейса - GUI) и невизуальные (которые пользователь
увидит только во сне ;-)). Изменять свойства можно в Инспекторе Обьектов
(Object Inspector), Дизайнере Форм или в тексте программы во время выполнения.
Чтобы заставить обьект реагировать на события, нужно выбрать закладку Events
в Инспекторе Объектов и дважды щелкнуть мышкой по нужному полю.
Sibyl создаст заготовку процедуры-обработчика события,
которая определяет поведение кнопки при выполнении Вашей программы.
Если вы программировали на паскале под DOS, то привыкли, что программа
исполняется последовательно, начиная с
первого оператора после Begin. Операционная система OS/2
использует message-driven механизм,
т.е. присылает программам сообщения (Message) о том, что произошло событие
(например: пользователь нажал кнопку).
В ответ программа запускает на выполнение процедуру, привязанную
к этому событию. К слову, для организации регулярных событий с заданной
частотой есть компонент TTimer (Таймер), который понимает только одно
событие - OnTimer. Создав для него обработчик Вы можете, например, каждую
секунду менять заголовок формы или действовать на нервы юзеру другим
способом :-)
Вот список наиболее важных
событий (Events) в Sibyl и их краткое описание:
- OnCreate - происходит при создании объекта;
- OnShow - момент перед показом объекта;
- OnClick - при щелчке мышкой на объекте;
- OnDblClick - при двойном щелчке мышкой на обьекте;
- OnMouseMove - при перемещении курсора мыши над объектом;
- OnKeyPress - при нажатии клавиши;
- OnResize - при изменении размеров объекта;
- OnEnter - нет, не при нажатии на "Enter". Событие происходит при получении обьектом фокуса ввода.
- OnPaint - при необходимости перерисовки.
- OnDestroy - перед уничтожением обьекта.
Прочитав немного теории, можно переходить к завоеванию пространства формы.
Чтобы добавить обьект в окно программы (далее Форма) щелкните мышкой по
нужной кнопке на палитре компонентов,
переместите мышь на Форму и щелкните мышкой. Появится какой-то
обьект (например кнопка Button1), а
в Инспекторе Обьектов появятся его свойства. Запустите Вашу программу
на исполнение (Ctrl+F9).
Ваш обьект ведет себя как "живой" :-)
Для примера попробуем создать текстовый редактор с двумя управляющими
кнопками Button1 и Button2, многострочным полем Memo1 и компонентом диалога
открытия файла OpenDialog1 (или SystemOpenDialog1) с закладки "Dialog".
Свойству "Caption" кнопок присвойте через Инспектор Обьектов значения "Открыть"
и "Сохранить" соответственно.
Размеры и положение компонентов на форме можно менять с помощью мышки.
В результате получился маленький Word.
Теперь нужно создать обработчики OnClick для кнопок Button1 и
Button2 и добавить в них код открытия и сохранения текста из Memo1
Procedure TForm1.Button2OnClick (Sender: TObject);
Begin
//щелчок мыши по кнопке Сохранить
Memo1.Lines.SaveToFile(OpenDialog1.FileName);
MessageBox('Файл сохранен'+chr(13)+chr(10)+
OpenDialog1.FileName, mtInformation,
[mbOK]);
End;
Procedure TForm1.Button1OnClick(Sender: TObject);
Begin
//щелчок мыши по кнопке Открыть
if OpenDialog1.Execute then
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
End;
На закладке Standart есть много других полезных компонентов:
Все эти элементы являются стандартными элементами интерфейса OS/2 Presentation Manager
и Вам прийдется пользоваться ими достаточно часто.
Советы:
- Запаситесь англо-русским словарем - он Вам понадобится.
- Подойдет любая книжка по Pascal или Delphi, Sibyl практически полностью совместим с ними.
- Начало координат - в левом нижнем углу; Ось координат X (абсцисс) направлена вправо, ось Y (ординат) - вверх.
- В Sibyl нету автодополнения кода как в Дельфи, поэтому не ждите что появится окошко с подсказкой.
- Исходники всех модулей хранятся в папке "Sibyl\Source\Spcc"
- Не бойтесь экспериментировать, Полуось все стерпит.
- И еще: "Лучший способ научится программировать - чувствовать себя программером и писать программы".
Глоссарий:
- RAD - Rapid Application Development - Быстрая Разработка
Приложений (программ). Подразумевается как сам процесс создания, так
и интегрированные среды (IDE) для проектирования программ.
- IDE - Integrated Development Environment - Интегрированная
Среда Разработки. Это когда собраны в одну "кучу" компилятор, редактор
кода, отладчик (Debugger), сборщик (Linker), редактор форм и т.д.
Чтобы лучше почувствовать интегрированность таких сред, представьте,
что до их появления приходилось набирать текст программы в NC,
затем пропускать его командной строкой через компилятор, затем
кормить сборщику вместе с библиотеками и запускать программу под дебагером.
И это не шутки :-(
- Linker - собирает откомпилированные модули и создает
исполняемый екзешник.
- Debugger - ваш лучший друг в борьбе с жуками, то бишь с багами.
Позволяет выполнять программу пошагово, смотреть значения переменных,
регистры процессора и многое другое.
- ООП - Обьектно Ориентированное Программирование - концепция
написания программ. Предлагает использовать абстрактные обьекты как
единицы данных. До ООП правящей была концепция Процедурно-Ориентированного
Программирования, которая предлагала разбивать программу на процедуры
(да, были такие времена когда и процедур не существовало).
- Объект - Предстает перед нами в виде свойств, а для
управления предоставляет методы.
Технически представляет собой запись (record), в которой хранятся не только
переменные, но и адреса функций-методов. Да и вообще, IMHO, реализации
обьектов ООП (как аналогов объектов реального мира) пока не существует.
- GUI - Graphical User Interface - Графический Интерфейс
Пользователя. Позволяет юзеру взаимодействовать с программами.
- Presentation Manager - графическая подсистема OS/2,
"Менеджер Представления".
Дополнительная информация:
Попробуй программу:
|
Хочешь чтобы рабочий стол eComStation стал современным и удобным? Обнови его: установи NeoWPS.
|
Комментарии: Savrs 2003-06-04 13:59:48 | Все это конечно здорово, но хотелось бы что бы автор поделился информацией о каких либо неприятных
глюках в Сибил и о способах их обхода.... | Yuri Prokushev 2003-06-04 16:06:51 | Я бы оценил Sibyl на уровне Delphi2 с частичным шагом в сторону Delphi3.
Из терминологии. IDE в Sibyl носит название SVDE.
Исходники модулей Sibyl Portable Component Classes (SPCC( действительно лежит в Sibyl\Source\Spcc, но это не относится к остальным модулям.
Хороше практикой является давать имена классам, а не оставлять малозначащие Form1, Labe13.
А вообще - welcome to OpenSibyl project ;) | dixie 2003-06-04 19:20:30 | Не знаю, как в третьем фиксе, а
в 2.0, например, with неюзабелен - глюки внутри with xx do begin ... end; забодают. Нет stdcall, невозможно описать указатель на функцию с типом вызова, отличного от pascal. Ну и пр.
Хотя, вменяемо. И даже формы дельфовые почти внятно импортит. | Alexey Smirnov 2003-06-04 20:12:27 | Замечательная среда разработки! Работает не впример лучше чуда под названием Kylix!
Не знаю что там за проблемы с STDCALL. Не замечал, хотя функции вызываю из множества сторонних DLL.
И о глюках with мне не известно ничего. Применяю его повсеместно.
Что касается глюков - то они есть в результирующем коде ТОЛЬКО при включеной оптимизации!
Все остальные глюки - в коде библиотечных модулей и легко могут быть ликвидированы т.к. исходники данных модулей имеются.
С уважением, Алексей. | Lazy 2003-06-04 21:23:34 | Хорошо бы ещё чтобы начинающим был бурблхэлп по вызываемым методам/функциям, как это стало в дельфе. У меня сестрёнка учится (хехе) на программера, пока что копается в дельфе, может, его бы в сибиле и написала, да документация не шибко удобная и подобного хелпа нет. Я так понимаю, кранты спидсофту настали? | dixie 2003-06-05 07:21:37 | 2 A.Smitnov
Ты вызываешь cdecl ;) А ежли dll написана с stdcall не судьба ;) Не знает сибил такого слова.
А глюки в with у меня были, когда их несколько и вложенных - у меня такой стиль ;)
О! Еще вспомнил - word в double 2.0 не конвертила - получался ноль всегда ;))) Не знаю как FP3. | Savrs 2003-06-05 09:59:32 | Alexey Smirnov
А не мог бы ты сделать список
самых вопиющих глюков?
Тем более ты у нас самый главный
СибилоВед.....;-) | Иван Василенко 2003-06-05 22:18:16 | Друзья, вот вас столько всего откликнулось - почему бы всем вам и не пойти в команду написания OpenSibyl ?
Вот это действительно было бы дело и всем радость..
И прошу, не надо говорить что сибил идеален. Если не считать самой главной и большой его проблемы, о которой мы тактично умолчим, то и без оной в нем багов и просто недостатков которые максимально не дают жить навалом..
| stVova 2003-06-06 02:00:14 | В Сайбиле действительно много глюков, но большинство из них я бы назвал скорее недоработками и проблеммами совместимости, да и живут они в основном в SPCC. Ведь, по-сути, Сайбил - это два в одном. Даже Борланд споткнулась на этом в Kylixе.
Я сейчас собираю материал о tips'n'tricks в Сайбиле, так-что если вы знаете какие-то "фичи" - киньте на мыло.
With вот сейчас проверил с третим уровнем вложения - нормально работает с оптимизацией и без оной.
Преобразование Word to Double? Проверил, вполне нормально неявно конвертит.
Про паскалевский тип вызова что-то не понял - как тогда вызываются ф-ции из С-шных OS/2 API DLLей :-|
Наcчет "бурблхелпа" (в Делфях он называется "code insight" - предсказание кода), то это довольно сложный в технической реализации вопрос. В Делфи это реализуется компилятором, а в M$ ВБасике - весь хелп сидит в библиотеках типов (что довольно ограничивает его).
В качестве довольно сносного источника могу порекомендовать хелп от Virtual Pascal - там есть OS/2 SDK, хоть и английский. Кстати, кто знает, где можно взять русский OS/2 SDK?
Кстати, Юрий Прокушев забыл упомянуть, наверное от скромности :-), что именно он заведует OpenSibyl а сам проект живет на [url]
Главная проблемма Сайбила, IMHO, конечно, но по-моему - это то, что даже после своего развала СпидСофт не хочет поделится полной версией. Того гляди - закопает, а карту сожжет ;-) | Yuri Prokushev 2003-06-06 07:01:46 | С моей точки зрения главная проблема всех Delphi-like продуктов - это использование библиотек совместимых с VCL. VCL, с моей точки зрения, неудачна. Для того же PM я бы предпочел что-то аналогичное OCL для C++. Просто и не скрывает PM.. Кстати, значительно легче и шустрее той же SPCC.
Из фич. Sibyl имеет доволно странную реализацию компилятора. Довольносильно ослаблен контроль типов, по сравнению с прочими компиляторами. Другая особенность - возможность вляпать ассемблерный код где ни попадя. С моей точки зрения это бред, т.к. в любом другом компиляторе местоположение такой вставки не гарантировано.
Другой особенностью является то, что большинство компиляторов инициализирует VMT _после_ вызова консруктора. Sibyl делает это перед вызовом. Как результат - доступ в конструкторе к любым полям и методам.
Про stdcall не интересолвался, бо никогда небыло надо.
code insight, как и многое другое - не сложно. Но требует ряд извращений.
SpeedSoft более ничем делиться не будет. Компилятор с отладчиком они отдавать не намерены. А вот все остальное - пожалуйста. Правда, все остальное-то сильно не используешь. Слишком уж завязано на "особенности" Sibyl.
По поводу OpenSibyl. Видимо данный проект никому не интересен. Помощи - ноль (если не считать консультации по конкретным вопросам на канале).
Кстати, сейчас вот опять проблемка выросла. Свежеприкрученная поддержка нативной компиляции в FPC дает Access violation на конструкции типа MOV EDI,[address].
| Хрен Иванов 2003-06-06 09:40:34 | to Yuri Prokushev: в чем конкретно проблема/ непонятность? непонятно почему трап или что? Пиши на емайл - разберемся.
| dixie 2003-06-06 15:40:11 | FPC - глюкало, был им и будет во веки веков ;) Именно поэтому OpenSibyl вызвал у меня сильное разочарование.
Относительно вызовов: stdcall<>cdecl
И: положим мы хотим получить указатель на функцию с cdecl и загнать его в процедругную переменную. А потом вызвать. Фиг там. Нет возможности указать тип вызова в описании процедурного типа.
В VP хоть есть {&StdCall+} или {&Cdecl+}.
| Igor Vaskov 2003-06-06 17:08:15 | Лично мне в проекте OpenSibyl не понравился именно выбор компилятора. Отказ от нативных средств в пользу Unix портированных по моему не верно. Да и ошибок в нем тоже хватает.
По поводу ошибок компилятора Sibyl. Сколько ни писал, не встречался с явными ошибками. Может быть, конечно, я пишу аккуратно?...
По поводу вызова DLL - ни разу проблем не встречал. И из базовых OS/2 DLL все вызывается нормально и из своих на Virtual Pascal написанных.
В любом случае проблема StdCall обходится через вызов функции в ассемблерной вставке. | Yuri Prokushev 2003-06-06 17:16:15 | 2Igor Vaskov FPC не есть портированный компилятор. Он такой же нативный, как и VPC, TMT или SPC. А ошибок хватает везде. Но лучше компилятора я не знаю. Все остальные устарели или авторы не хотят их расширять. Так что выбора, по большому счету, и нет. | Yuri Prokushev 2003-06-06 17:20:55 | 2dixie А есть варианты? Компиляторов больше нет. | theDick 2003-06-06 21:07:28 | Достаточно начать делать что-то б.м. объемное на сибиле, чтобы сразу словить массу глюков. При этом их настолько много и разного размера, что как-то в сознании они сливаются в один большой ;), а записывать их как-то не входит в мои привычки. При этом, на самом деле я довольно регулярно закидывал (в том числе и на ecs.ru) наиболее "мощные" перлы.
Копаться (особенно в пятницу после работы =) в своих же заметках мне лень, поэтому просто сразу на вскидку:
1) pchar и array[0..x] of char не являются "одинм и тем же" с точки зрения компилятора. Нельзя сделать pchar:=array. (Ладно, согласен, чепуха но напрягает)
2) string,ansistring,cstring жестко лимитированы в 255 символов. При этом если у нас есть textfile, содержащий строки>255 длины, то readln(textfile,pchar) и writeln(textfile,pchar) выполняются с ошибками. например, врайтлн дает мусор произвольного размера (меняется в зависимости от длины строки) в начале строки в файле. Спрашивается, как тогда работать с текстовыми файлами, содержащие длинные строки? (логи, да хоть config.sys осный =). К сожалению только через file of char с последующей разбивкой _вручную_ полученных блоков символов на строки. И запись через тот-же изврат. Кстати, попробуйте записать да хотя бы в stringgrid трочку>255 - ексцепшн гарантирован. Кстати, с ексцепшнами тоже странноватая работа.. Впрочем, я увлекся =))
Блин, да я понял что час писать про глюки его могу - пока пишу, вспоминаю.
НО!
Я пишу вообще не за этим =))
Я готов выкатить 5л. пива тому, кто ПОЧИНИТ НАКОНЕЦ РЭНДОМНОЕ ПОЯВЛЕНИЕ МУСОРА ПО onDisconnect ПОЯВЛЯЮЩЕЕСЯ ВМЕСТО IP АДРЕСА ОТКОННЕКТИВШЕГОСЯ ОТ СОКЕТА И УБЕРЕТ НАКОНЕЦ РЭНДОМНУЮ НЕВОЗМОЖНОСТЬ ЗАКРЫТИЯ СОКЕТА ServerSocket.Connections[x].Disconnect!!!
Извиняюсь за крик, но _достало_ просто... =((
p.s.
Блин, какой же классный VP после этого! Какой код делает - просто сказка =)) | theDick 2003-06-06 21:12:18 | Ы! =)
Имелось ввиду ServerSocket.Connections[x].Close | Yuri Prokushev 2003-06-07 07:26:03 | pchar и array[0..x] of char никак не могут быть тем же самым. В лучшем случае pchar может быть равен ^array[0..x] of char.. | dixie 2003-06-07 07:58:52 | Кстати, а чем VP не катит для OpenSibyl? Можно на автора понаезжать в принципе ... ;) | Yuri Prokushev 2003-06-07 08:28:27 | 2dixie Он отказался поддерживать проект. А ждать когда он соизволит внести какие-либо изменения - не катит. Да и отстал VP уже прилично.
| Eugene Gorbunoff 2003-06-07 17:45:08 | Ну и какой итог можно подвести? в одиночку никто из вас свой паскаль не выпрямит. | dixie 2003-06-07 19:48:10 | Ну почему ;)
Мне б хорошее описание дерева, по которому генерит код OpenWatcom - я б свой компилер сделал ;) Морда, т.е., парсер и вполне внятный ( на уровне VP/Delphi) уже есть ;) Несколько лет валяется - ломы генератор кода писать ;)
Хотя на inline асме получается в нем маленькие exe уровня "Hello OS/2" компилить ;)) | Yuri Prokushev 2003-06-08 07:22:05 | 2dixie Парсер на уровне какого Delphi? С классами, интерфейсами и все прочим? Все равно, ИМХО, использовать готовый компилятор лучше, чем писать свой с нуля. | dixie 2003-06-08 12:30:21 | Объекты есть, классы не дописаны, но это не так сложно, как кажется, когда все остальное отработано ;) На неделю работы максимум. Рантайм можно взять от VP ;) Отладочную инфу писать в ваткомовском формате ;))
А вот оптимизация - это да. Почему и хотелось бы прикрутить оное к ваткому. Тогда можно было бы и все его фичи в #pragma (включая указание регистров для параметров и пр.) задействовать. Да и оптимизация - и FPC и VP рядом не валялись.
Но самому разбирать как и что там в генератор подсовывается ... :(( | Yuri Prokushev 2003-06-08 14:38:04 | Угу. А интерфейсы?
| Yuri Prokushev 2003-06-08 14:38:59 | Кстати, runtime брать от VP нельзя. Из-за лицензии.
| Yuri Prokushev 2003-06-08 21:00:49 | 2EG Для меня итог простой. Я работаю с FPC, бо другого компилятора нет и в ближайшее время не предвидится. | dixie 2003-06-08 21:30:33 | А что такое интерфейсы внутри ты в курсе? ;)) Это просто VMT класса ;)
А итог в общем понятен. И ожидаем. ;) | ...За Справедливость 2003-06-09 00:20:13 | А почему бы вам просто не перейти а c/c++ ? Пора уже исправлять ошибки детства ;) | Yuri Prokushev 2003-06-09 05:45:43 | Калечить мозги? Нет уж. Звиняйте. Идти на поводу всеобщей истерии по поводу плюсов я не желаю. | dixie 2003-06-09 07:14:33 | Ну почему ;)
У меня есть и "дельфа" и на плюсах - пишу помаленьку ;) Есть скришнот на os2.in.ru ;)
Просто полюсы действительно, не настолько хороши, как это внушено общественным мнением ;) А единственный серьезный недостаток паскаля - плохая оптимизация. | dixie 2003-06-09 07:15:22 | "плюсы", пардон ;) | dixie 2003-06-09 07:48:54 | И, кстати, ещё один прикол: в принципе, в паскалевском юните (в отличие от
плюсового объектника) совершенно необязательно хранить компилированный код.
Код можно генерерить на этапе линковки, при этом программа на паскале,
состоящая из нескольких файлов, будет гарантированно быстрее аналогичной на
плюсах (при том же оптимизаторе) - по той простой причине, что междуфайловая
оптимизация в плюсах почти невозможна. А паскалевская программа будет
выглядеть для оптимизатора как один файл ;).
Эх, мне б описание ваткомовского генератора кода ;)~~
| Igor Vaskov 2003-06-09 11:43:16 | 2theDick: Я готов выкатить 5л. пива тому, кто ПОЧИНИТ НАКОНЕЦ РЭНДОМНОЕ ПОЯВЛЕНИЕ МУСОРА ПО onDisconnect ПОЯВЛЯЮЩЕЕСЯ ВМЕСТО IP АДРЕСА ОТКОННЕКТИВШЕГОСЯ ОТ СОКЕТА И УБЕРЕТ НАКОНЕЦ РЭНДОМНУЮ НЕВОЗМОЖНОСТЬ ЗАКРЫТИЯ СОКЕТА ServerSocket.Connections[x].Disconnect!!!
С первым не всречался - ибо не надо было, но можно посмотреть на досуге.
Второе IMHO (если я верно понял проблему) я уже правил и выкладывал патчи на Sockets.
В любом случае Welcom to mail. | Constantin 2003-06-09 16:20:47 | 2 ...За Справедливость, All:
Где-то я уже это цитировал, ну да ладно -
[url] | Yuri Prokushev 2003-06-10 13:05:26 | 2All Давайте без вечных спорах о языках, а?
| Sergey Posokhov 2003-06-10 17:16:57 | Языки все одинаковы. Просто в некоторых можно делать нечитаемый программный код. И программисты его делают. И если человек в Си пишет "*a++ = *b--;" или в Пердле наворачивает в одной строке два десятка рег.выражений - его к компьютерам подпускать вообще нельзя. Но все остается безнаказанным...
Т.е. если кто-то кому-то на даче сортир построил и он рухнул вместе с владельцем - за это рыло набьют. А кривую и падающую программу - скорее всего перепишут заново. Или сменят внешний вид, присвоят ей имя 2000/Me/Xp/Rg - и все равно продадут как "новинку".
И это не значит, что есть "плохие" и "хорошие" языки программирования, верно? | Х. В. Моржовый 2003-06-10 22:10:15 | to Sergey Posokhov: верно. лично я пишу одинаково замечательно на асм, паскале и си.
Но не верно в том, что ассемблер или си в раздолбайском написании программ всячески поощряют, а пацкаль напротив, сужает. И на Си и на ассемблере можно и нужно писать хорошо, но сил для этого приходится прилагать много. И это на самом деле ерунда, но новым поколениям 'программеров' это объяснить практически невозможно - для них широкие возможности автоматически означают, что все их _надлежит_ _обязательно_ использовать.
Что из этого получается я думаю мне не нужно комментировать ;)
| Андрей 2003-06-10 23:58:28 | Плохо работает с базами данных.
По крайней мере мне не удалось вставлять новые записи и редактировать старые.
Если кто работал с базами DB@ выше 2.0, напишите,как решали проблемммы и какие драйверы ODBC использовали. ПЛЗ | Igor Vaskov 2003-06-11 00:14:32 | DB2 использовали в проекте [url] Драйверы ODBC самые обычные. Стандартные объекты работы с базой данных переписаны. В свое время я их раздавал, но никому не надо было ;) Также как и исправленные объекты работы с сокетами.
У меня прекрасно работает в промышленное эксплуатации с _непрерывным_ циклом работы несколько систем, написанных на Sibyl и очень хорошо работают. | stVova 2003-06-11 11:49:45 | To Y.Prokushev:
Возвращаясь к теме проблемм VCL-like библиотек (SPCC) хотел-бы заметить, что OCL менее универсальна, чем VCL. И проблемма тут старая: за универсальность платишь скоростью работы. Возможно разработчикам VDE, стоило-бы создавать несколько визуальных библиотек по профилям: СУБД, графика, общие контролы, т.д.
А насчет скрытия PM ты неправ. Разве SPCC мешает напрямую создавать окна и другую бижутерию.
To Igor Vaskov:
Не смог-бы подсказать, где можно почитать про ODBC в OS/2, желательно с примерами? И вообще меня интересует вопрос работы Client/Server СУБД в оси. Заранее благодарю.
| Igor Vaskov 2003-06-11 13:20:25 | 2stVova: Подсказать, где почитать - не могу. Я проектом руководил и в технические тонкости не лез. Помню, что для обхода некоторых багов и для ускорения работы была написана небольшая DLL на Сях. | Yuri Prokushev 2003-06-11 21:25:53 | 2stVova Я просто не вижу никакой универсальности. Все то же самое, но "по-своему". Использование функций PM/GDI в библиотеках типа VCL затруднено, но никто не говорит о том, что невозможно. Я все же считаю подход OCL более правильным, чем VCL. Новые классы должны формироваться не в программе, а в отдельных DLL. Как пример - MMOS/2 (всякие volume control и т.п.), EPM (EMLE). Это ИМХО, более правильный подход, чем формирование всяких Toolbar-ов каждый раз вместо одного раза. Это, кстати, служит еще одним плюсов в сторону развития поддержи SOM в FPC. | Yuri Prokushev 2003-06-11 21:27:08 | 2stVova. Читать по поводу ODBC можно о os2ezine. Был там цикл статей. С примерами. | Sergey Posokhov 2003-06-12 13:01:55 | Вообще надо сделать SybilRTL.dll и чтобы все программы ее использовали. Как в Watcom VX-REXX, например. | dixie 2003-06-20 11:39:25 | Кстати, обнаружил забавную вещь. По отладочной инфе Sybil совместим с VAC. Т.е., егойные программы можно отлаживать idebug из VAC 3.6 ;) | stVova 2003-06-24 17:53:44 | To Yuri Prokushev:
Спасибо за ссылку на OS2eZine.
Там действительно довольно толково все описано в 12 статьях об ODBC.
Кстати, никто не сталкивался с такой проблеммой: когда DIVE криво конвертит RGB в 256. | Igor Vaskov 2003-06-24 18:36:18 | С мусором в поле RemoteAddress в момент закрытия сокета проблему решил ;) А что вы хотели? Если соединение разорвано удаленной стороной вызов стандартной функции определения IP клиента не работает, потому как и соединения то нет.
Фиксы готов выложить. Но только для _последнего_ фикса Сивильи (его почему-то многие не любят). | theDick 2003-06-25 12:07:34 | 2 Igor Vaskov Ух ты! Здорово! =) Выкладывай! =)))
А что там теперь, вместо мусора? 8) И как узнать, кто же все-таки отвалился?
А последний фикс не любят, наверное, потому, что там дебаггер совсем окривел =). Но зато там ошибок тож много исправлено.. | Sergey Posokhov 2003-06-25 14:54:39 | Пожелание: выложите все на сайт [e-mail] | Sergey Posokhov 2003-06-25 14:56:02 | Ха-ха... гостевуха в слове "netlAbs" нашла "[at]" и восприняла слово как адрес e-mail :) | LightElf 2003-06-25 15:03:20 | По поводу конвертирования RGB в 256: а в чем бага проявляется? | Igor Vaskov 2003-06-25 16:36:45 | 2 theDick Там теперь, что и должно быть - IP клиента. Плюс при многократных попытках спрашивать IP клиента существенно возрастет производительность ;) Теперь IP удаленного узла сохраняется в переменной _объекта_ в момент onConnect. Все остальные вызовы не обращаются к API, а получают данные из поля объекта.
2Sergey Posokhov Я никогда там ничего не выкладывал и не знаю как там чего делается. Если успею до отпуска - положу на своем сайте, а здесь дам ссылку. | Igor Vaskov 2003-06-25 16:41:40 | 2 theDick
А узнать, кто отвалился по IP нельзя. А вдруг несколько коннектов с одного IP?
Вдруг на стороне клиента NAT?
Когда я писал подобные серверные прикладухи, я ориентировался на массив оъектов, для отслеживания клиентов. | theDick 2003-06-25 17:14:50 | 2 Igor Vaskov
Если несколько коннектов с одного IP то они всеравно по разным портам будут.. То есть если клиент коннектится к фиксированному порту на сервере то двойки IP:Port будут уникальны для каждого соединения со стороны клиента. Nat всеравно работает через один внешний IP ...
Таким образом, по сочетанию IP:Port всегда можно точно сказать какое соединение завершено.
С массивом соединений я пробовал - всеравно не получается, так как для обработчика onDisconnect соединение какбы считается еще не закрытым и массив .Connections, не изменяется (то есть ActiveConnections уменьшается только после завершения работы обработчика onDisconnect)
| theDick 2003-06-25 17:16:36 | 2 Igor Vaskov
А как ты узнавал тогда какой из объектов уничтожать? =) | stVova 2003-06-25 17:41:45 | To LightElf:
Я юзаю однин юнит к VirtualPascal (os2dive.pas) от 2001, он автором DiveRace написан (имя забыл). Так там можно сделать только 256кол. DIVE окно (8 бит).
Другая прога переводит битмапы в array[x, y] (RGB), который я в DIVE-окно и вывожу.
В результате RGB-цвета переводятся не в ближайшие по таблице, а как-то криво: из красного -> синий (например).
Я уже начал подозревать, что DIVE воспринимает цвета как BGR (или подобное) и переводит их в 256. | Igor Vaskov 2003-06-25 18:05:36 | 2 theDick Все правильно. На onDiconnect чистим свою таблицу объектов (соединений). Считаем, что соединение развалилось. Объект сокета уничтожит сам серверный сокет. Об этом думать не надо.
Единственная проблема - постоянно искать сокет который попал в событие в своей таблице соединений. Ну при паре сотен соединений - не так напряжно, даже при прямом переборе.
Я в таблицу соединений записывал адрес объекта сокета. Если не nil - живы и работаем. Если диксоннект пишем в таблицу соединений - nil.
На коннекте ищем в таблице первый попавшийся nil и на его место пишем адрес объекта сокета.
Естественно в таблице соединений можно хранить много другой информации про открытый сокет, которая не хранится в объекте.
Полюс есть возможность взять объект из таблицы и сказать ему .Send :) | theDick 2003-06-26 11:33:39 | 2 Igor Vaskov
А. Ну в общем-то, насколько я понимаю, мы говорим об одном и том же =). Я в общем тоже делаю примерно подобным образом, только объекты я не очень люблю ;) поэтому я просто делаю динамический массив записей, где запись=соединение. В каждой записи инфа, идентифицирующая соединение + доп. информация всякая.
Однако всеравно нужно знать кто отвалился, чтобы убить соотв. запись (в моем случае) или объект (в твоем случае). Для чего собсно и нужно знать ip _И_ порт отвалившегося. Потому что больше никакой другой инфы, по которой _однозначно_ можно идентифицировать соединение нету. В связи с чем вопрос: а порт соединения ты тоже в переменную объекта запихнул? А то там тож наверняка мусор будет.
---
Или я чего-то не понимаю? =) | Igor Vaskov 2003-06-26 11:50:36 | 2 theDick Не понимаешь ;) Массив соединений в моем примере - обычный array of record. Даже не динамический, как у тебя. Действительно, запись - соединение.
Теперь главное. Ты создаешь запись соединения на OnConnect? Ну и добавь в нее ссылку на объект. Ссылка на объект тебе передается в параметрах вызова события OnConnect, да и любого другого события OnRead, OnWrite и так далее.
Когда отваливаемся - OnClientDisconnet.
Берем из параметров ссылку на объект,
ищем ее в массиве записей соединения, удаляем эту запись.
Не надо удалять сам объект! Он прекрасно удаляется объектом серверного сокета.
Ух. Теперь понятно? ;) | theDick 2003-06-26 12:00:23 | 2 Igor Vaskov
Ага! Понятно!!! =)))))
Спасибо!!! А я-то парюсь... =) | LightElf 2003-06-26 15:46:52 | 2 stVova : DIVE понимает и RGB и BGR, если не изменяет мой склероз. Но переводить RGB в 256, а потом назад - изврат редкий. Могу только посоветовать выкинуть этот модуль и написать свой. Бо с дайвом работать не просто, а очень просто. К тому же сколько я видел разных либ/юнитов для дайва - нет ни одного правильного. У всех поголовно проблемы с scanlinesize - следовательно с хардварным дайвом будут проблемы. Каждый второй использует свои собственные буферы (с хардварным дайвом будут тормоза) | Igor Vaskov 2003-06-28 16:00:25 | 2 theDick Ты бы рассказал общественности, чего пишешь? Очень интересно, какой сервер на OS/2 платформе нужен в настоящее время? | theDick 2003-06-30 12:15:56 | 2 Sergo
Эта страница к сожалению больше не развивается, и уже давно..
2 Igor Vaskov
Да ничего особенно интересного, просто текущая необходимость.. Сеть у нас, юзеры всякие, все в инет хотят =). Посему нужна система авторизации. Мы пошли путем создания клдиент-серверной проги, сервер авторизует, пускает (или не пускает =) в инет, еще кое чем занимается.. Клиент - мааленькое приложение с 2 кнопочками коннект и дисконнект. Удобно в том смысле, что если юзер, например, завис, выключил комп и т.п. доступ закрывается (по тайм-ауту на пинге). Ну, етстесно не дает воровать ип друг у друга.. И т.д. Все написано и работает уже пол-года, но глючит периодически в связи с вышеобсужденными проблемами =). Часть, отвечающую за коннект-дисконнект я переписываю щас согласно твоим рекомендациям =), а вот с неубиваемыми сокетами.. Но это всетаки значительно реже случается. | stVova 2003-07-07 11:52:57 | Помните, я писал, что в Сайбил нет автодополнения кода? Я ошибался, вчера видел скриншот Sibyl+CodeInsight.
Теперь вопрос: где можно взять такую версию Сайбила? | LightElf 2003-07-09 15:55:31 | 2dixie:
Почему бы не транслировать паскалевский сырец в голый Си и не скармливать потом прямо ваткому?
То есть в модулях храним сорец, при компиляции берем нужные куски и генерим один длиннющий сишный сорец. Компилим его любым сишным компайлером и радуемся. Тут тебе и портабельность и независимость от будущих изменений в оптимизаторе ваткома и все такое прочее | Василий 2007-07-23 08:19:44 | Копаюсь сейчас с выложенной версией OpenSibyl (пытаюсь переделать под FPC и VP, на счёт VP RTL не разделяю скепсиса: использовать её можно и нужно, а вот менять и распространять отдельно нельзя) | Василий 2007-07-23 08:40:35 | Так я вот о чём: в этом коде есть одна несообразность. Вот, берём FORMS.PAS и читаем вверху:
º Sibyl Portable Component Classes (SPCC). º
º Object-oriented development library.
º Copyright (C) 1995,99 SpeedSoft GbR, Germany º
º
º This program is free software; you can redistribute it and/or modify it º
º under the terms of the GNU Library General Public License (LGPL)
и так далее и тому подобное. Думаю, всем понятно, что это значит.
В самом коде:
º Sibyl Portable Component Classes (SPCC) º
º
º This section: TClipBoard Class Implementation º
º º
º (C) 1995,97 SpeedSoft. All rights reserved. Disclosure probibited ! º
И как это понимать? Если Disclosure уже произошло? Устарело что ли? Ладно, если что интересное сделаю, буду публиковать патчи.
| Василий 2007-07-25 08:51:30 | Есть первые успехи (правда, пока под лицензионными "форточками", хорошей лицензии на полуось у меня нет, кроме eCS Demo CD и при существующей ценовой политике точно не будет: я не то что 3000, я и 300 рублей на неё не потрачу, прежде всего, по идеологическим соображениям, а потом - из-за недоработанности, хватит тех 2000, что я заплатил за форточки). Доделаю spcc под винду, потом попробую кросс-компиляцию под полуось, а потом в демо-версии запущу.
Пока даже не брался за сохранение/загрузку ресурсов. Думаю, этот блок надо будет переписать "с нуля", ориентируясь на Lazarus и другие (скажем, kcl) | Василий 2007-07-25 09:31:59 | Вот так всегда: начнёшь что-то делать по давно заглохшему проекту, а окажется, что аналогичный проект уже существует. Качаю WDSibyl, посмотрю, что это такое | Топтыж 2009-06-14 17:25:01 | Начать программировать лучше всего с языка PureBasic [url]
PureBasic - самый простой язык программирования, подходящий как новичку, так и професионалу!
В его составе есть более 800 встроеных функций и их число можно с лёгкостью увеличить, что позволяет программировать даже без знаний API.
Язык расчитан для написания консольных, оконных и игровых программ для Windows, Linux, MacOS, т. е. PureBasic - кроссплатворменный язык программирования. Предназанчен как для начинающих, так и для професионалов!
У него довольно простой синтаксис и выучить за короткое время можно даже по справке.
Он создаёт маленькие exe, от 2КБ и для их работы не нцжны никакие внешние файлы! |
Прокомментируйте эту статью (напоминаем, автор работал над текстом несколько недель, уважайте мнение других).
|
Системные требования у eComStation низкие. Работает на нетбуках, на старых Pentium. (Конечно же работает на 2-х и 8-и ядерных компьютерах). Что нового в eCS 2.0? |
|
|
|
Готовая eComStation на SSD диске
Последний активный опрос: Какая высота барьера RPM?
[Google]
|
IBM OS/2 Warp
|