What is the purpose of Orion?
Open Source Platform for Browser Based Development
All open source
At Eclipse and mirrored at GitHub
Orion Wiki Page
Do developers really want to move to the cloud?
- Progression of desktop to browser-based tools
- Developers using social tools
- Deploying to Cloud
- Tools work best on deployment platform
- How enjoyable was your last IDE setup experience?
What is Orion not trying to do?
- Recreate a traditional IDE in a browser tab
- Be a full service application platform (Dojo, JQuery)
- Build a monolithic IDE server
- Replace all your existing tools
Focus on...
- Embracing modern browser capabilities
- A plug-in architecture for extensibility
- Components that are consumable
- Cross-site workflows & integration
- Fast, task-focused pages
Orion pages and plugins
- Orion provides many pages by default
- Provides necessary functionality for developers
- Go from creating, editing, self hosting to deployment and source code control
- Extensibility is what sets Orion apart
How we achieve plugability
A JSBeautify Orion Plugin
example snippets of Orion parts
// plugin.html has:
...
<head>
<script type="text/javascript" src="plugin.js"></script>
<script type="text/javascript" src="jsbeautify.js"></script>
// jsbeautify.js has:
...
provider.registerServiceProvider(["orion.edit.command", "orion.cm.managedservice"], {
updated: function(properties) {
run: function(selectedText, text, selection) {
var toFormat;
var selectionEmpty = selection.start === selection.end;
if (selectionEmpty) {
toFormat = text;
What's your point?
Plugins can extend the functionality of Orion in the browser dynamically, without any server side changes.
The plugins themselves can come from any site, not just the server Orion is hosted from.
Put it all together...
Your existing tools already on the web,
connected to Orion components through links and plugins
Your browser becomes a tooling platform
Orion Editor
Orion Shell
Orion Search
Orion Git Repositories
Orion Git Status with Compare
Works on mobile tablets
While Orion works on phones it is better suited to tablets. Adding a bluetooth keyboard is even better
iPad mini and a Nexus 7
Install your own Orion server
Got Node.js?
npm install orion
edit orion.conf to set a workspace directory
workspace=/home/pi/Workspace/
Orion shell commands available for Node and npm
You can consume Orion too
Many components of Orion are meant to be individually consumable.
Leverage our work for your project and if you have suggestions or changes, contribute them back.
- Source editor
- Compare editor
- Plugin and service registry
- Shims for HTML templates, URI templates
Minified editor
function Deferred() {
var result, state, listeners = [],
_this = this;
function notify() {
var listener;
while ((listener = listeners.shift())) {
var deferred = listener.deferred;
var methodName = state === "resolved" ? "resolve" : "reject"; //$NON-NLS-0$ //$NON-NLS-1$ //$NON-NLS-2$
if (typeof listener[methodName] === "function") { //$NON-NLS-0$
try {
var listenerResult = listener[methodName](result);
if (listenerResult && typeof listenerResult.then === "function") { //$NON-NLS-0$
deferred.cancel = listenerResult.cancel || noop;
listenerResult.then(noReturn(deferred.resolve), noReturn(deferred.reject), deferred.progress);
} else {
deferred.resolve(listenerResult);
}
} catch (e) {
deferred.reject(e);
}
} else {
deferred[methodName](result);
}
}
}
If you want to generate a snippet of code
for a blog or web post
Check out the Snippet Orion Plugin
Client side compare
Complete JavaScript client side compare both inline and unified views.
Community
Orion is developed by contributors from IBM, VMWare, Mozilla, Google, HP, individuals (students), YOU!
Adoption
- Starting to see adoption of Orion pick up
- Heavy use from Mozilla in Firefox tools
- Scripted open source
Orion-based desktop editor from VMWare
- Stardust browser-based BPM tools built on Orion
- Cloudfier business app modeling
- HP demoed agile develoment tools using Orion
- Xtext on the web prototype from Itemis
- Beta next gen JazzHub browser dev tools
The downside
That sounds great! Now here's what we need...
- One million accounts
- 10,000 simultaneous connections
- 99.9% uptime
- Single sign-on, LDAP integration, WAR file
- Integrate with different client side frameworks
- Skinning/branding
- Globalized, accessible, secure
- Can we have that in three months?
Making the server real
- Analysis of Orion as a 12 Factor web application
- Orion turns out to be an 8.5 factor app
- IV. Backing Services
- VIII. Concurrency
- XII. Admin processes
Backing services
- Used OSGi prefs for metadata
- Not scalable, not concurrent, not pluggable
- Hard to administer, not configurable
- New metadata API allows swapping metadata store in server config
- Current state: API created and used, but still backed by preferences
Concurrency
- Integration via HTTP, file system, or client
- Server per component doesn't scale
- Should be: Horizontal scaling based on workload
- Deploying Orion WAR file into bigger app
- Need to carve out indexing and Git operations
Image: 12factor.net
Dev/prod parity
- Orion builds and deploys development builds daily
- OrionHub gets every milestone, minimal admin
- Deployment is automated; Investigating Chef
- Still some friction between dev and production
- Working on switch to Tycho build
Client integration
- Was using a single specific JS framework
- Used to paper over differences between browsers
- Hard to integrate for clients using other frameworks
- Slower page load times
Client integration: going native
- Modern browsers are standards-based and increasingly consistent
- Dropped Dojo in favour of browser mechanisms
- Easier third party adoption
- Page load times went from 750ms to 250ms
- 90KB of JavaScript loaded instead of 600KB
Client integration: branding
Enterprise delivery
- Accessibility: keyboard, screen readers, ARIA roles
- Security: SSO, LDAP, vulnerability testing
- Globalization: NL testing, variable line height
Next steps
Orion is making the leap from neat open source project to the base of
commercial web applications, but we're not there yet. Some things on the TODO list:
- Better skinning story (LESS)
- Continuing on server scalability
- Support for compiled languages
- Improve import and deployment workflows
- JS language tooling improvements
- What do you want to build?