Modern concurrency tools for Ruby. Inspired by Erlang, Clojure, Scala, Haskell, F#, C#, Java, and classic concurrency patterns.
The design goals of this gem are:
Stay true to the spirit of the languages providing inspiration
But implement in a way that makes sense for Ruby
Keep the semantics as idiomatic Ruby as possible
Support features that make sense in Ruby
Exclude features that don't make sense in Ruby
Be small, lean, and loosely coupled
@!macro [new] thread_safe_variable_comparison
## Thread-safe Variable Classes Each of the thread-safe variable classes is designed to solve a different problem. In general: * *{Concurrent::Agent}:* Shared, mutable variable providing independent, uncoordinated, *asynchronous* change of individual values. Best used when the value will undergo frequent, complex updates. Suitable when the result of an update does not need to be known immediately. * *{Concurrent::Atom}:* Shared, mutable variable providing independent, uncoordinated, *synchronous* change of individual values. Best used when the value will undergo frequent reads but only occasional, though complex, updates. Suitable when the result of an update must be known immediately. * *{Concurrent::AtomicReference}:* A simple object reference that can be atomically. Updates are synchronous but fast. Bast used when updates a simple set operations. Not suitable when updates are complex. {Concurrent::AtomicBoolean} and {Concurrent::AtomicFixnum} are similar but optimized for the given data type. * *{Concurrent::Exchanger}:* Shared, stateless synchronization point. Used when two or more threads need to exchange data. The threads will pair then block on each other until the exchange is complete. * *{Concurrent::MVar}:* Shared synchronization point. Used when one thread must give a value to another, which must take the value. The threads will block on each other until the exchange is complete. * *{Concurrent::ThreadLocalVar}:* Shared, mutable, isolated variable which holds a different value for each thread which has access. Often used as an instance variable in objects which must maintain different state for different threads. * *{Concurrent::TVar}:* Shared, mutable variables which provide *coordinated*, *synchronous*, change of *many* stated. Used when multiple value must change together, in an all-or-nothing transaction.
@see AtExitImplementation @!visibility private
@!visibility private @!macro internal_implementation_note
@!visibility private @!macro internal_implementation_note
Raised when an asynchronous operation is cancelled before execution.
Raised when errors occur during configuration.
@!visibility private @!macro internal_implementation_note
@!visibility private @!macro internal_implementation_note
@!visibility private
@!visibility private
@!visibility private
@!visibility private
Clock that cannot be set and represents monotonic time since some unspecified starting point.
@!visibility private
@!visibility private
Raised when an operation is attempted which is not legal given the receiver's current state
Raised when an attempt is made to violate an immutability guarantee.
Raised when an object's methods are called when it has not been properly initialized.
Raised when a lifecycle method (such as `stop`) is called in an improper sequence or when the object is in an inappropriate state.
Raised when an object with a start/stop lifecycle has been started an excessive number of times. Often used in conjunction with a restart policy or strategy.
Raised when an attempt is made to modify an immutable object (such as an `IVar`) after its final state has been set.
Various classes within allows for nil
values to be stored, so
a special NULL
token is required to indicate the “nil-ness”.
@!visibility private
Suppresses all output when used for logging.
Raised by an `Executor` when it is unable to process a given task, possibly because of a reject policy or other internal error.
Raised when any finite resource, such as a lock counter, exceeds its maximum limit/threshold.
@!visibility private @!macro internal_implementation_note
@!visibility private @!macro internal_implementation_note
Raised when an operation times out.
Abort a currently running transaction - see `Concurrent::atomically`.
# File lib/concurrent/tvar.rb, line 150 def abort_transaction raise Transaction::AbortError.new end
Run a block that reads and writes `TVar`s as a single atomic transaction. With respect to the value of `TVar` objects, the transaction is atomic, in that it either happens or it does not, consistent, in that the `TVar` objects involved will never enter an illegal state, and isolated, in that transactions never interfere with each other. You may recognise these properties from database transactions.
There are some very important and unusual semantics that you must be aware of:
Most importantly, the block that you pass to atomically may be executed
more than once. In most cases your code should be free of side-effects, except for via TVar.
If an exception escapes an atomically block it will abort the transaction.
It is undefined behaviour to use callcc or Fiber with atomically.
If you create a new thread within an atomically, it will not be part of
the transaction. Creating a thread counts as a side-effect.
Transactions within transactions are flattened to a single transaction.
@example
a = new TVar(100_000) b = new TVar(100) Concurrent::atomically do a.value -= 10 b.value += 10 end
# File lib/concurrent/tvar.rb, line 93 def atomically raise ArgumentError.new('no block given') unless block_given? # Get the current transaction transaction = Transaction::current # Are we not already in a transaction (not nested)? if transaction.nil? # New transaction begin # Retry loop loop do # Create a new transaction transaction = Transaction.new Transaction::current = transaction # Run the block, aborting on exceptions begin result = yield rescue Transaction::AbortError => e transaction.abort result = Transaction::ABORTED rescue Transaction::LeaveError => e transaction.abort break result rescue => e transaction.abort raise e end # If we can commit, break out of the loop if result != Transaction::ABORTED if transaction.commit break result end end end ensure # Clear the current transaction Transaction::current = nil end else # Nested transaction - flatten it and just run the block yield end end
# File lib/concurrent/dataflow.rb, line 55 def call_dataflow(method, executor, *inputs, &block) raise ArgumentError.new('an executor must be provided') if executor.nil? raise ArgumentError.new('no block given') unless block_given? unless inputs.all? { |input| input.is_a? IVar } raise ArgumentError.new("Not all dependencies are IVars.\nDependencies: #{ inputs.inspect }") end result = Future.new(executor: executor) do values = inputs.map { |input| input.send(method) } block.call(*values) end if inputs.empty? result.execute else counter = DependencyCounter.new(inputs.size) { result.execute } inputs.each do |input| input.add_observer counter end end result end
@return [Logger] Logger with provided level and output.
# File lib/concurrent/configuration.rb, line 18 def self.create_stdlib_logger(level = Logger::FATAL, output = $stderr) logger = Logger.new(output) logger.level = level logger.formatter = lambda do |severity, datetime, progname, msg| formatted_message = case msg when String msg when Exception format "%s (%s)\n%s", msg.message, msg.class, (msg.backtrace || []).join("\n") else msg.inspect end format "[%s] %5s -- %s: %s\n", datetime.strftime('%Y-%m-%d %H:%M:%S.%L'), severity, progname, formatted_message end lambda do |loglevel, progname, message = nil, &block| logger.add loglevel, message, progname, &block end end
{include:file:doc/dataflow.md}
@param [Future] inputs zero or more `Future` operations that this dataflow depends upon
@yield The operation to perform once all the dependencies are met @yieldparam [Future] inputs each of the `Future` inputs to the dataflow @yieldreturn [Object] the result of the block operation
@return [Object] the result of all the operations
@raise [ArgumentError] if no block is given @raise [ArgumentError] if any of the inputs are not `IVar`s
# File lib/concurrent/dataflow.rb, line 33 def dataflow(*inputs, &block) dataflow_with(Concurrent.global_io_executor, *inputs, &block) end
# File lib/concurrent/dataflow.rb, line 43 def dataflow!(*inputs, &block) dataflow_with!(Concurrent.global_io_executor, *inputs, &block) end
# File lib/concurrent/dataflow.rb, line 38 def dataflow_with(executor, *inputs, &block) call_dataflow(:value, executor, *inputs, &block) end
# File lib/concurrent/dataflow.rb, line 48 def dataflow_with!(executor, *inputs, &block) call_dataflow(:value!, executor, *inputs, &block) end
Disables AtExit handlers including pool auto-termination handlers. When disabled it will be the application programmer's responsibility to ensure that the handlers are shutdown properly prior to application exit by calling {AtExit.run} method.
@note this option should be needed only because of `at_exit` ordering
issues which may arise when running some of the testing frameworks. E.g. Minitest's test-suite runs itself in `at_exit` callback which executes after the pools are already terminated. Then auto termination needs to be disabled and called manually after test-suite ends.
@note This method should never be called
from within a gem. It should *only* be used from within the main application and even then it should be used only when necessary.
@see AtExit
# File lib/concurrent/configuration.rb, line 93 def self.disable_at_exit_handlers! AtExit.enabled = false end
General access point to global executors. @param [Symbol, Executor] executor_identifier symbols:
- :fast - {Concurrent.global_fast_executor} - :io - {Concurrent.global_io_executor} - :immediate - {Concurrent.global_immediate_executor}
@return [Executor]
# File lib/concurrent/configuration.rb, line 128 def self.executor(executor_identifier) Options.executor(executor_identifier) end
Global thread pool optimized for short, fast operations.
@return [ThreadPoolExecutor] the thread pool
# File lib/concurrent/configuration.rb, line 100 def self.global_fast_executor GLOBAL_FAST_EXECUTOR.value end
# File lib/concurrent/configuration.rb, line 111 def self.global_immediate_executor GLOBAL_IMMEDIATE_EXECUTOR end
Global thread pool optimized for long, blocking (IO) tasks.
@return [ThreadPoolExecutor] the thread pool
# File lib/concurrent/configuration.rb, line 107 def self.global_io_executor GLOBAL_IO_EXECUTOR.value end
# File lib/concurrent/configuration.rb, line 55 def self.global_logger GLOBAL_LOGGER.value end
# File lib/concurrent/configuration.rb, line 59 def self.global_logger=(value) GLOBAL_LOGGER.value = value end
Global thread pool user for global timers.
@return [Concurrent::TimerSet] the thread pool
# File lib/concurrent/configuration.rb, line 118 def self.global_timer_set GLOBAL_TIMER_SET.value end
Leave a transaction without commiting or aborting - see `Concurrent::atomically`.
# File lib/concurrent/tvar.rb, line 155 def leave_transaction raise Transaction::LeaveError.new end
@!macro [attach] monotonic_get_time
Returns the current time a tracked by the application monotonic clock. @return [Float] The current monotonic time when `since` not given else the elapsed monotonic time between `since` and the current time @!macro monotonic_clock_warning
# File lib/concurrent/utility/monotonic_time.rb, line 53 def monotonic_time GLOBAL_MONOTONIC_CLOCK.get_time end
# File lib/concurrent/utility/monotonic_time.rb, line 6 def initialize @last_time = Time.now.to_f super() end
# File lib/concurrent/configuration.rb, line 132 def self.new_fast_executor(opts = {}) FixedThreadPool.new( [2, Concurrent.processor_count].max, auto_terminate: opts.fetch(:auto_terminate, true), idletime: 60, # 1 minute max_queue: 0, # unlimited fallback_policy: :abort # shouldn't matter -- 0 max queue ) end
# File lib/concurrent/configuration.rb, line 142 def self.new_io_executor(opts = {}) ThreadPoolExecutor.new( min_threads: [2, Concurrent.processor_count].max, max_threads: ThreadPoolExecutor::DEFAULT_MAX_POOL_SIZE, # max_threads: 1000, auto_terminate: opts.fetch(:auto_terminate, true), idletime: 60, # 1 minute max_queue: 0, # unlimited fallback_policy: :abort # shouldn't matter -- 0 max queue ) end
# File lib/concurrent/utility/processor_counter.rb, line 155 def self.physical_processor_count processor_counter.physical_processor_count end
# File lib/concurrent/utility/processor_counter.rb, line 151 def self.processor_count processor_counter.processor_count end
Use logger created by create_stdlib_logger to log concurrent-ruby messages.
# File lib/concurrent/configuration.rb, line 44 def self.use_stdlib_logger(level = Logger::FATAL, output = $stderr) Concurrent.global_logger = create_stdlib_logger level, output end
@!visibility private
# File lib/concurrent/utility/monotonic_time.rb, line 13 def get_time Process.clock_gettime(Process::CLOCK_MONOTONIC) end
Abort a currently running transaction - see `Concurrent::atomically`.
# File lib/concurrent/tvar.rb, line 150 def abort_transaction raise Transaction::AbortError.new end
Run a block that reads and writes `TVar`s as a single atomic transaction. With respect to the value of `TVar` objects, the transaction is atomic, in that it either happens or it does not, consistent, in that the `TVar` objects involved will never enter an illegal state, and isolated, in that transactions never interfere with each other. You may recognise these properties from database transactions.
There are some very important and unusual semantics that you must be aware of:
Most importantly, the block that you pass to atomically may be executed
more than once. In most cases your code should be free of side-effects, except for via TVar.
If an exception escapes an atomically block it will abort the transaction.
It is undefined behaviour to use callcc or Fiber with atomically.
If you create a new thread within an atomically, it will not be part of
the transaction. Creating a thread counts as a side-effect.
Transactions within transactions are flattened to a single transaction.
@example
a = new TVar(100_000) b = new TVar(100) Concurrent::atomically do a.value -= 10 b.value += 10 end
# File lib/concurrent/tvar.rb, line 93 def atomically raise ArgumentError.new('no block given') unless block_given? # Get the current transaction transaction = Transaction::current # Are we not already in a transaction (not nested)? if transaction.nil? # New transaction begin # Retry loop loop do # Create a new transaction transaction = Transaction.new Transaction::current = transaction # Run the block, aborting on exceptions begin result = yield rescue Transaction::AbortError => e transaction.abort result = Transaction::ABORTED rescue Transaction::LeaveError => e transaction.abort break result rescue => e transaction.abort raise e end # If we can commit, break out of the loop if result != Transaction::ABORTED if transaction.commit break result end end end ensure # Clear the current transaction Transaction::current = nil end else # Nested transaction - flatten it and just run the block yield end end
# File lib/concurrent/dataflow.rb, line 55 def call_dataflow(method, executor, *inputs, &block) raise ArgumentError.new('an executor must be provided') if executor.nil? raise ArgumentError.new('no block given') unless block_given? unless inputs.all? { |input| input.is_a? IVar } raise ArgumentError.new("Not all dependencies are IVars.\nDependencies: #{ inputs.inspect }") end result = Future.new(executor: executor) do values = inputs.map { |input| input.send(method) } block.call(*values) end if inputs.empty? result.execute else counter = DependencyCounter.new(inputs.size) { result.execute } inputs.each do |input| input.add_observer counter end end result end
{include:file:doc/dataflow.md}
@param [Future] inputs zero or more `Future` operations that this dataflow depends upon
@yield The operation to perform once all the dependencies are met @yieldparam [Future] inputs each of the `Future` inputs to the dataflow @yieldreturn [Object] the result of the block operation
@return [Object] the result of all the operations
@raise [ArgumentError] if no block is given @raise [ArgumentError] if any of the inputs are not `IVar`s
# File lib/concurrent/dataflow.rb, line 33 def dataflow(*inputs, &block) dataflow_with(Concurrent.global_io_executor, *inputs, &block) end
# File lib/concurrent/dataflow.rb, line 43 def dataflow!(*inputs, &block) dataflow_with!(Concurrent.global_io_executor, *inputs, &block) end
# File lib/concurrent/dataflow.rb, line 38 def dataflow_with(executor, *inputs, &block) call_dataflow(:value, executor, *inputs, &block) end
# File lib/concurrent/dataflow.rb, line 48 def dataflow_with!(executor, *inputs, &block) call_dataflow(:value!, executor, *inputs, &block) end
Leave a transaction without commiting or aborting - see `Concurrent::atomically`.
# File lib/concurrent/tvar.rb, line 155 def leave_transaction raise Transaction::LeaveError.new end
@!macro [attach] monotonic_get_time
Returns the current time a tracked by the application monotonic clock. @return [Float] The current monotonic time when `since` not given else the elapsed monotonic time between `since` and the current time @!macro monotonic_clock_warning
# File lib/concurrent/utility/monotonic_time.rb, line 53 def monotonic_time GLOBAL_MONOTONIC_CLOCK.get_time end


This application walks you through the user-consent flow required for you to be able to listen for I/O Events that trigger from your account.
After registering a webhook to trigger on Creative Cloud Asset events, you need to authorize your application to listen for changes to assets on your behalf.


This is the header
Hi, this is my page. I'm Mario Murillo
This
Is an ordered
List
And this is
the unordered list
Visit GitHub here


Q
W
E
R
T
Y
Hypr Typr
Type as if your life depends on it!
Y
T
R
E
W
Q
That was awesome,
Player
Score
Most Misspelt Words:
Publically
Definitely
Government
Separate
Receive


The Truck Object¶
The truck object holds everything related to the game. It should be noted that contract_list holds three contracts with varying dificulty, with index 0 being the easy contract and index 2 holding the hard contract.
Instance variables¶
Name |
Type |
Description |
|---|---|---|
contract_list |
Contract [] |
A list of contracts you can pick from |
active_contract |
Contract or None |
The current contract you are working to complete |
body |
Your current body Object. Default is a BaseBodyObject. Body also stores how much gas your truck has |
|
addons |
Your current addon object. Default is a BaseUpgradeObject |
|
tires |
int |
The TireEnum you are currently equiped with. Default is tire_normal. More at Tires |
speed |
int |
The speed your truck is currently traveling at |
health |
float |
The health of your truck. |
money |
int |
The amount of money you currently have. |
renown |
int |
Your score. The game is won by having the most renown |
Please note that the BaseBodyObject gives you the default max_gas attribute. You can’t switch back to the base objects once you upgrade
Truck Upgrade Negations¶
Some truck upgrade has the potential to negate some of the time and damage penalties from events. Listed below are all Negations. For more on upgrades, you can visit Body Objects , Add On Objects , or Tires
Upgrade |
Negates |
|---|---|
ObjectType.headlights |
EventType.animal_in_road |
ObjectType.sentryGun |
EventType.rock_slide |
ObjectType.GPS |
EventType.traffic |
ObjectType.policeScanner |
EventType.bounty_hunter |
TireType.tire_sticky |
EventType.icy_road |
TireType.monster_truck |
EventType.bandits |
ObjectType.rabbitFoot |
EventType.animal_in_road, EventType.bandits,EventType.icy_road, EventType.bounty_hunter, EventType.rock_slide, EventType.traffic |


Always seeking engaging opportunities in the world of software engineering
Developed training app allowing registered users to schedule and track rock-climbing specific workouts. Scheduled workouts can be updated with any added weights, route ratings, notes on the individual session, or deleted. All complete workouts are archived for user reference.
Provide quality customer service and educate guests on how to use a wide range of produce. Execute logistics of daily shipments, prepare product and coordinate display.
Build reverse osmosis filter units and component parts for saltwater aquarium and drinking water systems. Manage production inventory and tools with Sage 100 ERP, ScanForce, and Fishbowl systems. Ensure quality in all customer orders.
Provide quality customer service and educate guests on how to use a wide range of beer products. Execute logistics of daily shipments, prepare product and coordinate display.
Apart from being a full stack developer, I spend most of my time rock climbing either in the gym or outdoors when I can get there. Other outdoor interests of mine are cycling, camping, and spendingn time at the beach.
When indoors, I enjoy playing competitive video games, Warcraft related games and the lore therein.


Samsung reportedly signs a foldable glass maker to an exclusive deal
Source: Android Central
What you need to know
- Samsung has signed Dowoo Insys as its exclusive supplier of ultra-thin glass panels.
- The Galaxy Fold currently uses a plastic screen technology that is prone to scratching.
- DoInsys makes ultra-thin glass that is only 100 micrometers thick, with thinner glass to come.
Korean news site ETNews reports that Dowoo Insys, a Korean manufacturer of ultra-thin glass (UTG) panels, has made a deal with Samsung Display to become the exclusive supplier of glass for the screen component arm of the Korean electronics giant. Presumably, these panels would be fed directly to Samsung's Mobile division for future foldable phones, such as the prototype form factor that Samsung R&D showed off on stage at the Samsung Developer's Conference.
Source: ETNews
The Samsung Galaxy Fold uses a plastic-based screen technology, not a glass panel, and the display suffers from being so scratch-prone that Samsung warns against nicking it with sharp fingernails. A glass display could solve this problem. Dowoo Insys makes UTG panels that are as thin as 100µm, and the technology could stretch as thin as 30µm. Currently, DoInsys can theoretically produce up to 500,000 panels per month, according to ETNews, but it seems this is not the number of panels actually leaving the factory, so production may be difficult. The glass-maker is reportedly considering a new production facility in Vietnam to complement its current South Korean plant.
Samsung has already invested ₩12 billion (around $10.3 million) through its Samsung Venture Investment arm. Dowoo Insys sees growth potential in the foldable display market from Samsung with new mobile form factors on the horizon, but also points to the viability of foldable displays in laptops, tablets, and other devices. Hopefully increased production and better production procedures will quickly lead to lower prices, bringing down foldables from the near-$2000 price tag of Samsung's Galaxy Fold.
Foldable Phone
Samsung Galaxy Fold
An entirely new kind of smartphone.
The Samsung Galaxy Fold is something special.  There are still some quirks with folding phones as a whole, but if you want to buy one, this is probably the one to get.
Philip Berne worked from 2011 to 2017 as part of Samsung's Public Relations team and maintains no business or financial relationships with Samsung nor is he currently bound by non-disclosure agreement.
We may earn a commission for purchases using our links. Learn more.


fun Any.toObservable(): Observable<Any>
Converts any Object to an Observable.
Author Boston Vanseghi
Since 2.0.1


The Start
So you have your team selected and in place, and they are up and running within the first sprint. The team is excited and enthusiastic to be working in a new environment. However you slowly start to see the mode change on your team to being a little more resistant, this is normal. If you look at the Satir change model, the introducing of Scrum is the “Foreign Element” and as you’re team progress they will go through the remainder of the stages. By being aware of these stages and what to expect in each of them you will be able to guide your team through them.
Resistance
During this stage the team will mostly likely reject the different parts of Scrum. You might hear statements like:
- “Why are we having all of these meeting?”
- “The daily scrum is a waste of time.”
Chaos
After resistance chaos will start it occur. The loss of individual identity as the team starts to move towards cross functional individuals, might trigger emotions of vulnerability and bring out childlike behaviors. You might hear statements like:
- “I am unable to breakdown my work anymore and I know it will take 40 hours”
- “Why can’t I just do it my way”
- “I can’t help with that task, that is not my expertise”
Integration
During this stage the team will start to form and roles will start to blend. They will see the value of having a cross functional team and T-shaped people. You should see a lot of pairing going on during this stage as they become more cross functional. Roles on the team will start to blur and you the conversation will start change. You should being hearing a lot of “we” type language. There is not much to do at this stage other then let the team go and encourage them to continue their pairing and knowledge gathering.
New Status Quo
At this stage the team should have taken to Scrum and they should on a good path to becoming a high performing team. During this stage it is important to continue to support and encourage the team. Help them continue to learn and grow in different areas that they are interested in. Also watch that the team does not fall back into a bad behaves from any of the earlier stages and if they do encourage and help them through it.
In the End
Each individual on the team is unique in their own way, and an approach that works with one might not work with another. Keep trying different approaches until you find one that works for each individual. And keep in mind what Peter Block said “People don’t resist change; they resist coercion”.


Active Directory and LDAP Integration Guide
Introduction
This document details how to configure your Openfire installation to use an external directory such as Open LDAP or Active Directory. Integration with a directory lets users authenticate using their directory username and password. Optionally, you can configure Openfire to load user profile and group information from the directory. Any group in Openfire can be designated as a shared group, which means that you can pre-populate user's rosters using directory groups.
Topics that are covered in this document:
Background
LDAP (Lightweight Directory Access Protocol) has emerged as a dominant standard for user authentication and for storage of user profile data. It serves as a powerful tool for large organizations (or those organizations integrating many applications) to simplify user management issues. Many LDAP servers are available, such as OpenLDAP and Active Directory.
By default, Openfire stores all user data in its database and performs authentication using database lookups. The LDAP module replaces that functionality and allows Openfire to:
- Use a LDAP server to authenticate a user's identity.
- Load user profile information from a LDAP directory.
- Load group information from an LDAP directory.
Note: Openfire treats the LDAP directory as read-only.
This document will guide you through configuring LDAP support in Openfire. These instructions assume that you're a competent LDAP user, and that you're familiar with Openfire setup issues.
Configuration
The Openfire setup tool includes an easy to use LDAP setup wizard. Choose the LDAP option on the Profile Settings page to configure directory integration. The wizard along with in-line help will guide you through the rest of the process. Specific tips for working with Active Directory are noted below.
If you have already completed the setup process but need to enable LDAP integration, you can re-run the setup tool. To do so:
- Stop Openfire.
-
Edit
conf/openfire.xml
in your Openfire installation folder and set<setup>true</setup>
to<setup>false</setup>
. - Restart Openfire and enter the setup tool.
Working with Active Directory
Microsoft's Active Directory is a broadly deployed directory system that supports the LDAP protocol. You'll be prompted for several LDAP fields when connecting to Active Directory servers, some of which are detailed below:
- Base DN
- The base DN describes where to load users and groups. If you're using a default
Active Directory setup, all user accounts and groups are located in the
"Users" folder under your domain. In LDAP form, that's
cn=Users;dc=<Your Domain>
. To get more specific, say your domain isactivedirectory.jivesoftware.com
. In that case, your base DN would becn=Users;dc=activedirectory,dc=jivesoftware,dc=com
. If you've customized where users are stored, you'll just need to replicate that folder structure using LDAP syntax. - Administrator DN
- By default, Active Directory does not allow anonymous LDAP connections. Therefore,
you'll need to enter the DN of a user that's allowed to connect to the server and read
all user and group data. Unless you've created a special user account for this
purpose, an easy choice is to use the built-in administrator account. By default,
the administrator DN is in the form
cn=Administrator,dc=<Your Domain>
. Using our previous example,cn=Administrator,cn=users,dc=activedirectory,dc=jivesoftware,dc=com
.
Manually Editing the Config File
If you prefer to edit the configuration file to enable LDAP integration directly, use the following
instructions. Open the configuration file conf/openfire.xml
from your Openfire
installation in your favorite
editor and add or change the following settings. Properties flagged with (*)
must be set. Properties flagged with (**) must be set in order
to enable LDAP group
support, all other properties are optional:
Main Settings
- provider.user.className *
- set the value to "org.jivesoftware.openfire.ldap.LdapUserProvider".
- provider.auth.className *
- set the value to "org.jivesoftware.openfire.ldap.LdapAuthProvider".
- ldap.host *
- LDAP server host; e.g. localhost or machine.example.com, etc. It is possible to use many LDAP servers but all of them should share the same configuration (e.g. SSL, baseDN, admin account, etc). To specify many LDAP servers use the comma or the white space character as delimiter.
- ldap.port
- LDAP server port number. If this property is not set, the default value is 389.
- ldap.connectionTimeout
- The value of this property is the string representation of an integer representing the connection timeout in milliseconds. If the LDAP provider doesn't connect within the specified period, it aborts the connection attempt. The integer should be greater than zero. An integer less than or equal to zero means no connection timeout is specified in which case the default 4 seconds timeout is used. Does not apply to SSL connections.
- ldap.readTimeout
- The value of this property is the string representation of an integer representing the read timeout in milliseconds for LDAP operations. If the LDAP provider doesn't get an LDAP response within the specified period, it aborts the read attempt. The integer should be greater than zero. An integer less than or equal to zero means no read timeout is specified which is equivalent to waiting for the response infinitely until it is received which defaults to the original behavior.
- ldap.baseDN *
- the starting DN that searches for users will be performed with. The entire subtree under the base DN will be searched for user accounts.
- ldap.alternateBaseDN
- a second DN in the directory can optionally be set. If set, the alternate base DN will be used for authentication, loading single users and displaying a list of users. Content in the base DN and the alternate DN will be treated as one.
- ldap.adminDN
- a directory administrator's DN. All directory operations will be performed with this account. The admin must be able to perform searches and load user records. The user does not need to be able to make changes to the directory, as Openfire treats the directory as read-only. If this property is not set, an anonymous login to the server will be attempted.
- ldap.adminPassword
- the password for the directory administrator.
- ldap.usernameField
- the field name that the username lookups will be performed on. If this property is not set, the
default value is
uid
. Active Directory users should try the default valuesAMAccountName
. - ldap.nameField
- the field name that holds the user's name. If this property is not set, the default value is
cn
. Active Directory users should use the default valuedisplayName
. - ldap.emailField
- the field name that holds the user's email address. If this property is not set, the default value
is
mail
. Active Directory users should use default valuemail
. - ldap.searchFields
- the LDAP fields that will be used for user searches. If this property is not set, the username, name, and email fields will be searched. An example value for this field is "Username/uid,Name/cname". That searches the uid and cname fields in the directory and labels them as "Username" and "Name" in the search UI. You can add as many fields as you'd like using comma-delimited "DisplayName/Field" pairs. You should ensure that any fields used for searching are properly indexed so that searches return quickly.
- ldap.searchFilter
- an optional search filter to append to the default filter when loading users. The default search
filter is created using the attribute specified by ldap.usernameField. For example, if the username
field is "uid", then the default search filter would be
(uid={0})
where{0}
is dynamically replaced with the username being searched for.The most common usage of a search filter is to limit the entries that are users based on objectClass. For example, a reasonable search filter for a default Active Directory installation is
(objectClass=organizationalPerson)
. When combined with the default filter, the actual search executed would be(&(sAMAccountName={0})(objectClass=organizationalPerson))
. - ldap.subTreeSearch
- by default, Openfire will search the entire LDAP sub-tree (starting at the base DN) when trying to
load users. If this property is set to
false
, then sub-tree searching is disabled and users will only be loaded directly from the base DN. Disabling sub-tree can improve performance, but it will fail to find users if your directory is setup to use sub-folders under the base DN.
Group Settings
- provider.group.className **
- set the value to "org.jivesoftware.openfire.ldap.LdapGroupProvider".
- ldap.groupNameField **
- the field name that the groupname lookups will be performed on. If this property is not set, the
default value is
cn
. - ldap.groupMemberField
- the field name that holds the members in a group. If this property is not set, the default value is
member
. - ldap.groupDescriptionField
- the field name that holds the description a group. If this property is not set, the default value is
description
. - ldap.posixMode **
- a value of
true
means that users are stored within the group by their username alone. A value offalse
means that users are stored by their entire DN within the group. If this property is not set, the default value isfalse
. The posix mode must be set correctly for your server in order for group integration to work. Posix modes for common LDAP servers:- ActiveDirectory: false
- ldap.groupSearchFilter
-
an optional search filter to append to the default filter when loading groups. The default group
search filter is created using the attribute specified by ldap.groupNameField. For example, if the
group name field is "cn", then the default group search filter would be
(cn={0})
where{0}
is dynamically replaced with the group name being searched for.The most common usage of a search filter is to limit the entries that are groups based on objectClass. For example, a reasonable search filter for a default Active Directory installation is "(objectClass=group)". When combined with the default filter, the actual search executed would be "(&(cn={0})(objectClass=group))".
Connection Settings
- ldap.debugEnabled
- a value of
true
if debugging should be turned on. When on, trace information about buffers sent and received by the LDAP provider is written to System.out - ldap.sslEnabled
- a value of
true
to enable SSL connections to your LDAP server. If you enable SSL connections, the LDAP server port number most likely should be changed to 636. - ldap.startTlsEnabled
- a value of
true
to enable StartTLS connections to your LDAP server. If you enable StartTLS connections, the LDAP server port number most likely should be changed to 389. - ldap.initialContextFactory
- the name of the class that should be used as an initial context factory. if this value is not
specified,
com.sun.jndi.ldap.LdapCtxFactory
will be used. Most users will not need to set this value. - ldap.autoFollowReferrals
- a value of
true
indicates that LDAP referrals should be automatically followed. If this property is not set or is set tofalse
, the referral policy used is left up to the provider. A referral is an entity that is used to redirect a client's request to another server. A referral contains the names and locations of other objects. It is sent by the server to indicate that the information that the client has requested can be found at another location (or locations), possibly at another server or several servers. - ldap.connectionPoolEnabled
- a value of
false
disables LDAP connection pooling. If this property is not set, the default value istrue
.
You'll most likely want to change which usernames are authorized to login to the
admin console. By default, only the user with username "admin" is allowed to login. However,
you may have different users in your LDAP directory that you'd like to be administrators. The
list of authorized usernames is controlled via the admin.authorizedUsernames
property. For example, to let the usernames "joe" and "jane" login to the admin console:
Custom Search Filter
By default, Openfire will load all objects under the baseDN that have the attribute specified by
ldap.usernameField
. In the case that the username field is set to "uid", the search for all
users would be (uid=*)
. However, there are cases when this logic does not work.
For example, when a directory contains other objects besides users but all objects share "uid" as a unique
identifier field. In that case, you may need to specify a custom search filter using
ldap.searchFilter
. As an example, a search filter for all users with a "uid" and a "cn" value
of "joe" would be:
(&(uid={0})(cn=joe))
The {0}
value in the filter above is a token that should be present in all custom search
filters. It will be dynamically replaced with "*" when loading the list of all users or a username when
loading a single user.
Some custom search filters may include reserved XML entities such as "&". In that case, you must enter the search filter into the openfire.xml file using CDATA:
<searchFilter><![CDATA[(&(sAMAccountName={0})(|(givenName=GEORGE)(givenName=admin)))]]></searchFilter>
Custom Initial Context Factory
Some LDAP servers or application servers may require that a different LDAP initial context factory be used
rather than the default (com.sun.jndi.ldap.LdapCtxFactory
). You can set a custom initial
context factory by adding the following to openfire.xml:
Connection Pooling
The default LDAP provider (Sun's) support pooling of connections to the LDAP
server. Connection pooling can greatly improve performance, especially on
systems with high load. Connection pooling is enabled by default, but can
be disabled by setting the Jive property ldap.connectionPoolEnabled
to false
:
You should set several Java system properties to change default pool settings. For more information, see the following pages:
- https://docs.oracle.com/javase/jndi/tutorial/ldap/connect/pool.html
- https://docs.oracle.com/javase/jndi/tutorial/ldap/connect/config.html
Note that if you turn on LDAP debugging, connection pooling will not be enabled. If SSL LDAP mode is enabled, you must set a system property to enable pooling of SSL LDAP connections.
LDAP vCard Integration
The LDAP vCard provider will expose LDAP profile information as vCard data for XMPP clients that support the XMPP vCard extension. First, enable the provider:
Next, you must add mappings between LDAP fields and vCard fields in the openfire.xml file.
The vcard attributes are configured by adding an attrs="attr1,attr2" attribute to the vcard
elements. Arbitrary text can be used for the element values as well as MessageFormat style
placeholders for the ldap attributes. For example, if you wanted to map the LDAP attribute
displayName to the vcard element FN, the XML snippet would be:
<FN attrs="displayName">{0}</FN>
The vCard XML must be escaped in CDATA and must also be well-formed. It is the exact XML this provider will send to a client after stripping attr attributes and populating the placeholders with the data retrieved from LDAP. This system should be flexible enough to handle any client's vCard format. An example mapping follows.
LDAP FAQ
Can I create new users through Openfire when using LDAP?
No, Openfire treats LDAP directories as read-only. Therefore, it's not possible to create or edit users through the application.
Why is the list of usernames not sorted in the admin console when using LDAP?
Several popular LDAP servers such as OpenLDAP do not support server-side
sorting of search results. On those servers, users will appear out of order.
However, you can enable client-side sorting of search results by setting
ldap.clientSideSorting
to true in the XML configuration file.
I switched to LDAP and now cannot login to the admin console. What happened?
If you can no longer login to the admin console after switching, one of two things most likely happened:
- By default, only the username "admin" is allowed to login to the admin console. Your directory may not contain a user with a username of "admin". In that case, you should modify the list of usernames authorized to login to the admin console (see above).
- You may have set the baseDN to an incorrect value. The LDAP module recursively searches for users under the node in the directory specified by the baseDN. When the baseDN is incorrect, no users will be found.
You can also enable debugging to get more information from the LDAP module. To do this, add
<log><debug><enabled>true</enabled></debug></log>
to your
conf/openfire.xml
file. Log statements will be written to the logs/openfire.log
file.


|
cds
2.3.1
|
Allocator for aligned data. More...
#include <cds/details/aligned_allocator.h>
Data Structures | |
| struct | rebind |
Rebinds allocator to other type Q instead of T . More... | |
Public Types | |
| typedef ALIGNED_ALLOCATOR::template rebind< T >::other | allocator_type |
| Underlying aligned allocator type. | |
Public Member Functions | |
| template<typename... S> | |
| T * | New (size_t nAlign, const S &... src) |
Analogue of operator new T(src ... ) | |
| T * | NewArray (size_t nAlign, size_t nCount) |
Analogue of operator new T[nCount ]. | |
| template<typename S > | |
| T * | NewArray (size_t nAlign, size_t nCount, const S &src) |
Analogue of operator new T[nCount ]. More... | |
| void | Delete (T *p) |
| Analogue of operator delete. | |
| void | Delete (T *p, size_t nCount) |
| Analogue of operator delete []. | |
| template<typename... S> | |
| T * | Construct (void *p, const S &... src) |
Analogue of placement operator new( p ) T( src ... ) | |
Allocator for aligned data.
The class is the wrapper around user-defined aligned allocator. Template parameters:
T
is a type to allocate ALIGNED_ALLOCATOR
is an aligned allocator implementation. Default implementation is defined by macro CDS_DEFAULT_ALIGNED_ALLOCATOR from cds/user_setup/allocator.h header file.The nAlign
parameter of member function specifyes desired aligment of data allocated.
T
must be multiple of nAlign:
|
inline |
Analogue of operator new T[nCount
].
Each item of array of type T is initialized by parameter src
.


Something Happened...
Sorry, but we couldn't seem to find the page you're looking for. If you have reached this page in error please e-mail our website administrator at
<EMAIL_ADDRESS>Home page


MagnaDB is a fast and reliable ORM that makes you worry less about databases
and lets you code peacefully.
This framework packs Code-First capabilities, as well as Database-First easy
integration.  No need for
complicated migrations, nor strict database access/modification; you do
you; just make sure your models and tables match and everything will be
just fine.
You're on the No-SQL train? This is for you.
You still love SQL like the first time? This is for you.
MagnaDB is designed to be a Hybrid ORM, letting you manipulate databases
objects directly from the code, but also letting the window open databases
commands to get in. All this while keeping you safe.
In order to get started we first need to install MagnaDB to one of our
projects.
For the present example let's create a new Console Application Project
for .NET Framework. Let's name it TestMagnaDB
(or whatever you wish to name it. It's up to you).
If you're using Visual Studio, or Visual Studio Code (with the NuGet
Package Manager extension) you just need to execute the following command
in the NuGet Package Manager Console.
PM> Install-Package MagnaDB.SQLite
After you have successfully installed MagnaDB to your project, the next step is to create
some models.
We'll start with a Table Model.
A TableModel is a class that resembles a Table definition in a database,
and objects from this class are mapped to a row from this table in the database
through their properties.
Let's create a Cat model (you
can do this by creating a new Class file in your project; name it Cat); it will have
the following properties: Id, Name, Race, DateOfBirth.
It would look something like this:
using System;
using MagnaDB.SQLite;
namespace TestMagnaDB
{
public class Cat
{
public long Id { get; set; }
public string Name { get; set; }
public string Breed { get; set; }
public DateTime DateOfBirth { get; set; }
}
}
using System;
using MagnaDB.SQLite;
namespace TestMagnaDB
{
public class Cat : TableModel<Cat>
{
protected override string ConnectionString => "Data Source=testmagna.db;New=True;Version=3;";
protected override string TableName => "Cats";
protected override MagnaKey Key => this.MakeKey(cat => cat.Id);
[Identity]
public long Id { get; set; }
public string Name { get; set; }
public string Breed { get; set; }
public DateTime DateOfBirth { get; set; }
}
}
using System;
namespace TestMagnaDB
{
class Program
{
static void Main(string[] args)
{
// First things, first, let's create our Cat Table
// If a table already exists in the database, we'll
// have an exception thrown, so we'll use try/catch
try
{
Cat.CreateTable();
}
catch
{
// The table already exists.
}
// Next, we'll create a new Cat object
Cat milo = new Cat()
{
Name = "Milo",
Breed = "Persian",
DateOfBirth = new DateTime(2019, 11, 7)
};
// Let's insert Milo to the DB
milo.Insert();
// After a TableModel object is successfully inserted to the database
// it will have its Identity decorated property (if any) automatically updated
Console.WriteLine("{0}, the {1} cat's Id is {2}", milo.Name, milo.Breed, milo.Id);
// Turns out Milo's not a Persian, but an American Shorthair
// We'll fix this and update Milo's breed in the database
milo.Breed = "American Shorthair";
milo.Update();
// If we want to retrieve Milo's information from the database
// we can do so by using the Get() static method, and providing Milo's Id
// as an argument. This works for classes with Identity decorated properties.
Cat miloFromTheDB = Cat.Get(milo.Id);
Console.WriteLine("This kitten's name is {0}", miloFromTheDB.Name);
Console.WriteLine("It's a(n) {0}", miloFromTheDB.Breed);
Console.WriteLine("It was born on {0:MMM dd yyyy}", miloFromTheDB.DateOfBirth);
Console.WriteLine("{0}Press any key to continue...", Environment.NewLine);
Console.ReadKey();
}
}
}
MagnaDB View Models are models that are only used to retrieve information from
the database, meaning they are SELECT Only.
Even though Views are created from existing tables (in engines like SQL Server,
or MySql), which means they derive from Tables; in MagnaDB, TableModel is a ViewModel's
subclass (which is useful to know), and therefore
all operations done with ViewModel can be done with TableModel.
ViewModels DO NOT have to point to a VIEW in order to work.
They can perfectly point at a Table, and query one or more of
its columns with no issues.
Let's create a new Class file in our project which we previously created (sections
2., 3.) which we'll name
CatView.cs
using System;
using MagnaDB.SQLite;
namespace TestMagnaDB
{
public class CatView : ViewModel<CatView>
{
protected override string ConnectionString => "Data Source=testmagna.db;New=True;Version=3;";
protected override string TableName => "Cats";
protected override MagnaKey Key => this.MakeKey(cat => cat.Id);
[Identity]
public long Id { get; set; }
public string Name { get; set; }
public string Breed { get; set; }
}
}
...
// We'll retrieve all cats from the database using the ToList() static
// method in our CatView class; this can also be done by using table
// models (like the Cat class we previously created), but we're
// using the CatView class just for demonstration.
var aLotOfMilos = CatView.ToList();
foreach(var item in aLotOfMilos)
{
Console.WriteLine("Id: {0}, Name: {1}, Breed: {2}", item.Id, item.Name, item.Breed);
}
Console.WriteLine("{0}Press any key to continue...", Environment.NewLine);
Console.ReadKey();
}
}
}
**DISCLAIMER: The documentation provided for this section contains information
for the different MagnaDB classes, properties, methods, events, that are
considered to be relevant for its use, and not the whole project.**
| Method | Description |
|---|---|
| CreateActiveTransaction() static async |
Uses this class' connection string property to create an active transaction
to the database (which needs to be commited/backrolled, and disposed of
after being used). Returns the newly created transaction. Will throw an exception if the connection to the database fails. |
| CreateOpenConnection() static async |
Uses this class' connection string property to create an open connection.
to the database (which needs to be closed/disposed of after being used). Returns the newly created database connection. Will throw an exception if the connection to the database fails. |
| Get() static async |
Finds and retrieves an object in the database
matching the argument-provided key. Returns true if a table row is successfully inserted. Otherwise, false. This Methods triggers the GetSucceeded event when a matching result is found. This Methods triggers the GetFailed event when a matching entity is not found. Will throw an exception if the database connection fails or if the class definition doesn't correctly match to the table's definition in the database. |
| GetKey() | Returns the object's corresponding Key. |
| GetTableName() static | Returns this object's class' table name. |
| GetTableName() static | Returns this object's class' table name. |
| LoadRelationships() static async | Retrieves and assigns for an object or collection all specified foreign relations see attribute. |
| TableToIEnumerable() static async |
Maps a DataTable object's columns to a set of objects' properties and
returns an IEnumerable collection with the resulting objects. Will throw an exception if the database connection fails. |
| ToDataTable() static async |
Performs a SELECT to the Database selecting this class' properties that
match to columns of the database table. Only columns decorated with the
[DataDisplayable] will be selected by default
(this behavior can vary).SQL Clauses may be included as
arguments. A DataTable object with the results will be returned. Will throw an exception if the connection to the database fails, or if the class' definition doesn't correctly match that of the database table. |
| ToIEnumerable() static async |
Performs a SELECT to the Database selecting this class' properties that
match to columns of the database table. SQL Clauses may be included as
arguments. An IEnumerable<T> object with the results will be returned. Will throw an exception if the connection to the database fails, or if the class' definition doesn't correctly match that of the database table. |
| ToList() static async |
Performs a SELECT to the Database selecting this class' properties that
match to columns of the database table. SQL Clauses may be included as
arguments. A List<T> object with the results will be returned. Will throw an exception if the connection to the database fails, or if the class' definition doesn't correctly match that of the database table. |
| Property | Description |
|---|---|
| ConnectionString | This property returns this class' specific connection string. |
| Key | Returns this object's corresponding Key. |
| TableName | Returns the name of the table this class is mapped to in the database. |
| Event | Description |
|---|---|
| GetFailed | This event is raised when the Get method doesn't retrieve an entity from the database or runs into an exception of some sort. |
| GetSucceeded | This event is raised when the Get method succeeds in retrieving an entity from the DB. |
| SelectFailed | This event is raised when the ToList, ToIEnumerable, ToDataTable methods don't retrieve an entity from the DB or run into an exception of some sort. |
| SelectSucceeded | This event is raised when the ToList or ToIEnumerable, ToDataTable methods properly retrieve an Entity from the DB. |
| Method | Description |
|---|---|
| CreateTable() static |
Uses this class' properties to create a table in the database specified
by the class' connection string or the argument-provided connection/transaction. Returns true if the table is sucessfully created. Otherwise, false. Will throw an Exception if the table already exists, or the connection to the database fails. |
| Delete() async |
Deletes the database row with a matching key to the invoking object. Returns true if the matching table row is deleted. Otherwise, false. This Methods triggers the BeforeDelete before executing the DELETE command. This Methods triggers the DeleteSucceeded when a database row is successfully deleted. Will throw an exception if the database connection fails or if the provided Key property is not valid. |
| GroupInsert() static async |
Inserts an IEnumerable<T> collection of entities to the the database
in a single command. This is specially useful when inserting large GroupInsert
of entities. Returns true if all entities are successfully inserted. Otherwise, false. Will throw an exception if the database connection fails. |
| Insert() async |
Inserts a new row to the class' specified table by mapping the invoking
object's properties to columns in the table. Returns true if a table row is successfully inserted. Otherwise, false. This Methods triggers the BeforeInsert before executing the INSERT command. This Methods triggers the InsertSucceeded when a database row is successfully inserted. Will throw an exception if the database connection fails or if the class definition doesn't correctly match to the table's definition in the database. |
| IsDuplicated() async |
Verifies if the object is a duplicated entry by evaluating properties
decorated with the [DuplicationColumn] attribute. Returns true if a duplicate is found. Otherwise, false. Will throw an exception if the database connection fails. |
| Update() async |
Updates the database row matching this object's Key property using
each one of its non-key properties. Returns true if a database row is successfully updated. Otherwise, false. Will throw an exception if the database connection fails. |
| Event | Description |
|---|---|
| BeforeDelete | This event is raised before the Delete method is executed. |
| BeforeInsert | This event is raised before the Insert method is executed. |
| BeforeUpdate | This event is raised before the Update method is executed. |
| DeleteFailed | This event is raised when the Delete method fails to delete a row in the database. |
| DeleteSucceeded | This event is raised when the Delete method successfully deletes this entity. |
| InsertFailed | This event is raised when the Insert method fails to insert an entity to a table. |
| InsertSucceeded | This event is raised when the Insert method successfully inserts this entity. |
| UpdateFailed | This event is raised when the Update method fails to update a row in the database table. |
| UpdateSucceeded | This event is raised when the Update method successfully updates this entity. |
| Method | Description |
|---|---|
| DoQuery() static async |
Executes a SQL command against the specified database connection. Returns true if the query is successfully executed. Otherwise, false. Will throw an exception if the connection to the database fails, or the provided SQL command is not valid. |
| DoScalar() static async |
Executes a SQL query against the specified database connection
and returns a single value. Will throw an exception if the connection to the database fails, or the provided SQL query is not valid. |
| TableMake() static async |
Executes a SQL query against the specified database connection
and returns the query results inside a DataTable object. Will throw an exception if the connection to the database fails, or the provided SQL query is not valid. |
| Method | Description |
|---|---|
| GenDelete() static | Returns a string with a DELETE statement generated from the provided arguments. |
| GenFieldsEnumeration() static | Returns a string with a list of comma-separated columns/fields. |
| GenInsert() static | Returns a string with a INSERT statement generated from the provided arguments. |
| GenSelect() static | Returns a string with a SELECT statement generated from the provided arguments. |
| GenSetPairs() static | Returns a string with column/value assignments separated by commas. |
| GenUpdate() static | Returns a string with an UPDATE statement generated from the provided arguments. |
| GenValuesEnumeration() static | Returns a string with a list of formatted comma-separated values. |
| GenWhere() static | Returns a string with a WHERE clause that evaluates that the rows' values are equal to the values provided in each key/value pair. |
| GenWhereDiffered() static | Returns a string with a WHERE clause that evaluates that the rows' values are not equal to the values provided in each key/value pair. |
The following attributes let you manipulate MagnaDB's model's behavior and
implement lots of cool functionalities.
All attributes target class properties
We'll be looking at each one of them below.
...
[ColumnName("pedigree")]
public string Breed { get; set; }
...
[DataDisplayable]
public string Name { get; set; }
...
[DateTimeType(DateTimeSpecification.Date)]
public DateTime DateOfBirth { get; set; }
...
[DDLIgnore]
public decimal StockGrowthRatio { get; set; }
...
[DMLIgnore]
public HttpPostedFileBase UploadedImage { get; set; }
...
public const int PersonalInfoIndex = 1;
public const int SocialSecurityIndex = 2;
public const int PassportIndex = 3;
[DuplicationColumn(PersonalInfoIndex)]
public string FirstName { get; set; }
[DuplicationColumn(PersonalInfoIndex)]
public string LastName { get; set; }
[DuplicationColumn(PersonalInfoIndex)]
public DateTime DateOfBirth { get; set; }
[DuplicationColumn(SocialSecurityIndex)]
public string SocialSecurityNumber { get; set; }
[DuplicationColumn(PassportIndex)]
public string PassportNumber { get; set; }
// When invoking the IsDuplicated() method, a parameter for which duplication index
// will be evaluated can be provided; if -1 (default if none) is provided as
// an argument, all indexed-groups will be evaluated.
// FirstName, LastName, and DateOfBirth will be evaluated as a group, meaning that
// duplicated entities have the same full names and were born on the same day.
// Social Security Number will be evaluated individually.
// Passport Number will also be evaluated individually.
...
public class Cat : TableModel<Cat>
{
protected override string ConnectionString => "Data Source=testmagna.db;New=True;Version=3;";
protected override string TableName => "Cats";
protected override MagnaKey Key => this.MakeKey(cat => cat.Id);
[Identity]
public long Id { get; set; }
public string Name { get; set; }
public string Breed { get; set; }
public DateTime DateOfBirth { get; set; }
[ForeignRelation("<{0}.Id> = {1}.PatientId")]
public List<Checkup> Checkups { get; set; }
}
public class Checkup : TableModel<Checkup>
{
protected override string ConnectionString => "Data Source=testmagna.db;New=True;Version=3;";
protected override string TableName => "Checkups";
protected override MagnaKey Key => this.MakeKey(cat => cat.Id);
[Identity]
public long Id { get; set; }
public DateTime CheckupDate { get; set; }
public string Prescription { get; set; }
public long PatientId { get; set; }
[ForeignRelation("<{0}.PatientId> = {1}.Id")]
public Cat Patient { get; set; }
}
...
[Identity]
public long Id { get; set; }
...
[InsertIgnore]
public DateTime TimeStamp { get; set; }
...
[SelectIgnore]
public string SocialSecurityNumber { get; set; }
...
[UpdateIgnore]
public string SongId { get; set; }
MagnaDB events provide functionalities similar to database triggers.
Whether you're trying a only-code approach for your application, or your
database services are limited, and don't provide you with database triggers;
events are a perfect workaround. And, who knows? They might even provide some
extra functionalities.
The events in MagnaDB are the following:
For ViewModel<T>
using System;
using MagnaDB.SQLite;
namespace TestMagnaDB
{
public class User : TableModel<User>
{
protected override string ConnectionString => "Data Source=testmagna.db;New=True;Version=3;";
protected override string TableName => "Users";
protected override MagnaKey Key => this.MakeKey(user => user.Id);
[Identity]
public long Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public string Username { get; set; }
public string PasswordHash { get; set; }
public bool EmailIsConfirmed { get; set; }
public User()
{
BeforeInsert += User_BeforeInsert;
InsertSucceeded += User_InsertSucceeded;
}
// The sender parameter receives the invoking object for Insert(),
// Update(), and Delete() methods. For methods retrieving data the
// object(s) resulting from the queries are received as the sender
// parameter instead.
// The MagnaEventArgs contains properties relating to the database
// connection including the transaction (if any), the connection
// (if any), and/or the connection string (if any), the triggering
// method's command was executed against.
public void User_BeforeInsert(object sender, MagnaEventArgs e)
{
PasswordHash = AnExistingClassYouMayHave.HashFunctionThatIsSomewhereElse(PasswordHash);
}
// Notice how this event handler is implemented asynchronously
// In some contexts this can mean performance optimization for
// your application, so don't be afraid to try it.
public async void User_InsertSucceeded(object sender, MagnaEventArgs e)
{
await AnExistingClassYouMightAlsoHave.SendEmailConfirmationAsync(Id);
}
}
}
These are the existing exception types in MagnaDB.
| Exception | Description |
|---|---|
| DbConnectionException | Thrown when an error occurs while connecting to the database or database Server. |
| DisparityException | This exception is thrown when a SqlGenerator method is being called with incorrect key/value pairs. |
| InvalidModelException | Thrown when the existing model does not correctly match with the database table/view. |
| InvalidTableException | Thrown when a Table (or other queryable database object) doesn't exist this exception is raised |
MagnaDB is currently available for the following DB Engines:


This extension is used to send rosters, roster groups and roster entries from one XMPP Entity to another. It also provides an easy way to hook up custom logic when entries are received from other XMPP clients.
Follow these links to learn how to send and receive roster items:
JEP related: JEP-93Description
Sometimes it is useful to send a whole roster to another user. Smack provides a very easy way to send a complete roster to another XMPP client.
Usage Create an instance of
In this example we can see how user1 sends his roster to user2.
// Connect to the server and log in conn1 = new XMPPConnection(host); conn1.login(server_user1, pass1); // Create a new roster exchange manager on conn1 RosterExchangeManager rosterExchangeManager = new RosterExchangeManager(conn1); // Send user1's roster to user2 rosterExchangeManager.send(conn1.getRoster(), user2);
Description
It is also possible to send a roster group to another XMPP client. A roster group groups a set of roster entries under a name.
Usage Create an instance of
In this example we can see how user1 sends his roster groups to user2.
// Connect to the server and log in conn1 = new XMPPConnection(host); conn1.login(server_user1, pass1); // Create a new roster exchange manager on conn1 RosterExchangeManager rosterExchangeManager = new RosterExchangeManager(conn1); // Send user1's RosterGroups to user2 for (Iterator it = conn1.getRoster().getGroups(); it.hasNext(); ) rosterExchangeManager.send((RosterGroup)it.next(), user2);
Description
Sometimes you may need to send a single roster entry to another XMPP client. Smack also lets you send items at this granularity level.
Usage Create an instance of
In this example we can see how user1 sends a roster entry to user2.
// Connect to the server and log in conn1 = new XMPPConnection(host); conn1.login(server_user1, pass1); // Create a new roster exchange manager on conn1 RosterExchangeManager rosterExchangeManager = new RosterExchangeManager(conn1); // Send a roster entry (any) to user2 rosterExchangeManager1.send((RosterEntry)conn1.getRoster().getEntries().next(), user2);
Description
Since roster items are sent between XMPP clients, it is necessary to listen to possible roster entries receptions. Smack provides a mechanism that you can use to execute custom logic when roster entries are received.
Usage
In this example we can see how user1 sends a roster entry to user2 and user2 adds the received entries to his roster.
// Connect to the server and log in the users conn1 = new XMPPConnection(host); conn1.login(server_user1, pass1); conn2 = new XMPPConnection(host); conn2.login(server_user2, pass2); final Roster user2_roster = conn2.getRoster(); // Create a RosterExchangeManager that will help user2 to listen and accept the entries received RosterExchangeManager rosterExchangeManager2 = new RosterExchangeManager(conn2); // Create a RosterExchangeListener that will iterate over the received roster entries RosterExchangeListener rosterExchangeListener = new RosterExchangeListener() { public void entriesReceived(String from, Iterator remoteRosterEntries) { while (remoteRosterEntries.hasNext()) { try { // Get the received entry RemoteRosterEntry remoteRosterEntry = (RemoteRosterEntry) remoteRosterEntries.next(); // Display the remote entry on the console System.out.println(remoteRosterEntry); // Add the entry to the user2's roster user2_roster.createEntry( remoteRosterEntry.getUser(), remoteRosterEntry.getName(), remoteRosterEntry.getGroupArrayNames()); } catch (XMPPException e) { e.printStackTrace(); } } } }; // Add the RosterExchangeListener to the RosterExchangeManager that user2 is using rosterExchangeManager2.addRosterListener(rosterExchangeListener); // Create a RosterExchangeManager that will help user1 to send his roster RosterExchangeManager rosterExchangeManager1 = new RosterExchangeManager(conn1); // Send user1's roster to user2 rosterExchangeManager1.send(conn1.getRoster(), user2);


WITNESS LIST
Business & Industry Committee
April 17, 2017 - 2:30 PM or upon final adjourn./recess
For:
Flores, Anel (Self)
Gonzales, Juliana (Self; Austin Tenants' Council)
Roberts, Monica (Self)
Weaver, Lou (Self; Equality Texas)
Against:
Grisham, CJ (Self)
Saenz, Jonathan (Texas Values)
On:
Keig, Lowell (Texas Workforce Commission)
Registering, but not testifying:
For:
Armendariz, Daniel (Self; Austin Tenants' Council)
Azhar, Awais (HousingWorks Austin)
Duncan, Charlie (Self; Texas low income housing information service)
Noble, Shannon (Texas Counseling Association)
OFuret, Brad (Self; Equality Texas)
Russell, Claudia (El Paso County)
Valentine, Ryan (Texas Freedom Network)
Against:
Cahn, Adam (Cahnman's Musings)
Hettinger, Ann (Self; Center for the Preservation of American Ideaals)
Hudgens, Nicole (Self; Texas Values Action)
Wood, Cecilia (Self)
On:
Mintz, David (Texas Apartment Association)
Registering, but not testifying:
For:
Cahn, Adam (Cahnman's Musings)
Grisham, Chris (Self)
Grisham, CJ (Self; Open Carry Texas)
Grisham, Emily (Self)
Wyman, Douglas (Self; Open Carry Texas)
For:
Linares, Luis (Recording Industry Association of America)
1
WITNESS LIST
Registering, but not testifying:
For:
Valdez, Jerry (Recording Industry Association of America)
For:
Kiel, Teresa (Self; County and District Clerks Association of Texas)
For:
Robertson, Daryl (Self; Texas Business Law Foundation)
On:
Flores, Carmen (Texas Secretary of State)
Registering, but not testifying:
For:
Kuhl, John (Texas Business Law Foundation)
Mains, Chuck (Tx business law foundation)
For:
Robertson, Daryl (Self; Texas Business Law Foundation)
On:
Flores, Carmen (Texas Secretary of State)
Registering, but not testifying:
For:
Kuhl, John (Texas Business Law Foundation)
Mains, Chuck (Texas Business Law Foundation)
Against:
Cahn, Adam (Cahnman's Musings)
For:
Irving, Christopher (Publishers Clearing House)
Registering, but not testifying:
Against:
Cahn, Adam (Cahnman's Musings)
On:
Clayton, Bryant (Comptroller)
LeBas, James (AECT, TXOGA, Independent Bankers assoc of Texas, Texas Assoc
Manufacturers)
2
WITNESS LIST
On:
Self, Cristina (Comptroller)
Registering, but not testifying:
On:
Hegar, Glenn (Comptroller)
For:
Robertson, Daryl (Self; Texas Business Law Foundation)
On:
Godbey, Briana (Texas Secretary of State)
Registering, but not testifying:
For:
Kuhl, John (Texas Business Law Foundation)
Mains, Chuck (Texas business law foundation)
Against:
Cahn, Adam (Cahnman's Musings)
For:
Bass, Robert (Self)
Loper, Kenneth (Self)
Wilshusen, Fred (Self; Texas Constrction Association)
Against:
Atlas, Molly (Self)
Behner, Tami (Self)
Bocchini, Anna (Self; Equal Justice Center)
Brown, Juanita (Self)
Carr, Shelley (Self)
Drake, Lori (Fortiline Waterworks and Texas Statewide Const Credit Group)
Fleming, John (Texas Mortgage Bankers Association)
Gonzalez, Ana (Workers Defense Project)
Harwell, Greg (Texas Association of Builders)
Heasley, John (Texas Bankers Association)
McCoy Jones, Meagan (Self; McCoy's Building Supply)
Moore, Timothy (Lumbermen's Association of Texas)
Wilson, Stephen (Self)
On:
Rooney, Sean (Self; Nacm)
Rothermel, John (Stewart Title Guaranty Company and texas land title association)
3
WITNESS LIST
Registering, but not testifying:
For:
Armenta-Aguirre, Juanjose (Self)
Baxley, Jack (TEXO The Construction Association)
Boen, Ken (Self)
Chatron, Michael (AGC Texas Building Branch)
Conner, Rita (Self; ABC Central Texas)
Dover, Alicia (Associated Plumbing-Heating-Cooling Contractors of Texas)
Feller, William (Self; Associated Builders and Contractors)
Fisher, Jon (Associated Builders and Contractors of Texas)
Hewitt, Todd (Self)
Lambert, Chris (Self; Central Texas Subcontractors Association)
Lambert, Wendy (Self; Central Texas Subcontractor Association)
Matula, David (Self; ABC Central Texas)
Taylor, Corey (Self; Associated Builders and Contractors in Central Texas)
Thoden, Phil (Austin AGC)
Tredway, CJ (Independent Electrical Contractors of Texas)
White, Michael (Texas Construction Association)
Against:
Aguilar, Leonard (Texas Building Trades)
Beinke, Allen (Texas Aggregates and Concrete Association)
Bowen, Jessica (Self)
Cawthon, Denise (Self)
Chiodo, Dana (International Council of Shopping Centers (ICSC))
Engel, Brian (Self)
Espinosa, Luz (Self)
Hewtty, Stephanie (Texas Crushed Stone Co.)
Hoy, Sandy (Texas Apartment Association)
Jones, Neal Buddy (Perry Homes)
Kercheval, Todd (Texas Affiliation of Affordable Housing Providers)
Lara, Rene (Texas AFL-CIO)
Lee, Randy (Stewart Title Guaranty Company)
Lee, Randy (Stewart Title Guaranty Company)
Macias, Gloria (Self)
Martin, Edward (Self; Greater Houston Builders Association)
Norman, Scott (Texas Association of Builders)
Parenteau, Julia (Texas Association of Realtors)
Pate, Gardner (Texas Building Owners and Managers Association)
Quill, Kathleen (Self; National Assoc of Credit Management Gulf States)
Ray, Allison (Texas crushed stone company)
Rice, Chuck (Texas Land Developers Asso.)
Scurlock, Stephen (Independent Bankers Association of Texas)
Short, Jim (Houston real estate council)
Stewart, Scott (Texas Chemical Council)
4
WITNESS LIST
On:
Flores, Carmen (Texas Secretary of State)
Lancaster, David (Texas Society of Architects)
For:
Van Arsdale, Corbin (AGC-Texas Building Branch)
Registering, but not testifying:
For:
Aguilar, Leonard (Texas Building Trades)
Baxley, Jack (TEXO The Construction Association)
Chatron, Michael (AGC Texas Building Branch)
Fisher, Jon (Associated Builders and Contractors of Texas)
Gonzalez, Ana (Workers Defense Project)
Lara, Rene (Texas AFL-CIO)
Marek, Stan (Self; Associated General Contractors)
Thoden, Phil (Austin AGC)
Warren, Gary (Central South Carpenters Regional Council)
White, Michael (Texas Construction Association)
Against:
Cahn, Adam (Cahnman's Musings)
Parker, Blaire (San Antonio Water System)
For:
Perkins, Val (Texas Community Association Advocates)
For:
Ariza, Gilbert (Tri Dal LC ESOP company)
Hart, Michael (Self)
Horn, Tracy (American Medical ID Inc)
Russell, Rick c (American medical id)
Sandoval, Francisca (Self)
Registering, but not testifying:
For:
Andres, Susan (Self)
Burnham, Anna P (Self; RFD & Associates, Inc.)
Carpenter, Andrew (Self)
Childress, Robert (Self)
Clinton, William (Self)
Cruz, Heidi (Self)
Day, Lauren (Self)
DeWitt, Cathy (Texas Association of Business)
5
WITNESS LIST
For:
Dietz, Erik (Self)
Evans, Jack (Self)
Evans, Justin (Self)
Flynn, Megan (Self)
Gallegos, Nathan (Self)
Glover, Scott (Self)
Gregory, Paul (Self; Tri Dal LLC ESOP company)
Grzywa, Sarah (Self)
Harmon, Edward (Self)
Hart, Julianne (Self)
Hart, Vanessa (Self)
Hejl, Charles (Self)
Horn, Oscar (Self)
Hunt, Dean (Self)
Jauregui, Elizabeth (Self)
Klock, Bill (Self)
Leveridge, Leah (Self)
Lynch, Tom (Self)
Makar, John (Self)
McGauley, Daniel (Self)
Moyers, Robert (Self)
Myers, Winston (Self)
Pawlik, Jim (Self; EEA Consulting Engineers an ESOP Company)
Phillips, Wes (Self)
Platt, Andrew (Self)
Price, Monte (Self)
Richardson, Danny (Self)
Rosebaugh, Joann (Self)
Schmitt, Todd (Self)
Shoemake, Jeremy (Self)
Simler, Bryan (Self)
Smith, Jeremy (Self)
Smith, Kathleen (Self)
Stark, Brad (Self)
Stewart, William (Self)
Stinson, Burney (Self)
Stinson, Morgan (Self)
Swinbank, Jennifer (Self)
Swinbank, Sam (Self)
Thiery, Shannon (Self)
Thompson, Tyrone (Self)
Troberman, Rick (Self)
Valasek, Alyce (Self)
Winn, Jared (Self)
Zapata, Javier (Self)
6
WITNESS LIST
7


Had a crummy day? A fantastic day? A special day? But have no one you want to share your story with in real life? Look no further! We are a group of highly-skilled secret holders. That's right -- you send your secrets to us anonymously, and we will keep them for you, safe and sound.
Want more than just an outlet to send your raves or misgrievings? We also specialize in giving incredibly unhelpful advice, and have a response rate of 83%***! We can't promise quality answers, but hey, it's free! Can't beat that, right?
***Number derived from pure imagination
We practice what we preach. Your secrets will be safe with us. We don't judge (unless you want us to), and we don't ask for any personal information. Just shoot us an email and ask for a response if you would like one. Your identity is hidden from everyone, including us, so there's nothing to worry about.  Here are some testimonials from our super secret sharers:
"Monkey Business is such a simple way to vent! No sign-ups, no personal information, just an email (I made a new one just in case) and that's it! I'm starting to like my job now that I have someone to complain to."
"They do keep your secrets and will reply if you ask them to. Good service, replies can be honest, not for the fainthearted."
"It's like having an anonymous pen pal 83% of the time. For a private person with no friends, this is pretty great."
Interested? Shoot us an email, and wait for a reply (but don't expect one, because let's be honest, we're can be pretty lazy).
monkeybusiness@notreal.com


Photos: November full moon, aka the beaver moon, lights up the night sky 13 Nov 2019, 09:05 by EndPlay The full moon rises over the Selimiye Mosque in Edirne, Turkey, on November 12, 2019. (Photo by Gokhan Balci/Anadolu Agency via Getty Images)Photograph by Anadolu Agency A passenger jet from Charlotte Douglas International Airport travels between the Earth and a near full Beaver Moon on Monday evening, Nov. 11, 2019, as seen from Remount Road in Gastonia, North Carolina. (Mike Hensdill/The Gaston Gazette via AP)Photograph by Mike Hensdill The moon rises behind the Manhattan Bridge and the Brooklyn Bridge on November 11, 2019, in New York City. (Photo by Gary Hershorn/Corbis via Getty Images)Photograph by Gary Hershorn A bird passes near the full on the auspicious day of Kartik Purnima (full moon day) in the Nagaon District of Assam, India, on Nov. 12, 2019. (Photo by Anuwar Ali Hazarika / Barcroft Media via Getty Images)Photograph by Barcroft Media The full moon rises in the evening hours over Gaza City, Gaza, on November 12, 2019. (Photo by Ashraf Amra/Anadolu Agency via Getty Images)Photograph by Anadolu Agency The November 2019 full moon rises through clouds over the village of Kornelimunster near Aachen, Germany, on November 12, 2019. (Photo by Wassilios Aswestopoulos/NurPhoto via Getty Images)Photograph by NurPhoto The full moon is seen through illuminated decorations marking the Hindu, Sikh and Jain festival called Kartik Purnima, or Full Moon Day, at Siddhpur, India, on November 12, 2019. (Photo by SAM PANTHAKY/AFP via Getty Images)Photograph by SAM PANTHAKY The full moon is seen through illuminated decorations marking the Hindu, Sikh and Jain festival called Kartik Purnima, or Full Moon Day, at Siddhpur, India, on November 12, 2019. (Photo by SAM PANTHAKY/AFP via Getty Images)Photograph by SAM PANTHAKY The moon rises over the North Portico of the White House in Tuesday, Nov. 12, 2019, in Washington. (AP Photo/Steve Helber)Photograph by Steve Helber The full moon is seen above an illuminated Gurdwara on the occasion of Gurpurab, the 550th birth anniversary of Sikhism founder Guru Nanak Dev, at New Chandigarh in Punjab state, India, on Nov. 12, 2019. (VIJAY MATHUR/AFP via Getty Images)Photograph by VIJAY MATHUR


{% extends "base_template.html" %} {% block bodyContent %} {% include 'navbar.html' %}
Allows multiple developers around the globe to Collaborative and Connect
Allows users to run the code in any of our supported languages with a click of a button


You are viewing an historical archive of past issues. Please report new issues to the appropriate project issue tracker on GitHub.
Issues
| # | Summary | Product | Status | Kind | When |
|---|---|---|---|---|---|
| 256 |
REQUEST: Fast user switching without a menu extra |
WinSwitch | closed | feature request | Created , updated |
| 255 |
REQUEST: Hot key to pop up Global Menu |
Synergy Advance | closed | feature request | Created , updated |
| 254 |
Rating does not display when not exactly a multiple of 20 |
Synergy Advance | open | bug | Created , updated |
| 253 |
iTunes videos break album art display |
Synergy | open | bug | Created , updated |
| 252 |
Synergy hangs (shown as "Not Responding") |
Synergy | open | bug | Created , updated |
| 251 |
REQUEST: Option to display Floater on Play |
Synergy | open | feature request | Created , updated |
| 250 |
REQUEST: Show Internet radio tracks in the "Recent tracks" listing |
Synergy | open | feature request | Created , updated |
| 249 |
REQUEST: Ability to completely disable Instant Message component |
Synergy Advance | open | feature request | Created , updated |
| 248 |
REQUEST: Better Growl support |
Synergy Advance | closed | feature request | Created , updated |
| 247 |
REQUEST: Help button and feedback icon when entering license code |
Synergy | open | feature request | Created , updated |


Momoland's JooE selected as endorsement model of Korean burger franchise 'Mom's Touch'
by beansssOn November 21, South Korean burger and chicken franchise 'Mom's Touch' announced Momoland's JooE as their newest endorsement model!
JooE will be working alongside YouTuber Yoon Jjoo Kkoo to promote delicious 'Mom's Touch' menu items with her signature, bright energy. Fans can look forward to new 'Mom's Touch' CFs featuring JooE beginning this November!


Cheat Sheet: Everything you need to know about Disney+
by Sam BrooksSam Brooks gives you the lowdown on Disney+, the exhaustive streaming service launching today.
What on this good green world is Disney+?
Disney+ is a streaming service run by, as you might expect, Disney. If you need someone to explain what Disney is to you, then this service probably isn’t for you. Stick to whatever culture you currently consume, you wild person living in a cave.
What’s on it?
Over 600 films and 7000 episodes of television, with more being added in the future.
That’s a lot!
It is, and the breadth of it is the main selling point. Not only does it include almost every Disney film ever made, it includes a huge amount of the content made by the companies that Disney now owns.
So, you know. Fox, the people who make The Simpsons–
Holy shit, so I can watch every episode of The Simpsons?
Well, you can watch whatever they haven’t accidentally cropped out. But I’m not finished.
Disney also own Marvel. And Pixar. And National Geographic. And Star Wars. So a great deal of the film and television made by those companies is coming to Disney+ too. Later this week, we’ll have a list of the best and weirdest stuff coming to the service.
How much is it?
It’s $9.99 a month or $99 for a year, which is objectively a lot of content for not a lot of money. There’s a seven day trial as well, in case you’re not convinced to shell over the amount of money it costs for one and a half cups of coffee.
Implausibly, I already own all 600 films and 7000 episodes of television that will be on Disney+. What’s the point of me subscribing?
Hello, implausible person! Well, you’ll be delighted to know that Disney+ is also releasing original content, with a lot available upon release (that is, right now) and more rolling out in the coming years.
Okay, so what’s that original content?
The original stuff available upon release includes:
The Mandalorian, a Star Wars spin-off set between Episode VI and Episode VII, revolving around a Mandalorian bounty hunter. We review the series here.
High School Musical: The Musical: The Series, an absolutely bonkers idea for a show, set at the real-life school where the original Disney Channel film was shot, following that school doing their first ever production of ‘High School Musical’. It’s meta, and looks to be wild.

Forky Asks a Question, ten short films revolving around the breakout spork from Toy Story 4.
Encore!, a show where Kristen Bell brings together former castmates of a high school musical (not to be confused with High School Musical) and tasks them to re-create their original performance in what promises to be absolute catnip to your musical theatre nerd friends.
Noelle, a Holiday comedy that revovles around Kris Kringle’s daughter. Bill Hader and Anna Kendrick star.
There’s also Spark Shorts (a cool new short film series from more experimental animators), Marvel’s Hero Project (a branded feel-good show about what changes kids are making in communities), The Imagineering Story (a documentary chronicling the 65+ history of Walt Disney, probably sans anti-semitism) and The World According to Jeff Goldblum (Goldblum asks complicated questions about basic things like sneakers).
I’m not convinced! What’s coming in the future?
Okay, you asked for it. A bunch of spinoffs of The Avengers, including Loki (starring Loki), WandaVision (Scarlet Witch and The Vision), The Falcon and the Winter Solider (The Falcon and the Winter Soldier) and Hawkeye (Hawkeye). These are not imaginatively titled TV shows.
The things that I’m most excited about are: Lizzie McGuire (a reboot-sequel of the Disney Channel classic featuring all of the original cast sans Gordo), Love Simon (a sequel to the Jennifer Garner sobfest of 2018) and Diary of a Female President (a feel-good Gina Rodriguez-produced show about a Cuban Girl who dreams of being President).
There’s also a bunch of animated stuff your kids will love, including Chip and Dale (not to be mistaken for Chip and Dale), and a new season of the Clone Wars show.
I’m kind of a nerd about this stuff – what kind of functionality does the service have?
Hello, nerd! A subscription to Disney+ enables you to stream on four devices simultaneously, should you want to watch every Marvel movie featuring Gwyneth Paltrow at the same time, which is the only reason I can fathom wanting to do so.
It also allows downloads on up to TEN devices, which range from the device you are reading this on to your actual television screen. On that note, the app is also available on pretty much every device you can watch video on.
There are also, obviously, no commercials. Remember that way that television networks used to support their revenue?
Can I watch The Avengers on it?
Join us and help us hire new
political & climate reportersFind Out More
No, you cannot watch the 60s show featuring Diana Rigg on it. I’m sorry.
I meant the Marvel one.
Oh, yeah. All those films are on it. Go wild.
You can sign up to Disney+ right here.


ODRL representations of public licenses
Introduction
The following table maps different efforts to describe licenses, and in some cases represent their contents in a structured forms, using different formats --ODRL among them
- official - Licenses encoded by the publishers of the license (RDF ODRL)
- rdflicense - First mapping effort to ODRL (RDF ODRL)
- spdx - General catalogue of licenses (JSON)
- dalicc - Licenses encoded in the framework of the DALICC project (RDF ODRL)
- metashare - Licenses used in the domain of language resources (RDF ODRL)
| Id | Title | Structured Interpretations |
|---|


Psalms 40:6
Sacrifice and offering thou didst not desire; mine ears hast thou opened: burnt offering and sin offering hast thou not required.