Ударил и залил полностью опять в который раз свой КПК - HP4700 и хоть бы хны. Он был у меня в сауне даже. В результате удара вылетела и утерялась sd карточка на гиг. Всё работает - хорошо, карточка потерялась плохо. HP техника - я лучше КПК не видел.
А сейчас у меня тема написать платформеннонезависимый клиент под свой же проект. Итого строго остановился на клиент-серверном ruby приложении. Во первых реализовать клиент-сервер на руби - это раз плюнуть и описано практически во всех пособиях для слабоумных. Обязательно TCP/IP соединение, и никаких HTTP запросов иначе, вот ещё - нагружать http сервер ajax херней каждые 5 секунд? Пройденный этап. Браузер начинает медленно кушать память и процессорное время и я устал бороться. Вот поэтому я выбрал руби, задача специфическая и не очень интересная. Интерфейс отрисовывал в ,
похоже на Delphi, кому то покажется похоже на ASP, с которым я не знаком. Интерфейс экспортируется в разновидность XML = (xrc) - вот это самый кайф, который потом легко подхватывается руби программой, например, вот так.
(скоро приделаю форматирование, пока так, пока Ваш браузер теряет форматирование xml можно посмотреть картинку )
моего xrc файла, описывающего кроссплатформенный интерфейс - можно загрузить его в этот DialogBlocks
Всё достаточно тупо.
Ну и вывести реальное приложение, чтобы оно запустилось
Ruby code
——————————————————
-
-
begin
-
require ‘wx’
-
rescue LoadError => no_wx_err
-
begin
-
require ‘rubygems’
-
require ‘wx’
-
rescue LoadError
-
raise no_wx_err
-
end
-
end
-
-
#
-
# Basic Frame Class. This creates the dialog window
-
#
-
class MainFrame < Wx::Frame
-
-
def initialize(parent)
-
# To load a layout defined in XRC into a Ruby subclass of Frame,
-
# first call the empty constructor. All the details of size,
-
# title, position and so on are loaded from the XRC by the call to
-
# load_frame_subclass. Using a non-empty constructor will cause
-
# errors on GTK.
-
super()
-
-
icon_file = File.join( File.dirname(__FILE__), "ico.png")
-
# PNG can be used on all platforms, but icon type must be specified
-
# to work on Windows; OS X doesn’t have "Frame" icons.
-
self.icon = Wx::Icon.new(icon_file, Wx::BITMAP_TYPE_PNG)
-
-
$xml.load_frame_subclass(self,nil,‘ID_WXFRAME’)
-
-
def xrcid_to_window(xrc_id)
-
Wx::Window.find_window_by_id(Wx::xrcid(xrc_id), self)
-
end
-
-
end
-
end
-
-
#
-
# Application class.
-
#
-
class ClientApp < Wx::App
-
-
def on_init
-
# Create a resource handler
-
$xml = Wx::XmlResource.get();
-
$xml.init_all_handlers();
-
-
# Load a resource file from the script’s directory
-
xrc_file = File.join( File.dirname( __FILE__ ), ‘operator.xrc’ ) # ключевое слово
-
-
$xml.load(xrc_file)
-
-
-
# Show the main frame.
-
$main = MainFrame.new(self)
-
$main.show(true)
-
-
end
-
end
-
-
ClientApp.new().main_loop()
-
—————————–
Можно пропустить всякие иконки, но общий смысл ясен.
Дальше в принципе понятно - навешать events на кнопки. Я сразу разбил классы на init, visual, events папки, стараюсь (без практики) применять mvc и dry к offline проекту. Ориентировочно, веб проект к себе более строг бывает - это было для меня удивлением. Но серверная часть - тот же руби, нормально написаный демон multithreaded. Обращается к той же самой базе данных mysql, с какой проживает веб интерфейс на php.
ну ты монстр!!!
С Руби Я пока ещё на Вы=) Заодно отшлифую, привет!
Молодец
Все очень понятно изложено классически
Про то, что веб сложнее, для меня не новость. Такое впечатление, что ты раньше для ОС не программировал
Да я забыл уже как оно=)