SlideShare a Scribd company logo
Titanium Studio Deep Dive


       Ingo Muschenetz
Photo: babawheels.com




Pimp My RIDE
Customizing your Titanium Studio
Director, Tools
Engineering,
Appcelerator

Leads both the Titanium
Studio and Aptana Studio
products and communities

10+ years designing
developer tools and
experiences
Titanium Studio



Aptana Studio



Eclipse Platform
Titanium Studio
Mobile/Desktop platform support specific to Titanium Development. Titanium-
specific content assist, Android/iOS debugging.




Aptana Studio
Web language support(HTML, JS, CSS, Ruby, PHP, Python). FTP/SFTP, JavaScript
debugging infrastructure. Git, Rubles.




Eclipse Platform
IDE Shell, project management, basic editor architecture. Default preference
layout. Toolbars. Update mechanisms.
What is a Ruble?

           Scripting interface to Studio

                  Coded in Ruby

                   Contributes:


                                              Content
  Themes    Commands   Snippets   Templates
                                               Assist
Creating a New Ruble

1.   File > New > Ruby Project
2.   Name your Ruble. Click Next
3.   Select the Ruble Template
4.   Click Finish

Ruble template is itself a template contributed by a Ruble
Modifying an Existing Ruble

1. Commands > Ruble Name > Edit this bundle…
2. Ruble cloned into your workspace
3. Update to latest version with Git pulls

    http://wiki.appcelerator.org/display/tis/Rubles
Scopes
CSS Document:

body!
{!
 !    background:#000000;!
 !    text-align:left;!
}!

1.  Colorize “background”?
2.  Specify a valid region for property proposals?
Scopes

"   Scopes describe a subset of the document tree
"   Often closely map to language tokens
"   Scopes provide colorization and context
  "   Themes collect scope colorization rules
  "   Content assist/commands use scope context


    http://wiki.appcelerator.org/display/tis/Themes
Document Scope


body!
{!
 !    background   :   #000000   ;!
 !    text-align   :   left      ;!
}!



source.css
Token Scopes
          support.type.property-name.css
                                           constant.other.color.rgb-value.css

body!




                                                                     punctuation.rule.terminator.css
{!
 !    background                 :     #000000                  ;!
 !    text-align                 :     left                     ;!
}!



entity.name.tag.css                        support.constant.property-value.css

                                punctuation.separator.key-value.css
Meta Scopes
          meta.property-name.css       meta.property-value.css


body!
{!
 !    background                   :   #000000              ;!
 !    text-align                   :   left                 ;!
}!




meta.selector.css                  meta.property-list.css
Scope Example




  Colorization and Context
  "   source.css
  "   support.type.property-name.css

  Context
  "   meta.property-list.css
  "   meta.property-name.css
Matching Rules

 Most specific scope matches first
            text.html vs. text


       Descendant selectors
           text.html source.php
Embedded Scopes
text.html

<html>!
 !<body>!
 ! !<?php!
 ! !!
 ! !?> !!
      !
 !</body>!        source.php

</html>!
Scopes are Hierarchial
           Generally follow a convention of
       category.sub-category.language-extension


 comment                    All comments



 comment.line               All line comments



                            All line comments in
 comment.line.js
                            JavaScript files
The Properties View helps discern relevant scopes
Commands

A script triggered manually or automatically

Execute on:
"   Menu selection
"   Content assist
"   Tab activation
"   File listener
"   Eclipse “Command” execution
Sample Commands

"       Compile CoffeeScript
"       Post editor selection as gist
"       Execute editor selection as bash command
"       Strip HTML tags from a document
"       Run JSHint/HTMLTidy
"       Deploy app to cloud service
"       Execute any Java, Ruby, or Eclipse code

http://wiki.appcelerator.org/display/tis/Ruble+Cookbook
Command Example
command 'Swap Case' do |cmd|!
     cmd.key_binding = 'SHIFT+CTRL+A'!
     cmd.scope = 'source'!
     cmd.input = :selection!
     cmd.output = :replace_selection!
     cmd.invoke do |context|!
       word = $stdin.gets!
       context.exit_discard if word.nil?!
       print word.swapcase!
  end!
end!
Command Demo
Inputs & Outputs
Input Specifiers   Output Specifiers
selection          insert_as_text
left_character     insert_as_snippet
right_character    replace_selection
word               replace_document
line               copy_to_clipboard
document           show_as_html
clipboard          show_as_tooltip
none               create_new_document
                   discard
                   replace_line
                   replace_word
Listener Example
command "Show Save Information" do |cmd|!
  cmd.input = :none!
  cmd.output = :discard!
  cmd.trigger = :execution_listener,    !
                 "org.eclipse.ui.file.save"!
  cmd.invoke do |context|!
    # code here!
  end!
end !
Snippets
Snippets focus on inserting small pieces of content.

          Commonly use activation triggers (tab)

Support:
"   Tab stops
"   Mirrored variables
"   Very similar to TextMate snippets

    http://wiki.appcelerator.org/display/tis/Snippets
Snippet Example
snippet "background: color" do |s|!
  s.scope = "meta.property-list.css" !
  s.trigger = "bgr"!
  s.expansion = "background:${1:red};$0"!
end!
Snippet Example (Mirrored)
snippet "background-foreground" do |s|!
  s.scope = "meta.property-list.css" !
  s.trigger = "bgfr"!
  s.expansion = "background: ${1:red};!
 ! ! ! ! !      foreground: ${1}$0"!
end!
Snippet Demo
Project Templates
Provide default content for a new project

"   Packaged as .zip file
"   Variable substitutions
"   Contributed via Ruble or Extension point

   http://wiki.appcelerator.org/display/tis/Templates
Project Template Example
project_template "Ruble Template" do |t|!
  t.type = :ruby!
  t.location = "templates/ruble_template.zip"!
  t.description = "A simple Ruble sample"!
  t.replace_parameters = true!
end!
File Templates
Provide default content for a particular file type

"   Variable substitutions
"   Contributed via Ruble

   http://wiki.appcelerator.org/display/tis/Templates
File Template Example
template("HTML 5 Template") do |t|!
  t.filetype = "*.html"!
  t.location = "templates/html5.html"!
end!
JSCA Files

"   3rd-party library content assist
"   XML- and JSON-based
"   Forthcoming tools to generate from TiDoc

      http://wiki.appcelerator.org/display/tis/JSCA
                   +1.0+Specification
JSCA Example
{!
  "types": [!
    {!
       "name":
"Titanium.Android.NotificationManager", !
       "examples": [], !
       "functions": [!
         {!
            "name": "addEventListener", !
            "parameters": [!
              {!
                 "name": "name", !
                 "usage": "", !
                 "type": "String", !
                 "description": "name of the event"!
              },!
Documentation Example
In bundle.rb:

require 'ruble'!

bundle 'Titanium' do |bundle|!
  bundle.project_build_path["Titanium 1.8"] = !
      "#{File.dirname($0)}/titanium.1.8.jsca"!
end!
Plugins

"   Eclipse-based so most Eclipse plugins work
   "   Database Explorer
   "   Mobile Tooling
"   Java extensibility via extension points
"   Eclipse Marketplace
Resources

Titanium-specific Rubles
"   https://github.com/mschmulen/appfab.ruble
"   https://github.com/aptana/titanium.ruble

Additional Rubles:
"   https://github.com/aptana/
AppFab Demo
Ingo Muschenetz: Titanium Studio Deep Dive

More Related Content

What's hot

ePub 3, HTML 5 & CSS 3 (+ Fixed-Layout)
ePub 3, HTML 5 & CSS 3 (+ Fixed-Layout)ePub 3, HTML 5 & CSS 3 (+ Fixed-Layout)
ePub 3, HTML 5 & CSS 3 (+ Fixed-Layout)
Clément Wehrung
 
Wordcamp Fayetteville Pods Presentation (PDF)
Wordcamp Fayetteville Pods Presentation (PDF)Wordcamp Fayetteville Pods Presentation (PDF)
Wordcamp Fayetteville Pods Presentation (PDF)
mpvanwinkle
 
Basics of Front End Web Dev PowerPoint
Basics of Front End Web Dev PowerPointBasics of Front End Web Dev PowerPoint
Basics of Front End Web Dev PowerPoint
Sahil Gandhi
 

What's hot (20)

Custom WordPress theme development
Custom WordPress theme developmentCustom WordPress theme development
Custom WordPress theme development
 
Web performance essentials - Goodies
Web performance essentials - GoodiesWeb performance essentials - Goodies
Web performance essentials - Goodies
 
About Best friends - HTML, CSS and JS
About Best friends - HTML, CSS and JSAbout Best friends - HTML, CSS and JS
About Best friends - HTML, CSS and JS
 
Demystifying WordPress Conditional Tags
Demystifying WordPress Conditional TagsDemystifying WordPress Conditional Tags
Demystifying WordPress Conditional Tags
 
WordPress Theme Development for Designers
WordPress Theme Development for DesignersWordPress Theme Development for Designers
WordPress Theme Development for Designers
 
PyGrunn 2017 - Django Performance Unchained - slides
PyGrunn 2017 - Django Performance Unchained - slidesPyGrunn 2017 - Django Performance Unchained - slides
PyGrunn 2017 - Django Performance Unchained - slides
 
ePub 3, HTML 5 & CSS 3 (+ Fixed-Layout)
ePub 3, HTML 5 & CSS 3 (+ Fixed-Layout)ePub 3, HTML 5 & CSS 3 (+ Fixed-Layout)
ePub 3, HTML 5 & CSS 3 (+ Fixed-Layout)
 
Wordcamp Fayetteville Pods Presentation (PDF)
Wordcamp Fayetteville Pods Presentation (PDF)Wordcamp Fayetteville Pods Presentation (PDF)
Wordcamp Fayetteville Pods Presentation (PDF)
 
Sass Essentials at Mobile Camp LA
Sass Essentials at Mobile Camp LASass Essentials at Mobile Camp LA
Sass Essentials at Mobile Camp LA
 
jQuery from the very beginning
jQuery from the very beginningjQuery from the very beginning
jQuery from the very beginning
 
Custom Post Types and Taxonomies in WordPress
Custom Post Types and Taxonomies in WordPressCustom Post Types and Taxonomies in WordPress
Custom Post Types and Taxonomies in WordPress
 
The Way to Theme Enlightenment 2017
The Way to Theme Enlightenment 2017The Way to Theme Enlightenment 2017
The Way to Theme Enlightenment 2017
 
WordPress theme development from scratch : ICT MeetUp 2013 Nepal
WordPress theme development from scratch : ICT MeetUp 2013 NepalWordPress theme development from scratch : ICT MeetUp 2013 Nepal
WordPress theme development from scratch : ICT MeetUp 2013 Nepal
 
Grok Drupal (7) Theming
Grok Drupal (7) ThemingGrok Drupal (7) Theming
Grok Drupal (7) Theming
 
Assetic (Symfony Live Paris)
Assetic (Symfony Live Paris)Assetic (Symfony Live Paris)
Assetic (Symfony Live Paris)
 
Ruby on Rails
Ruby on RailsRuby on Rails
Ruby on Rails
 
The Cascade, Grids, Headings, and Selectors from an OOCSS Perspective, Ajax ...
The Cascade, Grids, Headings, and Selectors from an OOCSS Perspective,  Ajax ...The Cascade, Grids, Headings, and Selectors from an OOCSS Perspective,  Ajax ...
The Cascade, Grids, Headings, and Selectors from an OOCSS Perspective, Ajax ...
 
Getting Started with DOM
Getting Started with DOMGetting Started with DOM
Getting Started with DOM
 
Basics of Front End Web Dev PowerPoint
Basics of Front End Web Dev PowerPointBasics of Front End Web Dev PowerPoint
Basics of Front End Web Dev PowerPoint
 
Grok Drupal (7) Theming - 2011 Feb update
Grok Drupal (7) Theming - 2011 Feb updateGrok Drupal (7) Theming - 2011 Feb update
Grok Drupal (7) Theming - 2011 Feb update
 

Similar to Ingo Muschenetz: Titanium Studio Deep Dive

GDI Seattle Intermediate HTML and CSS Class 1
GDI Seattle Intermediate HTML and CSS Class 1GDI Seattle Intermediate HTML and CSS Class 1
GDI Seattle Intermediate HTML and CSS Class 1
Heather Rock
 

Similar to Ingo Muschenetz: Titanium Studio Deep Dive (20)

Introduction to Drupal (7) Theming
Introduction to Drupal (7) ThemingIntroduction to Drupal (7) Theming
Introduction to Drupal (7) Theming
 
WEB DEVELOPMENT
WEB DEVELOPMENTWEB DEVELOPMENT
WEB DEVELOPMENT
 
MongoDB Munich 2012: MongoDB for official documents in Bavaria
MongoDB Munich 2012: MongoDB for official documents in BavariaMongoDB Munich 2012: MongoDB for official documents in Bavaria
MongoDB Munich 2012: MongoDB for official documents in Bavaria
 
Replacing Oracle with MongoDB for a templating application at the Bavarian go...
Replacing Oracle with MongoDB for a templating application at the Bavarian go...Replacing Oracle with MongoDB for a templating application at the Bavarian go...
Replacing Oracle with MongoDB for a templating application at the Bavarian go...
 
Spring 3 - An Introduction
Spring 3 - An IntroductionSpring 3 - An Introduction
Spring 3 - An Introduction
 
Puppet Camp Chicago 2014: Smoothing Troubles With Custom Types and Providers ...
Puppet Camp Chicago 2014: Smoothing Troubles With Custom Types and Providers ...Puppet Camp Chicago 2014: Smoothing Troubles With Custom Types and Providers ...
Puppet Camp Chicago 2014: Smoothing Troubles With Custom Types and Providers ...
 
GDI Seattle Intermediate HTML and CSS Class 1
GDI Seattle Intermediate HTML and CSS Class 1GDI Seattle Intermediate HTML and CSS Class 1
GDI Seattle Intermediate HTML and CSS Class 1
 
Programming languages asp.net
Programming languages asp.netProgramming languages asp.net
Programming languages asp.net
 
Le Wagon - Build your Landing Page in 2 hours
Le Wagon - Build your Landing Page in 2 hoursLe Wagon - Build your Landing Page in 2 hours
Le Wagon - Build your Landing Page in 2 hours
 
Solid and Sustainable Development in Scala
Solid and Sustainable Development in ScalaSolid and Sustainable Development in Scala
Solid and Sustainable Development in Scala
 
BP-6 Repository Customization Best Practices
BP-6 Repository Customization Best PracticesBP-6 Repository Customization Best Practices
BP-6 Repository Customization Best Practices
 
Solid And Sustainable Development in Scala
Solid And Sustainable Development in ScalaSolid And Sustainable Development in Scala
Solid And Sustainable Development in Scala
 
Creative Web 2 - CSS
Creative Web 2 - CSS Creative Web 2 - CSS
Creative Web 2 - CSS
 
Le Wagon - Landing page
Le Wagon - Landing pageLe Wagon - Landing page
Le Wagon - Landing page
 
Practical HTML5: Using It Today
Practical HTML5: Using It TodayPractical HTML5: Using It Today
Practical HTML5: Using It Today
 
Instagram filters (8 24)
Instagram filters (8 24)Instagram filters (8 24)
Instagram filters (8 24)
 
DSLs in JavaScript
DSLs in JavaScriptDSLs in JavaScript
DSLs in JavaScript
 
Le Wagon - 2h Landing
Le Wagon - 2h LandingLe Wagon - 2h Landing
Le Wagon - 2h Landing
 
Phoenix for Rails Devs
Phoenix for Rails DevsPhoenix for Rails Devs
Phoenix for Rails Devs
 
Advanced sass/compass
Advanced sass/compassAdvanced sass/compass
Advanced sass/compass
 

More from Axway Appcelerator

Codestrong 2012 keynote jonathan rende, appcelerator's vp of products
Codestrong 2012 keynote   jonathan rende, appcelerator's vp of productsCodestrong 2012 keynote   jonathan rende, appcelerator's vp of products
Codestrong 2012 keynote jonathan rende, appcelerator's vp of products
Axway Appcelerator
 
Codestrong 2012 keynote jeff haynie, appcelerator's ceo
Codestrong 2012 keynote   jeff haynie, appcelerator's ceoCodestrong 2012 keynote   jeff haynie, appcelerator's ceo
Codestrong 2012 keynote jeff haynie, appcelerator's ceo
Axway Appcelerator
 
Codestrong 2012 keynote how to build a top ten app
Codestrong 2012 keynote   how to build a top ten appCodestrong 2012 keynote   how to build a top ten app
Codestrong 2012 keynote how to build a top ten app
Axway Appcelerator
 
Codestrong 2012 breakout session at&t api platform and trends
Codestrong 2012 breakout session  at&t api platform and trendsCodestrong 2012 breakout session  at&t api platform and trends
Codestrong 2012 breakout session at&t api platform and trends
Axway Appcelerator
 
Codestrong 2012 breakout session what's new in titanium studio
Codestrong 2012 breakout session   what's new in titanium studioCodestrong 2012 breakout session   what's new in titanium studio
Codestrong 2012 breakout session what's new in titanium studio
Axway Appcelerator
 
Codestrong 2012 breakout session using appcelerator cloud services in your ...
Codestrong 2012 breakout session   using appcelerator cloud services in your ...Codestrong 2012 breakout session   using appcelerator cloud services in your ...
Codestrong 2012 breakout session using appcelerator cloud services in your ...
Axway Appcelerator
 
Codestrong 2012 breakout session the role of cloud services in your next ge...
Codestrong 2012 breakout session   the role of cloud services in your next ge...Codestrong 2012 breakout session   the role of cloud services in your next ge...
Codestrong 2012 breakout session the role of cloud services in your next ge...
Axway Appcelerator
 
Codestrong 2012 breakout session new device platform support for titanium
Codestrong 2012 breakout session   new device platform support for titaniumCodestrong 2012 breakout session   new device platform support for titanium
Codestrong 2012 breakout session new device platform support for titanium
Axway Appcelerator
 
Codestrong 2012 breakout session mobile platform and infrastructure
Codestrong 2012 breakout session   mobile platform and infrastructureCodestrong 2012 breakout session   mobile platform and infrastructure
Codestrong 2012 breakout session mobile platform and infrastructure
Axway Appcelerator
 
Codestrong 2012 breakout session making money on appcelerator's marketplace
Codestrong 2012 breakout session   making money on appcelerator's marketplaceCodestrong 2012 breakout session   making money on appcelerator's marketplace
Codestrong 2012 breakout session making money on appcelerator's marketplace
Axway Appcelerator
 
Codestrong 2012 breakout session live multi-platform testing
Codestrong 2012 breakout session   live multi-platform testingCodestrong 2012 breakout session   live multi-platform testing
Codestrong 2012 breakout session live multi-platform testing
Axway Appcelerator
 
Codestrong 2012 breakout session leveraging titanium as part of your mobile...
Codestrong 2012 breakout session   leveraging titanium as part of your mobile...Codestrong 2012 breakout session   leveraging titanium as part of your mobile...
Codestrong 2012 breakout session leveraging titanium as part of your mobile...
Axway Appcelerator
 
Codestrong 2012 breakout session i os internals and best practices
Codestrong 2012 breakout session   i os internals and best practicesCodestrong 2012 breakout session   i os internals and best practices
Codestrong 2012 breakout session i os internals and best practices
Axway Appcelerator
 

More from Axway Appcelerator (20)

Axway Appcelerator - Titanium SDK 6.1.0 - Status, Releases & Roadmap
Axway Appcelerator - Titanium SDK 6.1.0 - Status, Releases & RoadmapAxway Appcelerator - Titanium SDK 6.1.0 - Status, Releases & Roadmap
Axway Appcelerator - Titanium SDK 6.1.0 - Status, Releases & Roadmap
 
2014 Dublin Web Summit by Jeff Haynie
2014 Dublin Web Summit by Jeff Haynie2014 Dublin Web Summit by Jeff Haynie
2014 Dublin Web Summit by Jeff Haynie
 
Making the Mobile Mind Shift
Making the Mobile Mind ShiftMaking the Mobile Mind Shift
Making the Mobile Mind Shift
 
Stop Debating, Start Measuring
Stop Debating, Start MeasuringStop Debating, Start Measuring
Stop Debating, Start Measuring
 
Mobile & The New Experience Economy (And What it Means for IT)
Mobile & The New Experience Economy  (And What it Means for IT)Mobile & The New Experience Economy  (And What it Means for IT)
Mobile & The New Experience Economy (And What it Means for IT)
 
Apps, APIs & Analytics: What "Mobile First" Really Means
Apps, APIs & Analytics: What "Mobile First" Really MeansApps, APIs & Analytics: What "Mobile First" Really Means
Apps, APIs & Analytics: What "Mobile First" Really Means
 
Appcelerator Presentation Template
Appcelerator Presentation TemplateAppcelerator Presentation Template
Appcelerator Presentation Template
 
Codestrong 2012 keynote jonathan rende, appcelerator's vp of products
Codestrong 2012 keynote   jonathan rende, appcelerator's vp of productsCodestrong 2012 keynote   jonathan rende, appcelerator's vp of products
Codestrong 2012 keynote jonathan rende, appcelerator's vp of products
 
Codestrong 2012 keynote jeff haynie, appcelerator's ceo
Codestrong 2012 keynote   jeff haynie, appcelerator's ceoCodestrong 2012 keynote   jeff haynie, appcelerator's ceo
Codestrong 2012 keynote jeff haynie, appcelerator's ceo
 
Codestrong 2012 keynote how to build a top ten app
Codestrong 2012 keynote   how to build a top ten appCodestrong 2012 keynote   how to build a top ten app
Codestrong 2012 keynote how to build a top ten app
 
Codestrong 2012 breakout session at&t api platform and trends
Codestrong 2012 breakout session  at&t api platform and trendsCodestrong 2012 breakout session  at&t api platform and trends
Codestrong 2012 breakout session at&t api platform and trends
 
Codestrong 2012 breakout session what's new in titanium studio
Codestrong 2012 breakout session   what's new in titanium studioCodestrong 2012 breakout session   what's new in titanium studio
Codestrong 2012 breakout session what's new in titanium studio
 
Codestrong 2012 breakout session using appcelerator cloud services in your ...
Codestrong 2012 breakout session   using appcelerator cloud services in your ...Codestrong 2012 breakout session   using appcelerator cloud services in your ...
Codestrong 2012 breakout session using appcelerator cloud services in your ...
 
Codestrong 2012 breakout session the role of cloud services in your next ge...
Codestrong 2012 breakout session   the role of cloud services in your next ge...Codestrong 2012 breakout session   the role of cloud services in your next ge...
Codestrong 2012 breakout session the role of cloud services in your next ge...
 
Codestrong 2012 breakout session new device platform support for titanium
Codestrong 2012 breakout session   new device platform support for titaniumCodestrong 2012 breakout session   new device platform support for titanium
Codestrong 2012 breakout session new device platform support for titanium
 
Codestrong 2012 breakout session mobile platform and infrastructure
Codestrong 2012 breakout session   mobile platform and infrastructureCodestrong 2012 breakout session   mobile platform and infrastructure
Codestrong 2012 breakout session mobile platform and infrastructure
 
Codestrong 2012 breakout session making money on appcelerator's marketplace
Codestrong 2012 breakout session   making money on appcelerator's marketplaceCodestrong 2012 breakout session   making money on appcelerator's marketplace
Codestrong 2012 breakout session making money on appcelerator's marketplace
 
Codestrong 2012 breakout session live multi-platform testing
Codestrong 2012 breakout session   live multi-platform testingCodestrong 2012 breakout session   live multi-platform testing
Codestrong 2012 breakout session live multi-platform testing
 
Codestrong 2012 breakout session leveraging titanium as part of your mobile...
Codestrong 2012 breakout session   leveraging titanium as part of your mobile...Codestrong 2012 breakout session   leveraging titanium as part of your mobile...
Codestrong 2012 breakout session leveraging titanium as part of your mobile...
 
Codestrong 2012 breakout session i os internals and best practices
Codestrong 2012 breakout session   i os internals and best practicesCodestrong 2012 breakout session   i os internals and best practices
Codestrong 2012 breakout session i os internals and best practices
 

Recently uploaded

Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Peter Udo Diehl
 

Recently uploaded (20)

How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 
UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1
 
PLAI - Acceleration Program for Generative A.I. Startups
PLAI - Acceleration Program for Generative A.I. StartupsPLAI - Acceleration Program for Generative A.I. Startups
PLAI - Acceleration Program for Generative A.I. Startups
 
Salesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
Salesforce Adoption – Metrics, Methods, and Motivation, Antone KomSalesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
Salesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
 
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
 
ODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User GroupODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User Group
 
IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024
 
Demystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John StaveleyDemystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John Staveley
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
 
UiPath Test Automation using UiPath Test Suite series, part 2
UiPath Test Automation using UiPath Test Suite series, part 2UiPath Test Automation using UiPath Test Suite series, part 2
UiPath Test Automation using UiPath Test Suite series, part 2
 
"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi
 
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
 
Optimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through ObservabilityOptimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through Observability
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
 
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
 
Speed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in MinutesSpeed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in Minutes
 
Custom Approval Process: A New Perspective, Pavel Hrbacek & Anindya Halder
Custom Approval Process: A New Perspective, Pavel Hrbacek & Anindya HalderCustom Approval Process: A New Perspective, Pavel Hrbacek & Anindya Halder
Custom Approval Process: A New Perspective, Pavel Hrbacek & Anindya Halder
 

Ingo Muschenetz: Titanium Studio Deep Dive

  • 1. Titanium Studio Deep Dive Ingo Muschenetz
  • 2. Photo: babawheels.com Pimp My RIDE Customizing your Titanium Studio
  • 3. Director, Tools Engineering, Appcelerator Leads both the Titanium Studio and Aptana Studio products and communities 10+ years designing developer tools and experiences
  • 5. Titanium Studio Mobile/Desktop platform support specific to Titanium Development. Titanium- specific content assist, Android/iOS debugging. Aptana Studio Web language support(HTML, JS, CSS, Ruby, PHP, Python). FTP/SFTP, JavaScript debugging infrastructure. Git, Rubles. Eclipse Platform IDE Shell, project management, basic editor architecture. Default preference layout. Toolbars. Update mechanisms.
  • 6.
  • 7. What is a Ruble? Scripting interface to Studio Coded in Ruby Contributes: Content Themes Commands Snippets Templates Assist
  • 8. Creating a New Ruble 1. File > New > Ruby Project 2. Name your Ruble. Click Next 3. Select the Ruble Template 4. Click Finish Ruble template is itself a template contributed by a Ruble
  • 9.
  • 10. Modifying an Existing Ruble 1. Commands > Ruble Name > Edit this bundle… 2. Ruble cloned into your workspace 3. Update to latest version with Git pulls http://wiki.appcelerator.org/display/tis/Rubles
  • 11.
  • 12. Scopes CSS Document: body! {! ! background:#000000;! ! text-align:left;! }! 1.  Colorize “background”? 2.  Specify a valid region for property proposals?
  • 13. Scopes "   Scopes describe a subset of the document tree "   Often closely map to language tokens "   Scopes provide colorization and context "   Themes collect scope colorization rules "   Content assist/commands use scope context http://wiki.appcelerator.org/display/tis/Themes
  • 14. Document Scope body! {! ! background : #000000 ;! ! text-align : left ;! }! source.css
  • 15. Token Scopes support.type.property-name.css constant.other.color.rgb-value.css body! punctuation.rule.terminator.css {! ! background : #000000 ;! ! text-align : left ;! }! entity.name.tag.css support.constant.property-value.css punctuation.separator.key-value.css
  • 16. Meta Scopes meta.property-name.css meta.property-value.css body! {! ! background : #000000 ;! ! text-align : left ;! }! meta.selector.css meta.property-list.css
  • 17. Scope Example Colorization and Context "   source.css "   support.type.property-name.css Context "   meta.property-list.css "   meta.property-name.css
  • 18. Matching Rules Most specific scope matches first text.html vs. text Descendant selectors text.html source.php
  • 19. Embedded Scopes text.html <html>! !<body>! ! !<?php! ! !! ! !?> !! ! !</body>! source.php </html>!
  • 20. Scopes are Hierarchial Generally follow a convention of category.sub-category.language-extension comment All comments comment.line All line comments All line comments in comment.line.js JavaScript files
  • 21. The Properties View helps discern relevant scopes
  • 22.
  • 23. Commands A script triggered manually or automatically Execute on: "   Menu selection "   Content assist "   Tab activation "   File listener "   Eclipse “Command” execution
  • 24. Sample Commands "   Compile CoffeeScript "   Post editor selection as gist "   Execute editor selection as bash command "   Strip HTML tags from a document "   Run JSHint/HTMLTidy "   Deploy app to cloud service "   Execute any Java, Ruby, or Eclipse code http://wiki.appcelerator.org/display/tis/Ruble+Cookbook
  • 25. Command Example command 'Swap Case' do |cmd|! cmd.key_binding = 'SHIFT+CTRL+A'! cmd.scope = 'source'! cmd.input = :selection! cmd.output = :replace_selection! cmd.invoke do |context|! word = $stdin.gets! context.exit_discard if word.nil?! print word.swapcase! end! end!
  • 27. Inputs & Outputs Input Specifiers Output Specifiers selection insert_as_text left_character insert_as_snippet right_character replace_selection word replace_document line copy_to_clipboard document show_as_html clipboard show_as_tooltip none create_new_document discard replace_line replace_word
  • 28. Listener Example command "Show Save Information" do |cmd|! cmd.input = :none! cmd.output = :discard! cmd.trigger = :execution_listener, ! "org.eclipse.ui.file.save"! cmd.invoke do |context|! # code here! end! end !
  • 29.
  • 30. Snippets Snippets focus on inserting small pieces of content. Commonly use activation triggers (tab) Support: "   Tab stops "   Mirrored variables "   Very similar to TextMate snippets http://wiki.appcelerator.org/display/tis/Snippets
  • 31. Snippet Example snippet "background: color" do |s|! s.scope = "meta.property-list.css" ! s.trigger = "bgr"! s.expansion = "background:${1:red};$0"! end!
  • 32. Snippet Example (Mirrored) snippet "background-foreground" do |s|! s.scope = "meta.property-list.css" ! s.trigger = "bgfr"! s.expansion = "background: ${1:red};! ! ! ! ! ! foreground: ${1}$0"! end!
  • 34.
  • 35. Project Templates Provide default content for a new project "   Packaged as .zip file "   Variable substitutions "   Contributed via Ruble or Extension point http://wiki.appcelerator.org/display/tis/Templates
  • 36. Project Template Example project_template "Ruble Template" do |t|! t.type = :ruby! t.location = "templates/ruble_template.zip"! t.description = "A simple Ruble sample"! t.replace_parameters = true! end!
  • 37. File Templates Provide default content for a particular file type "   Variable substitutions "   Contributed via Ruble http://wiki.appcelerator.org/display/tis/Templates
  • 38. File Template Example template("HTML 5 Template") do |t|! t.filetype = "*.html"! t.location = "templates/html5.html"! end!
  • 39.
  • 40. JSCA Files "   3rd-party library content assist "   XML- and JSON-based "   Forthcoming tools to generate from TiDoc http://wiki.appcelerator.org/display/tis/JSCA +1.0+Specification
  • 41. JSCA Example {! "types": [! {! "name": "Titanium.Android.NotificationManager", ! "examples": [], ! "functions": [! {! "name": "addEventListener", ! "parameters": [! {! "name": "name", ! "usage": "", ! "type": "String", ! "description": "name of the event"! },!
  • 42. Documentation Example In bundle.rb: require 'ruble'! bundle 'Titanium' do |bundle|! bundle.project_build_path["Titanium 1.8"] = ! "#{File.dirname($0)}/titanium.1.8.jsca"! end!
  • 43.
  • 44. Plugins "   Eclipse-based so most Eclipse plugins work "   Database Explorer "   Mobile Tooling "   Java extensibility via extension points "   Eclipse Marketplace
  • 45. Resources Titanium-specific Rubles "   https://github.com/mschmulen/appfab.ruble "   https://github.com/aptana/titanium.ruble Additional Rubles: "   https://github.com/aptana/