The document discusses Google App Engine and options for building applications on it using Ruby and a new language called Duby. It provides an overview of App Engine architecture and billing models. It then covers using Ruby with App Engine via JRuby, frameworks like Rack and Sinatra, and the DataMapper ORM. Duby is introduced as a statically-typed language inspired by Ruby syntax that compiles to Java bytecode for the App Engine environment. Examples show a simple blog application built in both Ruby and Duby styles.
This document discusses JRuby and Duby for running Ruby and Ruby-like applications on Google App Engine. It introduces Google App Engine as a platform-as-a-service that handles scaling and infrastructure. JRuby allows running Ruby applications on App Engine by compiling to Java bytecode. Duby is a new language that compiles to Java and has Ruby-like syntax, avoiding runtime issues. Examples show how to create a simple blog application in Duby using App Engine services and data modeling.
The document discusses JRuby on Google App Engine, including key features of App Engine, quotas and billing, limitations, the current issues with JRuby on App Engine, App Engine gems, the development environment, deployment process, APIs, and milestones in the development of JRuby on App Engine. It also includes a short biography and discussion of learning experiences from building an iPhone app that uses App Engine and JRuby as a backend.
Plone in the Cloud - an on-demand CMS hosted on Amazon EC2Jazkarta, Inc.
The rise of utility computing platforms such as Amazon EC2 has made it more feasible to build turnkey hosted solutions on top of open source software. Learn how we built PondCMS, a turnkey CMS deployed to Amazon's EC2. This presentation discusses the advantages of hosting Plone sites in the elastic computing cloud and some of the challenges we faced. Watch the video from this talk at http://pycon.blip.tv/file/1949202/
This document summarizes a presentation about exception propagation in PostgreSQL and Python. It discusses how stored procedures in PostgreSQL raise generic exceptions that provide limited information. The author then describes Exceptable, a Python library that defines a common exception hierarchy. It uses a decorator to catch database exceptions and re-raise custom exceptions, improving error handling and separation of concerns between the database and application layers. Examples show how it makes permission errors and other exceptions more usable and identifiable.
This document discusses using Java from Ruby with JRuby IRB. It provides an introduction to JRuby and demonstrates how to load Java support and libraries, import Java classes, refer to and instantiate Java objects, implement Java interfaces, call static methods and fields, perform type conversions, invoke overloaded methods, and gives a complex example using the Akka framework to calculate Pi. It also discusses Maven integration, directory layout, and testing frameworks like RSpec and Cucumber that can be used.
Fast & Furious: Speed in the Opera browserAndreas Bovens
From its early days, Opera has focused on providing its users with a snappy browsing experience on a wide range of hardware and OSes. In this talk, I look at the latest versions of Opera for desktop, Opera Mobile and Opera Mini and explore how they make web pages super fast.
http://velocityconf.com/velocityeu/public/schedule/detail/22183
Video Killed the Rolex Star (CocoaConf Columbus, July 2015)Chris Adamson
watchOS 2.0 brings media functionality to Apple Watch, offering audio and video playback and audio capture. But lest you plan on writing Logic or Final Cut for the watch: what's available on the wrist has its limits, and you hit them quickly. In this session, we'll see what the WKInterfaceController offers us for miniature mobile media, and how we can get the benefits of AV Foundation and Core Audio by moving our movies, songs, and podcasts back and forth between the watch and the iPhone.
This document discusses JRuby and Duby for running Ruby and Ruby-like applications on Google App Engine. It introduces Google App Engine as a platform-as-a-service that handles scaling and infrastructure. JRuby allows running Ruby applications on App Engine by compiling to Java bytecode. Duby is a new language that compiles to Java and has Ruby-like syntax, avoiding runtime issues. Examples show how to create a simple blog application in Duby using App Engine services and data modeling.
The document discusses JRuby on Google App Engine, including key features of App Engine, quotas and billing, limitations, the current issues with JRuby on App Engine, App Engine gems, the development environment, deployment process, APIs, and milestones in the development of JRuby on App Engine. It also includes a short biography and discussion of learning experiences from building an iPhone app that uses App Engine and JRuby as a backend.
Plone in the Cloud - an on-demand CMS hosted on Amazon EC2Jazkarta, Inc.
The rise of utility computing platforms such as Amazon EC2 has made it more feasible to build turnkey hosted solutions on top of open source software. Learn how we built PondCMS, a turnkey CMS deployed to Amazon's EC2. This presentation discusses the advantages of hosting Plone sites in the elastic computing cloud and some of the challenges we faced. Watch the video from this talk at http://pycon.blip.tv/file/1949202/
This document summarizes a presentation about exception propagation in PostgreSQL and Python. It discusses how stored procedures in PostgreSQL raise generic exceptions that provide limited information. The author then describes Exceptable, a Python library that defines a common exception hierarchy. It uses a decorator to catch database exceptions and re-raise custom exceptions, improving error handling and separation of concerns between the database and application layers. Examples show how it makes permission errors and other exceptions more usable and identifiable.
This document discusses using Java from Ruby with JRuby IRB. It provides an introduction to JRuby and demonstrates how to load Java support and libraries, import Java classes, refer to and instantiate Java objects, implement Java interfaces, call static methods and fields, perform type conversions, invoke overloaded methods, and gives a complex example using the Akka framework to calculate Pi. It also discusses Maven integration, directory layout, and testing frameworks like RSpec and Cucumber that can be used.
Fast & Furious: Speed in the Opera browserAndreas Bovens
From its early days, Opera has focused on providing its users with a snappy browsing experience on a wide range of hardware and OSes. In this talk, I look at the latest versions of Opera for desktop, Opera Mobile and Opera Mini and explore how they make web pages super fast.
http://velocityconf.com/velocityeu/public/schedule/detail/22183
Video Killed the Rolex Star (CocoaConf Columbus, July 2015)Chris Adamson
watchOS 2.0 brings media functionality to Apple Watch, offering audio and video playback and audio capture. But lest you plan on writing Logic or Final Cut for the watch: what's available on the wrist has its limits, and you hit them quickly. In this session, we'll see what the WKInterfaceController offers us for miniature mobile media, and how we can get the benefits of AV Foundation and Core Audio by moving our movies, songs, and podcasts back and forth between the watch and the iPhone.
After almost a year of slow but steady development, the time is soon approaching when you will be able to start writing Jenkins plugins armed with nothing but a simple JRuby environment.
To illustrate exactly what this means, we'll study the anatomy of a Ruby plugin, how it works at runtime, and walk through the creation, testing and deploying of an example using nothing put 100% pure Ruby.
Finally, beyond the mechanical, we'll discuss why this effort is important for the entire Jenkins community, not just the part of the community that uses Ruby.
My goals have been:
- focusing on several project areas, where you can use jruby successfully
- share the experience that I made using ruby in the last years
- proove that things can be done easier as they are done in typical java projects
This document discusses deploying Ruby on Rails applications to Google App Engine using JRuby and a servlet container. It outlines reasons to use JRuby, Rails 3, Sinatra, and DataMapper, and how they can run on App Engine. It also provides an overview of the App Engine architecture, development server, deployment process, APIs available to JRuby applications, billing quotas, and resources for learning more.
LSUG: How we (mostly) moved from Java to ScalaGraham Tackley
Presentation from talk done at the London Scala User Group on Wednesday 12th Jan 2011.
http://skillsmatter.com/podcast/java-jee/how-we-mostly-moved-from-java-to-scala
The document provides information about running Ruby applications on Google App Engine using JRuby. It discusses key features and limitations of App Engine, how to set up the development environment, deploy apps, and pay-as-you-go billing. It also introduces Mirah as a way to write Java code using a Ruby-like syntax and compiles to Java bytecode.
(ATS3-DEV08) Team Development with Accelrys Enterprise PlatformBIOVIA
This document discusses patterns for team application development using Accelrys Enterprise Platform (AEP). It describes several patterns including XMLDB only, in-situ package, sibling packages, and package container. The in-situ package pattern places all code and resources in a single directory structure within the AEP server. Sibling packages split applications into production and test packages. The package container pattern develops applications outside the AEP server and manages packages and synchronization separately. The document also provides an example of developing custom Java components for AEP and integrating with external systems like Columbus. Automating development tasks through scripts and metaprogramming is recommended to improve the development process.
We discovered Mirah while looking for a way to remedy JRuby spin-up delays on App Engine. Dubious, a simple framework written in Mirah, but following Rails conventions, that provides unprecidented scalability and efficiency.
Get On The Audiobus (CocoaConf Atlanta, November 2013)Chris Adamson
Audiobus is an iOS app that allows other apps to work together as an audio-processing toolchain: play your MIDI keyboard into one app, run it through filters in other apps, and mix it in a third. All in real-time, foreground or background. That such a thing is possible on the locked down iOS platform is remarkable enough, but what's even more remarkable is that hundreds of audio apps have added Audiobus support in the few months since its debut, including Apple's own GarageBand. In this session, we'll take a look at the Audiobus SDK and see how to create inputs, outputs, and filters that can be managed by the Audiobus app to process audio in collaboration with other apps on the device.
Att lyckas med integration av arbetet från flera scrum team - Christophe Acho...manssandstrom
This document discusses strategies for integrating work from multiple Scrum teams. It outlines the role of an integration team in continuously integrating work. Key success factors for the integration team include: integrating work early, having the necessary resources and environments, practicing continuous integration, using automated tests, maintaining at least two test environments, performing early performance tests, stopping work if integration breaks, having a clear contract between development and integration teams, making the integration process and status visible.
vSphere 5 - Image Builder and Auto DeployEric Sloof
Auto Deploy is a new method for provisioning ESXi hosts in vSphere 5.1. At a high level the ESXi host boots over the network (using PXE/gPXE), contacts the Auto Deploy Server which loads ESXi into the hosts memory. After loading the ESXi image the Auto Deploy Server coordinates with vCenter Server to configure the host (using Host Profiles and Answer Files (answer files are new in 5.0). Auto Deploy eliminates the need for a dedicated boot device, enables rapid deployment for many hosts, and also simplifies ESXi host management by eliminating the need to maintain a separate “boot image” for each host.
Image profiles and VIBs are available in software depots from VMware or from VMware partners, and managed using the Image Builder PowerCLI. You can use software depots, image profiles, and software packages (VIBs) to specify the software you want to use during installation or upgrade of an ESXi host. Understanding how depots, profiles, and VIBs are structured and where you can use them is a prerequisite for in-memory installation of a custom ESXi ISO, for provisioning ESXi hosts using VMware Auto Deploy, and for some custom upgrade operations.
VIB A VIB is an ESXi software package. VMware and its partners package solutions, drivers, CIM providers, and applications that extend the ESXi platform as VIBs.
VIBs can be used to create and customize ISO images or installed asynchronously onto ESXi hosts. VIBs are available from software depots.
Image Profile An image profile defines an ESXi image and consists of VIBs (software packages). An image profile always includes a base VIB, and might include
additional VIBs. You examine and define an image profile using the Image Builder PowerCLI.
The document discusses TorqueBox, an application server for Ruby applications that runs on JBoss Application Server and JRuby. It provides an overview of TorqueBox and how to set it up, including downloading TorqueBox, setting environment variables, installing required gems, and using Rake tasks to run and deploy applications. Deploying applications with TorqueBox generates deployment descriptors in the JBoss deploy directory.
Slides from my presentation on Java BootCamp #5 about Git.
Java BootCamp #5 took place in Hradec Králové at 8. 11. 2012
http://www.java-bootcamp.cz/cs/bootcamp-5
After almost a year of slow but steady development, the time is soon approaching when you will be able to start writing Jenkins plugins armed with nothing but a simple JRuby environment.
To illustrate exactly what this means, we'll study the anatomy of a Ruby plugin, how it works at runtime, and walk through the creation, testing and deploying of an example using nothing put 100% pure Ruby.
Finally, beyond the mechanical, we'll discuss why this effort is important for the entire Jenkins community, not just the part of the community that uses Ruby.
My goals have been:
- focusing on several project areas, where you can use jruby successfully
- share the experience that I made using ruby in the last years
- proove that things can be done easier as they are done in typical java projects
This document discusses deploying Ruby on Rails applications to Google App Engine using JRuby and a servlet container. It outlines reasons to use JRuby, Rails 3, Sinatra, and DataMapper, and how they can run on App Engine. It also provides an overview of the App Engine architecture, development server, deployment process, APIs available to JRuby applications, billing quotas, and resources for learning more.
LSUG: How we (mostly) moved from Java to ScalaGraham Tackley
Presentation from talk done at the London Scala User Group on Wednesday 12th Jan 2011.
http://skillsmatter.com/podcast/java-jee/how-we-mostly-moved-from-java-to-scala
The document provides information about running Ruby applications on Google App Engine using JRuby. It discusses key features and limitations of App Engine, how to set up the development environment, deploy apps, and pay-as-you-go billing. It also introduces Mirah as a way to write Java code using a Ruby-like syntax and compiles to Java bytecode.
(ATS3-DEV08) Team Development with Accelrys Enterprise PlatformBIOVIA
This document discusses patterns for team application development using Accelrys Enterprise Platform (AEP). It describes several patterns including XMLDB only, in-situ package, sibling packages, and package container. The in-situ package pattern places all code and resources in a single directory structure within the AEP server. Sibling packages split applications into production and test packages. The package container pattern develops applications outside the AEP server and manages packages and synchronization separately. The document also provides an example of developing custom Java components for AEP and integrating with external systems like Columbus. Automating development tasks through scripts and metaprogramming is recommended to improve the development process.
We discovered Mirah while looking for a way to remedy JRuby spin-up delays on App Engine. Dubious, a simple framework written in Mirah, but following Rails conventions, that provides unprecidented scalability and efficiency.
Get On The Audiobus (CocoaConf Atlanta, November 2013)Chris Adamson
Audiobus is an iOS app that allows other apps to work together as an audio-processing toolchain: play your MIDI keyboard into one app, run it through filters in other apps, and mix it in a third. All in real-time, foreground or background. That such a thing is possible on the locked down iOS platform is remarkable enough, but what's even more remarkable is that hundreds of audio apps have added Audiobus support in the few months since its debut, including Apple's own GarageBand. In this session, we'll take a look at the Audiobus SDK and see how to create inputs, outputs, and filters that can be managed by the Audiobus app to process audio in collaboration with other apps on the device.
Att lyckas med integration av arbetet från flera scrum team - Christophe Acho...manssandstrom
This document discusses strategies for integrating work from multiple Scrum teams. It outlines the role of an integration team in continuously integrating work. Key success factors for the integration team include: integrating work early, having the necessary resources and environments, practicing continuous integration, using automated tests, maintaining at least two test environments, performing early performance tests, stopping work if integration breaks, having a clear contract between development and integration teams, making the integration process and status visible.
vSphere 5 - Image Builder and Auto DeployEric Sloof
Auto Deploy is a new method for provisioning ESXi hosts in vSphere 5.1. At a high level the ESXi host boots over the network (using PXE/gPXE), contacts the Auto Deploy Server which loads ESXi into the hosts memory. After loading the ESXi image the Auto Deploy Server coordinates with vCenter Server to configure the host (using Host Profiles and Answer Files (answer files are new in 5.0). Auto Deploy eliminates the need for a dedicated boot device, enables rapid deployment for many hosts, and also simplifies ESXi host management by eliminating the need to maintain a separate “boot image” for each host.
Image profiles and VIBs are available in software depots from VMware or from VMware partners, and managed using the Image Builder PowerCLI. You can use software depots, image profiles, and software packages (VIBs) to specify the software you want to use during installation or upgrade of an ESXi host. Understanding how depots, profiles, and VIBs are structured and where you can use them is a prerequisite for in-memory installation of a custom ESXi ISO, for provisioning ESXi hosts using VMware Auto Deploy, and for some custom upgrade operations.
VIB A VIB is an ESXi software package. VMware and its partners package solutions, drivers, CIM providers, and applications that extend the ESXi platform as VIBs.
VIBs can be used to create and customize ISO images or installed asynchronously onto ESXi hosts. VIBs are available from software depots.
Image Profile An image profile defines an ESXi image and consists of VIBs (software packages). An image profile always includes a base VIB, and might include
additional VIBs. You examine and define an image profile using the Image Builder PowerCLI.
The document discusses TorqueBox, an application server for Ruby applications that runs on JBoss Application Server and JRuby. It provides an overview of TorqueBox and how to set it up, including downloading TorqueBox, setting environment variables, installing required gems, and using Rake tasks to run and deploy applications. Deploying applications with TorqueBox generates deployment descriptors in the JBoss deploy directory.
Slides from my presentation on Java BootCamp #5 about Git.
Java BootCamp #5 took place in Hradec Králové at 8. 11. 2012
http://www.java-bootcamp.cz/cs/bootcamp-5
This document summarizes a presentation given by TAGOMORI Satoshi of LINE Corp on January 31, 2014 about inspecting logs. It discusses retrospectively searching stored log data versus prospectively defining queries to process log data. It also covers differences between schema-full and schema-less log data, as well as tools for collecting, storing, processing, and visualizing log data. The presentation emphasizes using stream processing to handle large volumes of schema-less log data through prospective queries that define required fields and types.
This document summarizes a presentation about Norikra, a stream processing engine that allows querying data streams using SQL. Some key points:
- Norikra uses Esper at its core to enable SQL queries on data streams from sources like Fluentd in real-time with low latency.
- It defines "targets" that represent unions of related event data streams which can then be queried using a single SQL query regardless of variations in field sets.
- Plugins exist for Fluentd and a client library to easily integrate Norikra's querying capabilities without having to manage schemas or restart processes.
- Future goals include adding more query features like joins, a web GUI, and scaling to distributed
Keynote of HadoopCon 2014 Taiwan:
* Data analytics platform architecture & designs
* Lambda architecture overview
* Using SQL as DSL for stream processing
* Lambda architecture using SQL
Go was created at Google to address needs for efficient large-scale programming, fast compilation, distributed systems, multicore hardware, and networked computing. It is a concurrent and garbage-collected systems programming language. A simple web server can be written in Go with just a few lines of code. Go uses communicating sequential processes as its concurrency model and has interfaces but no inheritance. Concurrency is achieved through communicating rather than sharing memory. Parallelism is easy to implement using goroutines, channels, locks, or the once package.
The document discusses using JRuby and Duby to run Ruby on Rails applications on Google App Engine. It provides an overview of App Engine's key features and limitations. It then discusses how JRuby allows Ruby code to access Java APIs and libraries on App Engine. The document outlines milestones in developing JRuby for App Engine and current issues. It also introduces the dm-appengine and Duby libraries for modeling data and building applications in Ruby.
The document provides an outline and summary of topics to be covered in Part 2 of "The Go Programming Language" presentation, including composite types, methods, and interfaces. The outline includes exercises on Fibonacci numbers, composite types like structures, arrays, slices, and maps. It then goes into more detail on these composite types, explaining how to declare, initialize, and use them. It also covers methods and how they are declared separately but attached to types, and briefly mentions interfaces will be covered tomorrow.
The document introduces GO and discusses why a consulting firm chose to build an instant messaging server using GO. It provides an overview of GO, including that it is a lightweight programming language developed by Google that uses garbage collection and makes concurrency easy using goroutines and channels. The document also provides code samples and discusses getting started with GO development.
This document provides an overview of using the Go programming language for fast web applications. It begins with introductions to Go and its suitability for web development. Code samples are provided to demonstrate building a basic web application with Go that handles form submission and displays responses. The presentation concludes with questions from the audience.
The document discusses the Go programming language, including its history as a project at Google from 2007-2009, its goals of making programming fun again while having a safe static type system. It provides an overview of Go's syntax features like variables, functions, flow control statements, types, methods and interfaces, concurrency using goroutines and channels.
This document discusses JRuby on Google App Engine. It provides an overview of Google App Engine, quotas and billing, current issues with JRuby on App Engine, required gems, the development app server, deployment process, available APIs, and sample code for using DataMapper and associations. It also lists resources for learning more about JRuby on App Engine.
The document provides an overview of Google App Engine, a platform that allows developers to build and host web applications without having to manage servers. It discusses the challenges of building scalable web applications, describes App Engine's features such as automatic scaling and integrated services, and covers how to develop, test, and deploy applications locally and on App Engine. It also reviews App Engine's programming languages, data storage, quotas, and billing model.
Patrick Chanezon and Guillaume Laforge are presenting Google App Engine Java and Gaelyk, the lightweight groovy toolkit on top of the GAE SDK, at the Devoxx conference
This document discusses the evolution of bootstrapping Rails applications from the initial Rails generation to modular templates called App Lego. It outlines how initial Rails apps took a lot of time to set up, then skeletons and templates sped things up but lacked modularity. App Lego used templates in a modular way, allowing developers to choose which features or modules to include. Each module is its own template that can be included. The document acknowledges some downsides like long command lines but outlines future plans to improve the user experience.
Cloud meets Fog & Puppet A Story of Version Controlled InfrastructureHabeeb Rahman
Talk at rootconf - A conference at Bangalore for sysadmins.
Gist of the talk:-
Puppet is a great configuration management tool and git is great at version controlling.AWS lets you create instances in few clicks. But when it comes to large deployments only automation(where tools come together) can make you productive and happy. I will take you through following.. Fog - The Ruby cloud services library and how it helps you to create vendor neutral cloud deployments, Puppet- Multi region puppet masters, Ruby- How Ruby pulls the strings together in EC2/ELB/RDS creation, Security group creation, IP authorization, Route53 DNS etc, Git- how we use git to version control deployment configs/configurations.
This talk provides a number of step-by-step examples that illustrate different ways in which Rails applications can interact effectively with third-party Java libraries. The presentation shows how developers can leverage JRuby to augment Rails applications with the mature, third-party libraries that are widely available in the Java world.
This document discusses Ruby, an object-oriented scripting language, and its integration with Java via JRuby. It provides an overview of Ruby concepts like classes, modules, and metaprogramming. It then discusses how JRuby allows embedding Ruby as a scripting language in Java applications and using Java classes from Ruby. It also covers Ruby on Rails and how JRuby can be used to deploy Rails applications on the JVM. Finally, it discusses performance improvements in JRuby 1.7 and some benefits of using JRuby.
This document discusses using various technologies on Google App Engine including JIQL, GaeVFS, RESTlets, scheduled tasks, JRuby on Rails, task queues, XMPP, and Clojure. JIQL emulates a relational database on App Engine's Bigtable datastore. GaeVFS provides a virtual filesystem on Bigtable. RESTlets make RESTful web services easy to implement in Java on App Engine. Scheduled tasks allow for background processing via cron jobs. JRuby on Rails provides a way to run Ruby on Rails applications on App Engine. Task queues allow for asynchronous background processing. XMPP enables instant messaging and peer-to-peer applications. Clojure can also be used
2009, o ano do Ruby on Rails no Brasil - CaelumDay 2009Caue Guerra
This document discusses the growth of Ruby on Rails in Brazil in 2009. It highlights some key events and trends that contributed to Rails gaining popularity in Brazil that year, such as more training courses being offered on Rails and more job postings requiring Rails skills. It also showcases success stories of Brazilian companies using Rails to build their web applications.
The Spring framework packs a lot of punch, out of the box! The surface-level component model's extraordinarily flexible, and works well with in most situations, but the real power of Spring lays just underneath, in the numerous SPIs that Spring exposes, so that you can tailor the component model to your own use cases. Spring's SPI's are a great example of what Bob Martin describes as the open-closed principle, and it provides the solid underpinnings upon which the other Spring frameworks, including Spring Integration, Spring MVC and Spring Batch are built. In this talk, Josh Long, the Spring developer advocate from SpringSource, provides a walking tour of Spring's extension points.
The document introduces the Play Framework version 2.1 and highlights its key features. It demonstrates building a sample application in Scala using Play's reactive, non-blocking architecture. Key features discussed include Play's built-in support for Scala, reactive programming, JSON APIs, routing, templates, and testing.
The code will print false, because paid = true assigns a local variable rather than setting the instance variable @paid. To fix it, use self.paid = true.
This document discusses building distributed semantic systems. It describes defining an ontology to model the problem domain, formally describing the distributed system using Pi calculus, implementing RESTful semantic web services that expose ontology classes, and building client processes that interact with the services. An example exception logging system is used, with sensor processes monitoring exceptions, aggregator processes storing exceptions as resources, and a web client displaying exceptions. The Plaza framework facilitates developing the RESTful semantic web services and clients.
The document discusses TorqueBox, an application server for Ruby that is built on JBoss Application Server 7 and uses JRuby. It allows Ruby applications to take advantage of features typically found in Java application servers like clustering, caching, messaging, and more. Key features highlighted include support for Ruby web frameworks like Rails and Sinatra, background processing using Resque or DelayedJob, messaging using JMS, long running services, and resource injection. Web sockets support is provided using STOMP and the Stilts framework. The document outlines goals of TorqueBox and provides examples of configuration and usage.
Improving Your Heroku App Performance with Asset CDN and UnicornSimon Bagreev
This document summarizes tips for optimizing the performance of Rails applications using asset CDNs and the Unicorn web server. It discusses using Amazon S3 and CloudFront for caching and delivering assets to improve load times. It also explains how to configure Unicorn to handle requests concurrently across worker processes to better utilize dyno resources on Heroku. Benchmark tests show these approaches reduced load times and increased the number of concurrent requests applications can handle.
JRuby + Rails = Awesome Java Web Framework at Jfokus 2011Nick Sieger
This document summarizes a presentation on using JRuby and Ruby on Rails for web application development. It discusses how JRuby allows Ruby code to drive Java, embed Ruby in Java applications, and compile Ruby to Java bytecode. Rails is presented as a dynamic web framework that uses conventions over configuration and opinionated defaults. The document provides examples of common Rails features like scaffolding, models, controllers and views. It also outlines how to deploy Rails applications as WAR files or to cloud platforms using JRuby.
Javascript Frameworks Comparison - Angular, Knockout, Ember and BackboneDeepu S Nath
Introduction and Comparison of polpular JS Frameworks Knockout, Ember, Angular and Backbone. The presentation descrobes How and when to select each framework.
The talk focuses on the processes and requirements to ship a software, which was written with MacRuby, to the end user. I present libraries and tools, that are helpful for this purpose and show how to use them.
The document discusses adopting Grails for web application development. It summarizes several episodes or lessons learned:
1. GORM constraints were ignored when domain classes were loaded by a shared classloader rather than the Grails classloader. The constraints had to be extracted to a shared library.
2. Using BlazeDS for Flex communication caused data objects to lose field values after round trips. DTOs and mapping tools like Dozer were needed.
3. Web services should treat the UI as another automation client to avoid duplicating XML flows. Domain data can be mapped to XML in GSPs without DTOs.
4. When domain classes were no longer stored in the database, meta-
The document discusses adopting the Grails web application framework. It describes several episodes that a company experienced in using Grails in production applications. Episode 1 discusses how GORM constraints were ignored when domain classes were shared between applications. Episode 2 describes issues mapping domain objects to Flex classes. Episode 3 provides recommendations for designing web services for both user interfaces and automation. Episode 4 discusses enhancing meta-classes when domain classes were no longer stored in the database. Episode 5 offers suggestions for improving developer support. Episode 6 shows how to leverage functionality across applications by extracting shared services into plugins. The summary provides best practices including clearly communicating benefits, maintaining coding guidelines, and staying close to Grails strengths.
4. What is Google App Engine?
• A cloud-computing platform
• Run your web apps on Google’s infrastructure
• Platform as a Services (PaaS)
4
Saturday, November 21, 2009
5. App Engine Architecture
Incoming Requests
Load App Engine App Engine App Engine
Balancer Front End Front End Front End
AppServer AppServer AppServer
Other Google
AppServer Infrastructure
API Layer - Bigtable
- Google Accounts
- Memcache
App App App
- Image manipulation
5
Saturday, November 21, 2009
7. Quotas and Billing
Resource Provided Free Additional Cost
CPU 6.5 hours/day $0.10/hour
Bandwidth In 1GByte/day $0.10/GByte
Bandwidth Out 1GByte/day $0.12/GByte
Stored Data 1 GB $0.005/GB-day
Emails sent 2000/day to users $0.0001/email
50000/day to admins
7
Saturday, November 21, 2009
8. Ruby on App Engine
8
Saturday, November 21, 2009
9. Apps run on JRuby
• Fast and portable
• A wealth of integration options
• Supported App Engine Java APIs
9
Saturday, November 21, 2009
10. Small & Modular Frameworks
• Rack
• Sinatra
• Merb/Rails3*
• Duby
* Currently unreleased
10
Saturday, November 21, 2009
11. DataMapper for Persistence
• Schema defined in your model
• Extensions for validations, AR finders & more
• Works with existing dm-appengine adapter
11
Saturday, November 21, 2009
12. Easy to Install
sudo gem install google-appengine
Everything you need installs as gems
12
Saturday, November 21, 2009
16. Demo
run lambda { |env| [200, {}, 'Hello'] }
16
Saturday, November 21, 2009
17. Current Issues with JRuby on App Engine
• Several seconds to “spin-up” a new JRuby instance
• Some gems still need their extensions ported to Java
• Not officially supported
17
Saturday, November 21, 2009
19. Duby’s not Ruby
• Statically typed
• No Duby runtime
• Uses Java’s type system
19
Saturday, November 21, 2009
20. Duby has Ruby-inspired Syntax
def fib(a:int)
if a < 2
a
else
fib(a - 1) + fib(a - 2)
end
end
puts fib 10
Saturday, November 21, 2009
21. // Generated from examples/Test.duby
public class Test extends java.lang.Object {
public static void main(String[] argv) {
System.out.println(Test.fib(10));
}
public static int fib(int a) {
return (a < 2) ?
(a) :
((Test.fib((a - 1)) + Test.fib((a - 2))));
}
}
Saturday, November 21, 2009
22. A Simple Duby App
import javax.servlet.http.HttpServlet
import com.google.appengine.ext.duby.db.Model
class Post < Model
def initialize; end
property title, String
property body, Text
end
class DubyApp < HttpServlet
def_edb(list, 'com/ribrdb/list.dhtml')
def doGet(request, response)
@posts = Post.all.run
response.getWriter.write(list)
end
def doPost(request, response)
post = Post.new
post.title = request.getParameter('title')
post.body = Text.new(request.getParameter('body'))
post.save
doGet(request, response)
end
end
22
Saturday, November 21, 2009
23. A Simple Duby App
import javax.servlet.http.HttpServlet
import com.google.appengine.ext.duby.db.Model
class Post < Model
def initialize; end
property title, String
property body, Text
end Types
class DubyApp < HttpServlet inferred from parent
def_edb(list, 'com/ribrdb/list.dhtml')
class
def doGet(request, response)
@posts = Post.all.run
response.getWriter.write(list)
end
def doPost(request, response)
post = Post.new
post.title = request.getParameter('title')
post.body = Text.new(request.getParameter('body'))
post.save
doGet(request, response)
end
end
23
Saturday, November 21, 2009
24. A Simple Duby App
import javax.servlet.http.HttpServlet
import com.google.appengine.ext.duby.db.Model
class Post < Model
def initialize; end
property title, String
property body, Text
end
Plugins
class DubyApp < HttpServlet
def_edb(list, 'com/ribrdb/list.dhtml')
def doGet(request, response)
@posts = Post.all.run
response.getWriter.write(list)
end
def doPost(request, response)
post = Post.new
post.title = request.getParameter('title')
post.body = Text.new(request.getParameter('body'))
post.save
doGet(request, response)
end
end
24
Saturday, November 21, 2009
25. Duby Supports Plugins
Only form of metaprogramming (for now)
require 'erb'
Duby::AST.defmacro('def_edb') do |duby, fcall, p|
name = fcall.args_node.get(0).name
path = fcall.args_node.get(1).value
erb = ERB::Compiler.new(nil)
...
src = erb.compile(IO.read(path))
duby.eval(src, p, “(edb)”)
end
Saturday, November 21, 2009
26. Duby Can Use erb Templates
<title>Posts</title>
<body>
<h1>All Posts:</h1>
<% for post in @posts %>
<h2><%= post.title %></h2>
<p><%= post.body.getValue %></p>
<% end %>
<hr>
<h1>New Post:</h1>
<form method=post>
Title: <input type=text name=title><br>
Body: <textarea name=body></textarea><br>
<input type=submit>
</form>
</body>
Saturday, November 21, 2009
27. More to Come
• Open classes
• Mix ins
• Blocks
• More
27
Saturday, November 21, 2009
28. Resources
• Ryan Brown, ribrdb@google.com
John Woodell, woodie@google.com
• Google App Engine for JRuby
– http://code.google.com/p/appengine-jruby/
• Google Group
– http://groups.google.com/group/appengine-jruby
• Blog: JRuby on App Engine Blog
– http://jruby-appengine.blogspot.com/
28
Saturday, November 21, 2009