Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Embarcadero RAD Studio XE5-XE8,10.x(Seattle, Berl

Автор: zealotfan
Дата сообщения: 12.03.2016 05:20
ZloyBrawler
У меня в программе никто не обидеться на то, что программа потеряла коннект, т.к. когда происходят сложные расчёты, обмен информацией с другими организациями и т.д. дисконнекта я естественно делать не буду и каких либо изменений. А вот в случае когда идет занесение какой либо информации по потребителю можно сделать дисконнект без последствий. И опять же эти задачи(требуемые решения в течение дня) не каждый день.
Автор: KDPoid
Дата сообщения: 12.03.2016 07:42
ZloyBrawler
По разному бывает...
Вот обеспечиваете вы сервис 24х7, с работоспособностью, к примеру, 99.6%
Это даёт вам три часа на обновление в месяц.
Но как бы вы не предупреждали о регламентных работах в ночь на воскресенье, обязательно найдутся те, кто в субботу вскочит с воплем "забыл сделать отчёт, а в понедельник сдавать", те кто забыл выключить приложение на выходные и т.д...
Поэтому да, процедура обновления должна предусматривать насильное отключение пользователей, а не ждать, когда все соизволят выйти.

Часто работодатель решает экономить на тестерах, если это внутренняя разработка для своих нужд. Тестирование разработки производится на живых людях. Значит обновление обязательно должно производиться в рабочее время, когда максиамальное количество подопытных и разработчиков на месте. И тогда хоть запишись "прошу в 11 прекратить работы". В 11 важное завершат. И продолжат делать то, что не очень жалко потерять, если что...

Как оно там у zealotfan-а, кто его знает. Может "вырвать провода" - самый разумный выход.


Про регулярный опрос версии.
Это плохо, потому что добавляет точку отказа. Вот случается что-то посреди дня. Номер версии повреждается или становится недоступен для клиентов. Если у вас он проверяется при старте, большинство уже работает и не заметит, если вы за час всё восстановите. Если у вас номер версии проверяется раз в минуту... У вас минута до массового отказа по всей конторе.

Из таких мелочей и складывается стиль жизни...
Сидите на унитазе, из-за двери заполошно орёт молодой: "ой, я случайно проапдейтил номер версии в базе". И оказывается, что есть у вас время спокойно застегнуться или нужно выпрыгнуть из портков и нестись к ближайшему компу - это архитектурное решение, которое было принято год назад.
Достаточно ли будет новичку выслать описание структуры базы или нужно каждого обучать регламенту внесения изменений и экзаменовать под роспись "обязуюсь соблюдать", - складывается из таких мелких решений.

"...разруха не в клозетах, разруха в головах..."
Автор: ZloyBrawler
Дата сообщения: 12.03.2016 09:41
KDPoid
У меня в организации, да как и у многих других стоит тонкий клиент 1С и подключаются все через него к порталу поставщика НИАЭП.
Вот там прикольный подход.
В 16:00 отрубаются все клиенты поголовно, и до следующего утра, пофигу, что кто-то еще вносил отгрузочную документацию и разную конструкторскую документацию.
Автор: Yarynich
Дата сообщения: 12.03.2016 13:18
Каким боком последняя страница флуда относится к теме?
Автор: zealotfan
Дата сообщения: 14.03.2016 14:57
3 страницы назад мне советовал abyss79 для уменьшения размера размера exe добавить после program:
{$WEAKLINKRTTI ON}
{$RTTI EXPLICIT METHODS([]) FIELDS([]) PROPERTIES([])}
Сегодня я переписывал форму импорта и при тестировании был поражен очень медленной скоростью этого самого импорта. Как только убрал эти 2 строчки из кода всё заработало как положено.
Автор: abyss79
Дата сообщения: 14.03.2016 15:01
zealotfan

А что у вас там такое делается? Эти директивы отключают генерацию доп инфы RTTI, что убирает некоторые возможности для манипулирования объектами, но это не должно сказываться на скорости.
Я везде этот код использую и никогда не было проблем со скоростью.
Автор: zealotfan
Дата сообщения: 14.03.2016 15:08
abyss79
Открывается DBF-ка через ADO, подключается к grideh и каждая строка в TADOQuery перебирается в цикле и записывается в базу(firebird).
Автор: abyss79
Дата сообщения: 14.03.2016 15:17
zealotfan

Глянул и ADO, вроде, не использует RTTI. Может, просто совпало и причина в другом была, хотя GridEx у меня нет глянуть.
Автор: zealotfan
Дата сообщения: 16.03.2016 09:58
abyss79
Можно на обычном DBGrid попробовать смысл не меняется. Именно эти две строчки тормозят импорт.
Автор: funnyman
Дата сообщения: 16.03.2016 10:07
zealotfan
А убрать из второй стоки FIELDS([]) не пробовал?
Автор: zealotfan
Дата сообщения: 16.03.2016 11:34
funnyman
Пробовал. На скорость никак не повлияло. Как и если полностью вторую строку убрать.
Автор: abyss79
Дата сообщения: 16.03.2016 11:51
zealotfan
я правильно вас понял, что если сделать так, то у вас всё нормально становится?

{$WEAKLINKRTTI ON}
{$RTTI EXPLICIT METHODS([]) PROPERTIES([])}
Автор: zealotfan
Дата сообщения: 16.03.2016 11:59
abyss79
Нет. При таком раскладе, что вы написали скорость такая же медленная как и в случае:
{$WEAKLINKRTTI ON}
{$RTTI EXPLICIT METHODS([]) FIELDS([]) PROPERTIES([])}
А убрав только обе строчки скорость очень быстрая.
Автор: abyss79
Дата сообщения: 16.03.2016 12:03
zealotfan
аа, перечитал и понял что скорее первая строка гадит, она вырезает часть методов, которые явно не используются, но видать в вашем случае что-то таки динамически используется.
Автор: zealotfan
Дата сообщения: 16.03.2016 12:57
abyss79
Вот кусок самого импорта:
Importfrm.SQLIMPORT.Transaction.StartTransaction;
while (Importfrm.ADOSQL.Eof=false) do
begin
synchronize(SetProgress);////////Это для обновления gauge
Importfrm.SQLIMPORT.Active:=false;
Importfrm.SQLIMPORT.ParamByName('THEMONTH').AsInteger:=TheMonth;
Importfrm.SQLIMPORT.ParamByName('THEYEAR').AsInteger:=TheYear;Importfrm.SQLIMPORT.ParamByName('ID').AsLargeInt:=Importfrm.ADOSQL.fieldByName('id').AsLargeInt;
...............
Importfrm.SQLIMPORT.Active:=true;
Importfrm.ADOSQL.Next;
end;
synchronize(ClearProgress);///////////Очистка gauge
Importfrm.SQLIMPORT.Transaction.Commit;
Автор: SolidSnakeRU
Дата сообщения: 16.03.2016 23:30
А что за заморочки с вырезанием из EXE всего и вся?
Просто ради эстетики? Давно не вижу смысла в этом.
На крайний случай можно аспаком ехе ужать или в инсталлятор положить или вынести часто изменяемый код в длл или использовать _обновление по принципу дифференса в файлах.

Что касается тонкого клиента, можно к любому обращению к БД из тонкого клиента добавлять проверку версии БД (можно хранить в отдельной таблице). Если в какой-то момент произойдет обновление структуры БД при открытом клиенте, то при попытке выполнить SQL запрос, получится определить изменение структуры БД. Адекватный результат - структура, где есть текст говорящий о том, что БД не поддерживается и код для обработки результата, поможет с обработкой ситуации.
В довесок, для форм с большим количеством вводимых данных, можно реализовать сериализуемость, чтобы после перезапуска новой версии клиента можно было восстановить введенные (но еще не отправленные в БД) данные по максимуму.
Автор: abyss79
Дата сообщения: 16.03.2016 23:36
SolidSnakeRU
ну вот AsPack точно плохая идея, и антивирусы и больше память жрёт, а реально ничего не решает, т.к. размер важен только при загрузке, где или сетап сам по себе хорошо сжимает или тот же 7z можно взять при обновлениях.
А вот чуть уменьшить размер парой строк стоит того, просто вот в конкретном случае нарисовалась проблема.
Автор: SolidSnakeRU
Дата сообщения: 16.03.2016 23:53
abyss79
Главное, чтобы программа работала на всех машинах под любой ОС, если вырезаемый код не мешает этому, прекрасно. Но такой подход требует исследования. И в зависимости от объема вырезанного кода, шанс получить неожиданные баги на ограниченном числе машин становится выше. Отлаживать такое не очень приятно.
Просто почистить USES - полезно и надо, но дальше...
Куда правильнее (ИМХО) организовать структуру приложения так, чтобы изменяемая часть была отдельно и посылать её пожатой в 7z.
Автор: abyss79
Дата сообщения: 16.03.2016 23:57
SolidSnakeRU
Согласен, до сего момента никаких проблем не было при использовании во множестве проектов.

zealotfan
7z реально хороший вариант, используем в одном нагруженном проекте и проблем не обнаружено при отличном сжатии и нормальной интеграции с Delphi, надо просто 1 раз dll загрузить.
Автор: zealotfan
Дата сообщения: 17.03.2016 10:44
abyss79
Я решил пользоваться пока upx-ом. Негативных побочных действий пока не обнаружено
Автор: abyss79
Дата сообщения: 17.03.2016 15:29
zealotfan
все эти AsPack и Upx могут вполне сглючить, ведь они ничего не знают об кодогенерации конкретного компилера.
Сам использовал AsProtect когда-то, там конечно делается много больше чем в просто AsPack, но эпизодически проги падали и приходилось после каждого наложения плотно тестировать.
А 7z не имеет минусов от слова совсем.
Автор: zealotfan
Дата сообщения: 17.03.2016 15:43
abyss79
При использовании upx скорость импорта тоже падает. Я в замешательстве. Поясните по поводу 7z. Я кидаю заархивированный exe на сервер. Клиент его скачивает в папку и разархивирует?
Автор: X11
Дата сообщения: 17.03.2016 15:49

Цитата:
Сам использовал AsProtect когда-то, там конечно делается много больше чем в просто AsPack, но эпизодически проги падали и приходилось после каждого наложения плотно тестировать.


Не знаю, не было никогда проблем с AsProtect SKE.
Разные ОС, разные IDE.
Автор: abyss79
Дата сообщения: 17.03.2016 15:55
zealotfan
да, на сервер храните максимально ужатый 7z, потом качаете текущим способом, а для распаковки вот что использовать можно:
PAS файл+ DLL:
http://take.ms/OxSud
И такой код:
function UnZipFile(const FileName, ExtractPath: string): Boolean;
begin
Result := False;
CreateDir(ExtractPath);
try
if AnsiLowerCase(ExtractFileExt(FileName)) = '.zip' then
begin
with CreateInArchive(CLSID_CFormatZip) do
begin
OpenFile(FileName);
ExtractTo(ExtractPath);
Result := True;
end;
end
else if AnsiLowerCase(ExtractFileExt(FileName)) = '.7z' then
begin
with CreateInArchive(CLSID_CFormat7z) do
begin
OpenFile(FileName);
ExtractTo(ExtractPath);
Result := True;
end;
end;
except
on E: Exception do
begin
// Handle error
Exit;
end;
end;
Sleep(1000);
end;

X11
А у меня никогда с вырезанием RTTI не было проблем, тоже от XE до Seattle и под всеми виндами
Автор: funnyman
Дата сообщения: 17.03.2016 16:04

Цитата:
При использовании upx скорость импорта тоже падает. Я в замешательстве.

У вас случайно антивирь с рилтайм сканом памяти не запущен?
Автор: zealotfan
Дата сообщения: 17.03.2016 16:13
funnyman
Стоит NOD32 4.2.71.3 Отключение ни к чему не привело.
Автор: ChSerg
Дата сообщения: 21.03.2016 20:19
На подходе новая версия Delphi Berlin !

The Berlin release contains the following new and improved features.

1 Improved Installation Experience
2 FireMonkey
2.1 Android 6.0 Support
2.2 Address Book for iOS and Android
2.3 Improved Style Designer
2.4 New ListView Item Designer
2.5 Extended Clipboard Support Service
2.6 Improvement on the Image List Editor
2.7 TGrid Improvements
2.8 High DPI Support on Windows
2.9 Improved Support for Accelerator Keys
2.10 Support for Extended Font Styles
2.11 Hint Property Changes
2.12 Simplified Dialog API
2.13 Other FireMonkey Changes
3 VCL
4 EMS
4.1 Apache Server Support
4.2 Cross-Domain API Calls to the EMS Server
4.3 EMS EdgeModules
4.4 EMS EdgeModules Resource
4.5 ThingPoints Overview
4.6 EMS API Resource
4.7 Custom API Documentation
5 DataSnap
5.1 Support for JSON Streaming
6 Web Broker
6.1 C++ Projects from Previous Versions Using Web.WebReq Need Updating
7 FireDAC
7.1 Improvements for DB2
7.2 Improvements for MongoDB
7.3 Improvements for Advantage
7.4 Improvements for InterBase and Firebird
7.5 Improvements for Informix
7.6 Improvements for ODBC
7.7 Improvements for Oracle
7.8 Improvements for PostgreSQL
7.9 Improvements for SQLite
7.10 Other FireDAC Changes
8 dbExpress
9 Cloud Service
9.1 Amazon
9.2 Azure
10 REST Client Library
11 LiveBindings
12 RTL
12.1 Bluetooth LE and Beacon Support on Windows 10
12.2 Improved Bluetooth LE Discovery Performance
12.3 Bluetooth LE Includes New Events to Handle Subscriptions to Characteristics
12.4 Eddystone Beacon Format Support
12.5 Improved Beacon Scan Performance
12.6 TBeaconDevice Component Supports Eddystone Beacon Format
12.7 BeaconFence Enhacements
12.8 Asynchronous HTTP Request Support
12.9 Encrypted ZIP File Support
12.10 Improvements to Lists of Strings
12.11 Improvements to TMemIniFile
12.12 Buffering Support for TFileStream
12.13 Modified JSON Path Syntax to Access Object Properties
12.14 Optimization of Regular Expressions and String Replacement
12.15 HTTP Connection Improvements
12.16 URLEncode / URLDecode Functions
12.17 Use TMessageBase Instead of TMessage for C++ Projects
12.18 C++ Functions added to TRect, TRectF, TPoint, and TPointF Types
12.19 Other RTL Changes
13 Native APIs
14 Delphi Compilers
14.1 Performance Improvement when Compiling Generics
14.2 Attributes Supported by All Compilers
14.3 Other Delphi Compiler Improvements
15 C++ Compilers
16 IDE
16.1 Floating Form Designer
16.2 FireUI Live Preview
16.3 GetIt Dependencies
16.4 Bookmark Stack
16.5 Selection Expansion
16.6 Method Toxicity Metrics
16.7 Structure View Improvements for C++
16.8 Android Service Improvements
16.9 Support for Running iOS Ad hoc Applications
16.10 Customizable info.plist File
16.11 Design-Time Improvements for Android Smart Watches
16.12 New Options Page for File Associations
16.13 New Option to Show Information Messages from the Delphi Compiler
16.14 New Option to Hide/Show the Navigation Toolbar
16.15 High DPI Awareness
16.16 Other IDE Changes
17 Debuggers
17.1 iOS and Android Debuggers
17.2 64-bit iOS Debugger
18 Utilities
19 Sample Applications
20 Help
21 Topics
22 See Also

для тех, у кого есть доступ: http://docwiki.embarcadero.com/RADStudio/Berlin/en
Автор: zealotfan
Дата сообщения: 21.03.2016 20:38
Уважаемые коллеги! Прошу помочь советом куда копать. Нужно сделать веб-сервер и android-клиент. Веб-сервер должен брать данные из основной базы данных и рассылать клиентам. Клиенты в свою очередь должны отсылать данные о местоположении.Больше всего интересует литература по веб серверам в delphi.
Автор: Sulphide
Дата сообщения: 22.03.2016 01:16

Цитата:
Уважаемые коллеги! Прошу помочь советом куда копать. Нужно сделать веб-сервер и android-клиент. Веб-сервер должен брать данные из основной базы данных и рассылать клиентам. Клиенты в свою очередь должны отсылать данные о местоположении.Больше всего интересует литература по веб серверам в delphi.

А чем не устраивают indy tidhttp, tidhttpserver, tidhttpclient? Рассылать - это больше к tidtcpserver и client, а так все на уровне get запросов делается. Клиент запросил, сервер выдал. Клиент так же может какие-то данные серверу отправить. Хотя бы даже в том же get через параметр. Как раз недавно подобное делал, не стал заморачиваться, нужна была программа пульт для ios и андро для специфического видеоплеера. Пульт просто раз в секунду отправляет запрос на сервер (плеер) о состоянии всяких контролов. Так же может отправлять нажатия кнопок интерфейса на пульте. Работает по http. Сначала делал через tcp, но через tcp сложнее и больше кода.
Автор: zealotfan
Дата сообщения: 22.03.2016 09:53
Sulphide
Еще есть datasnap. Пока научился передавать от клиента серверу сообщения. Хотелось бы передать от сервера клиенту результаты запроса каким либо образом

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129

Предыдущая тема: Отмена встречи в Outlook из Excel VBA


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.