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

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

Автор: Frodo_Torbins
Дата сообщения: 04.08.2016 18:19
qwertEHOK
Попробуйте TSharedSream, а поверх него TStringStream. Кстати TStringStream можно использовать поверх любого наследника TStream.

Добавлено:
Вот блин, сейчас вчитался в код, а TSharedSream не напрямую файлы с диска мапит. Так что использовать из него можно только маленькую обертку над системным АПИ. Но замечание на счет TStringStream остается верным, его можно с любым стримом использовать.
Автор: SolidSnakeRU
Дата сообщения: 04.08.2016 23:30
Cryogen2003
Dronton2
http://fracton.rgho.st/8XHbpfzHM
Это старый код, но исполняемый файл работает, но после компиляции в XE6 не работает.
Я думаю требуется адаптация под современную среду и возможно переписка фрагментов.
Но зато какой потенциал
Сам отложил сурсы на будущее, когда будет время ковырять.

reenoip
Где-то 28 мегабайт, точно не помню, но помню что целиком попал в память.
Тогда как без запаковки пара мегов загрузилась.
Автор: reenoip
Дата сообщения: 05.08.2016 06:19
SolidSnakeRU, понятно. Ну, лично я бы тридцаткой смело пренебрёг: лет 10 назад, глядя на аппетиты современных ("современных" - тогда ещё, не говоря уже о нынешних временах) приложений, предпочёл не выбиваться из общей картины, и сделал ставку на UPX. И время показало, что я не прогадал. Один хрен на все мои ухищрения и оптимизации всем плевать (это только мне и сисадминам видно, что полста мегабайт - будьте добры), всем клиентам/заказчикам нужен требуемый функционал в более-менее приличном внешнем виде. Ещё заметил такое: даже если вдруг ПК не справляется - все начинают винить ПК, но никак не приложение. Так что да - я давным-давно дал слабину и убил в себе перфекциониста, досконально вылизывающего каждую строку кода в погоне за видимой только мне экономией. С другой стороны, время работает на меня - парки ПК рано или поздно обновляют, причём обновляют даже те, кто постоянно мне твердит "смилуйся, сжалься, пощади - у нас нет денег!".


Разумеется, это не руководство к действию. Каждый делает свой личный выбор
Автор: Cryogen2003
Дата сообщения: 05.08.2016 07:31
reenoip
Поддерживаю, сейчас перфекционизм в моде только для очень часто выполняемых кусков кода. Для всего остального не очень нужно, да и пользователю не видно.
Я мучался надавно с кодом только в случае трехзвенки - там должно быть все быстренько, да и ликов памяти никаких не должно быть (ну крайней мере постарался, чтобы в моем коде ликов не было)

SolidSnakeRU
Оке, буду смотреть что это за зверь такой. Осталось только понять, как его запустить в новых средах.
Автор: SolidSnakeRU
Дата сообщения: 05.08.2016 11:44
Cryogen2003
Вообще-то утечек памяти быть не должно в любом софте, особенно в постоянно запущенном.
Другое дело оптимизации размера ехе и скорости исполнения, тут я согласен и давно считаю, что гнаться за килобайтами или секундами смысла нет. Если посмотреть как работает инсталлер абракадабры - они тоже придерживаются этой концепции, даже злоупотребляя.

Я наверно очевидные вещи сейчас напишу.

В современным реалиях, размер приложения может быть любым.
Главное чтобы приложение работало, выполняло свои функции, можно пожать инсталлятор и предусмотреть умное обновление, если необходимо.
А сколько там занимает на диске ехе в распакованном виде - никому дела до этого нет.
Если пользователю жалко забивать ssd - поставит на hdd.

Всегда смотрю общую производительность своих приложений и сервисов.
Если она не достаточно высокая, можно инвестировать время в исследования и оптимизацию.
В противном случае, зачем тратить время просто так.
Чем дальше лезешь в оптимизацию, тем сложнее становится.. никто не оценит и не поймет.
Автор: NeoAnomaly
Дата сообщения: 05.08.2016 12:18

Цитата:
у TGpTextFile использует OTL

qwertEHOK, OTL stable, на сколько я понял, поддерживает пока только Seattle. Попробуй без OTL, смотри юнит HugeF.pas


Автор: Cryogen2003
Дата сообщения: 05.08.2016 12:57
SolidSnakeRU
да, очевидные, но к сожалению бывает приходится извращаться с кодом. Иногда требуется скорость (некоторые мелкие процедуры даже в inline приходится переводить), иногда бывает думаешь о трафике (пришлось вводить трехзвенку с сжатием, чтобы регионам жилось полегче, к сожалению ODAC (как в обычном режиме, так и в прямом режиме) очень любит посылать огромное количество информации и посылает к сожалению маленькими пакетами). И из-за всех этих дум бывает думаешь не только о нужном для бизнеса функционале.
Автор: Dronton2
Дата сообщения: 05.08.2016 13:11
Cryogen2003
Можете вкратце описать, с помощью чего среднее звено сжимает данные для ODACа, работающего в прямом режиме? Трехзвенку на дельфи писать не приходилось. Хочу понять, в какую сторону копать, и насколько это напряжно.
Автор: Frodo_Torbins
Дата сообщения: 05.08.2016 13:31
Кому там бинарный диф нужен был, посмотрите Updater & UpdateMaker тут: http://bonanzas.rinet.ru/r_tools.htm
Автор: Cryogen2003
Дата сообщения: 05.08.2016 13:46
Dronton2
Написал все через RealThinClient, сжатие и шифрацию можно в нем же делать. Все данные и серверная, и клиентская часть сама все сжимает и разжимает, можно сделать либо через http подобное (сильно надежнее, но чуть меньше скорости), либо через udp (тут самому следить за данными и насколько верно они передались).

Постарался сделать максимально универсально для всех своих программ, которые используют ODAC и подобные компоненты (для каждого типа компонент для получения и отправки серверных данных сделано примерно 10 процедур-функций).
Из-за универсальности пришлось сделать дополнительную передачу параметров.
Зато теперь в итоге программа умеет без необходимости ребилда коннектится и на трехзвенку, и напрямую в оракл, mssql, firebird и так далее в зависимости от приложения), куда именно коннектится решается из ini файла и настроек внутри самого приложения.

Если будете писать трехзвенку, то обратите внимание на RealThinClient, только все поместите в сервис. Были проблемы, когда программа была с гуи мордой. А когда морду вынес в отдельное приложение, стало сильно надежнее.


Добавлено:
Frodo_Torbins
я что-то не совсем понял, а хранит ли он в себе все различия всех версий перед текущей? Ну например сотрудник ушел в отпуск, а за это время несколько обновлений было подготовлено.
Чтобы у него точно обновилась его версия до текущей с минимальным количеством трафа.
Автор: Frodo_Torbins
Дата сообщения: 05.08.2016 16:23
Cryogen2003
Тогда нужно будет скачать файлы всех выпущенных апдейтов и накатывать по очереди. Пока версия приложения не вырастет до текущей. Если вы хотите делать апдейты, которые будут увеличивать версию сразу на несколько единиц, то это тоже возможно, но нужно будет как то отдельно это организовывать. Например генерить апдейты увеличивающие версию на 1, 2, 4, 8 и так далее единиц. И потом в клиенте прописывать логику, что если локальная версия 31, а текущая 43, то запросить у сервера апдейты 31->32, 32->40, 40->42 и 42->43.
Автор: SolidSnakeRU
Дата сообщения: 05.08.2016 16:57
Или сделать очень жирный сервер, который будет хранить переходы с любой старой версии до самой новой. Это сильно увеличит требование к месту на сервере, зато у пользователя будет только 1 итерация обновления. Вспоминаю 2000 года, когда почти все патчи на игрушки были дифы.
Сидишь и ждешь по 30 минут пока 6 патчей по очереди отработают перешивая файл вдоль и поперек.
Автор: Cryogen2003
Дата сообщения: 05.08.2016 17:32
Frodo_Torbins
SolidSnakeRU
НУ сейчас это утопия накатывать несколько патчей подряд.

А так, посмотрел программку эту Updater. Не знаю, по моему нормально не взлетит, если приложение например уже пожато UPX.
Пример - программа весит 18.5 мегабайт в сжатом виде.
Понятно что так никто делать не будет, но размер файла вырос в 2.5 раза, при этом количество чтений-записи возросло в 4 раза практически. И при этом патч устанавливался примерно 42 секунд. Я не думаю что программа как то правильно работает.
Автор: Frodo_Torbins
Дата сообщения: 05.08.2016 17:48
Cryogen2003
Хорошее сжатие все равно что шифровка. Искать совпадение с предыдущей версией бесполезно. Если хотите еще и UPX, то паковать файл придется уже после обновления. И перед следующим обновлением распаковывать.
Автор: Zatupitel
Дата сообщения: 08.08.2016 00:07
У меня шифрование .exe при обновках не стоит в качестве важных, поэтому юзаю обычную, простую тулзу от TMS, она бесплатная. В ней создается конфиг в виде добавленных файлов, далее просто указывается куда класть и как будет программа проверять обновление (тоже тут не парюсь, можно по номеру версии, но мне проще по дате создания файла). В итоге, создаю .exe из среды IDE, автоматом он сжимается upx, далее запускаю утилиту и она генерит .cab файл и кладет его на фтп. Когда юзер запускает программу или по таймеру (у меня проверка 1 раз в 6ч стоит, т.к. по ходу бывают какие-нибудь доработки) выдается сообщение, что есть обновление. Нажимаем - обновить и все это ёкслель-моксель, ёрш-твою-меть и само перезапускается.
В итоге, у клиента обновленная версия. Пока на фтп не ляжет новый файл, ничего у клиента не выскакивает, все пашет штатно. За 3 года работы вроде глюков не было. Это самый простой вариант думаю, для простых обновлений без заморочек.
Для других целей юзаю инсталлятор, там побольше возможностей с проверкой реестра, каких-нибудь ключей, созданием иконок и т.д.... Тоже все просто, надо лишь 1 раз скрипт написать.
Автор: Cryogen2003
Дата сообщения: 08.08.2016 07:13
Zatupitel
От TMS сжимает файл не через UPX, а через MS CAB. Помимо того, что сжатие там хуже, чем в UPX, так мы так и не избавляемся от главной проблемы - при обновлении программы мы выкачиваем новое exe полностью, пусть и сжатое в архив с помощью MS Cabinet
Автор: zedxxxx
Дата сообщения: 08.08.2016 09:30
Zatupitel

Цитата:
простую тулзу от TMS, она бесплатная

Но при этом, в приложении должен использоваться платный компонент TWebUpdate? Или вы всю логику обновления самостоятельно написали?
Автор: Zatupitel
Дата сообщения: 08.08.2016 09:47
Cryogen2003
Все правильно, upx у меня сжимается в RS, при создании .exe (в опциях проекта добавлено сжатие после создания), а уже TMS делает .cab .

Добавлено:
zedxxxx
TWebUpdate и TWebUpdateWizard, входят в TMS Component Pack. Но раз уж в программе используется TMS, то Update как приятное дополнение. Для простых инсталяшек и обновлений проще всего использовать. Подходит и для обновления по сети и через веб, фтп. Конечно не идеальное решение, но удобное.
Автор: Dronton2
Дата сообщения: 08.08.2016 10:04
SolidSnakeRU, Cryogen2003, спасибо за советы.

Cryogen2003, если использовать дифы, то, наверное нет смысла жать приложение посредством UPX. Можно сам диф сжимать/разжимать ZIP-компонентом.
Если посредством дифов обновлять очень старые версии, то можно использовать компромисс, когда, например, последние 3 версии обновляются дифами, а более старые - качается полный файл программы (тоже сжатый ZIP-ом).


Автор: Cryogen2003
Дата сообщения: 08.08.2016 10:29
Dronton2
Ну вот и я про тоже, что для дифов, как уже сам проверил, лучше не пользовать совсем UPX, а сами различия паковать каким нибудь архивером. Но из хотелок - хотелось бы намного быстрее, чем в программе Updater. 45 секунд - это как бы очень много для обновления версии.

Zatupitel
а смысл после upx делать cab ? Для того, чтобы все файлы для обновления (не только exe) лежали в одном файле, ну и чтоб сами немного сжались?
Автор: Zatupitel
Дата сообщения: 08.08.2016 11:13
Cryogen2003
Upx чисто для уменьшения размера exe-файла. Если обновка через web, то в зависимости от настроек сервера могут быть ограничения. А updater делает один .cab (если не стоит ограничение на размер), один inf-файл и сам обновляется, я его в этом не ограничиваю .
Автор: Frodo_Torbins
Дата сообщения: 08.08.2016 13:52
Cryogen2003
Вот побыстрее тулза, но на плюсах: http://sites.inka.de/tesla/others.html#bsdiff А вот ее старая версия, зато для Delphi.net: http://www.pokorra.de/coding/bsdiff.html

Что касается размера обновлений, то перед загрузкой всех необходимых патчей стоит посчитать их общий размер. Возможно загрузка последних версий необходимых файлов окажется выгоднее.
Автор: Cryogen2003
Дата сообщения: 08.08.2016 13:57
Frodo_Torbins
Согласен. что иногда проще загрузить всю версию целиком, если пользователь обновлял программу год назад
Автор: SolidSnakeRU
Дата сообщения: 09.08.2016 14:37
Кто-нибудь в курсе, под мак сейчас можно создавать какое-то подобие служб в делфи?
(не визуальное фоновое приложение с rest сервером?)

В маке вроде есть launchd - daemon/agent manager, ну и по идее можно туда конфиг на автозагрузку положить.
Но можно ли сделать безформенное висящее в фоне приложение под мак?
Автор: AlekXL
Дата сообщения: 15.08.2016 16:01
SolidSnakeRU


Цитата:
Кто-нибудь в курсе, под мак сейчас можно создавать какое-то подобие служб в делфи?
(не визуальное фоновое приложение с rest сервером?)

может, просто не создавать окно, или создать фиктивное? Потому что под макось или андроид даже dylib или so не дают создать штатными средствами.

Но убирать проще, чем добавлять. При большом желании извратиться, думаю, удастся.
---
Вопрос про MR-SW объект. Существует ли что-нибудь быстрое, но без спинов?



Автор: AlekXL
Дата сообщения: 15.08.2016 18:03
у меня вопрос: это только в берлине этот код не работает как должно?

http://rgho.st/8gDbVgldc
Автор: SolidSnakeRU
Дата сообщения: 15.08.2016 21:02

Цитата:
AlekXL

Я не в курсе как работают в юниксах демоны, но по идее, есть менеджер демонов, он видимо как-то взаимодействует с приложением, как в виндосе (неужели в винде на голову умнее реализовано?), что вполне может накладывать требования к коду.
Думаю после релиза делфи с компилятором под линукс, появится какой-то модуль сервиса.
Они же ориентируются на серверную версию линукса, без демонов никак.

Добавлено:
Можно ли как-то реализовать сложно вскрываемый обмен между REST клиентом и сервером, учитывая потенциальный доступ к папке сервера? HTTPS применяется, но сертификат лежит в папке сервера (INDY вообще развивается? Загрузка сертификатов из стрима еще в 2010 году была помещена в план). Есть вариант проверять сертификат по хешу в приложении, либо дописать инди и грузить сертификат из бинарника (зашифрованный ресурс например).
Но вроде, даже при этом, трафик могут пустить через прокси с другим сертификатом и как-то вскрыть трафик. Посоветуете что-нибудь? (доп. кодирование передаваемой информации сейчас не вариант).
Автор: G787
Дата сообщения: 16.08.2016 07:31
Друзья если вдруг закроется борда ->
http://forum.ru-board.com/topic.cgi?forum=35&topic=52634&start=4040#3
Автор: 0D0A
Дата сообщения: 16.08.2016 08:52
Не получается нагуглить, может кто сталкивался... Стояли XE и XE3, поставил Сиэтл посмотреть. После это в XE и XE3 перестали работать Build Events. На любую команду ругается error MSB6003:

Код: Project "C:\Users\1\Documents\RAD Studio\Projects\Project1.dproj" (Build target(s)):
Target PreBuildEvent:
X:\1.cmd
c:\program files (x86)\embarcadero\rad studio\8.0\bin\CodeGear.Common.Targets(162,5): error MSB6003: The specified task executable could not be run. Запрошенная операция требует повышения
Done building target "PreBuildEvent" in project "Project1.dproj" -- FAILED.
Done building project "Project1.dproj" -- FAILED.
Build FAILED.
Автор: ChSerg
Дата сообщения: 16.08.2016 09:44
0D0A
На будущее. Перед тем как экспериментировать - откатите систему на всякий случай.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129

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


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