The Future is
Dynamic
LED BY
Luis F. Majano
LUIS F. MAJANO
Your Host
• CEO Ortus Solutions
• Computer Engineer
• Creator of all things box!
• Documentation Weirdo!
@lmajano @ortussolutions
We had a secret!!
BoxLang is a modular dynamic language for the JVM, aiming
to make your development more productive, expressive,
functional, and available everywhere.
DYNAMIC : MODULAR : PRODUCTIVE
WHY?
Why not just fork or collaborate?
Why build a new language?
Why now?
State of BoxLang
• Started on July 2023
• Open Beta on May 16 (< 1 Month)
• Pull Requests: 55
• Downloads: 3000+
• Repositories: 30
• Modules Completed: 20
• Modules in Development: 4
• Modules in Planning: 15
• Commits: 500+
• Contributors: 15+
• Modules in Development
• bx-encryption
• bx-orm
• bx-pdf
• bx-zip
• Modules in Planning
• bx-charts
• bx-legacy-ui
• bx-login
• bx-feeds
• bx-forms
• BoxLang +/++ Modules in Dev/Plannnig
• bx-couchbase
• bx-exchange
• bx-ftp
• bx-ldap
• bx-mongodb
• bx-redis
• bx-search
• bx-spreadsheet
• bx-elasticsearch
• bx-websockets
✓Modules Completed
✓ bx-compat
✓ bx-derby
✓ bx-esapi
✓ bx-hypersql
✓ bx-image
✓ bx-mail
✓ bx-mariadb
✓ bx-mssql
✓ bx-mysql
✓ bx-oracle
✓ bx-postgresql
✓ bx-unsafe-evaluate
✓ bx-wddx
State of BoxLang
CFML Compatibility
• Dual Parser: 98%
• Core BIFS: 96% (404/420)
• Core Tags: 100% (60/60)
• Target Core Completion: July 2024
BIFS Tags
1.0.0 Release -> Fall 2024
DYNAMIC : MODULAR : PRODUCTIVE
Goals & Vision
Goals & Vision
• Be dynamic, modular, lightweight, and fast
• Be 100% interoperable with Java
• Be modern, functional, and
fl
uent
(Think mixing CFML, Node, Kotlin, Java, and
Clojure)
• Modularity at its core
• Take advantage of the modern JVM
• TDD: Fully tested source code
• Be able to support multiple runtimes
• Have multiple transpilers
CFML -> BoxLang,
Groovy -> BoxLang
X -> BoxLang
• IDE and Tools
• All of our libraries needed to run
• Compete in today’s language environments
Key Features
Multi-Runtime Architecture
Multi-Runtime Architecture
Any OS
Docker MiniServer CommandBox Servlet Lambda Azure Android WebAssembly
Coming Soon Coming Soon Coming Soon
6 MB
9 MB 6 MB
15 MB
15 MB
160 MB
AWS Lambda Runtime
try.boxlang.io
Wanna play?
• try.boxlang.io
• Internet playground for BoxLang
• First Production BoxLang application
• Powered by our AWS Lambda Runtime
• Skinnable
• Embeddable on any Site (Soon)
AWS Lambda Runtime
• Every Try.BoxLang.io request can
fi
re up its very own Lambda request
• That means:
• We never have to worry about how many instances we have
• We never have to worry about queueing
• We never have to worry about bad actors accessing other people’s
fi
les
• We can easily update our Lambda runtime and all instances will be
running new code
• Lambdas have tiers too (staging, production, development)
• Scale up as big or as small as we want
Coming Soon!
• You will be able to see the Abstract Syntax Tree (AST) for your code
• You will be able to see the console/system output
• Ability to load code from GIST links
• +/++ Features
• Ability to Save to ForgeBox
• Create Projects like repli.it
• Install Modules
Strict Dependency Graph
Strict Dependency Graph
• Core to be small and focused
• Only add third-party libs if extremely necessary
• Rely on the JDK as much as possible
• Lower surface attack area
• Extremely small distribution (6MB)
• Extend via Modules with their dependencies
commons-io
Antlr
javaparser/asm
commons-lang
jackson-jr
slf4j
logback
Hikari
BoxLang Framework
BoxLang Framework
RUNTIME
Application
Service
Async
Service
Cache
Service
Component
Service
Datasource
Service
Function
Service
Interceptor
Service
Module
Service
Scheduler
Service
Enterprise Caching Engine & Aggregator
Enterprise Caching Engine & Aggregator
• Inspired by CacheBox
• Enterprise Caching Engine
• Extensible
• Custom providers
• Custom object stores
• Listeners
• Stats
• Powers all internal caching
Scheduling & Task Framework
Scheduling & Task Framework
• Inspired by ColdBox Async
• Schedulers are portable,
fl
uent, and human
• Write them in BoxLang or Java
• Task & Completable Futures framework from the JDK
• Access to any executor in Java
• Run schedules at the OS
• Importer from Adobe/Lucee (Soon)
• Task Visualizer (BoxLang Admin, BoxLang Debugger)
BoxLang Admin
BoxLang Admin (In Development)
• Quasar Administrator
• Progressive Web App
• Desktop Version
• Android/iOS
• Works locally or can be deployed on a server
• Manages your OS install
• Manages your Multi-Site via CommandBox
• Tons of features coming…
BoxLang Tooling
Tooling Overview
Tooling Overview
• BoxLang IDE
• Language Debugger & LSP
• Run classes with a main()
• Run Scripts
• Run / Manage Servers
• Code Converters, Code Formatters
• Code Quality
• Visualizers
Tooling Overview
• CLI Tools
• REPL: CLI code execution
• Shebang Scripts: #!/usr/bin/env boxlang
• File Runner: Run
fi
les
• Schedule Runner: Run schedulers
• Transpiler: Convert CFML to BoxLang
• Compiler: BoxLang to Bytecode
• Feature Audit: BIF and Tag report usage
• Packager: Compile and package your modules or BoxLang apps
Tooling - BoxLang IDE
• Modern development
fl
ow
• Inline documentation
• Webservers panel
• Works for BL and CFML
• Run BL/CF code directly within VSCode
• Debugger & Language Server
• Committed to ongoing support and development -
new features are on the way!
Tooling - BoxLang Debugger
• Purpose built
• Integrates with VSCode via Microsoft’s DAP
• Can debug both the CLI runtime and web
server
• You’ll never use writeDump() again!
Tooling - BoxLang Language Server
• Built with BoxLang!
• The BoxLang runtime was built with the LSP in mind
• Full access to the BoxLang syntax parser/compiler
• Access to all BoxLang con
fi
guration, datasources,
mappings, etc…
• Extensible via BoxLang modules
• Foundational for modern language toolchains
• Intellisense
• Static analysis
• More coming soon…
Demo Time
🤞
Tooling
Tooling - Roadmap
• v0.9.17 = Current Release
• Near future
• Communication between the debugger and language server
• Static code analysis/type hinting (Experimental)
• BoxLang Server management (Experimental)
• Incorporate CommandBox VSCode extension
• +,++ version of debugger
• Language server plugins
ARCHITECTURE
With Brad Wood
Modern Dynamic Language
Modern Dynamic Language
• Dynamically typed just like CFML, but we go further…
• JDK21+ Minimum
• Fully JSR-223 Compliant
• Clojure + BoxLang in development by Sean Cor
fi
eld
• No re
fl
ection, we use InvokeDynamic for everything
• DynamicObject: Any Object can be Dynamic!
• All OO Constructs
• Interfaces, superinterfaces and default method implementations
• Abstract classes and methods
• Static scope and methods on classes and interfaces
• Use all-new JDK features and types
• Collection of Dynamic Casters and Helpers
Java Interop
Java Interop
• Interact with Java naturally
• It’s just part of the language; no more
separation
• Type inference, auto-casting, type
promotions and coercion
• Long -> Doubles, Doubles ->Longs, etc
• BoxLang Function -> Java Lambdas
• You can import, extend, implement, annotate
from Java
Java Interop
Java Interop
• Concept of object resolvers: java, bx, custom
• New BoxLang Scripting: MyScript.bxs
• Components become Classes: MyClass.bx
• All bx/bxm/bxs are runnable via the OS
• Classes can have a main() runnable
convention
• BoxLang annotations
Runnable Classes
Pure Functions + Immutable Classes
• Support not only closures (=>) but pure functions (->)
• No side e
ff
ects, no carry-over contexts, pure speed
• Especially for asynchronous programming
• New Immutable classes:
• Arrays, Structs, and Queries
• Great for async safety, read-only snapshots, speed and
more.
Multi-Parsers
Multi-Parsers : BoxLang + CFML + ???
• Our way to split with the old and bring in the new
• Transpile CFML into BoxLang
• BoxLang is a NEW clean slate
• Compat module for Adobe/Lucee
• Multi-Step Compiler
• Bx -> Java Source -> ByteCode (DebugMode)
• Bx -> Bytecode (Almost done)
• In Planning
• Groovy to BoxLang
• ??? To BoxLang
Choose your path wisely!
.cfc, .cfm
.bx, bxs, bxm
BL-AST
BL-AST
• AST Visitors for custom tooling
• Feature Audits
• Transpiler
• Pretty Printer
• Code Quality
• getClassMetadata()
Event-Driven Language
Event-Driven Language
• Interceptors for the language, application, and request
• The best way to scale the language
• Listen to the entire or speci
fi
c language life-cycles
• Modules can listen/collaborate events
• boxAnnounce(), boxAnnounceAsync() : CompletableFuture
Event Channels
Event Producers
Event
Event
Event
Event Consumers
Event
Event
Event
Tested & Documented
Tested & Documented
• TDD/BDD at the core of the language
• 3500+ Tests Already
• Test not only Java but BoxLang
• Native BoxLang Assert constructs built-in
• Fully Documented
• Generated API Docs
• boxlang.ortusbooks.com
Modular Since Birth
Modular Needs
Modern Runtimes Have Various Needs!
( and CFML/PHP/Python/Ruby/Etc paradigms are outdated )
• Web Applications - HTTP Request/Response Data
• Tasks and Queues - Watchers, Event Handling, Async
• Lambda and CLI - fast start and blazing speeds!
• iOS/Android - Low resource footprint, event handling
• Web Assembly – Transpilation and Sandboxing
BoxLang Modules
• Inspired by ColdBox modules, NOT OSGI
• Core Runtime with lightest possible footprint
• Taps into the language life-cycle
• Write them in Java or BoxLang or Both!
• Executable as CLI packages
• Integrates with Maven/Gradle
BoxLang Modular By Design!
• Modular ecosystem, delivered by FORGEBOX
• Core modules for DBMS’, Alternate Runtimes ( e.g. Lambda ), Mail,
Encryption, CFML compatibility and more!
• Write your own functions, components ( tags ), schedulers, JDBC
Drivers, interceptions and more!
• Module has an isolated class loading machinery
• Boundless potential for community contribution and engagement!
• Foment third-party vendors
• FORGEBOX eCommerce Marketplace later this year
BoxLang Extends BoxLang
In
fl
uence core runtime behavior with BIFs,
Member Functions, Tags, Interceptors, and More!
BoxLang Modules
Take control of your own runtime,
in your own language!
PROJET JERICHO
AKA BOXLANG
With Jorge Reyes
• July 2023 - We started Project Jericho
• 4 Team Members
• Part-time development
• 4 on-site workshops
• Less than a year later BoxLang Beta
• We did not want to do something halfway; we went all in
A Story of Focus
The BoxLang Engineering Team
Luis Majano Gavin Pickin Brad Wood Alan Quinlan Dan Card Daniel Garcia Eric Peterson Esme Acevedo
Grant Copley Javier Quintero Michael Born Jon Clausen Jaime Ramirez Jacob Beers
The BoxLang Marketing + Business Team
Cristobal Escobar
Spain
Maria Jose Herrera
El Salvador
Jorge Reyes
Switzerland
Edgardo Cabezas
El Salvador
Veronica Monedero
USA
Jonathan Lainez
El Salvador
• Because it’s hard and we love the challenge!
• Because our customers needed it
• Because we needed it
• We wanted to go places that we could not go
• No bug we can’t
fi
x
• No feature we can’t deliver
• No performance we can’t tune
• THE FUTURE IS OURS
Why BoxLang?
• BoxLang Community (Free & Open Source) Apache 2
• Two Commercial Subscriptions
• BoxLang +
• Professional Support (SLA)
• Enterprise Modules & Features
• BoxLang + +
• Everything in +
• Premium Support
• Custom Builds
Professional Open Source
boxlang.io/plans
BoxLang Roadmap
Visionary Licenses
boxlang@ortussolutions.com
• One-time purchase -> Unlimited Licenses -> 10 years
• Support for 10 years included
• Long-term peace of mind
• Invest in the future
• Limited number available
A Revolution is Coming…Join us now!
boxlang@ortussolutions.com
Backdrop
AI-generated
by DALL-E
“Mad scientist in lab
experiencing Eureka
moment”
THANK YOU

TheFutureIsDynamic-BoxLang-CFCamp2024.pdf

  • 1.
    The Future is Dynamic LEDBY Luis F. Majano
  • 2.
    LUIS F. MAJANO YourHost • CEO Ortus Solutions • Computer Engineer • Creator of all things box! • Documentation Weirdo! @lmajano @ortussolutions
  • 3.
    We had asecret!!
  • 5.
    BoxLang is amodular dynamic language for the JVM, aiming to make your development more productive, expressive, functional, and available everywhere. DYNAMIC : MODULAR : PRODUCTIVE
  • 6.
  • 7.
    Why not justfork or collaborate? Why build a new language? Why now?
  • 8.
    State of BoxLang •Started on July 2023 • Open Beta on May 16 (< 1 Month) • Pull Requests: 55 • Downloads: 3000+ • Repositories: 30 • Modules Completed: 20 • Modules in Development: 4 • Modules in Planning: 15 • Commits: 500+ • Contributors: 15+
  • 9.
    • Modules inDevelopment • bx-encryption • bx-orm • bx-pdf • bx-zip • Modules in Planning • bx-charts • bx-legacy-ui • bx-login • bx-feeds • bx-forms • BoxLang +/++ Modules in Dev/Plannnig • bx-couchbase • bx-exchange • bx-ftp • bx-ldap • bx-mongodb • bx-redis • bx-search • bx-spreadsheet • bx-elasticsearch • bx-websockets ✓Modules Completed ✓ bx-compat ✓ bx-derby ✓ bx-esapi ✓ bx-hypersql ✓ bx-image ✓ bx-mail ✓ bx-mariadb ✓ bx-mssql ✓ bx-mysql ✓ bx-oracle ✓ bx-postgresql ✓ bx-unsafe-evaluate ✓ bx-wddx State of BoxLang
  • 10.
    CFML Compatibility • DualParser: 98% • Core BIFS: 96% (404/420) • Core Tags: 100% (60/60) • Target Core Completion: July 2024 BIFS Tags
  • 11.
    1.0.0 Release ->Fall 2024 DYNAMIC : MODULAR : PRODUCTIVE
  • 12.
  • 13.
    Goals & Vision •Be dynamic, modular, lightweight, and fast • Be 100% interoperable with Java • Be modern, functional, and fl uent (Think mixing CFML, Node, Kotlin, Java, and Clojure) • Modularity at its core • Take advantage of the modern JVM • TDD: Fully tested source code • Be able to support multiple runtimes • Have multiple transpilers CFML -> BoxLang, Groovy -> BoxLang X -> BoxLang • IDE and Tools • All of our libraries needed to run • Compete in today’s language environments
  • 14.
  • 15.
  • 16.
    Multi-Runtime Architecture Any OS DockerMiniServer CommandBox Servlet Lambda Azure Android WebAssembly Coming Soon Coming Soon Coming Soon 6 MB 9 MB 6 MB 15 MB 15 MB 160 MB
  • 17.
  • 18.
  • 19.
    Wanna play? • try.boxlang.io •Internet playground for BoxLang • First Production BoxLang application • Powered by our AWS Lambda Runtime • Skinnable • Embeddable on any Site (Soon)
  • 20.
    AWS Lambda Runtime •Every Try.BoxLang.io request can fi re up its very own Lambda request • That means: • We never have to worry about how many instances we have • We never have to worry about queueing • We never have to worry about bad actors accessing other people’s fi les • We can easily update our Lambda runtime and all instances will be running new code • Lambdas have tiers too (staging, production, development) • Scale up as big or as small as we want
  • 21.
    Coming Soon! • Youwill be able to see the Abstract Syntax Tree (AST) for your code • You will be able to see the console/system output • Ability to load code from GIST links • +/++ Features • Ability to Save to ForgeBox • Create Projects like repli.it • Install Modules
  • 22.
  • 23.
    Strict Dependency Graph •Core to be small and focused • Only add third-party libs if extremely necessary • Rely on the JDK as much as possible • Lower surface attack area • Extremely small distribution (6MB) • Extend via Modules with their dependencies commons-io Antlr javaparser/asm commons-lang jackson-jr slf4j logback Hikari
  • 24.
  • 25.
  • 26.
  • 27.
    Enterprise Caching Engine& Aggregator • Inspired by CacheBox • Enterprise Caching Engine • Extensible • Custom providers • Custom object stores • Listeners • Stats • Powers all internal caching
  • 28.
  • 29.
    Scheduling & TaskFramework • Inspired by ColdBox Async • Schedulers are portable, fl uent, and human • Write them in BoxLang or Java • Task & Completable Futures framework from the JDK • Access to any executor in Java • Run schedules at the OS • Importer from Adobe/Lucee (Soon) • Task Visualizer (BoxLang Admin, BoxLang Debugger)
  • 30.
  • 31.
    BoxLang Admin (InDevelopment) • Quasar Administrator • Progressive Web App • Desktop Version • Android/iOS • Works locally or can be deployed on a server • Manages your OS install • Manages your Multi-Site via CommandBox • Tons of features coming…
  • 34.
  • 35.
  • 36.
    Tooling Overview • BoxLangIDE • Language Debugger & LSP • Run classes with a main() • Run Scripts • Run / Manage Servers • Code Converters, Code Formatters • Code Quality • Visualizers
  • 37.
    Tooling Overview • CLITools • REPL: CLI code execution • Shebang Scripts: #!/usr/bin/env boxlang • File Runner: Run fi les • Schedule Runner: Run schedulers • Transpiler: Convert CFML to BoxLang • Compiler: BoxLang to Bytecode • Feature Audit: BIF and Tag report usage • Packager: Compile and package your modules or BoxLang apps
  • 38.
    Tooling - BoxLangIDE • Modern development fl ow • Inline documentation • Webservers panel • Works for BL and CFML • Run BL/CF code directly within VSCode • Debugger & Language Server • Committed to ongoing support and development - new features are on the way!
  • 39.
    Tooling - BoxLangDebugger • Purpose built • Integrates with VSCode via Microsoft’s DAP • Can debug both the CLI runtime and web server • You’ll never use writeDump() again!
  • 40.
    Tooling - BoxLangLanguage Server • Built with BoxLang! • The BoxLang runtime was built with the LSP in mind • Full access to the BoxLang syntax parser/compiler • Access to all BoxLang con fi guration, datasources, mappings, etc… • Extensible via BoxLang modules • Foundational for modern language toolchains • Intellisense • Static analysis • More coming soon…
  • 41.
  • 42.
    Tooling - Roadmap •v0.9.17 = Current Release • Near future • Communication between the debugger and language server • Static code analysis/type hinting (Experimental) • BoxLang Server management (Experimental) • Incorporate CommandBox VSCode extension • +,++ version of debugger • Language server plugins
  • 43.
  • 44.
  • 45.
    Modern Dynamic Language •Dynamically typed just like CFML, but we go further… • JDK21+ Minimum • Fully JSR-223 Compliant • Clojure + BoxLang in development by Sean Cor fi eld • No re fl ection, we use InvokeDynamic for everything • DynamicObject: Any Object can be Dynamic! • All OO Constructs • Interfaces, superinterfaces and default method implementations • Abstract classes and methods • Static scope and methods on classes and interfaces • Use all-new JDK features and types • Collection of Dynamic Casters and Helpers
  • 46.
  • 47.
    Java Interop • Interactwith Java naturally • It’s just part of the language; no more separation • Type inference, auto-casting, type promotions and coercion • Long -> Doubles, Doubles ->Longs, etc • BoxLang Function -> Java Lambdas • You can import, extend, implement, annotate from Java Java Interop
  • 48.
    Java Interop • Conceptof object resolvers: java, bx, custom • New BoxLang Scripting: MyScript.bxs • Components become Classes: MyClass.bx • All bx/bxm/bxs are runnable via the OS • Classes can have a main() runnable convention • BoxLang annotations Runnable Classes
  • 49.
    Pure Functions +Immutable Classes • Support not only closures (=>) but pure functions (->) • No side e ff ects, no carry-over contexts, pure speed • Especially for asynchronous programming • New Immutable classes: • Arrays, Structs, and Queries • Great for async safety, read-only snapshots, speed and more.
  • 50.
  • 51.
    Multi-Parsers : BoxLang+ CFML + ??? • Our way to split with the old and bring in the new • Transpile CFML into BoxLang • BoxLang is a NEW clean slate • Compat module for Adobe/Lucee • Multi-Step Compiler • Bx -> Java Source -> ByteCode (DebugMode) • Bx -> Bytecode (Almost done) • In Planning • Groovy to BoxLang • ??? To BoxLang Choose your path wisely! .cfc, .cfm .bx, bxs, bxm
  • 52.
  • 53.
    BL-AST • AST Visitorsfor custom tooling • Feature Audits • Transpiler • Pretty Printer • Code Quality • getClassMetadata()
  • 54.
  • 55.
    Event-Driven Language • Interceptorsfor the language, application, and request • The best way to scale the language • Listen to the entire or speci fi c language life-cycles • Modules can listen/collaborate events • boxAnnounce(), boxAnnounceAsync() : CompletableFuture Event Channels Event Producers Event Event Event Event Consumers Event Event Event
  • 56.
  • 57.
    Tested & Documented •TDD/BDD at the core of the language • 3500+ Tests Already • Test not only Java but BoxLang • Native BoxLang Assert constructs built-in • Fully Documented • Generated API Docs • boxlang.ortusbooks.com
  • 58.
  • 59.
    Modular Needs Modern RuntimesHave Various Needs! ( and CFML/PHP/Python/Ruby/Etc paradigms are outdated ) • Web Applications - HTTP Request/Response Data • Tasks and Queues - Watchers, Event Handling, Async • Lambda and CLI - fast start and blazing speeds! • iOS/Android - Low resource footprint, event handling • Web Assembly – Transpilation and Sandboxing
  • 60.
    BoxLang Modules • Inspiredby ColdBox modules, NOT OSGI • Core Runtime with lightest possible footprint • Taps into the language life-cycle • Write them in Java or BoxLang or Both! • Executable as CLI packages • Integrates with Maven/Gradle
  • 61.
    BoxLang Modular ByDesign! • Modular ecosystem, delivered by FORGEBOX • Core modules for DBMS’, Alternate Runtimes ( e.g. Lambda ), Mail, Encryption, CFML compatibility and more! • Write your own functions, components ( tags ), schedulers, JDBC Drivers, interceptions and more! • Module has an isolated class loading machinery • Boundless potential for community contribution and engagement! • Foment third-party vendors • FORGEBOX eCommerce Marketplace later this year
  • 62.
    BoxLang Extends BoxLang In fl uencecore runtime behavior with BIFs, Member Functions, Tags, Interceptors, and More!
  • 63.
    BoxLang Modules Take controlof your own runtime, in your own language!
  • 64.
  • 65.
    • July 2023- We started Project Jericho • 4 Team Members • Part-time development • 4 on-site workshops • Less than a year later BoxLang Beta • We did not want to do something halfway; we went all in A Story of Focus
  • 66.
    The BoxLang EngineeringTeam Luis Majano Gavin Pickin Brad Wood Alan Quinlan Dan Card Daniel Garcia Eric Peterson Esme Acevedo Grant Copley Javier Quintero Michael Born Jon Clausen Jaime Ramirez Jacob Beers
  • 67.
    The BoxLang Marketing+ Business Team Cristobal Escobar Spain Maria Jose Herrera El Salvador Jorge Reyes Switzerland Edgardo Cabezas El Salvador Veronica Monedero USA Jonathan Lainez El Salvador
  • 68.
    • Because it’shard and we love the challenge! • Because our customers needed it • Because we needed it • We wanted to go places that we could not go • No bug we can’t fi x • No feature we can’t deliver • No performance we can’t tune • THE FUTURE IS OURS Why BoxLang?
  • 69.
    • BoxLang Community(Free & Open Source) Apache 2 • Two Commercial Subscriptions • BoxLang + • Professional Support (SLA) • Enterprise Modules & Features • BoxLang + + • Everything in + • Premium Support • Custom Builds Professional Open Source boxlang.io/plans
  • 70.
  • 71.
    Visionary Licenses boxlang@ortussolutions.com • One-timepurchase -> Unlimited Licenses -> 10 years • Support for 10 years included • Long-term peace of mind • Invest in the future • Limited number available
  • 72.
    A Revolution isComing…Join us now! boxlang@ortussolutions.com Backdrop AI-generated by DALL-E “Mad scientist in lab experiencing Eureka moment”
  • 73.