На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Использование PHP для клиентских приложений , Создание языка ультра-высокого уровня
    Идея:
    Использование сетевых языков для клиентских приложений.

    Структура:
    Создание приложения происходит следующим образом:
    Программная оболочка (создание\программирование расширенного PHP файла, файл в формате *.phpa (php advance)) -> интерпретатор (обрабатывает и заменяет некоторые значения для совместимости с оригинальным PHP, сохраняет файл в формате *.php) -> компилятор (исполняемый байт-код) -> выполнение программы.

    Выполнение приложения:
    - Установка (в идеале) общего окружения для всех программ данного типа (подразумеваю хранение php_****.dll в System32 и прочее, что-то вроде C++ Redistrutable)
    - Запуск скомпилированного (сархивированного) файла с помощью предустановленного приложения (что-то вроде флеш - файл запускается приложением)
    - Открывается заданное приложение (визуализация XHTML\HTML + CSS, исполнение JS\AJAX\PHP, хранение данных - любая PHP-совместимая БД)

    Цель:
    Ускорение в десятки раз создания небольших клиентских приложений, в основном направленные на работу с базами данных и сетью.

    Примеры внедрения:
    Справочники, Реестр данных, Даунлоадеры, Менеджеры (изображений\видео и так далее), Небольшие игры, Чаты, Почтовые клиенты и так далее.

    Реализация:
    Итерация 1 - сборка тестового окружения:
    Язык VB6. Папка с приложением содержит каталог bin и исполняемый *.exe файл. Каталог bin содержит отредактированную версию Denwer. Каталог bin/home/***/www/ (вместо символов *** - набор любых числобуквенных символов, например md5 времени создания каталога) содержит исполняемый файл *.php (имеется ввиду исполняемый в данной среде).
    Реализация *.exe файла (алгоритм работы приложения):
    - Запуск Denwer
    - Ожидание завершения запуска
    - Использование движка (стандартного контрола) IE для визуализации\запуска приложения
    - Открытие (по умолчанию адреса http://***/index.php) в "псевдо" браузере файла *.php

    Итог: Решил использовать язык VB6 ради ускорения создания тестового окружения.

    Итерация 2 - сборка конечного (идеального) окружения:
    Язык C++. Используется только один файл данных любого формата (определённого ранее), содержащего данные о приложении.
    Реализация предустановленного приложения:
    - Открытие файла данных в приложении
    - Распаковка БД (если есть) из файла данных в папку приложения (предустановленная среда)
    - Распаковка Файлов (в идеале только байт-кода) в папку приложения
    - Распаковка изображений и т.д. (в идеале - должны содержаться в файле БД) в папку приложения
    - Все распакованные данные можно сохранить, для ускорения следующей загрузки (т.е. как бы установка), либо удалить после завершения работы с приложением
    - Получение данных о приложении из файла данных (размер создаваемого окна, название приложения и прочее)
    - Инициализация движка WebKit с и передача туда выполненного (откомпилированного) байт-кода

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

    Нюансов уйма, например если использовать WebKit, то можно получить аппаратное ускорение приложения, плюс использовать OpenGL (WebGL) для реализации 3х- и 2х-мерных игр. Язык C++ используется именно из-за того, что PHP\WebKit и прочее написаны именно на нём.

    Я об этом проекте долго думал, может это глупость, но тестовую сборку я всё-таки сделаю, работы на денёк, а если понравится идея, почему бы не реализовать её. :) Если есть какие-то вопросы и недопонятки - задавайте :)
      Serafim ты слышал о такой вещи http://habrahabr.ru/blogs/php/85092/ ?
        FullArcticFox, угу :) Только здесь фишка немного другая - использование HTML для создания пользовательского интерфейса приложений - это только один из моментов ;)
          http://ru.wikipedia.org/wiki/PHP-GTK
            А нафиг это всё? :huh: Только работа со знакомым языком? А в чём такое особое ускорение разработки этих приложений? ;)
              люди, у кого нибудь работает webgl?
              тестил на mozilla firefox 4 Beta 4, делал about:config менял там на true - не работает.
              на chrome 7.0.503.0 beta тоже самое....

              как тестить webgl?
                Так, вроде закончил предварительную версию. Встречайте первую полноценную бета-версию. :blush:

                При открытии exe'шника - по умолчанию открываются настройки:
                настройкиПрикреплённый файлprev.jpg (102,47 Кбайт, скачиваний: 647)
                Поля:
                1) Путь к папке с исполняемой средой (там где на жёстком диске находится локалхост например)
                2) Путь к файлу через http (путь, где можно открыть этот файл через браузер)
                3/4) Размер окна, открываемого по-умолчанию

                Что бы запустить php файл на исполнение, требуется открыть его с помощью этого приложения.

                Пожалуйста, сообщите, если найдёте ошибку, буду очень признателен :thanks:
                первая бэта-версияПрикреплённый файлXphp.rar (35,06 Кбайт, скачиваний: 229)
                исходники, просьба не слишком пинать :rolleyes: :D Прикреплённый файлXphp_VB6.rar (23,57 Кбайт, скачиваний: 225)
                Сообщение отредактировано: Serafim -
                  Не знаю, как насчет пользовательских приложений. Не думаю, что кто-то специально будет изучать для этого php.
                  Но, я так понял, эта программа может выполнить php-скрипт без установки web-сервера и интерпретатора php, эмулируя таким образом на локальном компьютере web-сервер.
                    Цитата amk @
                    Но, я так понял, эта программа может выполнить php-скрипт без установки web-сервера и интерпретатора php, эмулируя таким образом на локальном компьютере web-сервер.

                    Пока что нет. Фактически он работает используя уже готовое окружение (установленное ранее). Теперь я займусь как раз вставкой сервака в программу, т.е. как ты сказал будет эмуляция сервера на локальном компе :yes: Это как раз на стадии разработки
                      Просто, если сервак установлен, то как бы нет проблем выполнить скрипт на нем. А если не установлен, то, ты пишешь программа и работать не будет.
                      Соответственно, если человек занимается Web-разработкой, он и так имеет доступ к серверу и может обойтись без твоей программы.
                      Если не занимается, то программа оказывается ему бесполезна.
                        amk, сказал же, что сервак будет развёртываться при первом старте программы в фоновом режиме, не заметном пользователю. Фактически он будет видеть рабочее приложение по которому надо щёлкнуть двойным щелчком, что бы запустить :)
                          Цитата Serafim @
                          сервак будет развёртываться при первом старте программы
                          Ты уверен, что это ему просто так удастся?

                          1. Программа может быть запущена из под непривелигированного пользователя (у меня на компе (что дома, что на работе), например, других и нет (есть конечно, но они (точнее я) на компьютере не работают, а только обслуживают его (что интересно, я на работе к своему компу системщиков не подпускаю - они, того и гляди, все испортят))).
                          2. В Windows (да и в других ОС тоже) существует такая вещь, как квоты на использование дискового пространства.
                            amk, а почему Денвер умеет запускаться с флешки? :huh:
                              Ну, он наверно уже развернут на этой флэшке. Ничего не пытается писать за пределами своего каталога, да и в своем старается не мусорить. Если что вне его и пишет, то в профиле текущего пользователя
                                Цитата amk @
                                Ну, он наверно уже развернут на этой флэшке. Ничего не пытается писать за пределами своего каталога, да и в своем старается не мусорить. Если что вне его и пишет, то в профиле текущего пользователя

                                Если внимательно прочитать как устроена моя программа - можно понять что я запускаю скрипты из исполняемой среды, которую я эмулирую через Апач+ПхП. Осталось только дописать некоторые места. Мне не нужены мегабольшие права, что бы запустить чат ;)

                                З.Ы. Для проекта попытался использовать Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.7.12) Gecko/20051002, но потерпел поражение. Всё работает, но глючит страшно, так что вернулся обратно на ИЕ7 :(
                                  Изменён интерфейс
                                  Добавлена возможность сворачивания
                                  Анимированы кнопки
                                  Исправлена ошибка со "скаканием" кнопки
                                  Исправлена ошибка со скруглёнными углами снизу формы
                                  Добавлена возможность передачи данных в приложение (название приложения (пока не выводится) и размер окна для выбранного приложения)

                                  Найденные ошибки, которые ещё не пофиксены:
                                  В настройках, при вводе символа в поле "размер приложения" (разрешение) - приложение вываливается с критической ошибкой

                                  Прикреплённый файлПрикреплённый файлXphp.rar (38,89 Кбайт, скачиваний: 199)

                                  Скрин программы с запущенным чатом ВК:

                                  Прикреплённый файлПрикреплённый файлБез_имени_3.jpg (187,28 Кбайт, скачиваний: 509)
                                    :D ;)

                                    Прикреплённый файлПрикреплённый файлScreenshot.png (657,9 Кбайт, скачиваний: 523)
                                      Оффтоп
                                      Говоря о несомненных преимуществах TeX'а над Word'ом при подготовке математических текстов наш преподаватель по ЭВМ задался вопросом, почему Microsoft Word тормозит даже на самых простых задачах. В итоге пришел к гипотизе, что во всем виновато объектно-ориентированное программирование.
                                      Но при этом отметил, что время программиста стоит дороже, чем машинное. Поэтому нет ничего страшного в повышении удобства работы программиста в ущерб быстродействию программ.

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

                                      Конечно, PHP создан не для объемных вычислений.

                                      Я не против, например, HTML. Это действительно упрощает разработку web-страниц.

                                      С одной стороны, кажется, что замедление какой-нибудь небольшой программы не даст существенного замедления всей системы (под замедлением понимаю уменьшение объема доступных системных ресурсов). Но, с другой стороны, в системе работает множество разнообразных сервисов и приложений.

                                      Сугубо мое личное мнение.
                                      Сообщение отредактировано: schooler -
                                        Цитата schooler @
                                        Но, когда я реализовал один из алгоритмов нахождения наибольшей общей подпоследовательности на PHP, я понял, что PHP проигрывает компилируемым языкам (конкретно Паскалю) как по скорости работы, так и по расходу памяти. Причем не просто проигрывает, а отстает на порядок.

                                        Эта ситуация была примерно лет 5 назад ;)
                                          Мы на работе как-то столкнулись с шелловским скриптом, который запускает программу на перле, чтобы подсчитать контрольный хэш файла. То, что у программы md5sum занимает десяток секунд считалось полчаса, после чего мы попросту прервали скрипт.
                                            amk, а при чём тут Perl :blink:
                                            PHP преобразуется в байт-код, который иногда даже быстрее C++ варианта, тупо из-за того, что ты напишешь одно, а внутри это работает совершенно по-другому.

                                            Как пример - в PHP все переменные вначале передаются по-ссылке, хотя ты этого не писал. Разницы никакой, а работает быстрее и памяти жрёт меньше. ;)
                                              Что значит 'переменные передаются по ссылке вначале'?
                                                schooler, это значит, что пока не было изменено значение переданной переменной - они передаются по ссылке. Фактически это можно проверить - отобразив поэтапно занимаемую память.

                                                ExpandedWrap disabled
                                                  $a = 2;
                                                  echo memory_get_usage();
                                                  $b = $a;
                                                  echo memory_get_usage();
                                                  $b++;
                                                  echo memory_get_usage();


                                                Функция не помню как называется, вроде так - поправьте, если я ошибся
                                                  Передача по ссылке - не всегда хорошо. Иногда лучше передавать значение.

                                                  Что такое байт-код я знаю. И знаю, как он интерпретируется.
                                                  Имеется указатель (обычно хранится в регистре). На каждом цикле по этому указателю считывается код, преобразуется в адрес (обычно не берется из таблицы, а вычисляется - сдвиг+сложение), и управление передается туда. Там выполняются нужные действия (еще команды 4-5, иногда больше) и управление передается на начало цикла. Итого на каждую команду байт-кода имеется десяток машинных команд и две передачи управления. Получаем, что байт-код по крайней мере раз в десять медленнее нативного кода. Это если не рассматривать клинические случаи.
                                                  Байт-код отыгрывается только при обработке сложных данных, когда одной команде байт-кода соответствует достаточно сложная процедура. Здесь часто возникает ситуация, что в том же C++ выбирается не совсем оптимальный алгоритм, например. В этой ситуации интерпретация может оказаться даже быстрее.
                                                    Единственное, что могу утверждать, что PHP 5 в несколько раз быстрее PHP 4, PHP 5.3 (даже без Zend Optimyzer) тоже на порядок быстрее PHP 5.2, а PHP 5.4 (который доступен с сентября) не сильно, но тоже выигрывает по скорости PHP 5.3. Все привыкли говорить о 4ой версии - но она многократно отстаёт по скорости от последних версий.

                                                    И у меня были случаи, когда я ради эксперимента засекал время и PHP обыгрывал по скорости С++. Если откопаю тесты - выложу сюда.

                                                    Добавлено
                                                    Цитата amk @
                                                    Передача по ссылке - не всегда хорошо. Иногда лучше передавать значение.

                                                    Почему? :huh: Если компилятор сам следит за всем этим, так что в этом плохого? Кроме ускорения работы и уменьшения объёма оперативной памяти - разницы никакой :huh:
                                                      Цитата Serafim @
                                                      И у меня были случаи, когда я ради эксперимента засекал время и PHP обыгрывал по скорости С++.

                                                      На каких задачах?

                                                      В чем заключается простота разработки клиентских приложений на PHP?
                                                      Сообщение отредактировано: schooler -
                                                        schooler, скажи мне, сколько времени ты будешь разрабатывать необычный пользовательский интерфейс? ;)
                                                          Простые типы обычно проще передать через стек. Дополнительное разыменование ссылки съедает весь выигрыш от передачи ссылки, не говоря уж о том, что выигрыша может и не быть.
                                                          Аналогично, если аргумент предполагается модифицировать внутри функции, не возвращая результат изменений обратно. При передаче ссылки все равно придется его скопировать внутри функции. Передавая аргумент по значению, можно избавиться от копирования, когда аргумент вычисляется или конструируется при вызове (если компилятор догадается соптимизировать копирование). Хотя в некоторых случаях все еще остается лишнее копирование, я так понимаю rvalue-reference для таких случаев и предназначен.

                                                          Цитата Serafim @
                                                          были случаи, когда я ради эксперимента засекал время и PHP обыгрывал по скорости С++

                                                          Вариант первый - PHP умеет компилировать программу в нативный код.
                                                          Вариант второй - вызывались некие процедуры, для которых в C++ нет аналога. При этом в библиотеке PHP использован какой-то оптимизированный алгоритм, а в C++ аналог написан вручную. Скорее всего для решения использован простой, надежный алгоритм, без особой оптимизации.
                                                          Вариант третий - при сравнении просто что-то не было учтено, из-за чего программа на C++ делала еще какую-нибудь работу, повлиявшую на результат.

                                                          Добавлено
                                                          Цитата Serafim @
                                                          сколько времени ты будешь разрабатывать необычный пользовательский интерфейс?
                                                          Вопрос не мне, но я тоже выскажусь.
                                                          Зависит от того, сталкивался ли с такой задачей раньше. Для того же C++ есть библиотеки, но их надо найти и научиться ими пользоваться. Думаешь, я, взяв PHP, смогу такой интерфейс быстрее разработать? Скорее наоборот - на C++ у меня будет готовая программа с нужным интерфейсом быстрее, чем я вообще приступлю к написанию ее на PHP.
                                                            Цитата amk @
                                                            Думаешь, я, взяв PHP, смогу такой интерфейс быстрее разработать? Скорее наоборот - на C++ у меня будет готовая программа с нужным интерфейсом быстрее, чем я вообще приступлю к написанию ее на PHP.

                                                            на ХТМЛ, а не на PHP ;)
                                                              Чего только люди не делают, лишь бы на Python и Qt не писать.

                                                              Предложенное автором топика решение — ущербный язык в ущербной обвязке из костылей на ущербной платформе.

                                                              Цитата Serafim @
                                                              FullArcticFox, угу :) Только здесь фишка немного другая - использование HTML для создания пользовательского интерфейса приложений - это только один из моментов ;)


                                                              Я думаю, рассказать о XULRunner или подождать еще немного.
                                                                Serafim, HTML вообще-то не только из PHP доступен. Не говоря уж о том, что программа может просто изобразить из себя http-сервер - например, зацепиться за сокет, ловить http-запросы и возвращать HTML-страничку. Их формат достаточно простой - так что особого труда это не составит.

                                                                Добавлено
                                                                Так что твоя программа будет полезна главным образом PHP-программистам
                                                                  Цитата amk @
                                                                  Так что твоя программа будет полезна главным образом PHP-программистам

                                                                  Да :yes: :tong:
                                                                    Цитата amk @
                                                                    Не говоря уж о том, что программа может просто изобразить из себя http-сервер - например, зацепиться за сокет, ловить http-запросы и возвращать HTML-страничку.

                                                                    Только вот если программа предназначена сугубо для локального выполнения, то приделывать к ней сравнительно медленный TCP/IP — это оверкилл немного, вам, господа, не кажется?

                                                                    Ну и потом, установка нескольких приложений параллельно — это будут такие грабли, что мало не покажется. Причем будет одно из двух: либо придется забыть о существующих веб-приложениях (на мысль приходят phpGroupware всякие, вики локальные, RoundCube'ы, и какие там еще достаточно вылизанные вещи есть), потому что разработчики будут вынуждены следовать некоторым конвеншонам, дабы их программы между собой на этой платформе уживались, либо показать конечному пользователю, что ему таки придется конфигурировать этот долбанный апач, чего, кажется, автор стремится избежать.

                                                                    Сделай лучше такую яваскриптовую библиотеку для использования внутри XULRunner и инсталлятор к этому добру, чтобы под него стало приятно писать программы. Тогда тебе много кто, я в том числе, в ножки будут кланяться.
                                                                      Ну я понял только, что XULRunner - это непонятная Моззиловская штукень. Это всё(((
                                                                        Цитата Serafim @
                                                                        Ну я понял только, что XULRunner - это непонятная Моззиловская штукень. Это всё(((

                                                                        Это ты ее не видел пару версий тому назад. Теперь она мало того что понятна, любой Firefox версии 3 и выше можно использовать как XULRunner в чистом виде.

                                                                        А так ­— это такая хрень, с помощью которой можно рисовать элементы управления на XUL (и HTML, кстати, тоже), а события обрабатывать на яваскрипте. Причем яваскрипт не простой, а привилегированный: может файлы читать-писать, сокеты любого вида создавать, к SQLite из коробки присасываться. И все это под любой платформой ­— венда так венда, линакс так линакс, макось так макось, FreeBSD, не будь помянута к вечеру — так почему бы и нет? И все можно на Javascript чистейшем писать.

                                                                        Вот если бы ты сделал такое окружение, в котором программировать для того же XULRunner'а было бы приятно и ненапряжно, то за мной не постояло бы... Ну там jQuery портировать, то-сё...
                                                                          А как же PHP? :(

                                                                          Добавлено
                                                                          Хотя он и не понадобится там должно быть...
                                                                            Цитата Serafim @
                                                                            А как же PHP? :(

                                                                            Как я и говорил, PHP — ущербен. Его для клиентских программ не особо используют даже на более родных платформах: память течет, медленный, с особыми неповторимыми багами. Вместо него почему-то перл да перл. Ну теперь уже питон.
                                                                            PHP используют веб-программисты-новички, которые по разным причинам не доросли до Python или Java. А для этих двух технологий костылей надо меньше не в разы, а в разы разов.
                                                                              Ho Im, категорически не согласен с тобой. Чего нет в PHP, что есть в других языках? :huh:
                                                                                • Предсказуемой типизации нет. Как и в родителе, который перл, но в последнем хотя бы есть use strict.
                                                                                • Вменяемой и целостной архитектуры языка нет: все писалось по принципу втыкания очередного кривого костыля. Поэтому у PHP в глобальном пространстве имен тысячи функций.
                                                                                • Нормальный (т. е. который вообще работает) сборщик мусора появился только теперь, да и то с множественными оговорками: я слышал о нем, но на практике память как текла, так и дальше течет.
                                                                                • Мультипоточности ни в каком виде нет. Есть многопроцессность, при этом реализованная через одно место (и поэтому никем всерьез не используемая).
                                                                                • Объектная модель динамического языка содрана по образу и подобию языка статического, причем ограничения всплывают в самых интересных местах.
                                                                                • Несмотря на то, что язык уж очень веб-ориентирован, нормальных инструментов собственно для веба там тоже, как ни странно, нет. По-хорошему, тот же Symfony должен идти к PHP в комплекте поставки.
                                                                                • Также, несмотря на то, что среда сервер-ориентирована, масштабирование ее сопряжено с большими накладными расходами и для улучшения никаких изкоробочных средств не предоставляется.
                                                                                • Модульности как таковой нет. Если сравнить PEAR со CPAN'ом или PyPI, станет очень грустно. Все становится понятным, если сравнить культуру программирования в PHP и в том же перле: в PHP в основном обитают новички, в Perl — умудренные опытом, первые стремятся вовсю изобрести свой лучший в мире велосипед, вторые делают ставку на то, что велосипеды давно изобретены (и оказываются правы, чаще всего).
                                                                                • Как в перле, так и в питоне есть привязки к родным оконным библиотекам систем, на которых они выполняются (Cocoa, WinAPI), да к паре-тройке кроссплатформенных (GTK+, Tk, Qt, WxWidgets). В PHP привязка только к GTK+, что нельзя назвать лучшим выбором (те же Qt и Wx стремятся использовать средства отрисовки и элементы из целевой платформы, тогда как GTK+ старается всюду все делать по-своему). Впрочем, в связи с тем, как течет память у PHP, никто и не рассчитывает писать на нем
                                                                                • долгоиграющие программы с GUI.
                                                                                • Нормального быстродействия, из-за того, что среда в PHP на каждый запрос переинициализируется по новой, тоже нет и не будет. By design. А переконнекчиваться к базам данных, между прочим, дорогая операция. Как и открыть-закрыть сотню рабочих файлов.
                                                                                Не убедил? Впрочем, я с 2003 до 2010 года плотно работал с PHP. Сейчас работаю с Python и счастлив безмерно. Поэтому каждый пункт выше — это кусок личного опыта.
                                                                                  Цитата Ho Im @
                                                                                  Предсказуемой типизации нет.

                                                                                  Есть, нужен только опыт, ни разу (я серьёзно и без преувеличений) не сталкивался с проблемой того, что прорамма работает не так, как от неё ожидалось, просто из-за проблемы с типизацией.

                                                                                  Цитата Ho Im @
                                                                                  Поэтому у PHP в глобальном пространстве имен тысячи функций.

                                                                                  В C++ тоже

                                                                                  Остальные критерии либо не понял, либо просто не работал и не могу судить

                                                                                  Добавлено
                                                                                  Цитата Ho Im @
                                                                                  но на практике память как текла, так и дальше течет.

                                                                                  Хочешь сказать, что 9 мегабайт на сервер - это очень много? У меня уже неделю комп не вырубается, где я гоняю сайты туда-сюда на локальном серваке. Сейчас процесс занимает 8 927 Кб
                                                                                    Я никогда не пойму, что это за логика и последовательность такая:

                                                                                    empty(0) == true;
                                                                                    empty('0') == true;
                                                                                    empty('000') == false; // WTF?
                                                                                    empty(0.0) == true;
                                                                                    empty('0.0') == false; // WTF?

                                                                                    Какова закономерность, по которой PHP прыгает себе со строкового контекста на числовой, с числового на булевский?

                                                                                    Цитата
                                                                                    Хочешь сказать, что 9 мегабайт на сервер - это очень много? У меня уже неделю комп не вырубается, где я гоняю сайты туда-сюда на локальном серваке. Сейчас процесс занимает 8 927 Кб

                                                                                    А ты напиши скрипт, который безостановочно будет бегать недельку-вторую, причем пусть он ворочает какими-нибудь данными (while(true) sleep(1); неинтересно потому что). Узнаешь много нового. В частности, почему особо никто не рвется пользовать тот же PHP-GTK для долгоиграющих скриптов.
                                                                                    Это две большие разницы — когда скрипт поработал и убился, и когда он работает и работает и работает.
                                                                                      Цитата Ho Im @
                                                                                      empty('000') == false; // WTF?

                                                                                      Цитата Ho Im @
                                                                                      empty('0.0') == false; // WTF?

                                                                                      Не пустая строка - всегда true. В первом и втором случае - строка из 3х символов, это как бы и думать не надо почему так :blink:

                                                                                      Добавлено
                                                                                      Цитата Ho Im @
                                                                                      Я никогда не пойму, что это за логика и последовательность такая:

                                                                                      За 7 лет работы - не задают таких банальных вопросов. Может я ошибаюсь, но это же очевидно, почему true, а почему false.
                                                                                        Цитата Serafim @
                                                                                        Не пустая строка - всегда true. В первом и втором случае - строка из 3х символов, это как бы и думать не надо почему так :blink:

                                                                                        Строка из одного символа тоже не является пустой. И однако же.

                                                                                        Добавлено
                                                                                        Цитата Serafim @
                                                                                        За 7 лет работы - не задают таких банальных вопросов.

                                                                                        За 7 лет работы возникают еще более интересные (и да, банальные) вопросы, особенно если PHP — не единственный язык, с которым работаешь.

                                                                                        Добавлено
                                                                                        Цитата Serafim @
                                                                                        Может я ошибаюсь, но это же очевидно, почему true, а почему false.


                                                                                        Хорошо. Давай поговорим про очевидное-невероятное. Почему PHP считает нужным привести строку "0" сперва в целочисленный, а затем в булевский тип, но строку "0.0" в вещественный не хочет приводить и сразу приводит в булевский? Чем именно целочисленный тип такой особый?

                                                                                        Потом. Почему в обычном массиве я могу делать присваивания вида

                                                                                        $foo['bar']['baz'] = somestuff,

                                                                                        тогда как если $foo — это объект, реализующий ArrayAccess, то я не смогу этого сделать? Еще и подленький такой notice:

                                                                                        PHP Notice: Indirect modification of overloaded element of MyArray has no effect

                                                                                        а подленький он потому, что по-хорошему, хорошо было бы бросить exception, а не по нескольку дней ловить интересные баги.
                                                                                          Цитата Ho Im @
                                                                                          Строка из одного символа тоже не является пустой. И однако же.

                                                                                          один символ строки - обычная переменная, которая при динамической типизации - равна нулю.

                                                                                          Цитата Ho Im @
                                                                                          Почему PHP считает нужным привести строку "0" сперва в целочисленный, а затем в булевский тип, но строку "0.0" в вещественный не хочет приводить и сразу приводит в булевский? Чем именно целочисленный тип такой особый?

                                                                                          Это ты как узнал, что там происходит? :blink:

                                                                                          Цитата Ho Im @
                                                                                          тогда как если $foo — это объект, реализующий ArrayAccess, то я не смогу этого сделать?

                                                                                          Ээээм, что? :wacko: Из объекта делаешь массив?
                                                                                            Цитата Serafim @
                                                                                            один символ строки - обычная переменная, которая при динамической типизации - равна нулю.

                                                                                            То есть, "0" — обычная, а "00" — необычная? В PHP есть отдельный тип «односимвольная строка»? А если это "0" в UTF-16? Почему пробел не считается пустым? Почему (это вообще высший пилотаж) пустым не считается символ \0? Откуда вообще исключение, что строка из одного ASCII-символа "0" — это false?

                                                                                            Далее. Почему false при приведении в строку кастуется в пустую строку, а true — в "1"? Почему не "0" и "1"? Почему не "true" и "false"?

                                                                                            Дальше еще лучше. Вот прекрасный пример логичности логических типов похапэ из комментариев к официальному букварю.

                                                                                            ExpandedWrap disabled
                                                                                              var_dump(0 == 1); // false
                                                                                              var_dump(0 == (bool)'all'); // false
                                                                                              var_dump(0 == 'all'); // TRUE, take care
                                                                                              var_dump(0 === 'all'); // false


                                                                                            Это очень весело, учитывая, что и левый, и правый параметры в var_dump() могут быть формальными параметрами функции и туда может попасть что угодно. Учитывать все неувязки — это очень легко увеличивает объем кода раза эдак в два, особенно если пишешь не для себя.

                                                                                            Я знаю ответ на эти вопросы, это стандартный ответ разработчиков похапэ почти на все неувязки: «да, мы тут лоханулись, но если мы все сделаем правильно, то куча существующего кода сломается и нам устроят холокост».

                                                                                            А разгадка одна — безблагодатность постоянное втыкание очередных костылей вместо продумывания архитектуры языка и среды.

                                                                                            Цитата Serafim @
                                                                                            Это ты как узнал, что там происходит? :blink:

                                                                                            А что, нельзя было знать? ;-)

                                                                                            Цитата Serafim @
                                                                                            Ээээм, что? :wacko: Из объекта делаешь массив?

                                                                                            Да вот где-то так.
                                                                                              Цитата Ho Im @
                                                                                              var_dump(0 == 'all'); // TRUE, take care
                                                                                              var_dump(0 === 'all'); // false

                                                                                              :blink: ничёссе :crazy:
                                                                                                Проект на стадии завершения :)
                                                                                                Как это работает.

                                                                                                1) Устанавливаем среду запуска (так же как flash для swf файлов к примеру)
                                                                                                Прикреплённый файлПрикреплённый файл1.jpg (160,77 Кбайт, скачиваний: 584)

                                                                                                Прикреплённый файлПрикреплённый файл2.jpg (67,11 Кбайт, скачиваний: 590)

                                                                                                Прикреплённый файлПрикреплённый файл3.jpg (66,55 Кбайт, скачиваний: 580)

                                                                                                2) Когда среда установлена - можно запускать любые приложения на языке php. К примеру вот ну очень маленький текстовый редактор. Написан он был за 10 минут (против овер 100500 на C++\C# и проч. с таким же дизайном и функционалом)
                                                                                                Прикреплённый файлПрикреплённый файл4.jpg (62,31 Кбайт, скачиваний: 490)

                                                                                                3) Двойным кликом запускаем и набираем что-нибудь:
                                                                                                Прикреплённый файлПрикреплённый файл5.jpg (47,7 Кбайт, скачиваний: 590)

                                                                                                4) Нажимаем "Сохранить". Выбираем куда сохранить и нажимаем "ОК". (к примеру на рабочий стол)
                                                                                                Прикреплённый файлПрикреплённый файл6.jpg (64,78 Кбайт, скачиваний: 603)

                                                                                                5) Запускаем его с помощью Xphp и видим тоже самое, что в п.3 :) Вуаля!

                                                                                                Добавлено
                                                                                                Среда весит 15 метров, поэтому сюда не выложить. Но если интересно - могу кинуть на какую-нибудь файлопомойку
                                                                                                Сообщение отредактировано: Serafim -
                                                                                                  Цитата Serafim @
                                                                                                  Но если интересно - могу кинуть на какую-нибудь файлопомойку

                                                                                                  кидай) хочу пощупать :D
                                                                                                    Цитата Serafim @
                                                                                                    против овер 100500 на C++\C# и проч. с таким же дизайном и функционалом

                                                                                                    Судя по скрину фугкционал там минимальный, и откуда овер-то возник, на шарпе за тоже время такой минимализм сваять можно
                                                                                                      Цитата kanes @
                                                                                                      Судя по скрину фугкционал там минимальный

                                                                                                      ну естественно :) Но можно и замутить нечто более крутое за то же время)

                                                                                                      Добавлено
                                                                                                      Цитата kanes @
                                                                                                      откуда овер-то возник

                                                                                                      Овер возник только для разработки такого же стиля. Придётся из винапи или gdi+ что-нибудь мутить, ибо стандартные кнопки таким модификациям не подвергаются ;)
                                                                                                        Цитата Serafim @
                                                                                                        Овер возник только для разработки такого же стиля. Придётся из винапи или gdi+ что-нибудь мутить, ибо стандартные кнопки таким модификациям не подвергаются ;)

                                                                                                        А зачем модифицировать стандартные кнопки? Это по-моему самая низко-приоритетная задача из всех возможных при разработке :) А фреймворков для не использования WinAPI - дофига, начиная от многострадального MFC и кончая .NET.

                                                                                                        Хотя в той же Java как я понимаю, не требуется никаких GDI+, там это встроенная фишка Swing. У Qt, предполагаю, тоже есть подобное.

                                                                                                        Добавлено
                                                                                                        Куда кстати интересен обратный подход - использование обычных приложений в Web (тренд именно такой) - например GTK3 поддерживает рендеринг в HTML5
                                                                                                          Цитата Мяут-Настоящий @
                                                                                                          Куда кстати интересен обратный подход - использование обычных приложений в Web

                                                                                                          Для клиента уже сейчас используют HTML - Chrome и ChromeOS, Win8\Metro App, даже игры используют элементы веба - Ведьмак 2, StarCraft 2...
                                                                                                          Обратный же процесс - полная чушь. Создать свой собственный уникальный интерфейс можно за пол дня на HTML. В обратном порядке - пару недель

                                                                                                          Добавлено
                                                                                                          Вообще система рассчитана для разработки приложений в короткие сроки, когда совершенно не важна производительность. А веб - та среда, где именно это и происходит.

                                                                                                          Добавлено
                                                                                                          Не, ну производительность конечно важна, но не в такой степени))
                                                                                                            Выложил: Бета версия

                                                                                                            После установки - все файлы с расширением *.xphp могут запускаться как php :)
                                                                                                              Обновление версии до 2.0.1:
                                                                                                              Прикреплённый файлПрикреплённый файлsources.part1.rar (4 Мбайт, скачиваний: 162)
                                                                                                              Прикреплённый файлПрикреплённый файлsources.part2.rar (1,55 Мбайт, скачиваний: 161)

                                                                                                              Добавлено
                                                                                                              Устройство враппера (рендер HTML\JS\CSS):
                                                                                                              * режим по умолчанию - IE7, для перевода в IE9 в каталоге лежит ключик реестра.
                                                                                                              - Клиент запускает сервер на свободном порте
                                                                                                              - После запуска - идёт запрос на открытие страницы и отображение её в компоненте
                                                                                                              - Клиент принимает 5 команд:
                                                                                                              1) Свернуть (#min)
                                                                                                              2) Развернуть (#max)
                                                                                                              3) Нормальный размер (#normal)
                                                                                                              4) Закрыть (#exit)
                                                                                                              5) Ресайз (#resize:100:100)

                                                                                                              - После получение команды на закрытие - сервер останавливается.

                                                                                                              Устройство системы:
                                                                                                              В каталоге sources/ лежат исходники, после запуска программы - php собирается в phar архив, который кладётся в корень системы. Исходники будут собираться каждый раз, до тех пор, пока существуют php исходники в sources/. Вся статика (css/js/изображения и проч.) берётся из sources. У меня пока не получилось собрать её в архив. После сборки бинарника - php исходники можно удалить.

                                                                                                              Весит: около 5 метров
                                                                                                              Язык: PHP 5.5
                                                                                                              Расширения:
                                                                                                              - COM и .NET
                                                                                                              - Curl
                                                                                                              - Mbstring
                                                                                                              - Sqlite3 и PDO Sqlite
                                                                                                              - Sockets


                                                                                                              Скриншот программы:
                                                                                                              user posted image
                                                                                                                Обновил ветку в репозитории: https://github.com/SerafimArts/Xphp
                                                                                                                  Добавил в ветку сырцы враппера сервера: https://github.com/SerafimArts/Xphp/tree/master/wrapper
                                                                                                                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                                                                                                  0 пользователей:


                                                                                                                  Рейтинг@Mail.ru
                                                                                                                  [ Script execution time: 0,1213 ]   [ 26 queries used ]   [ Generated: 23.04.24, 13:24 GMT ]