Dyalog Presentations

D01: Welcome to Dyalog '18 summary | slides (0.7 MB)
Gitte Christensen, Managing Director (CEO)

Dyalog Ltd's CEO opens the user meeting.

D02: The Road Ahead summary | slides (1.5 MB)
Morten Kromberg, Chief Experience Director (CXO)

Morten presents his view of the changing landscape that APL users need to navigate in the years to come, and some of the vehicles and navigational instruments that Dyalog is planning to provide.

D03: Technical Road Map: Under The Covers summary | slides (1.6 MB)
Jay Foad, Technical Manager (CTO)

Jay discusses technical achievements in the latest version of Dyalog APL, new projects targeting the next release, and priorities for the engineering team for the next few years.

D04: Array Notation Mk III summary | slides (10.8 MB)
Adám Brudzewsky

Adám presents updates to Dyalog's proposed array notation. This iteration addresses some of the shortcomings identified in the proposal he presented at Dyalog '17, featuring more versatility and less syntactic noise.

D05: RIDE 4.1 and Next Generation Integrations summary | slides (0.5 MB)
Gilgamesh Athoraya (Data Analytics AB)

Work on the RIDE has continued since the release of version 4.0, and a number of improvements and new features have been introduced. In particular, the editor (a core module) has been replaced and floating (undocked) windows have been re-introduced. Gilgamesh will present the latest version (4.1) and talk about the main highlights and how they benefit the users.

In addition to the RIDE, Dyalog has started looking at potential integrations with other development tools using standard protocols devised by Microsoft. The Language Server Protocol (LSP) defines how a server can provide language features like autocomplete to a development tool (an editor or an IDE). The Debug Adapter Protocol (DAP) defines an abstract protocol used between a tool and a debugger. Both of these offer a new way for APL to integrate with many popular development tools.

D06: Cross-Platform User Interfaces summary
Brian Becker

⎕WC has been the tool of choice for Microsoft Windows GUI applications for two decades. Today, we'd like to build user interfaces which will run under not only Windows, but also macOS and Linux. Where ⎕WC translated APL array arguments into calls to Microsoft's Win32 API, a new tool called WC2 will transform similar arrays into HTML and JavaScript and pass it to the HTMLRenderer object, which is capable of transforming this into a user interface on all three platforms. The WC2 engine is also used within MiServer to create user interfaces in web browsers, which can be rendered on many more platforms. In this presentation, Brian will discuss and demonstrate the current state of WC2, and present the roadmap for forthcoming development

D07: TamStat 2018 summary | slides (1.1 MB)
Michael Baas

TamStat is a package for teaching statistics developed by Dr. Steven Mansour. The original version of TamStat was built using ⎕WC under Dyalog for Microsoft Windows. However, many students use different platforms. Dyalog has partnered with Steve to develop a cross-platform version of TamStat using HTML. In this presentation, Michael discusses the architecture and some of the challenges and lessons learned when recasting a ⎕WC application using HTML.

D08: Sub-nanosecond Searches Using Vector Instructions summary
Marshall Lochbaum

Concentrating on Membership and Index-Of, Marshall describes some big performance improvements for a future Dyalog release, including novel vectorised algorithms that can sometimes perform set or index look-ups on integer vectors at under a nanosecond per element.

D09: JD's Big Toe summary
John Daintree

JD is concerned about the increase in I-beams, the proliferation of properties, the quantity of quads, and...well, all sorts of things. He's pondering a unified "Theory Of Everything". Where could he stick his "TOE"? Come along and dip yours in the water to find out.

D10: Dfns – Past, Present and Future summary | slides (0.6 MB)
John Scholes

John's retrospective on dfns starts with their inception (the motivation behind them and the technology available at the time). He then reflects on the current situation, including a few regrets he has, before discussing the move towards more declarative thinking.

D11: Cloud Computing with APL summary | slides (2.9 MB)
Morten Kromberg

Deploying your application to a cloud platform can save you a lot of time and effort, and isn't as mysterious as it sounds. In less than half an hour, Morten will show you how you can get up and running on the cloud.

D12: Jupyter Notebooks summary | slides (4.4 MB)
Adám Brudzewsky

Jupyter notebooks combine interactive coding sessions with narrative text according to Donald Knuth's literate programming paradigm. Adám presents the advantages of this format for teaching APL, explaining algorithms and sharing ideas. He describes the progress that Dyalog and this year's summer intern, Will Robertson, have made in enabling the running of APL code within Jupyter notebook as well as in establishing the Jupyter notebook document as the tutorial format for TryAPL and an as option for the ]Demo user command.

D13: How Many Dimensions Does a Vector Have? summary | slides (3.2 MB)
Nicolas Delcros

Audio processing requires us to view a numeric vector as more than an ordered collection of independent numbers: we also want to look at the frequencies that are encoded in the data. In this talk we will take the first few steps into the puzzling, but beautiful world of Fourier analysis.

D14: Inverted Tables summary | slides (0.9 MB)
Roger Hui

A table is 2-dimensional data in which the items of a column have the same datatype; an inverted table is a table in which the columns are nested. An inverted table is more efficient in time and space than other representations. Roger presents some utility functions for working with inverted tables.

D15: The Interpretive Advantage summary
Marshall Lochbaum

Common wisdom is that compiled languages are faster, full stop. However, by testing data for common patterns at runtime, Dyalog can sometimes perform ordinary programming tasks many times faster than well-optimised C. Marshall explains some of the ways in which Dyalog allows a programmer to get the best performance of several different implementations while writing just one, and discusses how deferred execution might make this method even more powerful in the future.

back to top

 

User Presentations

U01: What's Wrong with SQL? summary
Paul Mansour, The Carlisle Group (U.S.A.)

What is an SQL query? Does it offer the proper level of abstraction for complex queries? Why is it not traceable the way we can trace an APL function? What good is a column-store without a column-oriented query language? What is the difference between imperative and declarative programming? Is declarative always better? These and other fascinating questions will be asked and probably not definitively answered in a presentation on FlipDB, a database management system and query language written in Dyalog that shamelessly steals lock, stock, and barrel from APL.

U02: WPF/UWP and Xaml on the Web summary | materials (0.7 MB)
Chris Hughes and Michael Hughes, MJH Software Services Ltd (U.K.)

There is still a need to have applications that are compatible, ideally to run natively on Windows, but which will run on other platforms too. With the advent of WebSockets in Conga it is now possible to create standard Xaml and C# to run as compiled HTML5/Javascript/CSS – this will also soon be possible using WebAssembly, the new exciting entrant to the Web to challenge JavaScript's dominance.

This presentation will show how easy it is to build applications using the new user command interface to the compiler from www.CSHTML5.com, which will allow access to all the standard WPF controls via Xaml (demonstrated) and C# (not demonstrated, but used indirectly in the ⎕WC emulation).

U03: Taming Statistics with TamStat summary | slides (1.2 MB)
Dr Stephen Mansour, The University of Scranton (U.S.A.)

TamStat is a Statistics Program written in APL and developed for use in teaching statistics to business students at the University of Scranton. What makes this program unique is the use of APL objects such as operators, functions, arrays and namespaces as a natural way to describe and implement various statistical operations. Four basic classes of functions can be combined with operators to produce new and useful functions without increasing the overall vocabulary.

U04: Co-dfns 2018 – What's New? summary | slides (0.1 MB)
Aaron Hsu, Indiana University (U.S.A.)

The Co-dfns compiler has been undergoing a significant rewrite to improve performance, flexibility and "research" worthiness. However, this hasn't only been an academic exercise. Previous limitations of the compiler's capabilities have been lifted, and we have improved the usability of the compiler across the board. Moreover, it is now simpler to install, use and configure the Co-dfns compiler, as well as integrate it with other software. We have also been working on performance improvements of the generated code, including improvements to the runtime behaviour, reliability of the code and expanding the language that the compiler recognises.

Aaron discusses improvements, as well as describing a roadmap for future improvements that are likely to be tackled sooner rather than later.

U05: The APL Package Manager summary | slides (link)
Gilgamesh Athoraya, Data Analytics AB (Sweden)

A rapidly-growing collection of tools like acre, SALT and the new ]Link user command are making it easy to create APL projects based on source code in text files and take advantage of additional tools born outside the APL community, like GitHub. One of the advantages of these tools is that it is easy to share source code and load utilities written by other APL developers into your application – for example, the tools found in the APLTree. But how do you MANAGE these dependencies? What happens when one of the utilities that you are using is updated?

Gil walks through the APL Package Manager (APM), a system designed to help deal with these issues. APM is under development, so if you want to have a say, now is the time to acquaint yourself with the concepts and features of APM.

U06: The Workspace is Dead! Long Live the Workspace! summary
Paul Mansour, The Carlisle Group (U.S.A.)

Storing functions in text files has huge advantages, not the least of which is the use of a source code management system like Git. However, the APL programmer, used to the comfort of the workspace, can quickly become overwhelmed with a plethora of third party applications. In addition, there are many ways to work with Git. There are tons of commands and a zillion options. An extremely small, carefully selected and configured set of these commands, encapsulated into the workspace as user commands, can make working with Git and text files as easy as )SAVE.

U07: Teaching an Old Dog New Tricks – Our Fair Price Engine summary | slides (6.6 MB)
Ilaria Piccirilli, SimCorp Italiana (Italy)

In 2005, to comply with new regulations, SimCorp rewrote their fair price engine, making it more flexible; Ilaria describes the significant benefits that this has had for subsequent development.

U08: The British APL Association – An Update summary | slides (23 KB)
Paul Grosvenor, Optima Systems Ltd (U.K.)

Over the past year or two, the BAA has been rather quiet and the Vector magazine publication has stopped. The purpose of this presentation is to let you all know that the BAA is alive, well and moving forward on a number of new initiatives including an electronic version of Vector. Paul will show the new BAA website, the new Vector website and provide details of a BAA conference in London next year which is currently in the planning stage.

U09: The Evolution of the APLTree Library summary | slides (link)
Kai Jaeger, APL Team Ltd (UK)

The APLTree project, a collection of tools and applications useful to most APL programmers, has moved from the APL wiki to GitHub.

The APLTree project takes full advantage of the features offered by GitHub. The talk will briefly discuss the benefits of the GitHub platform as a home for APL utilities.

Kai will also discuss new tools that have been added recently, as well as major changes and upgrades to existing tools that are in the APLTree repository.

U10: Excel Mining – Part 2 summary | slides (1.5 MB)
Richard Procter, APL Borealis Inc (Canada)

Continuing where we left off at Dyalog '15, this technical presentation will take a deeper dive into the depths of Microsoft Excel's XML-based structures, using a combination of the Microsoft OOXML SDK and APL. The focus will be on the basics of reading and writing spreadsheets (without the need for Excel), options which developers can explore to suit particular needs, efficiency concerns for large spreadsheets, automation and generally how APL enhances the experience (as usual).

U11: Quaternions (Hamiltonians) and Image Recognition summary | slides (0.7 MB)
Prof. Dr. Dieter Kilsch, Bingen University of Technology (Germany)

Quaternions are well known as an algebraic skew field (or division ring) of dimension four over the real numbers. Although they have some interesting algebraic features, this presentation concentrates on properties that facilitate calculations concerning rotations in solid mechanics and image recognition. This is based on the fact that, apart from the real numbers, quaternions contain three, linearly-independent, imaginary axes; on this three-dimensional real subspace, multiplication by a unit quaternion acts as a rotation. Furthermore, multiplication allows calculation of the precise rotation needed to map a model object onto a real object by least square fitting.

U12: Rectangles All The Way Down summary | slides (1.9 MB)
Martin Thompson, Real Logic (U.K.)

Moore's Law has come to an end. Spectre and Meltdown mitigations have resulted in significant performance impacts for server applications. "Throw hardware at it..." is no longer a valid approach to performance issues. How do we design applications that afford good performance given all the conflicting advice we can find on the Internet?

In his talk, Martin highlights performance characteristics exposed by usage patterns of computing resources. Some patterns of usage are significantly more efficient than others. By understanding the performance characteristics and trends for contemporary hardware, we can then design algorithms and data structures which are efficient regardless of programming language.

U13: Simplicity can be Confusing – Understanding the Manly Chromosome partly through APL summary | slides (2.2 MB)
Charles Brenner, DNA-View and UC Berkeley Human Rights Center (U.S.A.)

My job for the defense was to persuade the court to exclude the Y-chromosome DNA evidence of sexual assault as I had in two previous similar cases. The defending attorney sardonically noted that if my part were successful he could handle all the other hurdles except a previous conviction for rape. "Against whom?" I asked.

"The same woman."

All three of my cases involved charges of sexual assault on Native American tribal land. The tribal context is relevant.

The Y chromosome is physically just like any other though a bit of a runt. Any chromosome is a DNA strand. They all incidentally include some regions with quasi-random patterns which are useful for forensic identification because of their variation among individuals. Y is unique because it is transmitted to offspring (always a son – for mammals having a Y is the definition of maleness) not by sexual mixing as the other chromosomes, but clonally like bacteria. That genetic difference, which everyone understands, has population genetic (=distribution of genes in populations) consequences that almost everyone does not understand. Several years ago I learned from a Monte Carlo simulation of a simple population evolution model that Y haplotypes (haplotype=the identification pattern data of a man) don't migrate very far. The implication is that the FBI's influential idea that e.g. Navajo Y data is more or less adequate for evaluating Apache Y evidence, is very far wrong.

Such a simulation can provide insight because one can make measurements of the data it produces. But stochastic modelling inherently has a black-box aspect. This year I realized that a suitable combination of nested inner and outer products yields a functional route, deterministic rather than stochastic, to similar results and more. (I'll explain in the talk the basis of originality.) That allows a deeper understanding of what the model implies and why, including at least one surprise.

U14a: How I Won the APL Problem Solving Competition – Introduction and Prize Ceremony summary
Brian Becker

The tenth annual International APL Problem Solving Competition took place earlier this year. Brian introduces the contest and grand prize winner, culminating in the award ceremony.

U14b: How I Won the APL Problem Solving Competition summary
Alve Björk, Uppsala University (Sweden)

Alve Björk is the grand prize winner of the tenth annual International APL Problem Solving Competition. Following the award ceremony, Alve describes his experiences of APL/Dyalog and tells us how he managed to master enough of it to win the competition.

U15: ⎕WC on the Web summary | materials (0.3 MB)
Chris Hughes and Michael Hughes, MJH Software Services Ltd (U.K.)

The Dyalog native GUI for Windows is still the most natural and creative development environment for an APL developer to work with. However, with the advent of Linux, various Internet browsers and other non-Windows platforms it has become a little endangered.

Hopefully no longer; this presentation will show how an APL system developed with ⎕WC can be converted to run on any modern browser available on the internet.

This presentation will give a demonstration of how a simple Form with a Grid and some Buttons can be converted from "Windows ⎕WC" to "qWC anywhere" by the substitution of a for a q. The extension to multi-user will be demonstrated too.

U16: Serverless APL summary | slides (1.5 MB)
Marko Vranic, SimCorp (Denmark)

New serverless frameworks have emerged in recent time; several open-source serverless platforms are available on the Kubernetes platform. Using the serverless approach, APL functions can be deployed directly to Kubernetes. Marko addresses (and demonstrates) the following:

  • Introduction to Kubernetes:
    • basic concepts of Kubernetes
    • how to run kubernetes on a local PC
    • how to build/deploy APL service on Kubernetes
  • Introduction to Serverless:
    • Lambda Functions and Cloud events
    • how APL goes with Serverless
    • how to run an open-source Serverless platform on a local PC in Kubernetes
    • calling the lambda function using various serverless triggers

U17: IFRS 9 – How What Started as a 'Simple' Project Became a Breakthrough summary | slides (2.0 MB)
Arianna Francia, SimCorp Italiana (Italy)

In 2017, due to the IFRS 9 regulation, SimCorp Sofia went through a huge restructuring of its core: beside technical issues, the project triggered an organizational change. Arianna describes the main difficulties SimCorp faced and how it reacted by modifying the way they work to achieve the desired results.

U18: Introducing the Mystika Project summary | slides (0.2 MB)
Erik Wallace, University of Connecticut (U.S.A.)

In recent years, various weaknesses have been exposed in OpenSSL, the current open source standard for encrypted communications. The mystika project was initially conceived of as a replacement for OpenSSL. Since the project is APL-based, a big number library native to APL is required and is a foundational part of mystika. However, due to both the style of the big number library and our choice of algorithms, we expect that it will have applications far beyond cryptography, and we hope that it will set a new standard for the design of big number libraries in general. The presentation will include the current state of progress on the project as well as further discussion of our goals and possible applications. Time permitting, there will be some examples of mystika in action.

U19: High-performance Tree Wrangling, the APL Way summary | slides (0.3 MB)
Aaron Hsu, Indiana University (U.S.A.)

Don't let hierarchical tree like structures get you down in APL-land. Despite what modern C.S. theorists would have you believe, there's more than one way to prune, chop, graft and otherwise mangle and wrestle with tree data.

Aaron discusses a novel approach to interacting with Trees, particularly in the manipulation and transformation of trees, that leverages the unique and special qualities of APL to achieve not only greatly reduced code size, but also improved performance, amenability to parallelisation and ease of maintenance/productivity improvements. These techniques are easy to pick up, general and practical.

TL;DR – Why everything you learned about working with trees in University is wrong.

back to top

 

Workshops

SA1: Taming Statistics with TamStat summary | slides (1.4 MB)
Stephen Mansour

TamStat is a software package, written in Dyalog APL, that allows the user to perform statistical analysis by taking advantage of arrays, functions, operators and namespaces. Recent developments include a portable user interface based on HTML/JavaScript, making TamStat available under Microsoft Windows, Apple macOS and GNU/Linux.

In this workshop we will discuss the four basic types of functions used in statistics: summary functions, distributions, relational and logical functions. Stephen will then introduce several operators that can be used with these functions to perform statistical analysis. From these building blocks we will perform statistical analysis using the HTML interface including:

  • descriptive statistics including graphs, tables and summary functions
  • discrete and continuous probability distributions using the probability, criticalValue theoretical and randomVariable operators
  • regression models
  • inferential statistics using the confInt, sampleSize and hypothesis operators (if there is time)

SA2: Performance Tuning summary
Jay Foad, Marshall Lochbaum and Roger Hui

In this workshop we'll look at some snippets of APL code and collectively brainstorm ways to make them run faster. We'll also talk about some general optimisation techniques and show you how to apply them in practice. We'll come prepared with some real-life code examples, but please feel free to bring your own examples for the group to work on.

SA3: Introduction to Conga summary | slides (4.4 MB)
Bjørn Christensen (asst. Adám Brudzewsky)

Conga is Dyalog's interface to communications using TCP/IP, the most widely-used technology for sending messages between software components, whether they are running on the same machine or the other end is on a satellite in outer space. Typically, one end of a connection is a server that listens for incoming connections, allowing one or more other components to connect to it and start transmitting data.

Conga is designed for APL users and, in addition to supporting the low-level transmission of byte streams using TCP/IP, it allows you to efficiently and reliably transmit entire APL arrays between APL systems. Conga is the backbone of many client/server systems implemented in Dyalog APL.

This workshop is an introduction to Conga and assumes no knowledge of networks or communications. It will cover:

  • an introduction to TCP/IP sockets
  • the client/server architecture of Conga
  • the different modes that Conga can work in
  • the events that Conga returns to Dyalog
  • communication between Conga and Dyalog
  • communication between Conga and the non-APL outside world

Bjørn also demonstrates how Conga can be used to secure and authenticate communications.

Keywords: Conga, TCP/IP, sockets, security, communication.

SP1: Cross-Platform User Interfaces Using WC2 summary
Brian Becker and Michael Baas

Since c1990, Dyalog APL has provided a simple but powerful mechanism for creating Graphical User Interfaces under Microsoft Windows using the ⎕WC (Window Create) system function. Today, new applications need to target a broader range of platforms, and HTML/JavaScript has emerged as the dominant technology for modern, portable user interfaces.

The HTMLRenderer (introduced in Dyalog version 16.0) allows an application running under Microsoft Windows, GNU/Linux or Apple macOS to present user interfaces created using HTML/JS. WC2 is a library of UI elements, comparable to the elements that could be created using ⎕WC (but significant richer and more extensible, as the technology makes it easy for 3rd parties to add new "widgets"). It enables an APL user to build HTML-based user interfaces, making it possible to deliver a consistent and quality user experience across platforms using the same code base.

In this hands-on workshop we will:

  • teach you the basics of using WC2
  • develop a simple user interface for a sample application
  • explore a variety of widgets and user interface components

This could be the workshop for you if any of the following apply:

  • you want to build solutions that will run on multiple platforms without developing platform-specific code
  • you want to take advantage of the plethora of HTML-based widgets that are available
  • you want to build solutions that can run on the desktop using HTMLRenderer or over the internet using MiServer using the same application code
  • you're a Mac or Linux user
  • you enjoy learning and using new tools and technologies

SP2: Introduction to Namespaces summary | slides (1.6 MB)
Nicolas Delcros (asst. John Daintree)

In Dyalog, namespaces are a convenient way to organise a workspace (analogous to the way in which directories are a convenient way to organise a file system). Namespaces simplify application development by allowing you to give the workspace a structure; they can be used as containers for objects, data and for code modules. Whether classes are implemented in APL, or external classes like ⎕WC GUI objects and classes from the Microsoft .NET framework, each object resides in a namespace.

Nicolas demonstrates the value of namespaces, which have become cornerstones of modern APL application development, showing how they have been integrated into the APL paradigm, their power, their limitations and the fundamental differences from nested arrays, where a change to an element of an array that has more than one name will force a copy which decouples the values from each other. He also explores how namespaces enable APL to easily interface with most modern technologies, which are often object-oriented, and allows you time to experiment and become comfortable with the tricky bits.

SP3: APL Projects and Packages summary
Morten Kromberg and Gilgamesh Athoraya

This workshop introduces a prototype of APM – the APL Package Manager – a framework for developing applications and libraries in APL. After a brief presentation of the framework and its use, Morten and Gil dive into concrete examples and demonstrate how to:

  1. create a new project
  2. use packages in a project
  3. create and publish a package
  4. test and build a project

After a hands-on session, participants will be invited to provide feedback on the ideas behind the prototype implementation.

TP1: Dyalog Version 17.0 In Depth summary | slides (9.8 MB)
Jay Foad, Richard Smith and Adám Brudzewsky

An interactive tour of Dyalog APL version 17.0. Adám, Jay and Richard will show you how to use the new features, with hands-on time for you to try them out yourself.

TP2: APL in the Cloud summary | materials (3.2 MB)
Morten Kromberg

"The Cloud" is a rather nebulous term used to describe a collection of public and private machines upon which a growing collection of applications or services run. The cloud makes it possible to make an application available across the globe with a minimum of effort: you do not need to set up a computer and connect it to the internet. If the load on your application grows quickly, you can add more hardware with almost no effort, and only pay for what you and your customers actually use.

In this workshop, you will learn how to develop a simple service on your laptop or other local machine, and then install it on the cloud, using tools that allow your deploy new versions of it in seconds. We will:

  • introduce Dyalog APL for Linux and RIDE
  • introduce the JSONServer framework and create a simple service
  • introduce Docker, a tool for describing how to build and start virtual machines – and create a Docker Image containing Dyalog APL and our service
  • use Docker to start our service
  • introduce Kubernetes, a tool for deploying Docker images and show the use of Docker to deploy our application to two public cloud provides: Amazon Web Services and Microsoft Azure
  • demonstrate deploying a Microsoft Windows application to the cloud
  • show how Kubernetes can be used to launch multiple copies of our service and distribute the work from multiple clients (a mechanism known as Load Balancing)
  • talk about sharing data between multiple processes running on the cloud

TP3: MicroServices Made Easy summary
Brian Becker (asst. Bjørn Christensen)

Microservices is a new buzzword describing a way of designing software applications as suites of independently deployable services. You may not you need to build a complete Microservice architecture (or even understand what that means). However, there is no question that it is often useful to be able to package any collection of one or more APL functions – up to, and including, entire applications – as services that can easily be called by other components.

In this workshop, you will learn how to wrap APL code as a service using HTTP and JSON – protocols that are supported by all applications and programming languages – and will make your code easy to embed in any application, no matter how it is constructed or where the collaborating components are actually running.

Brian will show you how to:

  • install JSONServer, a server developed by Dyalog to provide an easy-to-use service framework
  • convert a simple application to use JSONServer
  • test the service using a couple of different clients (one written using Dyalog APL and one written using HTML/JavaScript)
  • explore advanced topics including security, scalability, and session management

back to top

 

Copyright and Trademarks

UNIX® is a registered trademark in the United States and other countries, licensed exclusively through X/Open Company Limited.
Windows® is a registered trademark of Microsoft Corporation in the United States and other countries.
Oracle® and Java™ are registered trademarks of Oracle and/or its affiliates.
macOS® and OS X® (operating system software) are trademarks of Apple Inc., registered in the U.S. and other countries.
All other trademarks are the property of their respective owners.

back to top