This document discusses Google App Engine and Gaelyk, a Groovy toolkit for Google App Engine. It summarizes key features of Google App Engine including infrastructure as a service (IaaS), platform as a service (PaaS), and software as a service (SaaS). It also discusses Gaelyk's use of Groovy to simplify development for Google App Engine through Groovlets, templates, and dynamic features. The document provides examples of using Gaelyk to interact with Google App Engine services like the datastore, task queues, and XMPP.
OSDC-2010 Database Full-text Search.... making it not suckAaron Walker
Providing rich "Google like" search capabilities in traditional database backed applications has generally meant relying on the full-text support of your chosen database. This leads to database lock-in not to mention the need of having a dba with some serious kung-fu to tune it.
Hibernate Search brings the power of full text search engines to the persistence domain model by combining Hibernate Core with the capabilities of the Apache Lucene search engine.
In this session, you will learn what problems Hibernate Search can solve and you will follow the steps of adding it to a Hibernate based application.
Front End page speed performance improvements for DrupalAndy Kucharski
If you are a developer or business manager with responsibilities over your website, then check out this deck..
What will you learn?
The webinar, created by our Founder and CEO, Andy Kucharski, is a highly accessible, information-rich review on the ways Drupal site performance can be radically improved. Some of the main topics we will cover include:
What is slow site speed?
What tools to use to diagnose it.
Plus six key improvements to make Drupal “run fast!”
And if that’s not already enough, we will also share some best practices monitoring tips for making sure you know how the Drupal server is performing 24/7.
Make Drupal Run Fast - increase page load speedPromet Source
What does it mean when someone says “My Site is slow now”? What is page speed? How do you measure it? How can you make it faster? We’ll try to answer these questions, provide you with a set of tools to use and explain how this relates to your server load.
We will cover:
- What is page load speed? – Tools used to measure performance of your pages and site – Six Key Improvements to make Drupal “run fast”
++ Performance Module settings and how they work
++ Caching – biggest gainer and how to implement Boost
++ Other quick hits: off loading search, tweaking settings & why running crons is important
++ Ask your host about APC and how to make sure its set up correctly
++ Dare we look at the database? Easy changes that will help a lot!
- Monitoring Best practices – what to set up to make sure you know what is going on with your server – What if you get slashdoted? Recommendation on how to quickly take cover from a rhino.
OSDC-2010 Database Full-text Search.... making it not suckAaron Walker
Providing rich "Google like" search capabilities in traditional database backed applications has generally meant relying on the full-text support of your chosen database. This leads to database lock-in not to mention the need of having a dba with some serious kung-fu to tune it.
Hibernate Search brings the power of full text search engines to the persistence domain model by combining Hibernate Core with the capabilities of the Apache Lucene search engine.
In this session, you will learn what problems Hibernate Search can solve and you will follow the steps of adding it to a Hibernate based application.
Front End page speed performance improvements for DrupalAndy Kucharski
If you are a developer or business manager with responsibilities over your website, then check out this deck..
What will you learn?
The webinar, created by our Founder and CEO, Andy Kucharski, is a highly accessible, information-rich review on the ways Drupal site performance can be radically improved. Some of the main topics we will cover include:
What is slow site speed?
What tools to use to diagnose it.
Plus six key improvements to make Drupal “run fast!”
And if that’s not already enough, we will also share some best practices monitoring tips for making sure you know how the Drupal server is performing 24/7.
Make Drupal Run Fast - increase page load speedPromet Source
What does it mean when someone says “My Site is slow now”? What is page speed? How do you measure it? How can you make it faster? We’ll try to answer these questions, provide you with a set of tools to use and explain how this relates to your server load.
We will cover:
- What is page load speed? – Tools used to measure performance of your pages and site – Six Key Improvements to make Drupal “run fast”
++ Performance Module settings and how they work
++ Caching – biggest gainer and how to implement Boost
++ Other quick hits: off loading search, tweaking settings & why running crons is important
++ Ask your host about APC and how to make sure its set up correctly
++ Dare we look at the database? Easy changes that will help a lot!
- Monitoring Best practices – what to set up to make sure you know what is going on with your server – What if you get slashdoted? Recommendation on how to quickly take cover from a rhino.
Lessons from Highly Scalable Architectures at Social Networking SitesPatrick Senti
What are the techniques and technolgies used by popular social networking sites such as Facebook, Twitter, Tumblr, Pinterest or Instagram? How do they architect their systems to scale to multiples of 100 million of visits per day?
Hadoop World 2011: The Hadoop Stack - Then, Now and in the Future - Eli Colli...Cloudera, Inc.
Many people refer to Apache Hadoop as their system of choice for big data management but few actually use just Apache Hadoop. Hadoop has become a proxy for a much larger system which has HDFS storage at its core. The Apache Hadoop based "big data stack" has changed dramatically over the past 24 months and will chance even more over the next 24 months. This talk talks about trends in the evolution of the Hadoop stack, change in architecture and changes in the kinds of use cases that are supported. It will also talk about the role of interoperability and cohesion in the Apache Hadoop stack and the role of Apache Bigtop in this regard.
Apache Web Performance - Leveraging Apache to make your site FLY!
Apache is the most popular web server in the world, yet its default configuration can't handle high traffic. Learn how to setup Apache for high performance sites and leverage many of its available modules to deliver a faster web experience for your users. Discover how Apache can max out a 1 Gbps NIC and how to serve over 140,000 pages per minute with a small Apache cluster. Get happier users, more conversions, and save money with a properly setup Apache web server.
Starting up a cost free library portal for small-funded librariesMaria Cecilia Ayson
Lecture presented at PAARL's Conference on the theme "The Power of Convergence: Technology and Connectivity in the 21st Century Library and Information Services" held on Nov. 11-13, 2009 at St Paul College, Pasig City.
About the basics of setting up a website from scratch or through free website builders, with examples of applications in library and information centers.
Groovy DSLs - S2GForum London 2011 - Guillaume LaforgeGuillaume Laforge
Design Your Own Domain Specific Language
This talk examines how dynamic languages in general and Groovy in particular provide toos to help design programming languages that are closer of the natural language of the target subject matter expert. It offers many features that allow you to create embedded DSLs: Closures, compile-time and run-time metaprogramming, operator overloading, named arguments, a more concise and expressive syntax and more.
Lessons from Highly Scalable Architectures at Social Networking SitesPatrick Senti
What are the techniques and technolgies used by popular social networking sites such as Facebook, Twitter, Tumblr, Pinterest or Instagram? How do they architect their systems to scale to multiples of 100 million of visits per day?
Hadoop World 2011: The Hadoop Stack - Then, Now and in the Future - Eli Colli...Cloudera, Inc.
Many people refer to Apache Hadoop as their system of choice for big data management but few actually use just Apache Hadoop. Hadoop has become a proxy for a much larger system which has HDFS storage at its core. The Apache Hadoop based "big data stack" has changed dramatically over the past 24 months and will chance even more over the next 24 months. This talk talks about trends in the evolution of the Hadoop stack, change in architecture and changes in the kinds of use cases that are supported. It will also talk about the role of interoperability and cohesion in the Apache Hadoop stack and the role of Apache Bigtop in this regard.
Apache Web Performance - Leveraging Apache to make your site FLY!
Apache is the most popular web server in the world, yet its default configuration can't handle high traffic. Learn how to setup Apache for high performance sites and leverage many of its available modules to deliver a faster web experience for your users. Discover how Apache can max out a 1 Gbps NIC and how to serve over 140,000 pages per minute with a small Apache cluster. Get happier users, more conversions, and save money with a properly setup Apache web server.
Starting up a cost free library portal for small-funded librariesMaria Cecilia Ayson
Lecture presented at PAARL's Conference on the theme "The Power of Convergence: Technology and Connectivity in the 21st Century Library and Information Services" held on Nov. 11-13, 2009 at St Paul College, Pasig City.
About the basics of setting up a website from scratch or through free website builders, with examples of applications in library and information centers.
Groovy DSLs - S2GForum London 2011 - Guillaume LaforgeGuillaume Laforge
Design Your Own Domain Specific Language
This talk examines how dynamic languages in general and Groovy in particular provide toos to help design programming languages that are closer of the natural language of the target subject matter expert. It offers many features that allow you to create embedded DSLs: Closures, compile-time and run-time metaprogramming, operator overloading, named arguments, a more concise and expressive syntax and more.
Cloud Connected Devices on a Global Scale (CPN303) | AWS re:Invent 2013Amazon Web Services
Increasingly, mobile and other connected devices are leveraging the scalability and capabilities of the cloud to deliver services to end users. However, connecting these devices to the cloud presents unique challenges. Resource constraints make it impossible to use many common frameworks and transport restrictions make it difficult to use dynamic cloud resources. In this session, learn how you can develop and deploy highly-scalable global solutions using Amazon Web Services (Amazon Virtual Private Cloud, Elastic IP addresses, Amazon Route 53, Auto Scaling) and tools like Puppet. Hear how Panasonic and Banjo architect their cloud infrastructure from both a start-up and enterprise perspective.
BDM8 - Near-realtime Big Data Analytics using ImpalaDavid Lauzon
Quick overview of all informations I've gathered on Cloudera Impala. It describes use cases for Impala and what not to use Impala for. Presented at Big Data Montreal #8 at RPM Startup Center.
The cloud reduces the barrier to entry for many small and medium size enterprises into analytics. Hadoop and related frameworks like Hive, Oozie, Sqoop are becoming tools of choice for deriving insights from data. However, these frameworks were designed for in-house datacenters which have different tradeoffs from a cloud environment and making them run well in the cloud presents some challenges. In this talk, we describe how we've extended Hadoop and Hive to exploit these new tradeoffs and offer them as part of the Qubole Data Service (QDS). We will also present use-cases that show how QDS is making it extremely easy for an end user to use these technologies in the cloud.
Speaker: Ashish Thusoo, CEO, Qubole
Splunk for JMX App overview (configuration, deployment, tips and tricks). Developing JMX logic in your application. Splunking other JVM logs and profiling traces. The JVM application landscape and why it's such a rich source of Splunkable machine data. Developing new Splunkbase apps to leverage Splunk for JMX.
Cloud infrastructure. Google File System and MapReduce - Andrii VozniukAndrii Vozniuk
My presentation for the Cloud Data Management course at EPFL by Anastasia Ailamaki and Christoph Koch.
It is mainly based on the following two papers:
1) S. Ghemawat, H. Gobioff, S. Leung. The Google File System. SOSP, 2003
2) J. Dean, S. Ghemawat. MapReduce: Simplified Data Processing on Large Clusters. OSDI, 2004
An experience sharing of the OpenStack deployment at Suning.com, a large online retailer in China. The talk presents the challenges and opportunities on orchestrating the enterprise workloads using Heat.
Fort de ses 1.7 millions de téléchargements l'an passé, Groovy continue son bonhomme de chemin en tête parmi les langages de programmation alternatifs pour la JVM.
Groovy 2.0, sorti l'an passé, introduisait dans son offre de la modularité, le support de JDK 7 au niveau syntaxique avec "Project Coin" autant qu'au niveau JVM avec l'utilisation d'"invoke dynamic", et proposait des fonctionnalités de typage et de compilation statique.
Groovy 2.1, quant à lui, s'appuie sur ces bases pour compléter le support d'"invoke dynamic" pour plus de performances. Il propose des améliorations permettant de documenter, d'aider les IDEs, et de vérifier statiquement les Domain-Specific Languages construits avec Groovy. Vous pourrez créer des méta-annotations regroupant d'autres annotations, pour éviter l'annotation "hell". Et enfin, vous irez encore plus loin dans la customisation du compilateur !
Accrochez votre ceinture, paré au décollage !
"Groovy 2.0 and beyond" presentation given at the Groovy/Grails eXchange conference.
Video can be seen here:
http://skillsmatter.com/podcast/groovy-grails/keynote-speech
Groovy Domain Specific Languages - SpringOne2GX 2012Guillaume Laforge
Paul King, Andrew Eisenberg and Guillaume Laforge present about implementation of Domain-Specific Languages in Groovy, while at the SpringOne2GX 2012 conference in Washington DC.
Climate Impact of Software Testing at Nordic Testing DaysKari Kakkonen
My slides at Nordic Testing Days 6.6.2024
Climate impact / sustainability of software testing discussed on the talk. ICT and testing must carry their part of global responsibility to help with the climat warming. We can minimize the carbon footprint but we can also have a carbon handprint, a positive impact on the climate. Quality characteristics can be added with sustainability, and then measured continuously. Test environments can be used less, and in smaller scale and on demand. Test techniques can be used in optimizing or minimizing number of tests. Test automation can be used to speed up testing.
PHP Frameworks: I want to break free (IPC Berlin 2024)Ralf Eggert
In this presentation, we examine the challenges and limitations of relying too heavily on PHP frameworks in web development. We discuss the history of PHP and its frameworks to understand how this dependence has evolved. The focus will be on providing concrete tips and strategies to reduce reliance on these frameworks, based on real-world examples and practical considerations. The goal is to equip developers with the skills and knowledge to create more flexible and future-proof web applications. We'll explore the importance of maintaining autonomy in a rapidly changing tech landscape and how to make informed decisions in PHP development.
This talk is aimed at encouraging a more independent approach to using PHP frameworks, moving towards a more flexible and future-proof approach to PHP development.
Epistemic Interaction - tuning interfaces to provide information for AI supportAlan Dix
Paper presented at SYNERGY workshop at AVI 2024, Genoa, Italy. 3rd June 2024
https://alandix.com/academic/papers/synergy2024-epistemic/
As machine learning integrates deeper into human-computer interactions, the concept of epistemic interaction emerges, aiming to refine these interactions to enhance system adaptability. This approach encourages minor, intentional adjustments in user behaviour to enrich the data available for system learning. This paper introduces epistemic interaction within the context of human-system communication, illustrating how deliberate interaction design can improve system understanding and adaptation. Through concrete examples, we demonstrate the potential of epistemic interaction to significantly advance human-computer interaction by leveraging intuitive human communication strategies to inform system design and functionality, offering a novel pathway for enriching user-system engagements.
Transcript: Selling digital books in 2024: Insights from industry leaders - T...BookNet Canada
The publishing industry has been selling digital audiobooks and ebooks for over a decade and has found its groove. What’s changed? What has stayed the same? Where do we go from here? Join a group of leading sales peers from across the industry for a conversation about the lessons learned since the popularization of digital books, best practices, digital book supply chain management, and more.
Link to video recording: https://bnctechforum.ca/sessions/selling-digital-books-in-2024-insights-from-industry-leaders/
Presented by BookNet Canada on May 28, 2024, with support from the Department of Canadian Heritage.
UiPath Test Automation using UiPath Test Suite series, part 4DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 4. In this session, we will cover Test Manager overview along with SAP heatmap.
The UiPath Test Manager overview with SAP heatmap webinar offers a concise yet comprehensive exploration of the role of a Test Manager within SAP environments, coupled with the utilization of heatmaps for effective testing strategies.
Participants will gain insights into the responsibilities, challenges, and best practices associated with test management in SAP projects. Additionally, the webinar delves into the significance of heatmaps as a visual aid for identifying testing priorities, areas of risk, and resource allocation within SAP landscapes. Through this session, attendees can expect to enhance their understanding of test management principles while learning practical approaches to optimize testing processes in SAP environments using heatmap visualization techniques
What will you get from this session?
1. Insights into SAP testing best practices
2. Heatmap utilization for testing
3. Optimization of testing processes
4. Demo
Topics covered:
Execution from the test manager
Orchestrator execution result
Defect reporting
SAP heatmap example with demo
Speaker:
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfPaige Cruz
Monitoring and observability aren’t traditionally found in software curriculums and many of us cobble this knowledge together from whatever vendor or ecosystem we were first introduced to and whatever is a part of your current company’s observability stack.
While the dev and ops silo continues to crumble….many organizations still relegate monitoring & observability as the purview of ops, infra and SRE teams. This is a mistake - achieving a highly observable system requires collaboration up and down the stack.
I, a former op, would like to extend an invitation to all application developers to join the observability party will share these foundational concepts to build on:
Accelerate your Kubernetes clusters with Varnish CachingThijs Feryn
A presentation about the usage and availability of Varnish on Kubernetes. This talk explores the capabilities of Varnish caching and shows how to use the Varnish Helm chart to deploy it to Kubernetes.
This presentation was delivered at K8SUG Singapore. See https://feryn.eu/presentations/accelerate-your-kubernetes-clusters-with-varnish-caching-k8sug-singapore-28-2024 for more details.
Removing Uninteresting Bytes in Software FuzzingAftab Hussain
Imagine a world where software fuzzing, the process of mutating bytes in test seeds to uncover hidden and erroneous program behaviors, becomes faster and more effective. A lot depends on the initial seeds, which can significantly dictate the trajectory of a fuzzing campaign, particularly in terms of how long it takes to uncover interesting behaviour in your code. We introduce DIAR, a technique designed to speedup fuzzing campaigns by pinpointing and eliminating those uninteresting bytes in the seeds. Picture this: instead of wasting valuable resources on meaningless mutations in large, bloated seeds, DIAR removes the unnecessary bytes, streamlining the entire process.
In this work, we equipped AFL, a popular fuzzer, with DIAR and examined two critical Linux libraries -- Libxml's xmllint, a tool for parsing xml documents, and Binutil's readelf, an essential debugging and security analysis command-line tool used to display detailed information about ELF (Executable and Linkable Format). Our preliminary results show that AFL+DIAR does not only discover new paths more quickly but also achieves higher coverage overall. This work thus showcases how starting with lean and optimized seeds can lead to faster, more comprehensive fuzzing campaigns -- and DIAR helps you find such seeds.
- These are slides of the talk given at IEEE International Conference on Software Testing Verification and Validation Workshop, ICSTW 2022.
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...UiPathCommunity
💥 Speed, accuracy, and scaling – discover the superpowers of GenAI in action with UiPath Document Understanding and Communications Mining™:
See how to accelerate model training and optimize model performance with active learning
Learn about the latest enhancements to out-of-the-box document processing – with little to no training required
Get an exclusive demo of the new family of UiPath LLMs – GenAI models specialized for processing different types of documents and messages
This is a hands-on session specifically designed for automation developers and AI enthusiasts seeking to enhance their knowledge in leveraging the latest intelligent document processing capabilities offered by UiPath.
Speakers:
👨🏫 Andras Palfi, Senior Product Manager, UiPath
👩🏫 Lenka Dulovicova, Product Program Manager, UiPath
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf91mobiles
91mobiles recently conducted a Smart TV Buyer Insights Survey in which we asked over 3,000 respondents about the TV they own, aspects they look at on a new TV, and their TV buying preferences.
Essentials of Automations: The Art of Triggers and Actions in FMESafe Software
In this second installment of our Essentials of Automations webinar series, we’ll explore the landscape of triggers and actions, guiding you through the nuances of authoring and adapting workspaces for seamless automations. Gain an understanding of the full spectrum of triggers and actions available in FME, empowering you to enhance your workspaces for efficient automation.
We’ll kick things off by showcasing the most commonly used event-based triggers, introducing you to various automation workflows like manual triggers, schedules, directory watchers, and more. Plus, see how these elements play out in real scenarios.
Whether you’re tweaking your current setup or building from the ground up, this session will arm you with the tools and insights needed to transform your FME usage into a powerhouse of productivity. Join us to discover effective strategies that simplify complex processes, enhancing your productivity and transforming your data management practices with FME. Let’s turn complexity into clarity and make your workspaces work wonders!
The Art of the Pitch: WordPress Relationships and SalesLaura Byrne
Clients don’t know what they don’t know. What web solutions are right for them? How does WordPress come into the picture? How do you make sure you understand scope and timeline? What do you do if sometime changes?
All these questions and more will be explored as we talk about matching clients’ needs with what your agency offers without pulling teeth or pulling your hair out. Practical tips, and strategies for successful relationship building that leads to closing the deal.
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdfPeter Spielvogel
Building better applications for business users with SAP Fiori.
• What is SAP Fiori and why it matters to you
• How a better user experience drives measurable business benefits
• How to get started with SAP Fiori today
• How SAP Fiori elements accelerates application development
• How SAP Build Code includes SAP Fiori tools and other generative artificial intelligence capabilities
• How SAP Fiori paves the way for using AI in SAP apps
Leading Change strategies and insights for effective change management pdf 1.pdf
Google App Engine, Groovy and Gaelyk presentation at the Paris JUG
1. Google App Engine,
Groovy and Gaelyk
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
2. Guillaume Laforge
• Groovy Project Manager
• JSR-241 Spec Lead
• Head of Groovy Development
at SpringSource
• Initiator of the Grails framework
• Co-author of Groovy in Action
• Speaker: JavaOne, QCon, JavaZone, Sun TechDays,
Devoxx, The Spring Experience, SpringOne, JAX,
Dynamic Language World, IJTC, and more...
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 2
3. Marc-Antoine Guarrigue &
Gaël Lazzari
•Marc-Antoine
– Architecte et Directeur de la R&D chez OCTO
Technology depuis 2001
•Missions d’architecture d’applications Java EE
•«Open Sourceur» dans l’âme
– JCaptcha
– Membre de l’OSSGTP
•Developpement des sociétés
– MassiveBrainGames.com
– XDepend.com
•Gaël Lazzari
– Consultant OCTO depuis septembre 2009
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 3
9. IaaS, PaaS, SaaS
• Software as a Service
– Gmail, SalesForce.com SaaS
• Platform as a Service
– Google App Engine
PaaS
• Infrastructure as a Service
– Amazon EC2
IaaS
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 6
12. Google App Engine
• Google’s PaaS solution
• Run your app on Google’s infrastructure
• Initially just Python supported
• Since this year, Java supported too
– Sandboxed JVM
– Jetty servlet container
• Several JVM-compatible language supported
• A few services available
– Email, XMPP, URL Fetch, Image, User, Task queues...
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 8
13. Key aspects
• You can use most of your usual web frameworks for
developping apps on App Engine Java
–A WAR file, basically!
• No OS image, or software to install
– Unlike with Amazon EC2
• All the scaling aspects are handled for you
– Database / session replication, load balancing
• There are quotas, but you need a high traffic
application to start being charged
–Free to get started
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 9
14. Available services
•Memcache •XMPP
– JCache implementation – Send / receive Jabber
– Save on CPU and DB messages (GTalk)
•URL Fetch
•User
– Access remote resources
– Use Google’s user/
– HttpUrlConnection authentication system
•Mail
– Support both incoming •Cron & Task queues
and outgoing emails – Schedule tasks at
regular intervals
•Images
– Queue units of work
– Resize, crop, rotate...
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 10
15. Limitations
•Not our usual relational database
– key / value datastore
•30 seconds request duration limit
• Forbidden to
– write on the file system
– create threads
– use raw sockets
– issue system calls
– use IO / Swing / etc. directly
•There’s a whitelist of classes allowed
• Number of files and their size are limited
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 11
21. The datastore...
•It’s not your father’s relational database!
–You’re not even using SQL!
• Distributed key / value store
– Based on Google’s «BigTable»
• Supporting
– Transactions and partitioning
– Hierarchies through entity groups
• Schema-less approach
• Data access APIs
– JPA and JDO
– Direct low-level APIs
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 17
22. ...and its «limitations»
• You’re not using SQL
–No joins
– No database constraints
– No aggregation functions (count, avg...)
• You can only retrieve 1000 records per query
• In a query, you can only filter on one column for
inequality
• Transactions only available in entity groups
• You can only update an entity once in a transaction
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 18
27. Why Groovy?
• Groovy is a dynamic language for the JVM
– very flexible, malleable, expressive and concise syntax
– easy to learn for Java developers
•deriving from the Java 5 grammar
– provides powerful APIs to simplify the life of developers
•possibility to dynamically enrich existing APIs
– support for Groovlets
– features its own template engine
• We worked with the Google App Engine Java team
before the official launch of the platform, to ensure
Groovy would run well on this new environment
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 20
28. • Gaelyk is a lightweight Groovy toolkit on top of
the Google App Engine Java SDK
• Gaelyk builds on Groovy’s servlet support
– Groovlets: Groovy scripts instead of raw servlets!
– Groovy templates: JSP-like template engine
– Both allow for a clean separation of views and logic
• Gaelyk provides several enhancements around the
GAE Java SDK to make life easier, thanks to
Groovy’s dynamic nature
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 21
29. First steps...
•Go to http://gaelyk.appspot.com
•Download the template project
•Put your first Groovlet in /WEB-INF/groovy
•And your templates at the root
•And you’re ready to go!
•Launch dev_appserver.sh
•Go to http://localhost:8080/
30. The web.xml
">
<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5
<servlet>
<servlet-name>GroovletServlet</servlet-name>
<servlet-class>groovyx.gaelyk.GaelykServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>TemplateServlet</servlet-name>
-class>
<servlet-class>groovyx.gaelyk.GaelykTemplateServlet</servlet
</servlet>
<servlet-mapping>
<servlet-name>GroovletServlet</servlet-name>
<url-pattern>*.groovy</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>TemplateServlet</servlet-name>
<url-pattern>*.gtpl</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.gtpl</welcome-file>
</welcome-file-list>
</web-app>
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 23
31. Shortcuts
•Variables available •Google services
– request / response – datastoreService
– context / applicaiton – memcacheService
– session – urlFetchService
– params – mailService
– header – userService
– out / sout / html – user
– defaultQueue
•Methods available – queues
– include / forward – xmppService
– print / println
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 24
33. Sending emails with Gaelyk
mailService.send to: 'admin@example.com',
from: 'user@example.com',
subject: 'Hello World',
htmlBody: '<bold>Hello</bold>'
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 26
34. ...compared to Java
Properties props = new Properties();
(props, null);
Session session = Session.getDefaultInstance
String msgBody = "...";
try {
Message msg = new MimeMessage(session); "));
msg.setFrom(new InternetAddress("admin@example.com", "Admin
TO,
msg.addRecipient(Message.RecipientType.
com", "Mr. User"));
new InternetAddress("user@example.
ted");
msg.setSubject("Your Example.com account has been activa
msg.setText(msgBody);
Transport.send(msg);
} catch (AddressException e) {}
} catch (MessagingException e) {}
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 27
35. A groovlet
• Instead of writing full-blown servlets, just write
Groovy scripts (aka Groovlets)
def numbers = [1, 2, 3, 4]
def now = new Date()
html.html {
body {
numbers.each { number -> p number }
p now
}
}
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 28
36. A template
<html>
<body>
<p><%
def message = "Hello World!"
print message %>
</p>
<p><%= message %></p>
<p>${message}</p>
<ul>
<% 3.times { %>
<li>${message}</li>
<% } %>
</ul>
</body>
</html>
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 29
37. Accessing the datastore
• Direct interaction with the low-level datastore APIs
ty
import com.google.appengine.api.datastore.Enti
Entity entity = new Entity("person")
map
// subscript notation, like when accessing a
entity['name'] = "Guillaume Laforge"
// normal property access notation
entity.age = 32
entity.save()
entity.delete()
datastoreService.withTransaction {
// do stuff with your entities
// within the transaction
}
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 30
38. Querying to be improved...
import com.google.appengine.api.datastore.*
der.*
import static com.google.appengine.api.datastore.FetchOptions.Buil
// query the scripts stored in the datastore
def query = new Query("savedscript")
// sort results by descending order of the creation date
query.addSort("dateCreated", Query.SortDirection.DESCENDING)
author
// filters the entities so as to return only scripts by a certain
r)
query.addFilter("author", Query.FilterOperator.EQUAL, params.autho
PreparedQuery preparedQuery = datastoreService.prepare(query)
// return only the first 10 results
def entities = preparedQuery.asList( withLimit(10) )
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 31
39. ...into something groovier?
def entities = Query.create {
select from: savedscript
sort DESC, on: dateCreated
where { author == params.author }
limit 10
} as List
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 32
40. ...into something groovier?
def entities = Query.create {
select from: savedscript d !
sort DESC, on: dateCreated
nte
where { author == params.author e }
m
limit 10
} as List p le
t Im
Ye
o t
N
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 32
41. Task queue API
// access a configured queue using the subscript notation
queues['dailyEmailQueue']
// or using the property access notation
queues.dailyEmailQueue
// you can also access the default queue with:
queues.default
defaultQueue
// add a task to the queue
queue << [
countdownMillis: 1000, url: "/task/dailyEmail",
taskName: "Send daily email newsletter",
method: 'PUT', params: [date: '20090914'],
payload: content
]
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 33
42. Jabber / XMPP support (1/3)
• Sending instant messages
String recipient = "someone@gmail.com"
// check if the user is online
if (xmppService.getPresence(recipient).isAvailable()) {
// send the message
def status = xmppService.send(to: recipient,
body: "Hello, how are you?")
// checks the message was successfully
// delivered to all the recipients
assert status.isSuccessful()
}
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 34
43. Jabber / XMPP support (2/3)
• Sending instant messages with an XML payload
String recipient = "service@gmail.com"
// check if the service is online
if (xmppService.getPresence(recipient).isAvailable()) {
// send the message
def status = xmppService.send to: recipient, xml: {
customers {
customer(id: 1) {
name 'Google'
}
}
}
// checks the message was successfully delivered to the service
assert status.isSuccessful()
}
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 35
44. Jabber / XMPP support (2/3)
• Sending instant messages with an XML payload
String recipient = "service@gmail.com"
// check if the service is online
if (xmppService.getPresence(recipient).isAvailable()) {
// send the message
def status = xmppService.send to: recipient, xml: {
customers {
customer(id: 1) { <customers>
name 'Google' <customer id=’1’>
} <name>Google</name>
} </customer>
} </customers>
// checks the message was successfully delivered to the service
assert status.isSuccessful()
}
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 35
45. Jabber / XMPP support (3/3)
• Receving incoming instant messages
– Configure the XmppServlet in web.xml
– Add the inbound message service in appengine-web.xml
// get the body of the message
message.body
// get the sender Jabber ID
message.from
// get the list of recipients Jabber IDs
message.recipients
// if the message is an XML document instead of a raw string message
if (message.isXml()) {
// get the raw XML
message.stanza
// get a document parsed with XmlSlurper
message.xml
}
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 36
46. What’s coming next?
• Add more sugar around...
– The Memcache service
– The incoming email support in GAE SDK 1.2.6
– The Datastore query system
•SQL-like DSL
•dynamic finders
• More generally...
– Anything that’ll come up in upcoming GAE SDK versions
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 37
47. Summary
• Easy access to a cloud solution
– Deploying Java apps, as easily as you would with PHP
• Familiar to Java folks
– Your good old Servlet centric webapps style
• Pretty cheap
– You need a high-trafficed website to reach the quotas
• Gaelyk provides a simplified approach to creating
Servlet centric webapps in a productive manner
– Leveraging Groovy’s servlet / template support and
dynamic capabilities
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 38
48. L aforge elopment
laume ovy Dev
Guil
Hea
glaf orge@
ro
d of G mail.com
g Q&A
References:
• http://code.google.com/appengine/
• http://gaelyk.appspot.com/
• http://groovy.codehaus.org/
• http://grails.org/
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
49. Images utilisées
dans cette présentation
• Nuages
– http://www.morguefile.com/archive/display/627059
– http://www.morguefile.com/archive/display/625552
– http://www.morguefile.com/archive/display/629785
• Le village dans les nuages
– http://www.collectoy.com/photoBDD/Disque/Le%20village%20dans%20les%20nuages%20(%20face%20).jpg
• Duke ok GAE
– http://code.google.com/images/duke-on-gae.jpg
– http://weblogs.java.net/blog/felipegaucho/archive/ae_gwt_java.png
• Python logo : http://python.org/images/python-logo.gif
• Gaelyc cross with clouds : http://www.morguefile.com/archive/display/37889
• Speed limit : http://www.morguefile.com/archive/display/18492
• Warehouse : http://www.morguefile.com/archive/display/85628
• Snow foot steps : http://www.flickr.com/photos/robinvanmourik/2875929243/
• Sugar : http://www.flickr.com/photos/ayelie/441101223/sizes/l/
Copyright 2009 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 40