Topic: Портирование INSTEAD Launcher на браузерную платформу

Подоставав некоторое время Петра, был отправлен им сюда, чтобы выложить свой бредовый замысел на суд общественности. Заранее предупреждаю: далее много букв.

Instead Launcher в его текущем виде достаточно своеобразен. Для пользователей Unix это очередной установщик чего-то там помимо пакетных менеджеров. Для пользователей Windows просто дополнительная программа, которую ещё нужно скачать и установить. Даже когда привыкаешь к тому, чтобу запускать не сам интерпретатор, а лончер, всё равно чуствуешь, что чего-то не хватает - хочется, чтобы приложения и скачивались, и запускались, и обсуждались, и разрабатывались как можно ближе друг к другу - хотя бы даже прямо на этом форуме. Вот только форум не мультифункциональный портал, не социальная сеть и тем более не интерпретатор. Бредовая, в общем, на первый взгляд идея.

Немного ближе к реализации чего-то подобного мы приближаемся с появлением flash-интерпретатора. Я не гуру этой платформы и не могу судить, но отмечу всё же, что ограничения, залаженные в саму технологию (я говорю о флеше, а не, скажем, AIR) и необходимость поддержания кодовой базы отдельной от основного кода Instead, способны осложнить прогресс данного направления. На основе flash можно создать систему рейтинга игр или среду их разработки, но сам он для этого не обязателен. Наибольшую пользу из него, как мне кажется, можно извлечь тем способом, которым он используется сейчас - распространяя сборки с отдельными играми как самостоятельные приложения.

Пытаясь подойти к идее сдругой стороны, можно додуматься до cgi-интерпретатора или даже системы на основе Javascript и свежих фич HTML5, уже позволяющих, по идее, разрабатывать мощные веб-приложения. Превое, на мой взгляд - то ещё извращенство. Второе уже разумно, но оправданно, только при той степени интеграции содержимого игры с прочим веб-контентом, которая для интерактивных книг-приключений не имеет смысла.

Так что же остаётся? Размышляя над этим, я вспомнил об ещё одной платформе, которая вполне подходит для реализации достаточно неплохо интегрированных с веб-страницей приложений - Java. Собственно, идею использовать для переосмысленной версии Instead Launcher-а Java апплеты подсказал мне "уместный" совет bergano "в jar запаковать и через jni вызвать". Кавычки здесь указывают не на неправильность предложения, а на тот факт, что поблизости не оказалось Java-программистов, зато был программист на флеше - натуральная неуместность :). А судя по замечанию последнего о некроссплатформенности, посетителям этой темы не помешает краткий экскурс в возможности Java и Java-апплетов в частности. Несколько фактов для затравки:

1) Java-апплеты работают на 32 и 64  -разрядных Windows, Linux, MacOS и ещё нескольких экзотичных платформах.
2) Современный Java плагин запускается и работает очень быстро, размер установочного пакета Java для Windows составляет от 2 до 4,5 мегабайт в зависимости от используемых API.
3) Современный Java-апплет может работать в браузере и вне оного - как обычное десктопное приложение. В том числе и запускаться с обычного значка на рабочем столе, как обычное приложение без всякого интернета.
4) Установка и скачивание апплета, если Java уже установлена (это два клика - на скачивание и запуск установщика) требует ровно 2 клика мышкой - для перехода по ссылке на апплет и нажатия кнопки "да" на приятном окошке интересующемся, желает ли пользователь установить себе на компьютер этот чудо программной мысли. Ах да - после установки всё это будет без спроса (но можно и спросить) само себя обновлять и запускаться сразу же после захода на страницу.
5) Java-приложение может легко и непринуждённо интегрироваться с браузером, соц. сетями и ещё черт знает чем (по мне, так лучше не надо)
6) Java-апплет может использовать платформо-зависимые библиотеки (dll и so), автоматически загружая те, которые нужны для данной системы. Так же можно загружать только нужные языковые и любые другие ресурсы, в зависимости от локали, процессора, операционной системы, фазы луны и знака Зодиака :).

Но всё это только бессовестный пиар Oracle(c) (разработчика Java), до которого читающим это сообщение нет никакого дела. Вот чем использование апплетов для разработки веб-лончера будет удобно нам с вами:
1) Одно приложение (лончер с встроенным Instead-ом) вместо двух.
2) Всё самомообновляется
3) Один список игр вместо двух (какая разница - установлено уже приложение или его только предстоит скачать?)
4) Потенциально лучшая поддержка (от вашего покорного слуги, ага)
5) Полная совместимость с существующей кодовой базой интерпретатора
6) Совместимость с существующем лончером (можно будет одновременно установить оба или установить веб версию, потом удалить
Java к чёртовой бабушке и установить обычный - игры никуда не денутся)

Теперь у вас должен возникнуть вопрос - зачем создавать эту тему на форуме, если, обладая необходимыми познаниями, я уже сейчас
могу взяться за реализацию столь замечательного (хотя и лишь немногим превосходящего нынешний) менеджера игр? Вопрос этот закономерный, на этом
форуме и так хватает всяких Anonymous, на полном серьёзе предлагающих портировать ядро интерпретатора на j2me, и искать здесь желающих заниматься
собственным проектом не слишком разумно. С такими мыслями я написал небольшой код на Java, практически идентичный функционально нынешнему интерпретатору и способный работать как в браузере, в качестве апплета, так и виде обычного приложения, добавил туда гениальную по простоте
функцию launchInstead, тогда ещё не принимавшую ни одного параметра, скачал последние исходники интерпретатора и каким-то чудом собрал из-них
кривую разделяемую библиотеку без iconv (мои познания в синтаксисе make-файлов явно недостаточны, чтобы разобраться в том, как это делается в
Netbeans)... Первая версия работала неплохо до тех пор, пока одновременно не случился конфликт имён библиотек и проявила себя во всей красе проблема с кириллическими путями в моей системе. Тут то я и дал маху, от отчаяния обратившись к Петру с просьбой о помощи. Проблему выявить удалось, но поднялся закономерный вопрос о том, нужно ли вообще реализовывать новый лончер. Ведь если никто кроме меня его не увидит, и он никогда не будет размещён хотя бы на этом сайте, то смысл в дальнейшей разработке с моей стороны, и, тем более, смысл помогать мне напрочь отсутствует.

Сухой остаток - вот чем читающие эту статью могут помочь:
1) Высказать идеи по функциональности лончера, новых возможностях, нужно ли это кому-нибудь
2) Вот этот фрагмент нужно добавить к main.c интерпретатора и собрать его как разделяемую библиотеку (никаких проблем с SDL при этом быть не должно) с опцией -Wl,-add-stdcall-alias (иначе имена JNI функций заманглятся и из Java к ней не обратишься)
3) Сборка библиотеки для тех, систем, кросскомпиляция на которые у меня вряд ли получится - Linux, MacOSX 32/64 (MacOSX можно пока отложить на потом - там наверняка будут какие-нибудь проблемы, а уменя её всё равно нет и не будет)
4) Хотя бы минимальная помощь с отладкой Си - составляющей (учитывая, что кода туда добавлено 15 строк и всё очень наглядно, это должно быть не сложно)

Чтобы как-то подтвердить наличие прогресса в разработке, скриншоты прилагаются.

Post's attachments

Attachment icon firefox-demo.png 102.64 kb, 117 downloads since 2011-07-11 

Attachment icon ie-demo.png 104.69 kb, 93 downloads since 2011-07-11 

Attachment icon opera-demo.png 103.94 kb, 115 downloads since 2011-07-11 

Re: Портирование INSTEAD Launcher на браузерную платформу

Ещё немного скриншотов.
В архиве исходники этого безобразия, на всякий случай.

Post's attachments

Attachment icon fullscreen_standalone.png 80.64 kb, 200 downloads since 2011-07-11 

Attachment icon loading-demo.png 92.51 kb, 132 downloads since 2011-07-11 

Attachment icon src.zip 17.17 kb, 138 downloads since 2011-07-11 

Re: Портирование INSTEAD Launcher на браузерную платформу

А как это безобразие отлаживать? И отлаживать игры на нём?

Александр Яковлев, к вашим услугам.

4 (edited by Asking_questions 2011-07-11 11:09:33)

Re: Портирование INSTEAD Launcher на браузерную платформу

А как это безобразие отлаживать? И отлаживать игры на нём?

Не понял вопроса. Рискну, предположить, что ответ - "Так же".

Дам ещё немного разъяснений:
1) Полноценным апплетом (web start приложением) является лончер. Сам интерпретатор из-за специфики SDL вообще невозможно встроить в веб-страницу, во всяком случае известными мне способами на основе  Java. Он запускается и работает так же, как и обычный (только функция main dll-ки может вызываться извне через JNI)
2) Собственно, всё.

Re: Портирование INSTEAD Launcher на браузерную платформу

С кроссплатформенностью Java как таковой вопросов не возникает совсем, но, если яне ошибаюсь, данный подход (с JNI) не может существовать без платформо-зависимой разделяемой библиотеки (dll для win систем, so для nix). Соответственно как вэб-приложение "прошел по линку - играешь" существовать не может. Если я ошибся - поправьте.

Re: Портирование INSTEAD Launcher на браузерную платформу

Приложение на флеше не может работать без исполняемого виртуальной машиной кода, хранящегося в swf-файле. Соответственно как вэб-приложение "прошел по линку - играешь" существовать не может big_smile
У Java-плагина уже давно нет проблем с автоматическим скачиванием и установкой нативных библиотек. Прошел по линку - дождался загрузки - играешь. Майнкрафт что ли не видели? Сам инстеад, как я сказал выше, в рамку апплета не засунуть (SDL такие трюки не поощряет), так что он будет запускаться всё так же в окне/на весь экран, но лончер - вполне.

Re: Портирование INSTEAD Launcher на браузерную платформу

Само собой, кроссплатформенность при использовании нативного кода из ниоткуда не берётся, чтобы лончер могли опробовать пользователи некоторой системы мне нужно собрать под неё слегка модифицированную библиотеку. Ну или попросить об этом Вас, читающих это сообщение.

Re: Портирование INSTEAD Launcher на браузерную платформу

Кроме всех этих интересных вещей про статистику, рейтинг и комменты к играм, хорошо бы еще сам инстед через ланчер обновлять. А то, как Ореолик напишет новую игру иди да качай новую бета-версию smile

Re: Портирование INSTEAD Launcher на браузерную платформу

В принципе у мнея были вопросы только к этому:
"У Java-плагина уже давно нет проблем с автоматическим скачиванием и установкой нативных библиотек."
Но если сейчас у джава с этим всё ок (на ограниченных учетных записях и прочее), то почему бы и нет.

Re: Портирование INSTEAD Launcher на браузерную платформу

Мне вообще нравится, когда движок развивается. Но по своему опыту я знаю, что сопровождение порта это труд и морока и собрать дллки это только начало. Поэтому, если автор сам будет этим заниматься - у меня нет и не может быть никаких вопросов, а если автор будет привлекать меня для каких то задач, кроме ответов на вопросы, я не готов сейчас этим заниматься. smile

11 (edited by Jhekasoft 2011-07-12 22:05:54)

Re: Портирование INSTEAD Launcher на браузерную платформу

Э-э-э. Вы мой хлеб забираете. Вы знаете, что будет в Qt5? Там будет JS и всё летать будет туды-сюды как в вебе. Я жду чтоб переписать Ланчер. Но раз уж вы пишите, то пишите, мне меньше работы. Хе-ге big_smile

Коты рулят! И велики!

Re: Портирование INSTEAD Launcher на браузерную платформу

Ну QML и сейчас есть и логику в нем на джаваскрипте ваять можно. Только вот это в любом случае будет нативное приложение, просто в пятых кутях ему добавят плюшек (я на кутях пишу ещё с 4.1).

Re: Портирование INSTEAD Launcher на браузерную платформу

Размышлял тут о вечном и вдруг обнаружил, что интерпретатор в Винде не производит адекватный вывод в stdout. Это баг? Есть шанс пофиксить? Нет, я читал соответствующие темы форума и понимаю, что скорее всего это как-то связано с SDL, но не лучше ли это пофиксить, чем плодить костыли вроде version.txt и иже с ним? Просто в прилагающейся сборке всё прекрасно выводится и никаких проблем не возникает. Может просто при сборке под Windows не задействовать SDL_main и всё? Во всяком случае, никаких доказательств её нужности там я так и не нашёл.

Post's attachments

Attachment icon sdl-instead.zip 192.83 kb, 133 downloads since 2011-07-17 

Re: Портирование INSTEAD Launcher на браузерную платформу

Что будет, скажем, когда мы запустим приложение с десктопа кликом по ярлыку?

Будет ли помимо sdl окна открываться терминал? (Тогда это не подходит)
Что будет в этом случае stdout?

15 (edited by Asking_questions 2011-07-17 11:11:27)

Re: Портирование INSTEAD Launcher на браузерную платформу

Краткий экскурс в сущность виндового терминала для ленящихся дизассемблировать kernel32 (или читать msdn):

1) Если приложение помечено как консольное, у него всегда должен быть терминал.
2) API дико высокоуровневое, хэндл терминала хранится в библиотеках рантайма, не то что в Линухе smile
3) Если запустили через cmd.exe/другое приложение с терминалом, библиотека (в дальнейшем буду именовать kernel32, хотя я не помню точно - сильно сомневаюсь, что это она) проверяет и - ВАУ У НАС УЖЕ ЕСТЬ ТЕРМИНАЛ!
4) Если ВАУ не происходит выделяется новое чёрное окошко и выдаётся проге. Виндовая libc радостно переадресует вывод в stdout в какое-то там API, которое сводится к рисованию буковок в этом окошке.
5) Вот и вся консоль!

Неприятный эффект, появляющийся при запуске консоли рядом с окном приложения известен, но это так дядюшка Билли любит POSIX, хотите избавиться от консоли - прячьте её платформо-зависимым API.

PS: Мне одному кажется, что внешний вид кнопки-индикатора URQ нарушает гармоничность картинки?

Post's attachments

Attachment icon bad.jpg 127.3 kb, 125 downloads since 2011-07-17 

Re: Портирование INSTEAD Launcher на браузерную платформу

Еще короче можно было просто  ответить на 2 вопроса. smile
Как я понял.

- Будет открыто окно и stdout будет сооств этому терминалу.

Это не подходит.

Если есть способ "прятать" терминал - то пиши этот код. Но что-то мне подсказывает, что единственный способ его спрятать - это закрыть. Но тогда в чем смысл улучшения (делать инстед консольным)? smile

Re: Портирование INSTEAD Launcher на браузерную платформу

Смысл уже был назван - нужно получить версию INSTEAD без костылей - через -version.

Если есть способ "прятать" терминал - то пиши этот код.

http://stackoverflow.com/questions/6096 … ith-winapi - код несложен, 14 символов. Но я всё же напишу его:

FreeConsole();

Постинг здесь патча с полагающимися препроцессорными инструкциями для отключения консоли конкретно для Винды и только если нет ключа -version приветствуется smile ?

Я же не говорю, что все пользователи интерпретатора срочно нуждаются в такой фиче. Своя сборка, рапортующая версию у меня есть, дело подождёт до релиза лончера. Просто хочется знать, что будет пофикшено.

Re: Портирование INSTEAD Launcher на браузерную платформу

Захотелось тоже сделать краткий экскурс. smile

Когда я послал патч в ядро первый раз (не первый патч, но первый раз в lklm), я был потрясен холодным отношением к моему сообщению. А ведь я исправил баг! Мне же просто было сказано: оформи в соответствии с правилами. Я еще говорил, что патч исправляет код в ipv4, а ipv6 нет. Так как я его не знаю. По поводу этого мне вообще не ответили.

Тогда я все-таки прочитал правила, оформил патч, за одно исправив код в ipv6, при этом сокрушаясь и ругаясь про себя. Патч приняли.

А потом я понял, что нет никакого я и они. Что разработчики ядра такие же люди, как и я, и что если у меня хватило опыта, чтобы исправить код, то мне должно хватить его и на остальное. Это не они, а я не сделал свою часть работы.

У такого подхода есть минусы (например,  еще один багфикс не приняли, так как я не был настойчив, но ошибка не была критична для меня и я забил), но он все-таки верен в опен сорсе. У чему это я?

У меня нет времени проверять твою идею, ставить винду, читать мсдн, переписываться простынями текста. Есть идея? Реализуй до конца. Если подойдет, приму патч. Нет - не прийму. При условии , что у тебя не пропадет к этому интерес.

Ты уже несколько раз писал что не можешь собрать с корявым иконвом ине понимаешь makefileы. А я 10 лет как бросил корявую винду. smile мне тоже не хочется ей заниматься.

Re: Портирование INSTEAD Launcher на браузерную платформу

я так и не понял, как вывод текста в консоль, которая тут же закрывается, тебе поможет.

В инстеде кстати есть консоль в винде, запускать с опцией -debug

Re: Портирование INSTEAD Launcher на браузерную платформу

Огромное спасибо за понимание!
Вывод в консоль мне нужен (я, оказывается, забыл про это упомянуть tongue) чтобы из моего лончера узнать текущую версию инстеда, зная только местоположение исполняемого файла - путём перехвата консольного вывода в ответ на запуск с параметром -version. Закрывать консоль, как мне представляется, нужно только при запуске игры, в остальном случае консольный вывод не бесполезен - задокументирован же он в справке к интерпретатору?

Повторюсь, это даже не багрепорт, а просто немного информации к размышлению - т.к. для тестирования у меня уже всё есть, а проверить в работе лончер можно будет и ничего не поправляя, мне на этот баг в общем-то тоже по барабану.

Re: Портирование INSTEAD Launcher на браузерную платформу

ок, в сухом остатке, я ничего не делаю smile

Вопрос о том как сделать норм. вывод stdout в винде открыт AQ, но пока не предложено ответа.

Текущий вариант: вывод работает с опцией -debug имеет один недостаток - при выходе инстеда консоль закрывается.

Вариант: делать инстед консольным приложением -- не подходит, так как не нравится мне с эстетической точки зрения (два окна хоть и на время)

Вариант с выплевыванием файла stdout.txt в каталог с  инстед не подходит, так как не факт что в program files есть доступ на запись.

Re: Портирование INSTEAD Launcher на браузерную платформу

Увлекательный процесс разработки дал побочные плоды - похоже, что первая альфа-версия лончера, способная кое-как выполнять поставленные задачи готова.

- отсутствие отображения прогресса загрузки файлов (к релизу будет)
- мелкие баги в интерфейсе
- нет доступа из интерфейса к некоторым (большинству) функций - настройки и т. д.
- несколько неприятных эффектов при запуске (может не появиться окно)

+ особых нет - можете поискать самостоятельно

Для работы желательна последняя версия Java. Открыть прилогающийся файл в оболочке или через "java -jar имяфайла.jar" в командной строке.

Post's attachments

Attachment icon Instead4j-0.4.9.jar 69.63 kb, 135 downloads since 2011-07-25 

Attachment icon Instead4j-src.zip 196.61 kb, 131 downloads since 2011-07-25 

Re: Портирование INSTEAD Launcher на браузерную платформу

О как! Вечером попробую smile

24 (edited by Asking_questions 2011-08-05 11:53:08)

Re: Портирование INSTEAD Launcher на браузерную платформу

Каюсь, в очередной версии нет ничего, что оправдывало бы огромную задержку, но лучше поздно, чем никогда. Тестировать с последней Java 1.6, 7-я ещё глючная. Уже нужны отзывы.

- мелкие малозаметные глюки

+ красивенький внешний вид и всё, пожалуй...

PS Эту версию уже можно рассматривать как заслуживающую тестирования, осталось добавить выбор списков.

PPS Скачивание интерпретатора не работает, т.к. сделано для галочки

Post's attachments

Attachment icon instead4j-0.5.jar 95.8 kb, 145 downloads since 2011-08-05 

Attachment icon src.zip 52.4 kb, 137 downloads since 2011-08-05 

Re: Портирование INSTEAD Launcher на браузерную платформу

Очередная сборка без номера - можете считать это демонстрацией работы списков репозиториев. Уже скоро, очень-очень скоро, будет бета-версия.

PS Java 7 подходит для запуска, оказывается меня подвела (sic!) кириллица в имени пользователя.

Post's attachments

Attachment icon Instead4j-prev.jar 177.67 kb, 153 downloads since 2011-08-09