Страница 1 из 2
dynamic code reloading / компилим start.exe [old]
Добавлено: Пт ноя 24, 2006 5:14 pm
piroJOKE
Note: Тема немного сокращена.
Jerry, 2006-10-13:
Кто-нибудь за свю жизнь хоть раз использовал "dynamic code reloading", или хотя бы знает о его существовании ? :)
piroJOKE:
Кажется слышал, что эта штука работает только когда ты работаешь прямо из-под перла, а не из под start/wxstart. Короче, не знаю. Эм... а о чем вообще речь? Грубо говоря, откуда ты выцепил такое словосочетание?
Jerry:
копался в сырцах хотел понять как работают конфиги и плагины.
Ты кстати, знаешь, как они работают? Там какое-нибудь подобие интерпретатора есть, или тупо как параметры проверяется?
piroJOKE:
Плагины это вообще ЛОЛ. Я сначала думал что они просто врезаются в код где угодно, но ничего подобного.
Просто модули содержат в ключевых местах вызов каких-то функций... Вот к этим местам и могут подключаться плагины, только и всего!
Ну вот пример... В плагине написано:
my $hook = Plugins::addHook('AI_post', \&doCommand);
Эта штука просто подлючается к \src\functions.pl вот тут:
Plugins::callHook('AI_post');
И всё.
piroJOKE:
PS: Ты смотрел команду rc ("reload code") ?
piroJOKE:
Помучался немного с запуском без start.exe - пока ничего не получилось. Кочаю новый Перл, может в этом дело.
Jerry:
(...)
В скиппере есть С-подобный интерпретатор. Т.е. конфиги там пишутся прямо чуть лии не кодом.
Вот так:
Код: Выделить всё
OnServerMsg(string msg):
if ( IsMatchPattern(".*White RO.*", msg) == 1 ) then
Print("White RO is announced!")
Say("public", "/omg")
WhiteROAnnounce = 1
endif
if ( WhiteROAnnounce == 1 and IsMatchPattern("аЗЕТ *([0-9]+)\.([0-9]+) *- *([0-9]+)\.([0-9]+)", msg) == 1 ) then
Print("White RO will start since " + GetMatchedSubString(1) + ":" + GetMatchedSubString(2) + " until " + GetMatchedSubString(3) + ":" + GetMatchedSubString(4))
WhiteROStart = ( ToInt(GetMatchedSubString(1)) * 60 * 60 ) + ( ToInt(GetMatchedSubString(2)) * 60 )
WhiteROEnd = ( ToInt(GetMatchedSubString(3)) * 60 * 60 ) + ( ToInt(GetMatchedSubString(4)) * 60 )
endif
if ( WhiteROAnnounce == 1 and IsMatchPattern("[АТВг№|НХЎ|г№]+ *([0-9]+) №Т·Х", msg) == 1 ) then
Print("White RO will start in " + GetMatchedSubString(1) + "minutes")
WhiteROStart = Now() + ( ToInt(GetMatchedSubString(1)) * 60 )
WhiteROEnd = WhiteROStart + ( 3600 )
endif
end
piroJOKE:
А... ага, это я видел. Согласись, голову там сломать можно.
Но результат на выходе... будет ли польза от такой imho чрезмерной гибкости?
Jerry:
фиг знает, как показывает практика, 95% юзеров нужна одна большая красная кнопка "ботать" и ничего больше :)
Добавлено: Пт ноя 24, 2006 5:16 pm
piroJOKE
piroJOKE, 2006-10-16:
Продолжаем разговор. Наконец-то я запустил OpenKore без start.exe/wxstart.exe! ^_____^
Для этого мне пришлось заапдейтить ActivePerl до текущей версии (хух!?);
а еще установить в нем (через ppm) модудь Carp::Assert (я еще на всякий поставил Carp::Assert::More).
Заработало.
Теперь работает и динамическая перезагрузка кода:
rc
Checking functions.pl for errors...
D:/!t5020/src/functions.pl syntax OK
functions.pl passed syntax check.
Reloading functions.pl...
Reloaded.
(по умолчанию только functions.pl, но можно написать, например, rc all, и тогда...
)
ЗЫ: Ну и разумеется, нужны dll-ки, описанные тут:
http://forums.openkore.com/viewtopic.php?t=13501 ("Download link for start.exe & XSTools.dll")
ЗЗЫ: Как скомпилировать СВОЙ start.exe ?
piroJOKE:
Хм... запустился даже древний win32gui-интерфейс. (Запуск: openkore.pl --interface=Win32). Это стрёмная разработка Аммак-Боя; тех времен, когда он еще активно сотрудничал с OpenKore-овцами. А потом он, подлец, забил на O.K. (почти забил), и сам доработал интерфейс, а теперь им торгует под торговой маркой "KoreAdvance Pro".
А вот WX отчего-то не заработал... Ругаеццо.
TK-тоже самое (а что это вообще такое?)
VX-тоже самое (правда не сильно-то и надо было)
Древний Win32 интерфейс. Юникод не поддерживаеццо, поэтому названия НПЦей закоцались:
Добавлено: Пт ноя 24, 2006 5:23 pm
kLabMouse
Зы. Там ваще изврат.
Но моно забацать и WX интерфейс.
Нуно только установить всего того WX монстра прямо в перл.
(piroJOKE: Эй! Стой, раз-да! Я еще не закончил публикацию СТАРЫХ постов!)
Добавлено: Пт ноя 24, 2006 6:26 pm
piroJOKE
Jerry, 2006-10-16:
Как скомпилировать СВОЙ start.exe ?
отфл. Я в свое время задался тем же вопросом :) Ты еще спроси, как откомпилить xstools :)
piroJOKE:
Ну ладно, мы посмеялись. А теперь объясни, что тут смешного?
ЗЫ: В XSTools я даже не лезу, ибо C.
Jerry:
Смешное:
Весь опенсорсовый мир давно пришел к тому, что процесс установки из исходников должен заключаться в следющем: ./configure; make; make install.
Девелопмент опенкоры же за три года мало того, что не сподобился изобрести человеческий механизм сборки, так чтобы больше вопросы по этому поводу не возникали вообще - юзерам про компиляцию вообще рекомендуется забыть как факт. Их видимо настолько задолбали вопли "как собрать" "почему не собирается" и тд, что они вместо того чтобы оформить процесс по человечески - даже отдельным файликом написали - "сцуки не компилите кору, качайте exe". Вообще даже мейкфайл выкинули из исходников.
Щас вроде как исправляться начали, в том 193SVN5019 который тута выложен - даже вроде какието батники для сборки wxstart есть. А насчет xstools и поныне - поди догадайся, как ее собирать.
piroJOKE:
Бат-ники? Ух ты, шайтан-арба, а я и не заметил... О_о
Хм... а кто такой 'perlapp'? У меня такого нет. Не иначе, какая-то внешняя приблуда.
Щас вроде как исправляться начали, в том 193SVN5019 который тута выложен - даже вроде какието батники для сборки wxstart есть. А насчет xstools и поныне - поди догадайся, как ее собирать.
А там обычно всё лишнее из релизов убирают. Считается, что юзеру это не нужно. Ровно как те же eAthena-вцы удаляют сырцы из релизов (убил бы).
Jerry:
зы даже афина которой год от роду - из svn под линухом собирается тока в путь, что txt что sql, под винду есть уже написанные проекты для VC, и для 7, и для 8, хочешь сей а хочешь куй..
Jerry:
perlapp идет вместе с Perl Dev Kit
не знаю, как из релизов, но достатый из свн кор наводит именно на такие размышления :)
piroJOKE:
Ага... PDK надо, а оно еще и платное (?)...
Добавлено: Пт ноя 24, 2006 6:29 pm
piroJOKE
piroJOKE:
Собрались оба exe-шника, правда WX не работает... Та же ошибка что и при запуске из .pl-файла:
Код: Выделить всё
Program terminated unexpectedly. Error message:
Can't locate Wx.pm in @INC at D:/!t5020/src/Interface/Wx.pm line 29.
BEGIN failed--compilation aborted at D:/!t5020/src/Interface/Wx.pm line 29.
Compilation failed in require at (eval 136) line 1.
BEGIN failed--compilation aborted at (eval 136) line 1.
A more detailed error report is saved to errors.txt
Press ENTER to exit this program.
Процесс сборки WX:
Код: Выделить всё
D:\!t5020>perlapp --trim Pod::Usage --icon src\build\openkore.ico --lib src --no
runlib --nologo --force --exe wxstart.exe start.pl --add Wx;Wx::Grid;Wx::Html;Wx
::XRC
Wx.pm:
error: Can't locate Wx.pm
refby: perlapp --add
Wx\Grid.pm:
error: Can't locate Wx\Grid.pm
refby: perlapp --add
Wx\Html.pm:
error: Can't locate Wx\Html.pm
refby: perlapp --add
I18N\Langinfo.pm:
error: Can't locate I18N\Langinfo.pm
refby: C:\Soft\Perl\lib\encoding.pm line 41
Wx\XRC.pm:
error: Can't locate Wx\XRC.pm
refby: perlapp --add
Created 'wxstart.exe'
start.exe собрался удачней, и запускается без проблем; но без варнинга всё равно не обошлось. Сборка:
Код: Выделить всё
D:\!t5020>perlapp --trim Pod::Usage --icon src\build\openkore.ico --lib src --no
runlib --nologo --force --exe start.exe start.pl
I18N\Langinfo.pm:
error: Can't locate I18N\Langinfo.pm
refby: C:\Soft\Perl\lib\encoding.pm line 41
Created 'start.exe'
piroJOKE:
Ага, это ему нужен пакет I18N, исправлю пост выше позже...
(...)
Ммммда, поставил все пакеты, что касались этого i18n - ругань не пропала; и кроме того я заметил что мой start.exe больше "фирменного" на 234к. Гррр.
piroJOKE:
Jerry:
WX это просто кроссплатформенная библиотека графических элементов.. Как и VX и TK.
Добавлено: Пт ноя 24, 2006 10:44 pm
piroJOKE
piroJOKE:
По большому счету, компилировать действительно смысла нету. Вот ты, Jerry, скажи, зачем это может понадобиться?
Jerry:
Это неправильная постановка вопроса. Проект опенсорсный, значит он должен компилироваться, если такое возможно. Не то чтобы совсем должен, скажем так, это правило хорошего тона.
Зачем это может понадобиться - это вопрос другой, это может понадобиться в десятках случаев.
piroJOKE:
Собственно я так и рассуждал. Но предполагал что ты уже придмал этот самый один из десяти случаев.
Jerry:
Их даже придумывать не нужно. Если ты захотел что-то изменить не в перловых скриптах, или запускать измененные перловые скрипты на машине, где нет перлового интерпретатора - то это нужно компилировать.
piroJOKE:
Эээ, погоди, ты это несерьёзно!
start.exe и wxstart.exe - это маленькие интерпретаторы. Всё, что в них уже "вмонтировано" - это интерфейс + кусочек от сети.
Вся папка src читается при старте. В ней можно изменять всё что угодно, и изменения будут подхвачены.
Это более чем гибкий механизм.
(Ты не знал? ;) )
Jerry:
мм ну значит перл вычеркиваем :)
а что тогда значит "они даже исходники из релизов выбрасывают"?
piroJOKE:
То я про еА говорил, ты присмотрись.
А вот это, что весь src перечитывается - это и есть причина их предупреждений "здесь ничего не надо компилировать".
piroJOKE:
Йааахуууу! Я WX скомпилил. ^____^
Чего я сюда залез писать... ага...
Так вот, я поставил Wx-0.26-wxmsw2.6.2-win32-u-5.8.6.zip (3.6 mb),
но не ставил wxWidgets-2.7.1.zip (21mb),
хотя по доке надо было ставить и то, и то.
Тем не менее всё скомпилилось (почему так произошло?), кроме единственной ошибки
насчет этого долбанного i18n - то же, что и в консольной версии... :\
-- [конец] -- [2006-10-17] --
Добавлено: Пт ноя 24, 2006 11:18 pm
Jerry
кстати кто видел - в девелопменте мы с вцлкой насчет компиляции пожгли немного
Добавлено: Пт ноя 24, 2006 11:23 pm
piroJOKE
Ой, я мельком посмотрел так... А к чем пришли? ;)
Добавлено: Сб ноя 25, 2006 12:02 am
Jerry
нуу ... смотря где.
Вроде бы все хорошо должно быть
Добавлено: Вс фев 04, 2007 11:56 am
b0tter
Пытался компилировать SVN 5438 (ActivePerl 5.8.8 Build 820,PDK 6.0)
копирую *.dll с XSTools->src\auto\XSTools
В батниках вот это:
Для start.exe
Код: Выделить всё
perlapp --trim Pod::Usage --icon src\build\openkore.ico --lib src --norunlib --nologo --force --exe start.exe start.pl
Для wxstart.exe
Код: Выделить всё
perlapp --trim Pod::Usage --icon src\build\openkore.ico --lib src --norunlib --nologo --force --exe wxstart.exe start.pl --add Wx;Wx::Grid;Wx::Html;Wx::XRC
start.pl Запускается нормально.При запуске start.exe вот это:
Код: Выделить всё
D:\downloads\1\openkore>start.exe
Starting OpenKore, please wait...
/PerlApp/XSTools.pm: No such file or directory at /PerlApp/XSTools.pm line 112
BEGIN failed--compilation aborted at D:/downloads/1/openkore/src/webstart/../Fas
tUtils.pm line 19.
Compilation failed in require at D:/downloads/1/openkore/src/webstart/../Utils/D
ataStructures.pm line 23.
BEGIN failed--compilation aborted at D:/downloads/1/openkore/src/webstart/../Uti
ls/DataStructures.pm line 23.
Compilation failed in require at D:/downloads/1/openkore/src/webstart/../Plugins
.pm line 35.
BEGIN failed--compilation aborted at D:/downloads/1/openkore/src/webstart/../Plu
gins.pm line 35.
Compilation failed in require at D:/downloads/1/openkore/src/webstart/../Setting
s.pm line 37.
BEGIN failed--compilation aborted at D:/downloads/1/openkore/src/webstart/../Set
tings.pm line 37.
Compilation failed in require at src\webstart\webstart.pl line 28
.
Опять наш любимый webstart
До этого компилировал версии 538x-все компилировалось прекрасно.
Никто кто не в курсе как лечить, ибо качать 10 mb exe дюже дорого.
Добавлено: Вс фев 04, 2007 4:03 pm
DInvalid
piroJOKE писал(а):Jerry, 2006-10-13:Цитата:Кто-нибудь за свю жизнь хоть раз использовал "dynamic code reloading", или хотя бы знает о его существовании ?
Использую при отладке/ковырянии в чем либо...
При этом запускаю обычным способом... start\wxstart
Пишу rc AI - перегружает исходники AI ... иногда не срабатывает правда =)
Добавлено: Вс ноя 04, 2007 6:36 pm
4epT
блин писал-писал топик, потом оперу закрыл и всё похерилось, дану накуй, пойду в блокноте напишу, потом сюда выложу..
в п***у этот офтопик, ну правда очень обидно..
Добавлено спустя 29 минут 27 секунд:
ладно не буду я вы*****ться и напишу по простому.
При запуске коры в папке TEMP создаются папки типа:
pdk-user
pdk-user-3636
pdk-user-2154
...
pdk - Perl Dev Kit, приставка папки для временных файлов, используемая perl для винды.
uesr - ваш логин в видне
3636, 1254, ... - pid, id процесса из perl-программы (в нашем случае openkore), который запущен.
Америкосы пишут (
источник):
TEMP папки, заканчивающиеся процессом id ВСЕГДА должны быть удалены. Исключение - когда программа заканчивается, не выполняя процесс "cleanup" (очистки). Это это происходит когда что-то резко завершает процесс, как запрос POSIX::_exit ().
Суть проблеммы можно понять заглянув в папку TEMP и увидев скока места занимает папки pdk-***-****.
Ну нас с Click'ом вознивла идея:
А что если положить эти dll-ки в саму кору (в отдельную папочку), и перекомпилировать ехе-шники так чтобы они ссылались на них. Тогда ничего не будет засоряться и ехе-шники будут весить меньше.
Тока вот dll-ки не будут удалсяться?
Добавлено спустя 15 минут 57 секунд:
Кстати интересная заметка:
Если консольку закрыть командой quit, во папки удаляются, а если крестиком, то нефига не удаляется.
А в wxstart'е наоборот
Добавлено: Вс ноя 04, 2007 6:46 pm
piroJOKE
Хм... а если запустить openkore.pl - создаюццо эти временные файлы? То есть, может это и есть решение - установить на машину Перл, и не парить себе мосги?...
Добавлено: Вс ноя 04, 2007 7:16 pm
4epT
piroJOKE, не ну сам подумай нафига нужно парить мозги, устанавливать перл.. нюбы и без этого страдают..
"а если запустить openkore.pl" - хз, проверь у меня нет перла
Добавлено: Вс ноя 04, 2007 7:28 pm
piroJOKE
4epT
"Страдают" - это не самое лучшее описание ситуации, в частности, потому что они (нупы) никак не страдают от наличия лишних временных файлов.