Topic Review
Static Single Assignment Form
In compiler design, static single assignment form (often abbreviated as SSA form or simply SSA) is a property of an intermediate representation (IR), which requires that each variable be assigned exactly once, and every variable be defined before it is used. Existing variables in the original IR are split into versions, new variables typically indicated by the original name with a subscript in textbooks, so that every definition gets its own version. In SSA form, use-def chains are explicit and each contains a single element. SSA was proposed by Barry K. Rosen, Mark N. Wegman, and F. Kenneth Zadeck in 1988. Ron Cytron, Jeanne Ferrante and the previous three researchers at IBM developed an algorithm that can compute the SSA form efficiently. One can expect to find SSA in a compiler for Fortran, C or C++, whereas in functional language compilers, such as those for Scheme and ML, continuation-passing style (CPS) is generally used. SSA is formally equivalent to a well-behaved subset of CPS excluding non-local control flow, which does not occur when CPS is used as intermediate representation. So optimizations and transformations formulated in terms of one immediately apply to the other.
  • 1.7K
  • 28 Nov 2022
Topic Review
Fat Object
In geometry, a fat object is an object in two or more dimensions, whose lengths in the different dimensions are similar. For example, a square is fat because its length and width are identical. A 2-by-1 rectangle is thinner than a square, but it is fat relative to a 10-by-1 rectangle. Similarly, a circle is fatter than a 1-by-10 ellipse and an equilateral triangle is fatter than a very obtuse triangle. Fat objects are especially important in computational geometry. Many algorithms in computational geometry can perform much better if their input consists of only fat objects; see the applications section below.
  • 560
  • 28 Nov 2022
Topic Review
Petr–Douglas–Neumann Theorem
In geometry, the Petr–Douglas–Neumann theorem (or the PDN-theorem) is a result concerning arbitrary planar polygons. The theorem asserts that a certain procedure when applied to an arbitrary polygon always yields a regular polygon having the same number of sides as the initial polygon. The theorem was first published by Karel Petr (1868–1950) of Prague in 1908. The theorem was independently rediscovered by Jesse Douglas (1897–1965) in 1940 and also by B H Neumann (1909–2002) in 1941. The naming of the theorem as Petr–Douglas–Neumann theorem, or as the PDN-theorem for short, is due to Stephen B Gray. This theorem has also been called Douglas's theorem, the Douglas–Neumann theorem, the Napoleon–Douglas–Neumann theorem and Petr's theorem. The PDN-theorem is a generalisation of the Napoleon's theorem which is concerned about arbitrary triangles and of the van Aubel's theorem which is related to arbitrary quadrilaterals.
  • 470
  • 28 Nov 2022
Topic Review
ISO 17442
A Legal Entity Identifier (or LEI) is a 20-character identifier that identifies distinct legal entities that engage in financial transactions. It is defined by ISO 17442. Natural persons are not required to have an LEI; they’re eligible to have one issued, however, but only if they act in an independent business capacity. The LEI is a global standard, designed to be non-proprietary data that is freely accessible to all. As of October 2017, over 630,000 legal entities from more than 195 countries have now been issued with LEIs.
  • 490
  • 28 Nov 2022
Topic Review
Strategy (Game Theory)
In game theory, a player's strategy is any of the options which they choose in a setting where the outcome depends not only on their own actions but on the actions of others. The discipline mainly concerns the action of a player in a game affecting the behavior or actions of other players. Some examples of "games" include chess, bridge, poker, monopoly, diplomacy or battleship. A player's strategy will determine the action which the player will take at any stage of the game. In studying game theory, economists enlist a more rational lens in analyzing decisions rather than the psychological or sociological perspectives taken when analyzing relationships between decisions of two or more parties in different disciplines. The strategy concept is sometimes (wrongly) confused with that of a move. A move is an action taken by a player at some point during the play of a game (e.g., in chess, moving white's Bishop a2 to b3). A strategy on the other hand is a complete algorithm for playing the game, telling a player what to do for every possible situation throughout the game. It is helpful to think about a "strategy" as a list of directions, and a "move" as a single turn on the list of directions itself. This strategy is based on the payoff or outcome of each action. The goal of each agent is to consider their payoff based on a competitors action. For example, competitor A can assume competitor B enters the market. From there, Competitor A compares the payoffs they receive by entering and not entering. The next step is to assume Competitor B doesn't enter and then consider which payoff is better based on if Competitor A chooses to enter or not enter. This technique can identify dominant strategies where a player can identify an action that they can take no matter what the competitor does to try and maximize the payoff. This also helps players to identify Nash equilibrium which are discussed in more detail below. A strategy profile (sometimes called a strategy combination) is a set of strategies for all players which fully specifies all actions in a game. A strategy profile must include one and only one strategy for every player.
  • 2.1K
  • 28 Nov 2022
Topic Review
Shunting-Yard Algorithm
In computer science, the shunting-yard algorithm is a method for parsing arithmetical or logical expressions, or a combination of both, specified in infix notation. It can produce either a postfix notation string, also known as Reverse Polish notation (RPN), or an abstract syntax tree (AST). The algorithm was invented by Edsger Dijkstra and named the "shunting yard" algorithm because its operation resembles that of a railroad shunting yard. Dijkstra first described the Shunting Yard Algorithm in the Mathematisch Centrum report MR 34/61. Like the evaluation of RPN, the shunting yard algorithm is stack-based. Infix expressions are the form of mathematical notation most people are used to, for instance "3 + 4" or "3 + 4 × (2 − 1)". For the conversion there are two text variables (strings), the input and the output. There is also a stack that holds operators not yet added to the output queue. To convert, the program reads each symbol in order and does something based on that symbol. The result for the above examples would be (in Reverse Polish notation) "3 4 +" and "3 4 2 1 − × +", respectively. The shunting yard algorithm will correctly parse all valid infix expressions, but does not reject all invalid expressions. For example, "1 2 +" is not a valid infix expression, but would be parsed as "1 + 2". The algorithm can however reject expressions with mismatched parentheses. The shunting-yard algorithm was later generalized into operator-precedence parsing.
  • 1.6K
  • 28 Nov 2022
Topic Review
ODB (C++)
ODB is an object-relational mapping (ORM) system for the C++ language. It allows an application developer to persist C++ objects to a relational database without having to deal with tables, columns, or SQL and without manually writing any mapping code. ODB supports C++98/03 and C++11 language standards and comes with optional profiles for Boost and Qt which allow an application developer to seamlessly use value types (data-time, string, binary, uuid, etc.), containers, and smart pointers from these libraries in persistent C++ classes. ODB is free software and is dual-licensed under the GPL and a proprietary license. One notable difference between ODB and other ORM implementations for C++ is its automatic generation of the database mapping code and, optionally, the database schema from the C++ headers that declare the classes. This task is performed by the ODB compiler. The ODB compiler is a real C++ compiler except that instead of producing assembly or machine code, it generates portable C++ which can in turn be compiled by any C++ compiler. The ODB compiler uses the GCC compiler front-end for C++ parsing and is implemented using the new GCC plugin architecture. The ODB compiler also provides comprehensive support for database schema evolution, including fully automatic schema migration, support for immediate and gradual data migration, as well as support for soft model changes. The latter feature allows one to work with multiple schema versions using the same C++ classes. The other components of the ODB system include the common runtime library (libodb) and the database-specific runtime libraries (for example, libodb-mysql). The common runtime library defines object-oriented database interfaces that are used by the application developer to perform various database operations on persistent objects. The database-specific runtimes implement these interfaces for concrete database systems and provide support functionality for the generated database mapping code. To achieve high performance, low overhead, and reliability ODB does not use common database APIs, such as ODBC, to access the relational database. Rather, each database-specific runtime library uses low-level, native C APIs that are specific to each database. ODB currently supports the MySQL, SQLite, PostgreSQL, Oracle, and SQL Server databases. Bulk/batch operations are supported for Oracle and SQL Server. The application can also use multiple databases (for example, MySQL, SQLite, etc.) at the same time. Multi-database support comes in the static and dynamic flavors with the latter allowing the application to dynamically load the database support code for individual database if and when necessary. ODB is not a framework. There is no common base type that all persistent classes should derive from nor are there any restrictions on the data member types in persistent classes. Existing classes can be made persistent with a few or no modifications. ODB is also flexible in the level of insulation it provides to the application developer. It can either completely hide the relational nature of the underlying database or expose some of the details as required.
  • 1.4K
  • 28 Nov 2022
Topic Review
Nontransitive Dice
A set of dice is nontransitive if it contains three dice, A, B, and C, with the property that A rolls higher than B more than half the time, and B rolls higher than C more than half the time, but it is not true that A rolls higher than C more than half the time. In other words, a set of dice is nontransitive if the binary relation – X rolls a higher number than Y more than half the time – on its elements is not transitive. It is possible to find sets of dice with the even stronger property that, for each die in the set, there is another die that rolls a higher number than it more than half the time. Using such a set of dice, one can invent games which are biased in ways that people unused to nontransitive dice might not expect (see Example).
  • 843
  • 28 Nov 2022
Topic Review
BOSH
BOSH is an open-source software project that offers a toolchain for release engineering, software deployment and application lifecycle management of large-scale distributed services. The toolchain is made up of a server (the BOSH Director) and a command line tool. BOSH is typically used to package, deploy and manage cloud software. While BOSH was initially developed by VMware in 2010 to deploy Cloud Foundry PaaS, it can be used to deploy other software (such as Hadoop, RabbitMQ, or MySQL for instance). BOSH is designed to manage the whole lifecycle of large distributed systems. Since March 2016, BOSH can manage deployments on both Microsoft Windows and Linux servers. A BOSH Director communicates with a single Infrastructure as a service (IaaS) provider to manage the underlying networking and virtual machines (VMs) (or containers). Several IaaS providers are supported: Amazon Web Services EC2, Apache CloudStack, Google Compute Engine, Microsoft Azure, OpenStack, and VMware vSphere. To help support more underlying IaaS providers, BOSH uses the concept of a Cloud Provider Interface (CPI). There is an implementation of the CPI for each of the IaaS providers listed above. Typically the CPI is used to deploy VMs, but it can be used to deploy containers as well. Few CPIs exist for deploying containers with BOSH and only one is actively supported. For this one, BOSH uses a CPI that deploys Pivotal Software's Garden containers (Garden is very similar to Docker) on a single virtual machine, run by VirtualBox or VMware Workstation. In theory, any other container engine could be supported, if the necessary CPIs were developed. Due to BOSH indifferently supporting deployments on VMs or containers, BOSH uses the generic term “instances” to designate those. It is up to the CPI to choose whether a BOSH “instance” is actually a VM or a container.
  • 255
  • 28 Nov 2022
Topic Review
VRPN
VRPN (Virtual-Reality Peripheral Network) is a device-independent, network-based interface for accessing virtual reality peripherals in VR applications. It was originally designed and implemented by Russell M. Taylor II at the Department of Computer Science of the University of North Carolina at Chapel Hill. VRPN was maintained and supported by Sensics while it was business. It is currently maintained by ReliaSolve and developed in collaboration with a productive community of contributors. It is described more fully at vrpn.org and in VRPN-VRST. The purpose of VRPN is to provide a unified interface to input devices, like motion trackers or joystick controllers. It also provides the following: The VRPN system consists of programming interfaces for both the client application and the hardware drivers and a server application that communicates with the hardware devices. The client interfaces are written in C++ but have been wrapped in C#, Python and Java. A typical application of VRPN is to encode and send 6DoF motion capture data through the network in real time.
  • 461
  • 28 Nov 2022
  • Page
  • of
  • 371
Video Production Service