Не только Web
      Ruby GUI
Разработка Desktop приложений на Ruby
Типы приложений


‣ Bindings (RubyTk, RubyGTK2, QtRuby, more..)
‣ HTML(5) based (Bowline, TideSDK)
‣ Native applications (MacRuby/RubyCocoa)
Bindings


«Нет ничего хуже четкого образа нечеткой идеи»
                                      Апсель Адамс
Разнообразие
‣ RubyTk
‣ RubyGTK2
‣ RubyFox
‣ QtRuby
‣ wxRuby
‣ Ваша привязка...
Hello World


require 'Qt4'

app = Qt::Application.new(ARGV)

hello = Qt::PushButton.new('Hello World!')
hello.resize(100, 30)
hello.show()

app.exec()
Посложнее

    signals 'hit()', 'missed()', 'angleChanged(int)', 'forceChanged(int)',
      'canShoot(bool)'

    slots   'setAngle(int)', 'setForce(int)', 'shoot()', 'moveShot()',
      'newTarget()', 'setGameOver()', 'restartGame()'

    #...

    def restartGame()
      if isShooting()
        @autoShootTimer.stop()
      end
      
      @gameEnded = false

      update()
      emit canShoot( true )
    end
Bindings Выводы


‣ Активность практически на нуле.
‣ Нет каких-либо полноценных фреймворков
‣ Урезанные возможности
HTML(5)/CSS3 Based



Bowline   TideSDK
Bowline
         http://bowlineapp.com/




     Все это - HTML
Ruby + WebKit + Javascript
    и никакой магии!
Bowline
         http://bowlineapp.com/




     Все это - HTML
Ruby + WebKit + Javascript
    и никакой магии!
Bowline
                     http://bowlineapp.com/




‣ Имеет MVC архитектуру
‣ Представления написаны на HTML/Javascript
‣ Binding HTML <-> Ruby
‣ Кроссплатформенный (OSX/Linux)          (Windows... sorry...)




‣ Приложение можно упаковать (Portable)
Bowline
                       http://bowlineapp.com/

                         А где Ruby?

‣ Генерируем связь
  >> bowline-gen binder users

‣ Получится что-то вроде
  class UsersBinder < Bowline::Binders::Base
  end

‣ И в представлении с помощью JS обращаемся
  $('#users').bowlineChain('UsersBinder');
  $('#users').invoke('admins');
  $('#users div:first').invoke('instance_meth', 'arg1');
Bowline
                             http://bowlineapp.com/


‣ Проект на GitHub
  https://github.com/maccman/bowline


‣ Пример Twitter клиента
  https://github.com/maccman/bowline-twitter
TideSDK




http://www.tidesdk.org/
TideSDK

‣ Бывший Titanium Desktop
‣ Возможность включения Ruby|Python|Php скриптов
‣ Полный доступ к файловой системе
‣ Кроме AJAX есть и низкоуровневый доступ к сети
‣ API для доступа к многим функциям рабочего стола и
  окружения
TideSDK
<html>
"   <title>I love Matz</title>
"   <script>
"   "   function my_global_foo(a)
"   "   {
"   "   "   return 'you '+a;
"   "   }
"   "   var my_global_var = 'i love you';
"   </script>
<body>
"   <div id="a">A</div>
"   <script src="ruby.rb" type="text/ruby"></script>
"   <script type="text/ruby">
"   "   def inline_document
"   "   "   document.getElementById 'a'
"   "   end
"   </script>
"   <script>
"   "   window.inline_test_result = inline_document().innerHTML;
"   "   window.external_test_result = external_document().innerHTML;
"   "   window.require_file_module_result = require_file_module()
"   "   window.require_file_sub_file_module_result = require_sub_file_module()
"   "   window.test_gem_result = test_gem()
"   </script>
</body>
</html>
TideSDK
TideSDK




 http://www.wunderlist.com/
‣ Реализация Ruby 1.9.x для Mac Os X
‣ Интеграция Objective-C фреймворков и библиотек
‣ Интеграция с Xcode 4.3
‣ Just-in-time compilation (JIT, компиляция)
‣ Включение MacRuby(и гемов) в само приложение (bundle)
‣ Публикация приложений в AppStore
‣ Тестирование (MiniTest, DTrace)
После установки
появляется новый пункт меню
Ruby gui
Ruby gui
MANNING




‣ Сайт проекта
  https://github.com/MacRuby/MacRuby


‣ Много полезного...
  https://github.com/MacRuby/MacRuby/wiki     IN ACTION
‣ ... и примеров
  https://github.com/MacRuby/MacRubySamples
                                                  Brendan G. Lim
                                              WITH Jerry Cheung
                                               AND Jeremy McAnally
MANNING




‣ Сайт проекта
  https://github.com/MacRuby/MacRuby


‣ Много полезного...
  https://github.com/MacRuby/MacRuby/wiki     IN ACTION
‣ ... и примеров
  https://github.com/MacRuby/MacRubySamples
                                                  Brendan G. Lim
                                              WITH Jerry Cheung
                                               AND Jeremy McAnally
Спасибо за внимание!


                  Презентацию подготовил
                          Кириллов
                          Александр

More Related Content

PDF
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко
PDF
Dump-IT Загрузка и инициализация JavaScript
PPTX
nw.js введение в кросс-платформенные десктопные приложения на javascript (mo...
PDF
Tizen Mobile Application Lifecycle by Kirill Danilov
PDF
Алексей Фомкин, Практическое применение Web Workers
PPTX
Docker-контейнеризация: от local до production
PDF
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко
Dump-IT Загрузка и инициализация JavaScript
nw.js введение в кросс-платформенные десктопные приложения на javascript (mo...
Tizen Mobile Application Lifecycle by Kirill Danilov
Алексей Фомкин, Практическое применение Web Workers
Docker-контейнеризация: от local до production
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...

What's hot (20)

PPTX
JavaScript. Асинхронное программирование. Promise & Deferred
PDF
Фронтенд разработка без боли
PPTX
SubmitJS: Vue.js - make frontend developement great again. Andrii Grachov
PDF
"Vue.js или как наконец отказаться от React"
PPTX
Async Javascript
PDF
Проблемы при работе с разными версиями Ruby и разными gem
PPTX
WebGL - создание 3D графики в браузере
PDF
Современный фронтенд -- как не утонуть в море хайпа?
PDF
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
PDF
обзор Vagrant и docker
PPT
Serge P Nekoval Grails
PPTX
Web app syncronizations, Sockets, tricks and hacks
PDF
Ivan Shirokov
PDF
HTML GL - возьмите столько FPS, сколько вам нужно, и немного эффектов в прида...
PDF
Инновации и JavaScript
PDF
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)
PDF
Артем Курбатов — Мастер-класс «Динамический БЭМ-сайт на Node.js»
PDF
Павел Юрийчук - Разработка приложений под мобильные браузеры
PDF
The art of Node.js or how to do something cool using public data by Ilya Zapr...
PDF
Optimizaciya vremeni zagruzki_azat_razetdinov
JavaScript. Асинхронное программирование. Promise & Deferred
Фронтенд разработка без боли
SubmitJS: Vue.js - make frontend developement great again. Andrii Grachov
"Vue.js или как наконец отказаться от React"
Async Javascript
Проблемы при работе с разными версиями Ruby и разными gem
WebGL - создание 3D графики в браузере
Современный фронтенд -- как не утонуть в море хайпа?
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
обзор Vagrant и docker
Serge P Nekoval Grails
Web app syncronizations, Sockets, tricks and hacks
Ivan Shirokov
HTML GL - возьмите столько FPS, сколько вам нужно, и немного эффектов в прида...
Инновации и JavaScript
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)
Артем Курбатов — Мастер-класс «Динамический БЭМ-сайт на Node.js»
Павел Юрийчук - Разработка приложений под мобильные браузеры
The art of Node.js or how to do something cool using public data by Ilya Zapr...
Optimizaciya vremeni zagruzki_azat_razetdinov
Ad

Similar to Ruby gui (20)

PDF
Изоморфные react-приложения
PDF
Расширь границы возможного вместе с Gradle
PDF
2014 Jeeconf - Geb Spock
PDF
Тестирование серверной конфигурации
PDF
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
ODP
The Great Migration by Baruch Sadogursky
PPTX
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
PPTX
Docker в работе: взгляд на использование в Badoo через год
PPTX
Docker в работе: взгляд на использование в Badoo через год
PPTX
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...
PDF
GitLab, Prometheus и Grafana с Kubernetes
PDF
Docker integration into Badoo
PDF
Docker в Badoo: ПМЖ или временная регистрация
PPTX
Изоморфные React-приложения производительность и масштабирование / Денис Изма...
PDF
Практическое применение WebWorkers / Алексей Фомкин (Data Monsters)
PDF
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
PDF
Изоморфные React-приложения: производительность и масштабирование
PDF
State of the Standardized Web
PDF
Баба Яга против!
PDF
Эволюционный дизайн. Joker Students Day 2016
Изоморфные react-приложения
Расширь границы возможного вместе с Gradle
2014 Jeeconf - Geb Spock
Тестирование серверной конфигурации
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
The Great Migration by Baruch Sadogursky
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Docker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через год
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...
GitLab, Prometheus и Grafana с Kubernetes
Docker integration into Badoo
Docker в Badoo: ПМЖ или временная регистрация
Изоморфные React-приложения производительность и масштабирование / Денис Изма...
Практическое применение WebWorkers / Алексей Фомкин (Data Monsters)
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
Изоморфные React-приложения: производительность и масштабирование
State of the Standardized Web
Баба Яга против!
Эволюционный дизайн. Joker Students Day 2016
Ad

More from Alexander Kirillov (9)

PDF
Rom - Ruby Object Mapper
PDF
Окружение разработчика - от виртуализации к контейнеризации
PDF
Polymer - New Era of Web Development
PDF
Виртуализация как инструмент разработчика
PDF
Application deployment & configuration management
PDF
XSLT. Basic.
PDF
Предметно-ориентированные языки программирования (DSL)
KEY
Securing Rails Applications
Rom - Ruby Object Mapper
Окружение разработчика - от виртуализации к контейнеризации
Polymer - New Era of Web Development
Виртуализация как инструмент разработчика
Application deployment & configuration management
XSLT. Basic.
Предметно-ориентированные языки программирования (DSL)
Securing Rails Applications

Ruby gui

  • 1. Не только Web Ruby GUI Разработка Desktop приложений на Ruby
  • 2. Типы приложений ‣ Bindings (RubyTk, RubyGTK2, QtRuby, more..) ‣ HTML(5) based (Bowline, TideSDK) ‣ Native applications (MacRuby/RubyCocoa)
  • 3. Bindings «Нет ничего хуже четкого образа нечеткой идеи» Апсель Адамс
  • 4. Разнообразие ‣ RubyTk ‣ RubyGTK2 ‣ RubyFox ‣ QtRuby ‣ wxRuby ‣ Ваша привязка...
  • 5. Hello World require 'Qt4' app = Qt::Application.new(ARGV) hello = Qt::PushButton.new('Hello World!') hello.resize(100, 30) hello.show() app.exec()
  • 6. Посложнее signals 'hit()', 'missed()', 'angleChanged(int)', 'forceChanged(int)',   'canShoot(bool)' slots 'setAngle(int)', 'setForce(int)', 'shoot()', 'moveShot()',   'newTarget()', 'setGameOver()', 'restartGame()' #... def restartGame()   if isShooting()     @autoShootTimer.stop()   end      @gameEnded = false   update()   emit canShoot( true ) end
  • 7. Bindings Выводы ‣ Активность практически на нуле. ‣ Нет каких-либо полноценных фреймворков ‣ Урезанные возможности
  • 9. Bowline http://bowlineapp.com/ Все это - HTML Ruby + WebKit + Javascript и никакой магии!
  • 10. Bowline http://bowlineapp.com/ Все это - HTML Ruby + WebKit + Javascript и никакой магии!
  • 11. Bowline http://bowlineapp.com/ ‣ Имеет MVC архитектуру ‣ Представления написаны на HTML/Javascript ‣ Binding HTML <-> Ruby ‣ Кроссплатформенный (OSX/Linux) (Windows... sorry...) ‣ Приложение можно упаковать (Portable)
  • 12. Bowline http://bowlineapp.com/ А где Ruby? ‣ Генерируем связь >> bowline-gen binder users ‣ Получится что-то вроде class UsersBinder < Bowline::Binders::Base end ‣ И в представлении с помощью JS обращаемся $('#users').bowlineChain('UsersBinder'); $('#users').invoke('admins'); $('#users div:first').invoke('instance_meth', 'arg1');
  • 13. Bowline http://bowlineapp.com/ ‣ Проект на GitHub https://github.com/maccman/bowline ‣ Пример Twitter клиента https://github.com/maccman/bowline-twitter
  • 15. TideSDK ‣ Бывший Titanium Desktop ‣ Возможность включения Ruby|Python|Php скриптов ‣ Полный доступ к файловой системе ‣ Кроме AJAX есть и низкоуровневый доступ к сети ‣ API для доступа к многим функциям рабочего стола и окружения
  • 16. TideSDK <html> " <title>I love Matz</title> " <script> " " function my_global_foo(a) " " { " " " return 'you '+a; " " } " " var my_global_var = 'i love you'; " </script> <body> " <div id="a">A</div> " <script src="ruby.rb" type="text/ruby"></script> " <script type="text/ruby"> " " def inline_document " " " document.getElementById 'a' " " end " </script> " <script> " " window.inline_test_result = inline_document().innerHTML; " " window.external_test_result = external_document().innerHTML; " " window.require_file_module_result = require_file_module() " " window.require_file_sub_file_module_result = require_sub_file_module() " " window.test_gem_result = test_gem() " </script> </body> </html>
  • 19. ‣ Реализация Ruby 1.9.x для Mac Os X ‣ Интеграция Objective-C фреймворков и библиотек ‣ Интеграция с Xcode 4.3 ‣ Just-in-time compilation (JIT, компиляция) ‣ Включение MacRuby(и гемов) в само приложение (bundle) ‣ Публикация приложений в AppStore ‣ Тестирование (MiniTest, DTrace)
  • 23. MANNING ‣ Сайт проекта https://github.com/MacRuby/MacRuby ‣ Много полезного... https://github.com/MacRuby/MacRuby/wiki IN ACTION ‣ ... и примеров https://github.com/MacRuby/MacRubySamples Brendan G. Lim WITH Jerry Cheung AND Jeremy McAnally
  • 24. MANNING ‣ Сайт проекта https://github.com/MacRuby/MacRuby ‣ Много полезного... https://github.com/MacRuby/MacRuby/wiki IN ACTION ‣ ... и примеров https://github.com/MacRuby/MacRubySamples Brendan G. Lim WITH Jerry Cheung AND Jeremy McAnally
  • 25. Спасибо за внимание! Презентацию подготовил Кириллов Александр

Editor's Notes