SlideShare une entreprise Scribd logo
1  sur  49
Télécharger pour lire hors ligne
De07
TheNERDstuff:openingDominotothe
modernwebdeveloper
JanKrejcarek
PPFbanka(CZ)
@jan_krejcarek
OliverBusse
We4IT(D)
@zeromancer1972
Agenda
Spoiler:NERD=Node.js,Express,React,Domino
Node.jsintroduction
AppDevPack
Proton,DesignCatalog&DQL
Development,Testing,Deployment
CRUDdemo
Securityoptions
GettingHelp
Resume:why?
Q&A
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
Node.jsintroduction
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
Node.jsisNOTaserver
Butyoucancodeone
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
Simplestserverexample
const http = require('http');
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.write(new Date().toISOString());
res.end();
});
server.listen({port:8080}, () => {
console.log("listening")
});
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
FrameworksforNode.jswebapps
Express
Koa
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
Expressbasicprinciple
Codefortheendpoint:
router.get('/certificates/expiring/:someDate?', async (req, res, next) => {
let d = null;
if (typeof req.params.someDate != 'undefined') {
d = parse(req.params.someDate);
} else {
d = addMonths(endOfDay(new Date()), 3);
}
try {
var docs = await dao.getCertificatesExpiringBefore(d);
res.json(docs);
} catch (error) {
res.status(500).json({error:error.message})
}
})
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
DominoAppDevPack
Standalonedistribution(partnumberCC0NGEN)
NotpartoftheNotes/Dominoinstallationpackage
NotsupportedinDominoDesigner(whichisgood)
AvailableforDominoonLinuxandWindows(sincev1.0.1,March26,2019)
Quarterlyreleases
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
ContentoftheAppDevPack
Protonservertask
DominoDBmoduleforNode.js(notavailableonnpmjs.org,yet)
Demoapplicationwithdata
Documentation
Installationprocedure
APIdocumentation
DominoQueryLanguagesyntax
IAMexamples
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
Protonschema
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
Protontaskinstallation
Copythe"proton"filetotheDominoprogramdirectory
Add"Proton"totheServerTasksvariableinnotes.initostarttheProton
taskwhenDominostarts
ConfiguretheProtonusingnotes.inivariables:
PROTON_LISTEN_ADDRESS=0.0.0.0
Listensonallavailablenetworkinterfaces
PROTON_LISTEN_PORT=30000
TCP/IPporttouse
PROTON_SSL=1
UseTLSforcommunication
PROTON_KEYFILE=server.kyr
CanbethesameDominoalreadyusesforTLS
PROTON_AUTHENTICATION=client_cert
AuthenticateNode.jsappsusingacertificate
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
Recommendedsettingforproduction
Encryptthecommunication
Authenticateapplicationsusingacertificate
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
Three‑tierarchitecture
BymovingapplicationlogictoNode.jsandthepresentationlogictothe
browserweareactuallymovingtoathree‑tierarchitecturewhereDomino
functionsasastorage
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
Proton
Three‑tierarchitecture
Inthatcaseuserswillbeauthenticatedbytheapplicationlayer(Node.js)
andtheNode.jsapplicationwilluseanotheraccounttoaccessthedata
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
Proton
Howitworks
ProtonseesNode.jsapplicationconnectingusingDominoDBmoduleasa
userwithcertainrights
Alloperationsondataareexecutedundertheauthorityofthisuser
ThisusersneedssufficientrightsintheACLofthedatabaseituses
ItistheNode.jsapplication'stasktoensurecorrectaccesstodatatoits
users
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
Proton
Authenticatingusingacertificate
Node.jsapplicationusingDominoDBneedstohaveaPersondocumentin
theDominoDirectory
ItalsoneedsanX.509certificateandholdtheprivatekeytothatcertificate
ThecertificateneedstobeloadedtothePersondocument
ImportInternetCertificateactiononthePersondocument
ThenameinthePersondocumentmustcorrespondtothesubject's
commonnamefromthecertificate
TheuserneedstohaveaccesstothedatabaseviaACL
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
Persondocumentfortheapplication
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
ACLrecordinthedatabase
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
RunningProton
commandontheDominoserverconsole:loadproton
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
DesignCatalog,DQL
domino‑dbmoduleloadsacollectionofdocumentsbyrunningaDQL
query.
DesignCatalogisneededforDQLtoworkproperly.
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
DesignCatalog,DQL
Addadatabasetothecatalog:
load updall <database path> -e
Updateadatabaseinthecatalogwhenthedesignchanges:
load updall <database path> -d
Whentheupdatefails:
runtheupdallagainwiththe‑eflag:
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
DQLFacts1/3
DQLscansalimitednumberofdocumentsandviewentries(200000)
increaseitwithanotes.inisetting(systemwide)
QUERY_MAX_DOCS_SCANNED
QUERY_MAX_VIEW_ENTRIES_SCANNED
DQLqueryrunsforalimitedtime(2minutes)
rethinkyourdesign
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
DQLFacts2/3
ProtonreturnstheresultssortedbyNoteIDandreturnsonlyasubsetofthe
results(max200).
Youhavetoloadallresultsandsortthemyourself
SortingshouldbeavailableinDomino11
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
DQLFacts3/3
"Mindthegap"
DQLqueryneedsspacesaroundoperators,valuesanditemnames
'Cards'.Subtypes ='Beast'
ERR_BAD_REQUEST:Queryisnotunderstandable‑syntaxerror‑MUSThaveat
leastoneoperator
UsetheexplainQuery()methodtoanalyzeyourqueriesandoptimizethem
['Cards'.Subtypes = 'Beast' AND 'Cards'.ConvertedManaCost > 4]
0. AND (childct 2) (totals when complete:) Prep 0.0 msecs, Exec 71.428 msecs, Sc
1.'Cards'.Subtypes = 'Beast' View Column Search estimated cost = 5
Prep 0.326 msecs, Exec 3.506 msecs, ScannedDocs 0, Entries 248, FoundDocs
1.'Cards'.ConvertedManaCost > 4 View Column Search estimated cost = 10
Prep 0.112 msecs, Exec 67.915 msecs, ScannedDocs 0, Entries 4482, FoundDoc
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
Settingupyourdevelopmentenvironment
(1)
InstallNode.jsruntime(Win,Mac,Linux)
Grabyourfavoriteeditor(VSCoderecommended)
Inittheproject
mkdir myProject
cd myProject
npm init
Addthedomino‑dbNodepackagetoyourproject
npm install <pathToAppDevPack>/domino-domino-db-1.2.0.tgz -save
Startcoding
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
Settingupyourdevelopmentenvironment
(2)
Checkthepackage.jsonfile
itwillalreadycontainthedepencyfordomino/domino‑db
addotherdependencies
Createthestartjavascriptfile
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
Testing?Sure!
Severalunittestpackagesavailable
Mocha
Tape
Chai
Sinon
Testsaredefinedinseparatefiles
Testsareconfiguredinthepackage.jsonfile
{
"test-unit": "NODE_ENV=test mocha '/**/*.spec.js'",
}
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
Deployment(1)
Scenariostoconsider
deploytoacloudservicelikeAWS,Azure,IBMCloud,Heroku
deploytoon‑premisesenvironment
On‑premises
Doesyourserverhaveinternetaccesstoinstallpackages?
Doesyourserverutilizealoadbalancer?
Hotdeploymentornot?
UsingaDockercontainer?
Usingaproxylikenginx
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
Deployment‑usingaproxy
AsNode.jsappscanusedifferentportsyoushouldutilizethemwitha
proxytokeeptheURLendpointssimple
nginxisalightweightproxyserverwhichiseasytosetup
# excerpt from nginx.conf
location /app1 {
proxy_pass http://localhost:3001/;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /app2 {
proxy_pass http://localhost:3002/;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
Deployment‑ProcessManager(1)
Useaprocessmanagertohandleallyourapps
Donotstartyourappsmanuallyorwithasystemdscript/service
pm2ishighlyrecommended
Verysimpletosetup
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
Deployment‑ProcessManager(2)
starttheappwiththeprocessmanager
pm2 start myApp.js
showallappsmanagedbypm2
pm2 ls
┌───────────────────────┬────┬─────────┬──────┬───────┬────────┬─────────┬────────┬──────┬
│ App name │ id │ version │ mode │ pid │ status │ restart │ uptime │ cpu │
├───────────────────────┼────┼─────────┼──────┼───────┼────────┼─────────┼────────┼──────┼
│ node alexa-node-red │ 11 │ N/A │ fork │ 24488 │ online │ 0 │ 2M │
│ node domino-node-list │ 9 │ N/A │ fork │ 24152 │ online │ 0 │ 2M │
│ node rootweb │ 10 │ N/A │ fork │ 24229 │ online │ 0 │ 2M │
│ node-red │ 0 │ N/A │ fork │ 5463 │ online │ 6 │ 49D │
└───────────────────────┴────┴─────────┴──────┴───────┴────────┴─────────┴────────┴──────┴
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
Deployment‑ProcessManager(3)
savetheappstothelistofbootableapps
pm2 save
enablepm2tostartallsavedappsatboot
pm2 startup
AllcommandsarethesameonWin,Mac&Linux
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
domino‑dbmodule
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
domino‑dbclasses
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
domino‑dbmodule
providesfourbasicoperationswithdata‑Create,Read,Update,Delete
hasasingleentrypoint:userServer()function
const { useServer } = require('@domino/domino-db');
const server = await useServer({hostName: 'localhost', connection:{ port: '30000' }});
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
domino‑dbcommandlineexample
const { useServer } = require('@domino/domino-db');
const serverConfig = {hostName: 'localhost',connection:{ port: '30000'
const databaseConfig = { filePath: 'database/node-demo.nsf' };
(async function() {
try {
const server = await useServer(serverConfig);
const db = await server.useDatabase(databaseConfig);
const response = await db.bulkReadDocuments({
query: "'AllContacts'.State = 'FL'",
itemNames: ['LastFirstName', 'Email'],
computeOptions: { computeWithForm: true }
});
console.log(JSON.stringify(response));
} catch (error) {
console.log(`${error.code}: ${error.message}`)
}
})()
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
DEMO‑WebApplication
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
CRUDDetails
CalluseServer()andServer::useDatabase()onlyonceandcachethe
instancesinacustomDataAccessObject
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
CRUDDetails‑Create
Whencreatingadocument,youneedtoprovidethe"Form"property
WhenwritingaDateitem,youneedtospecifyitlikethis:
DueDate: { type: 'datetime', data: '2019-06-30'}
Timeneedstobespecifiedtoahundredthofasecond,youcan'tdirectly
useaJavaScriptDateobject
YoucanspecifycomputeOptionstocomputeitemsinthedocument
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
CRUDDetails‑Read
Youalwaysspecifywhichitemsyouwanttoreceive(keepstheamountof
transfereddatalow)
usecomputeOptionsparametertocomputethecontentofcomputedfor
displayitems
const response = await db.bulkReadDocuments({
query: "'AllContacts'.State = 'FL'",
itemNames: ['LastFirstName', 'Email'],
computeOptions: { computeWithForm: true }
});
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
CRUDDetails‑Update
Selectionofoptionsforupdatingdocuments
changeselecteditemsinoneormoredocumentsatonce
replaceallitemswithasetofotheritems
Documentsareimmediatelysaved,thereisnosave()method
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
SecurityOptions(1)
IAM(IdentityAccessManagement)enablesaccessfromaNode.jsappto
DominoasarealDNNuser
UsesOAuthmechanismtoauthorizeagainstDomino
Domino10providesOAuth(kindof)
Accessisrestrictedtocertainscopes
open_id
offline_access
das.freebusy
das.calendar.read.with.shared
das.calendar.write.with.shared
CurrentlyIAMdoesnotsupporttheNode.jsAPIforDomino,onlyDAS:‑(
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
SecurityOptions(2)
SetupDominoasanOAuthprovideristimeconsuming(expect1workday)
Youwillneedtotouchthefollowingareasof(Domino)administration
Certificatehandling
Keyringgeneration
DominowithSSL
DominoLDAPconfiguration
OAuthDSAPIsetup
SetuptheIAMserviceapp(serverpart)
CustomizetheIAMserviceapp(optional)
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
SecurityOptions(3)
IAMcomeswithexamplesofdifferentauthorizationflows
AuthorizationCodeFlow
ClientCredentialFlow
Theseexamplescanbeusedtointegratethosemechanismtoyourown
app(i.e.IAMclientapp)
AppsmustberegisteredwiththeIAMserviceapp(generatestheappID
andtheappsecret)
YouareresponsibleforthetokenhandlingwhenaccessingtheDomino
server!
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
GettingHelp/Resume:why?
NERDiscompletelydifferentfromtraditionalNotesdevelopment
Gettinghelp
DominowithNodeisdiscussedintheOpenNTFSlackchanneldominonodejs
ReachoutfortheexpertslikeDanDumont,PeiSunorHeikoVoigt(allactiveon
Slack)
Whyyoushoulduseit?
ItopensDominoforthemodernwebdeveloper(newbloodforthebestapp
serverintheworld)
OfferstonsofnewpossibilitiescomingwithvariousNodemodulesandplugins
Usinge.g.Node‑REDdirectstothereallow‑codearea‑butthisiscontentfor
separatesessions;‑)
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
Q&A
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
Resources
WebinarDQL&FAQ:https://www.ibm.com/blogs/collaboration‑solutions/2019/02/04/domino‑query‑language‑faq
DominoAppDevPackDocumentation:https://doc.cwpcollaboration.com/appdevpack/docs/en/homepage.html
VisualStudioCodeEditor:https://code.visualstudio.com/
UnittestingandTDDinNode.js:https://www.codementor.io/davidtang/unit‑testing‑and‑tdd‑in‑node‑js‑part‑1‑8t714s877
Node.jsUnitTesting:https://blog.risingstack.com/node‑hero‑node‑js‑unit‑testing‑tutorial/
Nginxwebserver:https://nginx.org/en/docs/
pm2processmanager:https://pm2.io/runtime/
StackOverflowNode.js:https://stackoverflow.com/questions/tagged/node.js
OpenNTFSlack:https://slackin.openntf.org/
Node‑RED:https://nodered.org/
SessionRepo:https://gitlab.com/obusse/engage‑2019
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)

Contenu connexe

Similaire à The NERD stuff - opening for Domino to the modern web developer

Inside neutron 2
Inside neutron 2Inside neutron 2
Inside neutron 2
Robin Gong
 

Similaire à The NERD stuff - opening for Domino to the modern web developer (20)

Day In A Life Of A Node.js Developer
Day In A Life Of A Node.js DeveloperDay In A Life Of A Node.js Developer
Day In A Life Of A Node.js Developer
 
PHP QA Tools
PHP QA ToolsPHP QA Tools
PHP QA Tools
 
OSDC.no 2015 introduction to node.js workshop
OSDC.no 2015 introduction to node.js workshopOSDC.no 2015 introduction to node.js workshop
OSDC.no 2015 introduction to node.js workshop
 
Zend Framework Foundations
Zend Framework FoundationsZend Framework Foundations
Zend Framework Foundations
 
MeaNstack on Docker
MeaNstack on DockerMeaNstack on Docker
MeaNstack on Docker
 
Kubernetes Navigation Stories – DevOpsStage 2019, Kyiv
Kubernetes Navigation Stories – DevOpsStage 2019, KyivKubernetes Navigation Stories – DevOpsStage 2019, Kyiv
Kubernetes Navigation Stories – DevOpsStage 2019, Kyiv
 
SWT Tech Sharing: Node.js + Redis
SWT Tech Sharing: Node.js + RedisSWT Tech Sharing: Node.js + Redis
SWT Tech Sharing: Node.js + Redis
 
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
 
NodeJS : Communication and Round Robin Way
NodeJS : Communication and Round Robin WayNodeJS : Communication and Round Robin Way
NodeJS : Communication and Round Robin Way
 
"JavaME + Android in action" CCT-CEJUG Dezembro 2008
"JavaME + Android in action" CCT-CEJUG Dezembro 2008"JavaME + Android in action" CCT-CEJUG Dezembro 2008
"JavaME + Android in action" CCT-CEJUG Dezembro 2008
 
Zend Framework 2 quick start
Zend Framework 2 quick startZend Framework 2 quick start
Zend Framework 2 quick start
 
Node.js with Express
Node.js with ExpressNode.js with Express
Node.js with Express
 
DMCA #25: Jenkins - Docker & Android: Comment Docker peu faciliter la créatio...
DMCA #25: Jenkins - Docker & Android: Comment Docker peu faciliter la créatio...DMCA #25: Jenkins - Docker & Android: Comment Docker peu faciliter la créatio...
DMCA #25: Jenkins - Docker & Android: Comment Docker peu faciliter la créatio...
 
Debugging PHP with xDebug inside of Eclipse PDT 2.1
Debugging PHP with xDebug inside of Eclipse PDT 2.1Debugging PHP with xDebug inside of Eclipse PDT 2.1
Debugging PHP with xDebug inside of Eclipse PDT 2.1
 
Node.js Build, Deploy and Scale Webinar
Node.js Build, Deploy and Scale WebinarNode.js Build, Deploy and Scale Webinar
Node.js Build, Deploy and Scale Webinar
 
Inside neutron 2
Inside neutron 2Inside neutron 2
Inside neutron 2
 
Develop microservices in php
Develop microservices in phpDevelop microservices in php
Develop microservices in php
 
Front matter: Next Level Front End Deployments on OpenShift
Front matter: Next Level Front End Deployments on OpenShiftFront matter: Next Level Front End Deployments on OpenShift
Front matter: Next Level Front End Deployments on OpenShift
 
NetWeaver Developer Studio for New-Beas
NetWeaver Developer Studio for New-BeasNetWeaver Developer Studio for New-Beas
NetWeaver Developer Studio for New-Beas
 
How to Manage Cloud Infrastructures using Zend Framework
How to Manage Cloud Infrastructures using Zend FrameworkHow to Manage Cloud Infrastructures using Zend Framework
How to Manage Cloud Infrastructures using Zend Framework
 

Plus de Oliver Busse

DNUG 38: "Einen Rahmen schaffen: Vorteile durch Frameworks in der Domino-Webe...
DNUG 38: "Einen Rahmen schaffen: Vorteile durch Frameworks in der Domino-Webe...DNUG 38: "Einen Rahmen schaffen: Vorteile durch Frameworks in der Domino-Webe...
DNUG 38: "Einen Rahmen schaffen: Vorteile durch Frameworks in der Domino-Webe...
Oliver Busse
 

Plus de Oliver Busse (20)

HCL Domino Volt - der NSF Killer?
HCL Domino Volt - der NSF Killer?HCL Domino Volt - der NSF Killer?
HCL Domino Volt - der NSF Killer?
 
Outlook becomes a Team Player - with a clever add-in
Outlook becomes a Team Player - with a clever add-inOutlook becomes a Team Player - with a clever add-in
Outlook becomes a Team Player - with a clever add-in
 
DNUG Development Day 2019
DNUG Development Day 2019DNUG Development Day 2019
DNUG Development Day 2019
 
DNUG44 Watson Workspace
DNUG44 Watson WorkspaceDNUG44 Watson Workspace
DNUG44 Watson Workspace
 
Paradiesisch - OpenNTF
Paradiesisch - OpenNTFParadiesisch - OpenNTF
Paradiesisch - OpenNTF
 
Find your data
Find your dataFind your data
Find your data
 
ISBG 2016 - XPages on IBM Bluemix
ISBG 2016 - XPages on IBM BluemixISBG 2016 - XPages on IBM Bluemix
ISBG 2016 - XPages on IBM Bluemix
 
GraphDb in XPages
GraphDb in XPagesGraphDb in XPages
GraphDb in XPages
 
Utilizing the OpenNTF Domino API
Utilizing the OpenNTF Domino APIUtilizing the OpenNTF Domino API
Utilizing the OpenNTF Domino API
 
Utilizing the open ntf domino api
Utilizing the open ntf domino apiUtilizing the open ntf domino api
Utilizing the open ntf domino api
 
XPages on Bluemix - the Do's and Dont's
XPages on Bluemix - the Do's and Dont'sXPages on Bluemix - the Do's and Dont's
XPages on Bluemix - the Do's and Dont's
 
Utilizing the OpenNTF Domino API
Utilizing the OpenNTF Domino APIUtilizing the OpenNTF Domino API
Utilizing the OpenNTF Domino API
 
SUTOL 2015 - Utilizing the OpenNTF Domino API
SUTOL 2015 - Utilizing the OpenNTF Domino APISUTOL 2015 - Utilizing the OpenNTF Domino API
SUTOL 2015 - Utilizing the OpenNTF Domino API
 
Out of the Blue - the Workflow in Bluemix Development
Out of the Blue - the Workflow in Bluemix DevelopmentOut of the Blue - the Workflow in Bluemix Development
Out of the Blue - the Workflow in Bluemix Development
 
Transformations - a TLCC & Teamstudio Webinar
Transformations - a TLCC & Teamstudio WebinarTransformations - a TLCC & Teamstudio Webinar
Transformations - a TLCC & Teamstudio Webinar
 
Transformations
TransformationsTransformations
Transformations
 
Out of the Blue: Getting started with IBM Bluemix development
Out of the Blue: Getting started with IBM Bluemix developmentOut of the Blue: Getting started with IBM Bluemix development
Out of the Blue: Getting started with IBM Bluemix development
 
Fix & fertig: Best Practises für "XPages-Migranten"
Fix & fertig: Best Practises für "XPages-Migranten"Fix & fertig: Best Practises für "XPages-Migranten"
Fix & fertig: Best Practises für "XPages-Migranten"
 
Dnug 112014 modernization_openn_ntf_ersatzsession
Dnug 112014 modernization_openn_ntf_ersatzsessionDnug 112014 modernization_openn_ntf_ersatzsession
Dnug 112014 modernization_openn_ntf_ersatzsession
 
DNUG 38: "Einen Rahmen schaffen: Vorteile durch Frameworks in der Domino-Webe...
DNUG 38: "Einen Rahmen schaffen: Vorteile durch Frameworks in der Domino-Webe...DNUG 38: "Einen Rahmen schaffen: Vorteile durch Frameworks in der Domino-Webe...
DNUG 38: "Einen Rahmen schaffen: Vorteile durch Frameworks in der Domino-Webe...
 

Dernier

%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
masabamasaba
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
chiefasafspells
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
VictoriaMetrics
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
masabamasaba
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
masabamasaba
 

Dernier (20)

%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
 
WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
 
%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto
 
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
 
WSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaSWSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaS
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
Artyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxArtyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptx
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
 

The NERD stuff - opening for Domino to the modern web developer