Developers keep hearing a lot about HTML5, but many don’t know what it actually means or is truly capable of. In this deep dive you will learn how to use HTML5 to solve existing challenges on the web and how to design and develop stunning HTML5 application. You will also preview HTML5 application runs cross platforms, in the desktop browsers as well as on the Phones. What will be covered in the session:
• Introduction to CSS3, Canvas, SVG, Video, and Audio
• What is the real potential of HTML5 using CSS3, Canvas, SVG, Video, Audio, and JavaScript?
• Canvas and SVG comparison, and when to use what
• Best Practices of writing good HTML5 application
• Come and see a collection of the best HTML5 application on Games, Videos, Movies, Comics, Travel, Music and Art
• Expect a lot of demos and code
Presentation and demo will be available at http://blogs.msdn.com/b/dorischen/
PHP remains the most popular server-side language on the Web and the most favoured language for Web attacks. The security vulnerabilities and attack techniques become more sophisticated though. For example, the vulnerability types PHP Object Instantiation and Phar Deserialization are comparatively unknown to traditional types like XSS and SQLi. In this technical talk, we look at a couple of critical security bugs found in popular open source PHP applications, such as WordPress, WooCommerce and Shopware. We will focus on fundamental design flaws and new state-of-the-art exploitation techniques that are used by attackers to compromise web servers through these issues which can occur in any other application as well.
[Session given at Engage 2019, Brussels, 15 May 2019]
In this session, Tim Davis (Technical Director at The Turtle Partnership Ltd) takes you through the new Domino Query Language (DQL), how it works, and how to use it in LotusScript, in Java, and in the new domino-db Node.js module. Introduced in Domino 10, DQL provides a simple, efficient and powerful search facility for accessing Domino documents. Originally only used in the domino-db Node.js module, with 10.0.1 DQL also became available to both LotusScript and Java. This presentation will provide code examples in all three languages, ensuring you will come away with a good understanding of DQL and how to use it in your projects.
April, 2021 OpenNTF Webinar - Domino Administration Best PracticesHoward Greenberg
While installing a new HCL Domino server is a relatively straight forward task, configuring the server properly requires knowledge. Lacking this knowledge means that several key steps may be missed resulting in a server with potential security and performance issues. Additionally there are several key features that will save you time on administration of the server. Domino server settings also affect the performance and security of custom applications. Even if you are a developer you should be aware of the options available when configuring a server.
Join our incredibly experienced presenters as they share their many years of Domino expertise. They will cover the finer details to correctly setup a Domino server environment that is optimized for performance, security and sustainable administration. Plus use this information presented in this webinar to modify and improve your existing server environment.
Presenters:
Heather Hottenstein, HCL Ambassador
Roberto Boccadoro, HCL Ambassador
Serdar Basegmez, HCL Ambassador
Additonal Panelists (Q and A)
John Paganetti, HCL
The Interactive Grid is introduced in APEX 5.1 as a best of both worlds of Tabular Forms and Interactive Reports. Although a lot of settings are declaratively avaible within the APEX builder, there are a ton of features built in that are only accessible by JavaScript.
In this session you will learn how to use the most interesting "hidden" features with just a few lines of JavaScript.
Some examples:
- Adding and removing buttons from the Interactive Grid toolbar.
- Adding and removing actions from the toolbar menu.
- Adding and removing functionality from the row level pop up menu.
- Removing complexity on the column level.
- Adding tooltips to a column.
- Changing the layout of columns and headings.
- Refreshing (only) changed records within the grid.
- Removing only deleted records from the grid - without a full refresh.
Developers keep hearing a lot about HTML5, but many don’t know what it actually means or is truly capable of. In this deep dive you will learn how to use HTML5 to solve existing challenges on the web and how to design and develop stunning HTML5 application. You will also preview HTML5 application runs cross platforms, in the desktop browsers as well as on the Phones. What will be covered in the session:
• Introduction to CSS3, Canvas, SVG, Video, and Audio
• What is the real potential of HTML5 using CSS3, Canvas, SVG, Video, Audio, and JavaScript?
• Canvas and SVG comparison, and when to use what
• Best Practices of writing good HTML5 application
• Come and see a collection of the best HTML5 application on Games, Videos, Movies, Comics, Travel, Music and Art
• Expect a lot of demos and code
Presentation and demo will be available at http://blogs.msdn.com/b/dorischen/
PHP remains the most popular server-side language on the Web and the most favoured language for Web attacks. The security vulnerabilities and attack techniques become more sophisticated though. For example, the vulnerability types PHP Object Instantiation and Phar Deserialization are comparatively unknown to traditional types like XSS and SQLi. In this technical talk, we look at a couple of critical security bugs found in popular open source PHP applications, such as WordPress, WooCommerce and Shopware. We will focus on fundamental design flaws and new state-of-the-art exploitation techniques that are used by attackers to compromise web servers through these issues which can occur in any other application as well.
[Session given at Engage 2019, Brussels, 15 May 2019]
In this session, Tim Davis (Technical Director at The Turtle Partnership Ltd) takes you through the new Domino Query Language (DQL), how it works, and how to use it in LotusScript, in Java, and in the new domino-db Node.js module. Introduced in Domino 10, DQL provides a simple, efficient and powerful search facility for accessing Domino documents. Originally only used in the domino-db Node.js module, with 10.0.1 DQL also became available to both LotusScript and Java. This presentation will provide code examples in all three languages, ensuring you will come away with a good understanding of DQL and how to use it in your projects.
April, 2021 OpenNTF Webinar - Domino Administration Best PracticesHoward Greenberg
While installing a new HCL Domino server is a relatively straight forward task, configuring the server properly requires knowledge. Lacking this knowledge means that several key steps may be missed resulting in a server with potential security and performance issues. Additionally there are several key features that will save you time on administration of the server. Domino server settings also affect the performance and security of custom applications. Even if you are a developer you should be aware of the options available when configuring a server.
Join our incredibly experienced presenters as they share their many years of Domino expertise. They will cover the finer details to correctly setup a Domino server environment that is optimized for performance, security and sustainable administration. Plus use this information presented in this webinar to modify and improve your existing server environment.
Presenters:
Heather Hottenstein, HCL Ambassador
Roberto Boccadoro, HCL Ambassador
Serdar Basegmez, HCL Ambassador
Additonal Panelists (Q and A)
John Paganetti, HCL
The Interactive Grid is introduced in APEX 5.1 as a best of both worlds of Tabular Forms and Interactive Reports. Although a lot of settings are declaratively avaible within the APEX builder, there are a ton of features built in that are only accessible by JavaScript.
In this session you will learn how to use the most interesting "hidden" features with just a few lines of JavaScript.
Some examples:
- Adding and removing buttons from the Interactive Grid toolbar.
- Adding and removing actions from the toolbar menu.
- Adding and removing functionality from the row level pop up menu.
- Removing complexity on the column level.
- Adding tooltips to a column.
- Changing the layout of columns and headings.
- Refreshing (only) changed records within the grid.
- Removing only deleted records from the grid - without a full refresh.
BP204 - Take a REST and put your data to work with APIs!Craig Schumann
Today, the web is buzzing with the talk about web APIs. It seems that everyone - Facebook, Twitter, Netflix - has some sort of API you can use to integrate with their services. APIs are fundamental to how services on the web work today and data is the new currency. Knowing how to put them to work or how to roll your own can be a huge addition to your development toolbox. This session is all about web-based APIs (like REST). If you have only the vaguest idea about what an API is, or have ever wondered what REST was all about -- then this session is for you! We'll cover examples of using common public APIs and how you can put them to work in your own apps, and how to go about creating your own APIs, or use the REST services in IBM Domino.
Survey of some free Tools to enhance your SQL Tuning and Performance Diagnost...Carlos Sierra
We know there are a few tools that can help you enhance your abilities to do SQL Tuning or diagnose your database performing poorly besides those provided by the product. Some are free and some are not. Some are good and some not quite. Some are easy to use and understand and some are not. Some of them help with the entire database while some focus on a particular SQL statement. Most of these tools fill gaps and enhance the product. Which ones are the ones we recommend and why?
This session is about getting to know some free tools, that can help you improve your diagnostics collections and skills when it comes to both SQL Tuning and overall Oracle database Performance Diagnostics. The survey presented includes for the entire database: snapper, TUNAs360 and eDB360. Then for SQL Tuning: planx, sqlash, sqlmon, SQLTXPLAIN and SQLd360.
Presentation from Engage 2022 in Bruges
From day to day administration to advanced configuration from automated maintenance to running the best multi client mail server on the market, from advanced security to data access.
The JSON data type and functions that support it comprise one of the most interesting features introduced in MySQL 5.7 for application developers. But no feature is a Golden Hammer. We need to apply a little expertise to get the best of it, and avoid misusing it. I’ll show practical examples that work well with JSON, and other scenarios where conventional columns would perform better. Questions addressed in this presentation: How much space does JSON data use, compared to conventional data? What is the performance of querying JSON vs. conventional data? How do I create indexes for JSON data? What kind of data is best to store in JSON? How do I get the best of both worlds?
When Web-based business applications communicate with each other, producer applications ENQUEUE messages and consumer applications DEQUEUE messages. Advanced Queuing provides database-integrated message queuing functionality. Advanced Queuing leverages the functions of the Oracle database so that messages can be stored persistently, propagated between queues on different machines and databases, and transmitted using Oracle Net Services, HTTP(S), and SMTP.
There exist some valid reasons to rebuild indexes on an Oracle database (not many). This presentation is about some of those reasons and how to automate such online index rebuild.
Reporting with Oracle Application Express (APEX)Dimitri Gielis
This presentation covers the different options you have to produce reports in Oracle Application Express (APEX). I cover Classic Reports, Interactive Reports and Grids, PL/SQL and exporting and printing your data with APEX Office Print (AOP).
A ridiculously long presentation from IBM Connect 2013, formerly Lotusphere, from Rob Novak @IBMRockStar and Jerald Mahurin @SociallyCurious on the tools, language, and methods we used to transition from Domino, Quickr and overall web developers to becoming IBM Connections 4.0 developers. From the abstract:
With IBM Connections 4.0, IBM has released the most important new platform - yes platform - for social business development since the Notes client. As a Domino developer, you have excelled. Now, faced with an entire new glossary of terms, new concepts in customization and development, and a whole new set of tools, it could take some time to get up to speed. This session will help you cut weeks off that ramp-up time by showing you exactly what a Connections development environment looks like. We'll cover how to choose your tools and toolkits as well as configuration for development and testing. From the fundamentals of skill gap identification to real working samples, this session is sure to give you a huge head start.
BP204 - Take a REST and put your data to work with APIs!Craig Schumann
Today, the web is buzzing with the talk about web APIs. It seems that everyone - Facebook, Twitter, Netflix - has some sort of API you can use to integrate with their services. APIs are fundamental to how services on the web work today and data is the new currency. Knowing how to put them to work or how to roll your own can be a huge addition to your development toolbox. This session is all about web-based APIs (like REST). If you have only the vaguest idea about what an API is, or have ever wondered what REST was all about -- then this session is for you! We'll cover examples of using common public APIs and how you can put them to work in your own apps, and how to go about creating your own APIs, or use the REST services in IBM Domino.
Survey of some free Tools to enhance your SQL Tuning and Performance Diagnost...Carlos Sierra
We know there are a few tools that can help you enhance your abilities to do SQL Tuning or diagnose your database performing poorly besides those provided by the product. Some are free and some are not. Some are good and some not quite. Some are easy to use and understand and some are not. Some of them help with the entire database while some focus on a particular SQL statement. Most of these tools fill gaps and enhance the product. Which ones are the ones we recommend and why?
This session is about getting to know some free tools, that can help you improve your diagnostics collections and skills when it comes to both SQL Tuning and overall Oracle database Performance Diagnostics. The survey presented includes for the entire database: snapper, TUNAs360 and eDB360. Then for SQL Tuning: planx, sqlash, sqlmon, SQLTXPLAIN and SQLd360.
Presentation from Engage 2022 in Bruges
From day to day administration to advanced configuration from automated maintenance to running the best multi client mail server on the market, from advanced security to data access.
The JSON data type and functions that support it comprise one of the most interesting features introduced in MySQL 5.7 for application developers. But no feature is a Golden Hammer. We need to apply a little expertise to get the best of it, and avoid misusing it. I’ll show practical examples that work well with JSON, and other scenarios where conventional columns would perform better. Questions addressed in this presentation: How much space does JSON data use, compared to conventional data? What is the performance of querying JSON vs. conventional data? How do I create indexes for JSON data? What kind of data is best to store in JSON? How do I get the best of both worlds?
When Web-based business applications communicate with each other, producer applications ENQUEUE messages and consumer applications DEQUEUE messages. Advanced Queuing provides database-integrated message queuing functionality. Advanced Queuing leverages the functions of the Oracle database so that messages can be stored persistently, propagated between queues on different machines and databases, and transmitted using Oracle Net Services, HTTP(S), and SMTP.
There exist some valid reasons to rebuild indexes on an Oracle database (not many). This presentation is about some of those reasons and how to automate such online index rebuild.
Reporting with Oracle Application Express (APEX)Dimitri Gielis
This presentation covers the different options you have to produce reports in Oracle Application Express (APEX). I cover Classic Reports, Interactive Reports and Grids, PL/SQL and exporting and printing your data with APEX Office Print (AOP).
A ridiculously long presentation from IBM Connect 2013, formerly Lotusphere, from Rob Novak @IBMRockStar and Jerald Mahurin @SociallyCurious on the tools, language, and methods we used to transition from Domino, Quickr and overall web developers to becoming IBM Connections 4.0 developers. From the abstract:
With IBM Connections 4.0, IBM has released the most important new platform - yes platform - for social business development since the Notes client. As a Domino developer, you have excelled. Now, faced with an entire new glossary of terms, new concepts in customization and development, and a whole new set of tools, it could take some time to get up to speed. This session will help you cut weeks off that ramp-up time by showing you exactly what a Connections development environment looks like. We'll cover how to choose your tools and toolkits as well as configuration for development and testing. From the fundamentals of skill gap identification to real working samples, this session is sure to give you a huge head start.
IBM Connections administration – keep your systems running the right wayLetsConnect
You have IBM Connections installed but now you are unsure what you need to do to keep the lights on the servers running smoothly.
User account synchronization, Database maintenance, reviewing the log files for errors, …
There are many of tasks for an IBM Connections admin – let us tell you how to schedule them into daily, weekly, monthly or even quarterly tasks.
Learn what you need to deal with immediately and which tasks you can schedule for later.
Take home some useful scripts, life saving settings and a sample schedule for your admin work
DEV-1269: Best and Worst Practices for Deploying IBM Connections – IBM Conne...panagenda
It’s back. For the 3rd year in a row. Depending on deployment size, operating system and security considerations you have different options to configure IBM Connections. This session will show good and bad examples on how to do it from multiple customer deployments. We will describe things we found and how you can optimize your systems. Main topics include simple (documented) tasks that should be applied, missing documentation, automated user synchronization, TDI solutions and user synchronization, performance tuning, security optimizing and planning SSO. This is valuable information that will help you to be successful in your next IBM Connections deployment project. Don’t miss it.
A presentation by Christoph Stoettner (panagenda Consulting)
Диспетчер тегов Google. Меньше затрат, больше контроля.CubeLine Agency
Увеличиваем эффективность и умножаем прибыль при помощи технологичных инструментов.
Диспетчер тегов Google — гибкий и удобный инструмент для оптимизации работы с рекламными кампаниями.
Смотрите видео выступления: http://www.youtube.com/watch?v=v-iONoYInKE
Содержание:
- Зачем нужен GTM?
- Что это такое?
- Основные понятия для работы с диспетчером тегов
- Возможности Google Tag Manager
- Нестандартные аналитические системы
- Контроль, изменение и удаление файлов cookie.
- Управление ремаркетингом.
- Специальная разметка для тегов в GTM
- Как устанавливать и настраивать теги своими силами?
- Плюсы и минусы GTM.
There are many ways to get into the skilled trades, but some methods will be better suited for you than others. If you are looking to enter the skilled trades, here is an overview of the most straightforward ways to jumpstart your new career. Learn more about technical schools, community college programs, union apprenticeships, and on-the-job training in this white paper as well as the strengths and weaknesses of each. For more information about technical programs at The Refrigeration School, contact an RSI Admissions Representative today. - See more at: http://www.refrigerationschool.com/blog/skilled-trades/white-paper-skilled-trades-career-training-so…
A presentation by Julian Robichaux and Kathy Brown on how to make IBM Domino Designer for Eclipse work better for you, so that you can work more efficiently.
ITT 2015 - Simon Stewart - Building Android Apps at Speed and ScaleIstanbul Tech Talks
Every two weeks Facebook releases a new version of their flagship Android application which is one of the most widely used apps in the world. The codebase is worked on by a large engineering team. In this talk, Simon Stewart covers some of the technologies and approaches that Facebook use to allow their engineers to work with confidence and speed on the codebase, while at the same time ensuring solid and timely releases.
In its 3.2 and 3.3 generations, the Spring Framework focuses on core features for asynchronous processing and message-oriented architectures, as well as enhancements to its caching support and its language support. The Spring Framework project also comes with a new Gradle-based build and a new GitHub-based contribution model. In this session, we'll discuss key features in this year's Spring 3.2 and next year's Spring 4.0, including support for upcoming standards such as JCache, websockets, JMS 2.0, and not least of all Java 8's language features.
This talk introduces some of the compelling features coming in Spring 3.1, 3.2 and then gazes into the future and looks at some of the powerful new features in the upcoming Spring 4.0 release.
Spring Data Requery is alternatives of Spring Data JPA
Requery is lightweight ORM for DBMS (MySQL, PostgreSQL, H2, SQLite, Oracle, SQL Server)
Spring Data Requery provide Query By Native Query, Query By Example and Query By Property like Spring Data JPA
Spring Data Requery is better performance than JPA
MongoDB + Java - Everything you need to know Norberto Leite
Learn everything you need to know to get started building a MongoDB-based app in Java. We'll explore the relationship between MongoDB and various languages on the Java Virtual Machine such as Java, Scala, and Clojure. From there, we'll examine the popular frameworks and integration points between MongoDB and the JVM including Spring Data and object-document mappers like Morphia.
Learn everything you need to know to get started building a MongoDB-based app in Java. We'll explore the relationship between MongoDB and various languages on the Java Virtual Machine such as Java, Scala, and Clojure. From there, we'll examine the popular frameworks and integration points between MongoDB and the JVM including Spring Data and object-document mappers like Morphia.
More on Fitnesse and Continuous Integration (Silicon Valley code camp 2012)Jen Wong
FitNesse is a wiki-based software testing tool that can be a powerful addition to your Continuous Integration Environments. Its greatest advantages include providing visibility into tests and results, and providing access to test-writing by non-technical team members. We will:
* look at specific examples and code,
* discuss the advantages and drawbacks of using FitNesse as a test framework
* implement, deploy, and use a simple fixture in a fitnesse test
* review different kinds of fixtures, including decision table, script, query, html, and selenium webtest fixtures
* discuss some of the more interesting fixture extensions we've implemented, including JSON-based verification and the ability to pass in javascript code for dynamic verification
* use Hudson/Jenkins to run your FitNesse tests as a step in your Continuous Integration/Deployment process
Getting the most out of Java [Nordic Coding-2010]Sven Efftinge
In this talk we explain how we use the more recent concepts of the Java programming language in order to improve readability and maintainability of our code.
Elevating Tactical DDD Patterns Through Object CalisthenicsDorra BARTAGUIZ
After immersing yourself in the blue book and its red counterpart, attending DDD-focused conferences, and applying tactical patterns, you're left with a crucial question: How do I ensure my design is effective? Tactical patterns within Domain-Driven Design (DDD) serve as guiding principles for creating clear and manageable domain models. However, achieving success with these patterns requires additional guidance. Interestingly, we've observed that a set of constraints initially designed for training purposes remarkably aligns with effective pattern implementation, offering a more ‘mechanical’ approach. Let's explore together how Object Calisthenics can elevate the design of your tactical DDD patterns, offering concrete help for those venturing into DDD for the first time!
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.
Sudheer Mechineni, Head of Application Frameworks, Standard Chartered Bank
Discover how Standard Chartered Bank harnessed the power of Neo4j to transform complex data access challenges into a dynamic, scalable graph database solution. This keynote will cover their journey from initial adoption to deploying a fully automated, enterprise-grade causal cluster, highlighting key strategies for modelling organisational changes and ensuring robust disaster recovery. Learn how these innovations have not only enhanced Standard Chartered Bank’s data infrastructure but also positioned them as pioneers in the banking sector’s adoption of graph technology.
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024Neo4j
Neha Bajwa, Vice President of Product Marketing, Neo4j
Join us as we explore breakthrough innovations enabled by interconnected data and AI. Discover firsthand how organizations use relationships in data to uncover contextual insights and solve our most pressing challenges – from optimizing supply chains, detecting fraud, and improving customer experiences to accelerating drug discoveries.
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.
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionAggregage
Join Maher Hanafi, VP of Engineering at Betterworks, in this new session where he'll share a practical framework to transform Gen AI prototypes into impactful products! He'll delve into the complexities of data collection and management, model selection and optimization, and ensuring security, scalability, and responsible use.
Pushing the limits of ePRTC: 100ns holdover for 100 daysAdtran
At WSTS 2024, Alon Stern explored the topic of parametric holdover and explained how recent research findings can be implemented in real-world PNT networks to achieve 100 nanoseconds of accuracy for up to 100 days.
GraphRAG is All You need? LLM & Knowledge GraphGuy Korland
Guy Korland, CEO and Co-founder of FalkorDB, will review two articles on the integration of language models with knowledge graphs.
1. Unifying Large Language Models and Knowledge Graphs: A Roadmap.
https://arxiv.org/abs/2306.08302
2. Microsoft Research's GraphRAG paper and a review paper on various uses of knowledge graphs:
https://www.microsoft.com/en-us/research/blog/graphrag-unlocking-llm-discovery-on-narrative-private-data/
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.
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:
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
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Albert Hoitingh
In this session I delve into the encryption technology used in Microsoft 365 and Microsoft Purview. Including the concepts of Customer Key and Double Key Encryption.
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.
Monitoring Java Application Security with JDK Tools and JFR Events
Connect2016 AD1387 Integrate with XPages and Java
1. AD-1387
Outside The Box: Integrating with Non-
Domino Apps using XPages and Java
Julian Robichaux, panagenda
Kathy Brown, PSC Group
2. Who Are We?
• Kathy Brown
▪ Senior Consultant, PSC Group LLC
▪ IBM Champion
▪ @IamKathyBrown
▪ runningnotes.net
3. Who Are We?
• Julian Robichaux
▪ Senior Application Developer, panagenda
▪ IBM Champion
▪ @jrobichaux
▪ nsftools.com
4. Why Are We Here?
• Application integration
▪ Get data from other places
▪ Put data in other places
• Ideally this will be invisible to the end-user
• We will show you high-level detail (and code!) in this
presentation, even more is in the sample database available for
download
5. What Will We Be Using?
• IBM Domino® Server 9.0.1 FP4
• IBM Domino Designer (DDE) 9.0.1 FP4
• Java 1.6 (as included with Domino and DDE)
• XPages
• Other bits and bobs as mentioned throughout the presentation
7. Data Basics
• Before we start getting data, let’s talk about what the data
usually looks like
▪ XML
▪ JSON
▪ CSV
• But Java is made of objects…
• How do we convert from structured data to objects?
8. Easy And Old School: CSV
• Comma-separated values
• Simple data format, been used for years, still very common
• Boooorrrriiiinnnngg
▪ yawn
• Stick with us, this will make the other (COOLER) examples
easier to understand
9. Here’s What Our CSV Data Looks Like
"title","studio","year","adjustedRevenue","unadjustedRevenue"
"Gone With The Breeze","NGN",1939,1750000000,200000000
"Star Battles","Foz",1977,1500000000,450000000
"The Sound Of MP3s","Foz",1965,1250000000,160000000
"I.T.: The Computer Guys","Univixen",1982,1200000000,425000000
"Titantuan","Parallax",1997,1150000000,650000000
10. And Our Corresponding Java Object
public class MovieBean {
private String title;
private String studio;
private int year;
private int adjustedRevenue;
private int unadjustedRevenue;
public MovieBean() {}
public String getTitle() { return title; }
public void setTitle(String title) { this.title = title; }
public String getStudio() { return studio; }
public void setStudio(String studio) { this.studio = studio; }
public int getYear() { return year; }
public void setYear(int year) { this.year = year; }
public int getAdjustedRevenue() { return adjustedRevenue; }
public void setAdjustedRevenue(int adjustedRevenue) { this.adjustedRevenue = adjustedRevenue; }
public int getUnadjustedRevenue() { return unadjustedRevenue; }
public void setUnadjustedRevenue(int unadjustedRevenue) { this.unadjustedRevenue = unadjustedRevenue; }
}
11. Java Beans!
• Java Beans are just Java objects with:
▪ private fields
▪ getter and setter methods
to access the fields
▪ a “no-arg” constructor
• Perfect for representing
structured data elements
public class EasyBean {
private String name;
private int count;
public EasyBean() {}
public String getName() { return name; }
public void setName(String name) {
this.name = name;
}
public int getCount() { return count; }
public void setCount(int count) {
this.count = count;
}
}
12. The Bean And Its Data
public class MovieBean {
private String title;
private String studio;
private int year;
private int adjustedRevenue;
private int unadjustedRevenue;
public MovieBean() {}
public String getTitle() { return title; }
public void setTitle(String title) { this.title = title; }
public String getStudio() { return studio; }
public void setStudio(String studio) { this.studio = studio; }
public int getYear() { return year; }
public void setYear(int year) { this.year = year; }
public int getAdjustedRevenue() { return adjustedRevenue; }
public void setAdjustedRevenue(int adjustedRevenue) { this.adjustedRevenue = adjustedRevenue; }
public int getUnadjustedRevenue() { return unadjustedRevenue; }
public void setUnadjustedRevenue(int unadjustedRevenue) { this.unadjustedRevenue = unadjustedRevenue; }
}
"title","studio","year","adjustedRevenue","unadjustedRevenue"
"Gone With The Breeze","NGN",1939,1750000000,200000000
"Star Battles","Foz",1977,1500000000,450000000
"The Sound Of MP3s","Foz",1965,1250000000,160000000
"I.T.: The Computer Guys","Univixen",1982,1200000000,425000000
"Titantuan","Parallax",1997,1150000000,650000000
13. From Data To Bean
• Option 1: Parse the data manually, create objects manually
• Option 2: Use a library that parses the data for you into rows
and columns, put the row data into objects
• Option 3: Use a library that puts the data directly into objects
for you!
▪ referred to as “unmarshalling” or “deserialization”
▪ or “reading” or “parsing”, if that seems confusing
14. OpenCSV Library
• OpenCSV
▪ http://opencsv.sourceforge.net
▪ Open source, Apache licensed
▪ Tiny file size (14k or 42k, depending on version)
• We will use an older version 2.3, because that is compatible
with Java 6
▪ Latest version 3.6 is compiled for Java 7+
▪ java.lang.UnsupportedClassVersionError: JVMCFRE003 bad major version;
16. OpenCSV Parsing Code
public static List convertCSV(String csvText) {
try {
CSVReader reader = new CSVReader(new StringReader(csvText));
ColumnPositionMappingStrategy<MovieBean> strat =
new ColumnPositionMappingStrategy<MovieBean>();
strat.setType(MovieBean.class);
String[] columns = new String[] {
"title", "studio", "year", "adjustedRevenue", "unadjustedRevenue"};
strat.setColumnMapping(columns);
CsvToBean csv = new CsvToBean();
List list = csv.parse(strat, reader);
return list;
} catch (Exception e) {
// log this!
return null;
}
}
17. Awesome! What Did We Learn?
• Use Java Beans to hold data
• Use unmarshalling to avoid manual effort
• Let libraries do the work for you!
▪ to a degree… it’s always a trade-off
18. XML: Manual Parsing
• Java has plenty of XML support built-in
▪ DOM, SAX, and STaX for parsing
▪ XPath for selecting sets of nodes
• Using these, we can manually read an XML file (or string) and
put all the information piece-by-piece into objects
• Or…
19. JAXB
• Java Architecture for XML Binding (JAXB)
• Easily marshal and unmarshal between Java objects and XML
• Included with Java 6+
▪ Nothing extra to install for XPages
• Use Annotations in the Java Bean source code to indicate
which XML elements map to which fields
20. The XML
<moviedata>
<movie>
<title>Gone With The Breeze</title>
<studio>NGN</studio>
<year>1939</year>
<adjusted>1750000000</adjusted>
<unadjusted>200000000</unadjusted>
</movie>
<movie>
<title>Star Battles</title>
<studio>Foz</studio>
<year>1977</year>
<adjusted>1500000000</adjusted>
<unadjusted>450000000</unadjusted>
</movie>
<movie>
<title>The Sound Of MP3s</title>
<studio>Foz</studio>
<year>1965</year>
<adjusted>1250000000</adjusted>
<unadjusted>160000000</unadjusted>
</movie>
<movie>
<title>I.T.: The Computer Guys</title>
<studio>Univixen</studio>
<year>1982</year>
<adjusted>1200000000</adjusted>
<unadjusted>425000000</unadjusted>
</movie>
<movie>
<title>Titantuan</title>
<studio>Parallax</studio>
<year>1997</year>
<adjusted>1150000000</adjusted>
<unadjusted>650000000</unadjusted>
</movie>
</moviedata>
21. Java Bean to Hold Multiple Movies
package connect16.example.data;
import java.util.ArrayList;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="moviedata")
public class MovieBeanList {
private ArrayList<MovieBean> movies =
new ArrayList<MovieBean>();
@XmlElement(name="movie")
public ArrayList<MovieBean> getMovies() {
return movies;
}
public void setMovies(ArrayList<MovieBean> movies) {
this.movies = movies;
}
}
<moviedata>
<movie>
<title>Gone With The Breeze</title>
<studio>NGN</studio>
<year>1939</year>
<adjusted>1750000000</adjusted>
<unadjusted>200000000</unadjusted>
</movie>
. . .
</moviedata>
22. MovieBean Annotations
@XmlElement(name="title")
public String getTitle() { return title; }
public void setTitle(String title) {
this.title = title; }
@XmlElement(name="studio")
public String getStudio() { return studio; }
public void setStudio(String studio) {
this.studio = studio; }
@XmlElement(name="year")
public int getYear() { return year; }
public void setYear(int year) { this.year = year; }
@XmlElement(name="adjusted")
public int getAdjustedRevenue() { return adjustedRevenue; }
public void setAdjustedRevenue(int adjustedRevenue) { this.adjustedRevenue = adjustedRevenue; }
@XmlElement(name="unadjusted")
public int getUnadjustedRevenue() { return unadjustedRevenue; }
public void setUnadjustedRevenue(int unadjustedRevenue) { this.unadjustedRevenue = unadjustedRevenue;
}
<moviedata>
<movie>
<title>Gone With The Breeze</title>
<studio>NGN</studio>
<year>1939</year>
<adjusted>1750000000</adjusted>
<unadjusted>200000000</unadjusted>
</movie>
. . .
</moviedata>
23. XML Parsing Code
public static MovieBeanList convertXML(String xml) {
try {
// see @XML annotations on Java beans
JAXBContext jc = JAXBContext.newInstance(MovieBeanList.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
MovieBeanList movies = (MovieBeanList)unmarshaller.unmarshal(
new StringReader(xml));
return movies;
} catch (Exception e) {
// log this!
return null;
}
}
24. And One More Time With JSON
• A JSON parsing library is included with the XPages libraries
▪ com.ibm.commons.util.io.json.JsonParser
• It reads JSON into Java Maps and Lists, not custom objects
• Some third-party libraries have unmashalling support (GSON,
FlexJSON) but cause security exceptions
▪ You can get around this, but it’s not always convenient
• So I wrote my own generic unmarshalling code
26. Small Change to MovieBean
@XmlElement(name="adjusted")
public int getAdjustedRevenue() { return adjustedRevenue; }
public void setAdjustedRevenue(int adjustedRevenue) { this.adjustedRevenue = adjustedRevenue; }
public void setAdjusted(int adjustedRevenue) { this.adjustedRevenue = adjustedRevenue; }
@XmlElement(name="unadjusted")
public int getUnadjustedRevenue() { return unadjustedRevenue; }
public void setUnadjustedRevenue(int unadjustedRevenue) { this.unadjustedRevenue = unadjustedRevenue; }
public void setUnadjusted(int unadjustedRevenue) { this.unadjustedRevenue = unadjustedRevenue; }
{"movie": {
"title": "Gone With The Breeze",
"studio": "NGN",
"year": 1939,
"adjusted": 1750000000,
"unadjusted": 200000000
}}
added setAdjusted() and
setUnadjusted() to map to
JSON field names
27. JSON Parsing Code
public static List convertJSON(String json) {
try {
Object stuff = JsonParser.fromJson(JsonJavaFactory.instance, json);
List list = buildObjectFromJSON(MovieBean.class, stuff);
return list;
} catch (Exception e) {
// log this!
return null;
}
}
28. Pros and Cons
• Pros
▪ Less code (on your part)
▪ Reduce or eliminate hardcoded mappings
• Cons
▪ Harder to debug if things go wrong
▪ Be very diligent about responding to Exceptions and checking the
data in the beans that are created
29. Caveats and Tips
• Some code that works for XPages will not work for Java Agents
▪ access to different external libraries
▪ default compiler level on agents is still Java 1.4
• Trap (and log) your errors!
▪ keep a copy of the “bad” JSON/XML when possible for analysis
• These Java Beans are not quite the same as XPages Managed
Beans — but you should learn to use those too!
33. XPages Data Tables Are An Option
• You can use Java Arrays or Lists as input
• Automatically uses each item in the Array/List as a row in a
table
• Customize column values for each row based on item data
• You can even include a pager control
34. Data Table Example
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:dataTable rows="30" id="movieTable" var="movie" style="width:50%">
<xp:this.value><![CDATA[#{javascript:connect16.example.data.Test.convertJSON();
}]]></xp:this.value>
<xp:column id="titleColumn">
<xp:text escape="true" id="titleField" value="#{movie.title}">
</xp:text>
</xp:column>
<xp:column id="studioColumn">
<xp:text escape="true" id="studioField" value="#{movie.studio}">
</xp:text>
</xp:column>
<xp:column id="yearColumn">
<xp:text escape="true" id="yearField" value="#{movie.year}">
</xp:text>
</xp:column>
</xp:dataTable>
</xp:view>
returns an ArrayList of MovieBeans
MovieBean fields
(you can also use
class methods)
36. Repeat Controls and more
• Using a bean allows you to use expression language
▪ Expression language allows you to populate:
• a repeat control
• input fields
• really anything in XPages where you can use expression language
▪ Pros and cons for using managed beans, check out:
• http://www.slideshare.net/RussellMaher/jmp402
40. Simple Stuff: Data From A URL
• When we access other servers, we often do it as though we are
accessing a URL
▪ port 80 and 443 are almost always open for traffic
▪ REST services (we’ll talk about that next!) usually are URL
requests
▪ a lot of convenient and well-understood security has been built on
top of HTTP
• So how hard is it to get data from a URL in Java?
41. Java URL Fetch: Ridiculously Simple Example
URL url = new URL("http://server/data.xml");
InputStream in = url.openStream();
something has to read the stream,
but that’s all there is (in a basic sense)
42. What’s An InputStream?
• An InputStream is a “stream” of bytes
• Often sent in chunks, so you don’t have to have the entire
contents of the stream in memory unless you want to
• Commonly accepted and understood by Java methods
43. XML As An InputStream
URL url = new URL("https://server/data.xml");
InputStream in = url.openStream();
JAXBContext jc = JAXBContext.newInstance(MovieBeanList.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
MovieBeanList movies = (MovieBeanList)unmarshaller.unmarshal(in);
44. Converting Bytes To Strings
• What if your Java method needs a String?
▪ or a Reader
• Use an InputStreamReader… BUT
• Mind your character sets!
▪ Java uses the default system character set by default
▪ According to spec, JSON is supposed to be sent as Unicode
(usually UTF-8): https://tools.ietf.org/html/rfc4627
45. JSON As A Reader
URL url = new URL("https://server/data.js");
InputStream in = url.openStream();
BufferedReader reader = new BufferedReader(
new InputStreamReader( in, "UTF-8" ));
Object stuff = JsonParser.fromJson(JsonJavaFactory.instance, reader);
46. CSV As A Reader
URL url = new URL("https://server/data.csv");
InputStream in = url.openStream();
BufferedReader reader = new BufferedReader(
new InputStreamReader( in, "UTF-8" ));
CSVReader csv = new CSVReader(reader);
47. If You Really Really Want A String
URL url = new URL("https://server/data.txt");
BufferedReader reader = new BufferedReader(
new InputStreamReader( url.openStream(), "UTF-8" ));
StringBuilder sb = new StringBuilder();
char[] buffer = new char[1024];
int size = 0;
while ( (size = reader.read(buffer)) > 0 ) {
sb.append(buffer, 0, size);
}
reader.close();
String stuff = sb.toString();
48. Is That All You Have To Do?
• Well…
▪ proxy servers
▪ authentication
▪ SSL certificates
▪ POST requests and headers
• Examples of all those things in the sample database
• When you use other libraries (like the SocialSDK, coming up!)
these things are often taken care of for you
49. Domino Security For Network (and File) Access
• You must have the following permissions in the Security section of
the Server doc to access the network:
▪ EITHER: run unrestricted
▪ OR: sign XPages
AND run restricted
• This is the signature of the XPage AND all associated resources
▪ referenced controls, JS libraries, Java code, attached JAR files
▪ if any one of those things doesn’t have access, the XPage will fail
▪ HTTP Web Server: You are forbidden to perform this operation
50. REST Service Example
• REST = Representational State Transfer
• There are a lot of finer points to a proper REST service, but for
the purpose of our examples it will be:
▪ using a URL + HTTP to get information
▪ using a URL + HTTP to send information
51. Simple REST Service Example
public static MovieBeanList getMoviesFromREST()
throws IOException, JAXBException {
String restURL = "http://server/movieService.php?count=5&output=xml";
URL url = new URL(restURL);
InputStream in = url.openStream();
JAXBContext jc = JAXBContext.newInstance(MovieBeanList.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
return (MovieBeanList)unmarshaller.unmarshal( in );
}
52. Simple REST Service Example
public static void createDocs(Database db) {
try {
MovieBeanList movies = getMoviesFromREST();
for (MovieBean movie : movies.getMovies()) {
Document doc = db.createDocument();
doc.replaceItemValue("Form", "MovieData");
doc.replaceItemValue("Title", movie.getTitle());
doc.replaceItemValue("Studio", movie.getStudio());
doc.replaceItemValue("Year", movie.getYear());
doc.save();
doc.recycle();
}
} catch (Exception e) {
// log this!
}
}
54. IBM SocialSDK (aka Social Business Toolkit SDK)
• What is it?
▪ A toolkit, provided by IBM, to integrate with Connections,
Connections Cloud, Dropbox, Facebook, Twitter, and more
▪ Originally part of the XPages Extension Library, split off to its own
project in 2013
• Download from OpenNTF or Github
▪ https://openntf.org/p/Social+Business+Toolkit+SDK
▪ https://github.com/OpenNTF/SocialSDK/releases
55. IBM SocialSDK (aka Social Business Toolkit SDK)
• What’s included?
▪ Toolkit files
▪ OAuth* code
▪ Examples
▪ Sample XPages application
▪ Also has components for WebSphere and Tomcat
56. *OAuth
• A quick word about OAuth
▪ Many APIs require OAuth
▪ OAuth authentication is handled in the Social Business Toolkit
▪ BUT it’s still a really really good thing to understand
▪ http://www.slideshare.net/dominopoint/dd12-oauth-for-domino-
developers
57. IBM SocialSDK Install
• How to install
▪ IBM Getting Started - https://www-10.lotus.com/ldd/lcwiki.nsf/dx/
Installing_on_Domino_Server_SDK1.0
• using an UpdateSite database
• doesn’t load? See http://johnjardin.ukuvuma.co.za/2012/05/04/xpages-tip-
what-to-check-when-domino-doesnt-install-osgi-plugins-from-updatesite
▪ Circular reference! http://xomino.com/2015/03/08/ibmsbt-in-xpages-
getting-set-up-with-a-social-business-toolkit-part-1/
• using file copy technique
• method may not be “best practice”, but it will get you up and running
58. IBM SocialSDK (Quick Install Version)
• Unzip the file from OpenNTF
• Install the plugin in Designer
• Set up an update site OR find the “Features” and “Plugins” folders in the
archive and place on your server
▪ datadominoworkspaceapplicationseclipse
• Re-start server
• Register your app for OAuth (if needed)
• Open the XPagesSBT.nsf to check that the plugin is working
▪ May need to update the endpoints
▪ http://xomino.com/2015/03/10/ibmsbt-in-xpages-getting-set-up-with-a-social-
business-toolkit-part-2/
59. IBM SocialSDK - What Can You Do?
• Activities
• Bookmarks
• Communities
• Files
• Forums
• Profiles
• and more
http://www.ibmpressbooks.com/store/xpages-extension-library-a-step-by-step-guide-to-the-9780132901819
old but still
useful
(chapter 13)
apps.na.collabserv.com
60. Use the API
• Javadocs:
▪ http://infolib.lotus.com/resources/social_business_toolkit/javadoc
▪ Source code: https://github.com/OpenNTF/SocialSDK
• Examples:
▪ XPagesSBT.nsf
▪ https://greenhouse.lotus.com/sbt/sbtplayground.nsf/
JavaScriptSnippets.xsp
▪ https://greenhouse.lotus.com/sbt/sbtplayground.nsf/JavaSnippets.xsp
▪ search for “niklas heidloff sbt demo"
61. Adding Connections Functionality to Your DB
• Copy the following design elements from XPagesSBT.nsf to your database:
▪ _BasicLogin (XPage)
▪ sbtLoginPanel (Custom Control)
▪ sbtLoginPage (Custom Control)
• Open faces-config.xml in XPagesSBT.nsf
▪ copy the <managed-bean> info under "Greenhouse Connections" and add it to the
face-config.xml file in your database
▪ modify the "url" and "authenticationPage" references to match your Connections
server and local database
• In the Xsp Properties of your database (under Application Configuration), make
sure com.ibm.xsp.sbtsdk.library is checked on the “Page Generation” tab
▪ if that's not an option, you didn't install the SocialSDK plugins yet
62. IBM SocialSDK - My Files Java
public static EntityList<File> getConnectionsFiles() {
try {
FileService service = new FileService();
// API CHANGE! Used to return FileList
EntityList<File> myFiles = service.getMyFiles();
return myFiles;
} catch (Exception e) {
// log this!
return null;
}
}
use this in a dataTable
like we did before
63. IBM SocialSDK - My Files JavaScript
var fileService = new FileService();
fileService.getMyFiles().then(
function(files) {
if (files.length == 0) {
dom.setText("filesTable", "You do not own any files, you loser.");
} else {
for(var i=0; i<files.length; i++){
var file = files[i];
createItem(file);
}
}
}
65. Connecting to Other Servers
• The StackOverflow example in XPagesSBT.nsf is a good place
to start if you want to connect to a custom server
• stackoverflow managed bean and GenericStackoverflow.xsp
• https://api.stackexchange.com/docs/questions
<xe:this.data>
<xe:restJsonData var='rest' endpoint="stackoverflow" serviceUrl="/2.0/questions"
paramCount="pagesize" paramFirst="page" paramFirstType="page1" splitPath="items">
<xe:this.urlParameters>
<xe:urlParameter name="site" value="stackoverflow"></xe:urlParameter>
<xe:urlParameter name="order" value="desc"></xe:urlParameter>
<xe:urlParameter name="sort" value="activity"></xe:urlParameter>
</xe:this.urlParameters>
</xe:restJsonData>
</xe:this.data>
66. Connecting to Other Servers
• You can also connect directly using a ClientService
▪ basic authentication is easy, OAuth takes more work
▪ uses Apache commons HttpClient under the covers
▪ methods for get, post, put, delete
RestClient client = new RestClient("http://your.rest.server");
client.setAuthenticator(new RestClient.BasicAuthenticator("username", "password"));
Response response = client.get("your/rest/endpoint", ClientService.FORMAT_TEXT);
return (String)response.getData();
68. Quickbase
• http://www.quickbase.com/api-guide/index.html
• What You’ll Need:
▪ An understanding of Quickbase
▪ Quickbase account
▪ JavaScript and HTML for “simple” actions like embedding a table
▪ REST and Java for more complex API calls
69. Quickbase
• Embed a Quickbase table in XPages:
Somewhere in head of page:
<script lang="javascript" src="https://psc.quickbase.com/db/YOUR_DB_ID?
a=API_GenResultsTable&apptoken=YOUR_APP_TOKEN&jht=1">
</script>
Somewhere in body of page:
<script lang="javascript">
qdbWrite();
</script>
71. Quickbase
• More complex Quickbase API calls require post and response
from Quickbase and your application
• Most calls require authentication
▪ XPages application posts username and password to QB
▪ QB responds with an authentication token to be used throughout
session
74. XPages Extension Library
• The XPages Extension Library (ExtLib) began as an OpenNTF
project in 2011
▪ https://extlib.openntf.org
• As of Domino 9.0, basic components of ExtLib are installed with
the server by default
▪ com.ibm.xsp.extlib.* in domino/osgi/shared/eclipse/plugins
• However, the good stuff is still on OpenNTF
75. Installing ExtLib
• Super high-level install instructions
▪ Download from https://extlib.openntf.org
▪ Unzip and extract updateSiteOpenNTF-designer.zip and
updateSiteOpenNTF.zip
▪ Create 2 different update site databases: one for Designer, one
for Domino server
▪ Install appropriate update sites to server (via notes.ini) and DDE
(File - Application - Install)
▪ Restart Domino and DDE
https://www-10.lotus.com/ldd/ddwiki.nsf/dx/XPages_Extension_Library_Deployment
76. Using ExtLib With DDE Local Preview
• NOTE: after you install, the extension library will work on your
Domino server but NOT when using Local Preview on your
workstation
• To also make Local Preview work, see these instructions:
▪ http://www.tlcc.com/admin/tlccsite.nsf/pages/extension-lib
77. Relational Database Support
• In 2014, the ExtLib component that allows you to connect
XPages directly to relational databases was “promoted”
▪ used to be in the *.extlibx package, now in *.extlib
▪ no longer “experimental”
• Nice video introduction by Brian Gleeson:
▪ https://www.openntf.org/main.nsf/blog.xsp?
permaLink=NHEF-9N7CKD
78. Setting Up Your Database
• Use the JDBC Driver Plugin Wizard (DDE Tools menu) to
bundle your JDBC driver as a plugin to install on Domino
▪ TIP: you might need to
include a license file
with your driver
▪ install via Update Site
like you did with ExtLib
and SocialSDK
79. Setting Up Your Database
• In XSP Properties of your database (Page Generation tab),
make sure com.ibm.xsp.extlib.relational.library is checked
• In Package Explorer, create a folder called "jdbc" under
WebContent/WEB-INF in your database
• Then create a new file in that folder called
MyDbConnection.jdbc
▪ or whatever name you want, with a .jdbc extension
81. Relational Database XPage
• Now you can create an XPage with a JDBCQuery data source:
▪ connectionName: MyDbConnection
▪ sqlTable: MOVIEINFO
▪ lots of other settings you can make too (query, etc.)
• hover over the setting in the Preferences tab for inline help
• We can display the data in the same kind of dataTable we used
earlier
85. Paul Calhoun Has More!!!
• For a lot more detail (and sage advice), go to Paul Calhoun’s
session later this week Wednesday at 10:45!
BP-1617: Relational XPages!!
Using XPages as the Presentation
Layer for RDBMS Data
87. Pull integration
• Up to this point, we’ve shown how to pull data:
▪ Pulling CSV into our application
▪ Showing files from Connections in our application
▪ Displaying data from Quickbase in our application
88. Push integration
• IBM SBT:
▪ The JavaScript snippets include loads of examples like adding a new file, adding
an activity, etc.
▪ Upload a new file:
fileService.uploadFile("your-file")
• Quickbase:
▪ Similarly, the Quickbase REST API allows you to add new records, users, edit
records, etc.
▪ Add a new record:
https://target_domain/db/target_dbid?a=API_EditRecord&rid=154
&_fnm_second_year=1776&_fid_8=changed&update_id=992017018414
&ticket=auth_ticket&apptoken=app_token
89. Passive integration
• Rather than actively pushing data or pulling data, you can
passively serve up data for other applications (or your own as
we’ll see in a minute) to pull when they need it
• In XPages, we can passively (and easily) serve up data with a
custom REST service
90. Create a REST service
• Create a new XPage, called “REST”
• Change the viewState to “nostate”
• Add a REST service xe:restService
• Give it a pathInfo name, this will be part of the URL
• Click + next to service and add xe:viewItemFileService
▪ At a minimum, add a view name and defaultColumns = true
93. Java Deployment Options
• Java classes directly in DDE
▪ Code -> Java
• JAR files directly in DDE
▪ Code -> Jars
• jvm/lib/ext folder
• Update Site/plugins like Social SDK and ExtLib
94. Build Your Own Plugins
• Sometimes it makes sense to bundle your code (or someone
else’s) in a plugin for distribution
▪ avoid security exceptions
▪ better performance
▪ use in multiple databases
• Especially good for really large API libraries
▪ Google, Tableau, etc.
95. It’s A Little Complicated
• Hard to get your head around, especially if you’re not an Eclipse
developer
• Tips and instructions
▪ https://www.dalsgaard-data.eu/blog/wrap-an-existing-jar-file-into-
a-plug-in
▪ http://www.slideshare.net/paulswithers1/ibm-connected-2015-
mas103-xpages-performance-and-scalability
▪ https://www.youtube.com/embed/dchOyzjy9L4 (Niklas Heidloff
again!)
97. WAIT! You didn’t talk about ___________!?!
• We tried to give you the tools to connect to other services
▪ REST? Direct connect or Social SDK.
▪ Java API? Attach the JAR and go.
▪ JavaScript API? Connect and create/parse info.
▪ Relational Database? Use the Extension Library.
• The “technology of the month” you want to connect to will likely
fall into one of these categories
• You can do this!
98. Integration Use Cases
• Notes to Notes application
▪ Good: Widgets from Sales app to Production Issues app in Notes
View
▪ Better: Widgets from Sales to Production in ExtJS user-
configurable and -filterable grid on an XPage
• Notes to IBM Collaboration Software
▪ Good: Display IBM Connections business card in app
▪ Better: Display IBM Connections Cloud files, with likes,
comments, and ability to edit in the cloud
99. More Integration Use Cases
• Your Application to the Outside World
▪ Good: Display data from another source
▪ Better: Interact with data from another source
• Example use cases using the tools from this session:
▪ JIRA - “Report a bug” button in your applications (REST + Java)
▪ Quickbase - Update records in a Quickbase application (REST +
Java)
▪ o365 - Create a meeting from your Notes app to user’s Outlook
calendar (REST + Java… sense a theme here?)
101. Learning Java
• The book “Head First Java” is still excellent
• TLCC has some Notes-specific Java course material
• The only way to learn it is to use it
• Keep in mind that Notes/Domino is still (for now) on Java 6
▪ cool new Java 7 and Java 8 features aren’t yet available to us
102. Learning XPages
• The book “Mastering XPages” sold by IBM Press (2nd edition)
• XPages Portable Command Guide
• http://xpages.info
• http://www.notesin9.com
• If you get stuck, ask questions on http://stackoverflow.com
▪ but please search for an answer first
103. Thank you
look here for the slides,
and a link to the sample db:
http://www.slideshare.net/kjbrown13
http://www.slideshare.net/JulianRobichaux
or ask us on Twitter:
@IamKathyBrown
@jrobichaux
104. Acknowledgements and Disclaimers
Availability. References in this presentation to IBM products, programs, or services do not imply that they will be available in all countries in which IBM operates.
The workshops, sessions and materials have been prepared by IBM or the session speakers and reflect their own views. They are provided for informational
purposes only, and are neither intended to, nor shall have the effect of being, legal or other guidance or advice to any participant. While efforts were made to
verify the completeness and accuracy of the information contained in this presentation, it is provided AS-IS without warranty of any kind, express or implied. IBM
shall not be responsible for any damages arising out of the use of, or otherwise related to, this presentation or any other materials. Nothing contained in this
presentation is intended to, nor shall have the effect of, creating any warranties or representations from IBM or its suppliers or licensors, or altering the terms and
conditions of the applicable license agreement governing the use of IBM software.
All customer examples described are presented as illustrations of how those customers have used IBM products and the results they may have achieved. Actual
environmental costs and performance characteristics may vary by customer. Nothing contained in these materials is intended to, nor shall have the effect of,
stating or implying that any activities undertaken by you will result in any specific sales, revenue growth or other results.