|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object atg.deployment.server.Target
A simple interface for managing a deployment target and deployments to that target.
Targets are generated when the deployment topology is initialized. Instances of Targets are obtained from the DeploymentServer via the getTargets(), getTargetByName(), and getTargetByID() methods.
Two lists of the agents that make up a target are provided. The method getAgents() returns all agents that make up the target. The method getResponsibleAgents() only returns those agents that have deployment responsibilities.
The Target class is the conceptual single entity formed by the group of agents that define the target. As a whole, the Target can be queried through the following methods:
Access to deployments associated with a target is available through several useful methods:
A Project can be deployed to a target before it has been checked in and rendered immutable. This is a handy way of viewing a Project's changes before making them final and visible to other users to build on. If such a Project must be removed from the target, there are two methods to do so, revert() and deployRevert(). Both of these methods disassociates the Project from the target.
Some utility methods are also available but should be used carefully or not at all, as they are not considered part of the standard deployment process:
DeploymentServer
,
Status
,
Deployment
,
AgentRef
| Field Summary | |
static java.lang.String |
CLASS_VERSION
Class version string |
| Method Summary | |
void |
criticalReset(java.lang.String pInitiatorID)
Does a "hard" reset of the target and the target agents. |
Deployment |
deployInitial(boolean pForceDeployment,
java.lang.String pInitiatorID)
Deploys the initial state of the target. |
Deployment |
deployPrevious(java.lang.String pProjectID,
boolean pForceFull,
java.util.Calendar pDeployTime,
java.lang.String pInitiatorID)
See deployPrevious . |
Deployment |
deployPrevious(java.lang.String pProjectID,
boolean pForceFull,
java.util.Calendar pDeployTime,
java.lang.String pInitiatorID,
int pStrictFileOps,
int pStrictRepoOps)
Performs a "back deployment" to the Target returning it to the state when the given Project was deployed and checked-in. |
Deployment |
deployProjects(java.lang.String[] pProjectIDs,
boolean pForceFull,
java.util.Calendar pDeployTime,
java.lang.String pInitiatorID)
See deployProjects . |
Deployment |
deployProjects(java.lang.String[] pProjectIDs,
boolean pForceFull,
java.util.Calendar pDeployTime,
java.lang.String pInitiatorID,
int pStrictFileOps,
int pStrictRepoOps)
Deploys the specified Projects to this target. |
Deployment |
deployRevert(java.lang.String pProjectID,
boolean pForceFull,
java.util.Calendar pDeployTime,
java.lang.String pInitiatorID)
Functions the same as deploy() except that revert() is called first and the result is deployed to the target. |
AgentRef[] |
getAgents()
The list of all deployment agents that make up the target. |
Status[] |
getAgentStatuses()
A convenience method that queries and returns the status of each agent in the target. |
int |
getCountOfDeployedProjects()
Gets the count of projects merged to this target. |
int |
getCountOfPendingDeployments()
Find the count of pending(Queued and Scheduled) deployments for this targets. |
int |
getCountOfQueuedDeployments()
Find the count of queued deployments for this targets |
int |
getCountOfScheduledDeployments()
Find the count of pending deployments for this targets |
Deployment |
getCurrentDeployment()
The current deployment for this Target. |
Project[] |
getDeployedProjects(int pStartIndex,
int pCount)
Gets the list of projects merged to this target. |
java.lang.String |
getDescription()
A brief description of this target, any old information that is desired. |
java.util.Map |
getDestinations()
Get a Map of destination repository path or host:port names, keyed by the source repository or VFS nucleus path. |
java.lang.String |
getID()
The repository ID of this Target. |
Project |
getLastDeployedProject()
Returns the Project that was last successfully deployed to this target. |
java.lang.String |
getName()
The name given this target. |
Deployment |
getNextDeployment()
A convenience method that returns the next logical deployment to run. |
Deployment[] |
getPendingDeployments(int pStartIndex,
int pCount)
Returns the list of pending Deployments as an array ordered by schedule of execution. |
Deployment[] |
getQueuedDeployments(int pStartIndex,
int pCount)
Returns the list of QUEUED Deployments as an array ordered by schedule of execution. |
AgentRef[] |
getResponsibleAgents()
Deployment agents in this target that have deployment responsibilities. |
Deployment[] |
getScheduledDeployments(int pStartIndex,
int pCount)
Returns the list of SCHEDULED Deployments as an array ordered by schedule of execution. |
Status |
getStatus()
Returns the status of this Target. |
void |
haltQueue()
Halts handling of pending deployments on this target. |
Status[] |
initializeAgents()
Runs through the list of agent statuses and tries once again to initialize any uninitialized agent transports. |
Status[] |
initializeAgents(boolean pOnlyResponsibles)
Runs through the list of agent statuses and tries once again to initialize any uninitialized agent transports. |
boolean |
isAccessible()
Whether or not this target is currently accessible. |
boolean |
isDeployable()
Whether or not this target is capable of being deployed to. |
boolean |
isHalted()
Whether or not this target's deployment queue is halted. |
boolean |
isIncrementallyDeployable()
Whether or not this target is capable of receiving an incremental deployment or if a full deployment is necessary. |
boolean |
isInitializationSource()
Returns whether or not this Target is currently being used as an initialization source for another Target. |
boolean |
isInitializing()
Returns whether or not this Target is currently initializing due to a Topology change. |
void |
resumeQueue()
Resumes handling of pending deployments on this target. |
void |
revert(java.lang.String pProjectID,
java.lang.String pInitiatorID)
Prepares the target to revert the prior deployment of an open Project. |
java.lang.String |
toString()
Returns this Target as a String. |
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
| Field Detail |
public static java.lang.String CLASS_VERSION
| Method Detail |
public java.lang.String getID()
public java.lang.String getName()
public java.lang.String getDescription()
public AgentRef[] getAgents()
public AgentRef[] getResponsibleAgents()
public java.lang.String toString()
public Status[] initializeAgents()
public Status[] initializeAgents(boolean pOnlyResponsibles)
pOnlyResponsibles
- when set to true only agents with deployment responsibilities are initialized
public boolean isHalted() throws DeploymentException
Deployments can still be scheduled via deploy(), but no deployments will be executed automaticaly by the queue as long as the queue is halted.
DeploymentException
- if there is an error discerning whether or not the queue is halted (i.e. communication/repository errors)public void haltQueue() throws DeploymentException
Deployments can still be scheduled via deploy(), but no deployments will be executed automaticaly by the queue as long as the queue is halted.
DeploymentException
- if there is an error restarting the queue is halted (i.e. communication/repository errors)public void resumeQueue() throws DeploymentException
Deployments can still be scheduled via deploy(), but no deployments will be executed automaticaly by the queue as long as the queue is halted.
DeploymentException
- if there is an error restarting the queue is halted (i.e. communication/repository errors)public boolean isInitializing() throws DeploymentException
DeploymentException
- is anything goes wrong, reading the status from the databasepublic boolean isInitializationSource() throws DeploymentException
DeploymentException
- is anything goes wrong, reading the status from the databasepublic boolean isAccessible()
public boolean isDeployable()
This method does not comment on whether or not a target can schedule or queue deployments, only whether or not a deployment can currently run against the target. Thus the usefulness of this method is limited.
Note: Calling this method will also call isAccessible() internally.
public boolean isIncrementallyDeployable() throws DeploymentException
NOTE: If a required agent is inaccessible, a deployment exception is thrown rather than making this method return a potentially false negative. Whether or not an agent is required depends on whether or not the agent has deployment responsibilities and whether or not allowMissingNonEssentialAgents is true on the DeploymentServer.
DeploymentException
- if a required agent is inaccessiblepublic Status getStatus()
public Status[] getAgentStatuses()
public Deployment getCurrentDeployment() throws DeploymentException
DeploymentException
- if there is an error accessing the deployment repository - see the wrapped exceptionatg.deployment.DeploymentException
public Deployment getNextDeployment() throws DeploymentException
DeploymentException
public int getCountOfPendingDeployments() throws DeploymentException
DeploymentException
public Deployment[] getPendingDeployments(int pStartIndex, int pCount) throws DeploymentException
The list of pending Deployments includes scheduled Deployments whose scheduled execution time has not yet come to term as well as all Deployments that are queued for immediate execution. Each Deployment's Status indicates whether the Deployment is scheduled or waiting to run.
The list of pending Deployments does *NOT* include the current running Deployment nor any completed Deployments.
DeploymentException
public int getCountOfQueuedDeployments() throws DeploymentException
DeploymentException
public Deployment[] getQueuedDeployments(int pStartIndex, int pCount) throws DeploymentException
to get a list of all pending deployments use @link getPendingDeployments()
The list of queued (@see Status.WAITING_QUEUED) deployments does *NOT* include the current running Deployment nor any completed Deployments.
DeploymentException
public int getCountOfScheduledDeployments() throws DeploymentException
DeploymentException
public Deployment[] getScheduledDeployments(int pStartIndex, int pCount) throws DeploymentException
to get a list of all pending deployments use @link getPendingDeployments()
@see Status.WAITING_SCHEDULED
DeploymentException
public Project getLastDeployedProject() throws DeploymentException
DeploymentException
- if the target cannot be accessed, if
there is a mis-match between agents of which project was
deployed last, or if there were problems finding the Project
refered to by the targetpublic int getCountOfDeployedProjects() throws DeploymentException
DeploymentException
public Project[] getDeployedProjects(int pStartIndex, int pCount) throws DeploymentException
pStartIndex
- pCount
-
DeploymentException
public java.util.Map getDestinations() throws DeploymentException
DeploymentException
public Deployment deployInitial(boolean pForceDeployment, java.lang.String pInitiatorID) throws DeploymentException
When a target is first created it must be initialized properly. The method deployInitial() serves both as a means of performing this initialization as well re-deploying the targets initial state before any other deployments were made to the target.
deployInitial() is called automatically when the topology is initialized and a target is first created.
In the case where data has been exported from the target and imported into the publishing server, there may be little point in deploying the data back out to the target. Though this might be desirable just to insure that what is in the publishing server is exactly what is on the target, some may prefer another option. The parameter pForceDeployment when set to true will initialize the target on the server as normal and perform a full deployment of the data back to the target. When pForceDeployment is set to false, instead of deploying the data, the target will simply be flagged with the necessary information to appear as if a deployment had occured. This "flagging" of the target could save time by skipping an unnecessary full deployment and allowing incremental deployments as soon as the target is finished initializing.
NOTE: If this method is not called, or if the deployment scheduled by this method fails, any standard deployment of a project will also peform the necessary initializations. This method is simply provided in the case where target initializaton is desirable before any projects exist.
pForceDeployment
- true if a deployment should be performed, false if agents should be "flagged" as deployed topInitiatorID
- an identifying string of "who" is effectively performing this action
DeploymentException
Deployment
public Deployment deployProjects(java.lang.String[] pProjectIDs, boolean pForceFull, java.util.Calendar pDeployTime, java.lang.String pInitiatorID, int pStrictFileOps, int pStrictRepoOps) throws DeploymentException
Specifically, deployProjects() schedules or queues the deployment of a list of Projects. This deployment is considered a "standard" or "forward" deployment in that the Projects deployed should either be checked-in and never before deployed to this Target, not yet checked-in, or a mixture of the two. Projects that are not checked-in can be deployed and re-deployed without problem till they are checked-in. If this method is called with a project that has been checked-in and already deployed to this Target then a DeploymentException will be thrown (see deployPrevious()).
NOTE: if this method is called twice with the same valid Project, two separate deployments will be scheduled. This is okay. If the first deployment succeeds then the second one will be ignored when its deploy time is reached. This is because the deployment system knows that the second deployment was intended as a forward deployment, a forward deployment that has already occured.
If pForceFull is true, a full deployment will be forced, otherwise an incremental deployment will be used if possible.
If a deploy time is specified, the deployment will be scheduled for execution at the specified time. If no deploy time is provided, the deployment will either run immediately or be queued behind any deployments already queued to run immediately. As scheduled deployments become ready to run, they get queued behind existing deployments that are already queued to run immediately.
Use the Deployment.runNext() method to push any deployment to the head of the list of pending deployments, thus making it the next deployment to run. Any currently running deployment will be allowed to finish (or can be stopped). Calling runNext() on a scheduled deployment will supercede the scheduling request.
An optional string may be passed in to identify the initiator of this new deployment. The information is associated with the deployment history entry for this action and is mainly meant as a convenience for UIs. If calling code does not have a "user" then an identifying tag for the call would be appropriate.
pProjectIDs
- the list of Project IDs (Project.getId()) for the Projects to deploy to the targetpForceFull
- whether or not to require the deployment to be a full deploymentpDeployTime
- a specific time to run the deployment, or NULL if run as soon as possiblepInitiatorID
- an identifying string of "who" is effectively performing this actionpStrictFileOps
- an override to the global setting in /atg/deployment/DeploymentManagerpStrictRepoOps
- an override to the global setting in /atg/deployment/DeploymentManager
DeploymentException
Deployment
public Deployment deployProjects(java.lang.String[] pProjectIDs, boolean pForceFull, java.util.Calendar pDeployTime, java.lang.String pInitiatorID) throws DeploymentException
deployProjects
. This method doesn't specify strict file
or repository update operations and will default to global settings in
/atg/deployment/DeploymentManager
.
pProjectIDs
- pForceFull
- pDeployTime
- pInitiatorID
-
DeploymentException
public Deployment deployPrevious(java.lang.String pProjectID, boolean pForceFull, java.util.Calendar pDeployTime, java.lang.String pInitiatorID, int pStrictFileOps, int pStrictRepoOps) throws DeploymentException
The deployment of Projects to a Target produces a timeline for the Target. The list of deployed Projects serves as a series of markers indicating what content appeared on the Target and when. The deployPrevious() method is used with a Project from the list of deployed Projects to temporarily return a Target to the state when the Project was previously deployed. This is a useful feature if a target must be quickly reverted to some arbitrary point in its history until some emergency change can be prepared and deployed.
Back deploying a Target does not delete any of the Projects that were deployed after the Project back-deployed to. Such Projects continue to exist in the Publishing server, are still associated with the Target in the order they were deployed, but have merely been temporarily removed from the Target. Think of a back deployment simply as a quick re-winding of a tape cassette. Once back-deployed, the next new Project deployed to the Target will re-deploy all the "rewound" Projects. Calling deployPrevious() effectivly winds the deployment tape cassette to any point in its deployment history using the ordered list of previously deployed Projects.
If pForceFull is true, a full deployment will be forced, otherwise an incremental deployment will be used if possible.
If a deploy time is specified, the deployment will be scheduled for execution at the specified time. If no deploy time is provided, the deployment will either run immediately or be queued behind any deployments already queued to run immediately. As scheduled deployments become ready to run, they get queued behind existing deployments that are already queued to run immediately.
Use the Deployment.runNext() method to push any deployment to the head of the list of pending deployments, thus making it the next deployment to run. Any currently running deployment will be allowed to finish (or can be stopped). Calling runNext() on a scheduled deployment will supercede the scheduling request.
An optional string may be passed in to identify the initiator of this new deployment. The information is associated with the deployment history entry for this action and is mainly meant as a convenience for UIs. If calling code does not have a "user" then an identifying tag for the call would be appropriate.
pForceFull
- whether or not to require the deployment to be a full deploymentpDeployTime
- a specific time to run the deployment, or NULL if run as soon as possiblepInitiatorID
- an identifying string of "who" is effectively performing this actionpStrictFileOps
- an override to the global setting in /atg/deployment/DeploymentManagerpStrictRepoOps
- an override to the global setting in /atg/deployment/DeploymentManager
DeploymentException
Deployment
public Deployment deployPrevious(java.lang.String pProjectID, boolean pForceFull, java.util.Calendar pDeployTime, java.lang.String pInitiatorID) throws DeploymentException
deployPrevious
. This method doesn't specify strict file
or repository update operations and will default to global settings in
/atg/deployment/DeploymentManager
.
pProjectID
- pForceFull
- pDeployTime
- pInitiatorID
-
DeploymentException
public Deployment deployRevert(java.lang.String pProjectID, boolean pForceFull, java.util.Calendar pDeployTime, java.lang.String pInitiatorID) throws DeploymentException
Projects that have been checked-in cannot be reverted from a target. Passing such a Project into this method will result in a DeploymentException.
An optional string may be passed in to identify the initiator of this revert. The information is associated with the deployment history entry for this action and is mainly meant as a convenience for UIs. If calling code does not have a "user" then an identifying tag for the call would be appropriate.
pProjectID
- Project.getId() from the Project to revert from the targetpForceFull
- whether or not to require the deployment to be a full deploymentpDeployTime
- a specific time to run the deployment, or NULL if run as soon as possiblepInitiatorID
- an identifying string of "who" is effectively performing this action
DeploymentException
Deployment
public void revert(java.lang.String pProjectID, java.lang.String pInitiatorID) throws DeploymentException
The parent versions of assets modified in the Project are re-associated with the target rather than the modified versions of the assets. No deployment is performed, only the necessary work to revert the target. The revert of the Project *cannot* be deployed at this point, but will be picked up with the future deployment of any previously undeployed Project. (Confusing, isn't it.) This methodology is useful when a Project *must* release asset locks but cannot schedule and wait for a deployment of the reverted project to complete.
Calling Target.deploy() with the reverted project will simply re-deploy the modified assets of the Project to the Target. To revert *and* deploy a Project the deployRevert() method must be called.
Projects that have been checked-in cannot be reverted from a target. Passing such a Project into this method will result in a DeploymentException.
NOTE: Calling this method will not release any asset locks directly. To attempt asset lock release, Project.releaseAssetLocks() must be called after Target.revert(). This is equivalent, more or less, to calling Project.revertDeployments().
An optional string may be passed in to identify the initiator of this revert. The information is associated with the deployment history entry for this action and is mainly meant as a convenience for UIs. If calling code does not have a "user" then an identifying tag for the call would be appropriate.
pProjectID
- Project.getId() from the Project to revert from the targetpInitiatorID
- an identifying string of "who" is effectively performing this action
DeploymentException
Deployment
,
Project
public void criticalReset(java.lang.String pInitiatorID)
pInitiatorID
- an identifier of who is requesting the reset
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |


Food, Chinatown and Lightshow!
Singapore is not only renowned for its garden but also for its food. Since it’s a
highly multicultural city there’s a great variety of food available. One of the best
place to have a taste of all that food is of course in a food court.
Now I know you have the vision of a food court in north america with a circle of
merchant and tables in the middle of the place or maybe you have the chaotic vision
of a thai food court. Well Singapore, as a good multicultural city/country, is a mix
of both. Endless maze of merchant and tables in the middle? I think it was the
middle. We got lost a few time in there since it’s a few story high… But that’s
where I tasted the most amazing taiwanese fish and the best dumpling I have ever
tasted, to be fair the guy had award for his dumpling…
side note they costed 5$
for a bowl.. that’s what I call a bargain!
Once we visited the garden by the bay, we learned that the “super tree” (huge metal
tree) were part of a
light show at night.
At this point, we decided the beautiful chinatown and we would finish the day with
the light show.
Fist Chinatown,
it’s one of my all time favorite due to a really odd thing.
They have perfume shops, but the shady type that sells boxes and boxes of different
perfumes. What actually made my day was that they selled my perfume, which is
discontinued in Canada….And thanks to Singapore Chinatown I can postpone the reality
of needing to change the perfume I love.
Now the light show! Describing it is a complex task, it’s a light and sound show
featuring the gigantic “Super tree”. It’s beautiful in itself but the best part in
it is that to watch the show without a torticoli. You need to lay down in the middle
of the parc by a tree! So once the show start you just see hundred of people lie
down in the middle of a public parc.
After the exciting day in Chinatown and the amazing light show, we went back to the
botanic garden. Now you may be wondering how did we get around? Is everything so
close that you walk? But she hasn’t complained about the heat yet? That’s because
Singapore have a subway that covers most of the city. It goes to pretty much all of
the main tourist attraction and has A.C. So we just bought a
tourist travel
card and we were good to go
(Here’s more information
about public transport in Singapore) For our second day at the botanic
garden we finished wandering around and we visited the orchid garden (It cost 5
singapore). In this garden, theres orquidea over orquidea over orquidea. They breed
different type of orquidea and they also created new ones all the time.
With this flowery experience, our stay in Singapore ended and it was time to leave
for indonesia. But to get there we wanted to mix things up a little and decided to
leave by boat.


Disney+ will fix The Simpsons’ joke-destroying 16:9 aspect ratio starting in 2020
4:3 is coming back
by Jay PetersWith the launch of Disney+ this week, many fans were excited to have easy access to all 30 seasons of The Simpsons — only to find to their chagrin that their original 4:3 aspect ratio had been discarded for a widescreen 16:9 aspect ratio, cropping out many visual gags entirely. But now, Disney says that it will be fixing this in “early 2020” by making an additional version of the first 19 seasons in 4:3, the way they were intended to be viewed.
Here’s Disney’s statement:
“We presented “The Simpsons” in 16:9 aspect ratio at launch in order to guarantee visual quality and consistency across all 30 seasons. Over time, Disney+ will roll out new features and additional viewing options. As part of this, in early 2020, Disney+ will make the first 19 seasons (and some episodes from Season 20) of “The Simpsons” available in their original 4:3 aspect ratio, giving subscribers a choice of how they prefer to view the popular series.”
To give you an idea of what you might be missing with the widescreen format, here’s an example:
Why 19 seasons, instead of all 30? From 2009 on, partway through The Simpsons’ 20th season, the show had already switched to the 16:9 aspect ratio — so those episodes should be fine already.


# cython: language_level=3
# distutils: language = c++
# -*- coding: utf-8 -*-
# *****************************************************************************
# Copyright (c) 2016-2020, Intel Corporation
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
# - Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# - Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
 IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
# THE POSSIBILITY OF SUCH DAMAGE.
# *****************************************************************************
"""
Interface of the Array manipulation routines part of the Intel NumPy
Notes
-----
This module is a face or public interface file for the library
it contains:
- Interface functions
- documentation for the functions
- The functions parameters check
"""
import collections.abc
import numpy
from dpnp.backend import *
from dpnp.dparray import dparray
from dpnp.dpnp_utils import *
import dpnp
__all__ = [
"copyto",
"moveaxis",
"ravel",
"repeat",
"rollaxis",
"swapaxes",
"transpose"
]
[docs]def copyto(dst, src, casting='same_kind', where=True):
"""
Copies values from one array to another, broadcasting as necessary.
Raises a TypeError if the casting rule is violated, and if where is provided,
it selects which elements to copy.
:param dst: ndarray
The array into which values are copied.
:param src: array_like
The array from which values are copied.
:param casting: {‘no’, ‘equiv’, ‘safe’, ‘same_kind’, ‘unsafe’}, optional
Controls what kind of data casting may occur when copying.
‘no’ means the data types should not be cast at all.
‘equiv’ means only byte-order changes are allowed.
‘safe’ means only casts which can preserve values are allowed.
‘same_kind’ means only safe casts or casts within a kind, like float64 to float32, are allowed.
‘unsafe’ means any data conversions may be done.
:param where: array_like of bool, optional
A boolean array which is broadcasted to match the dimensions of dst,
and selects elements to copy from src to dst wherever it contains the value True.
"""
is_input_dparray1 = isinstance(dst, dparray)
is_input_dparray2 = isinstance(src, dparray)
if not use_origin_backend(dst) and is_input_dparray1 and is_input_dparray2:
if casting != 'same_kind':
checker_throw_value_error("copyto", "casting", type(casting), 'same_kind')
if not isinstance(where, bool) and not isinstance(where, dparray):
checker_throw_type_error('copyto', type(where))
if where is not True:
checker_throw_value_error("copyto", "where", where, True)
if dst.shape != src.shape:
raise NotImplemented
result = dpnp_copyto(dst, src, where=where)
return result
input1 = dpnp.asnumpy(dst) if is_input_dparray1 else dst
input2 = dpnp.asnumpy(src) if is_input_dparray2 else src
# TODO need to put dparray memory into NumPy call
result_numpy = numpy.copyto(dst, src, where=where)
result = result_numpy
if isinstance(result, numpy.ndarray):
result = dparray(result_numpy.shape, dtype=result_numpy.dtype)
for i in range(result.size):
result._setitem_scalar(i, result_numpy.item(i))
return result
[docs]def moveaxis(x1, source, destination):
"""
Move axes of an array to new positions. Other axes remain in their original order.
"""
if (use_origin_backend(x1)):
return numpy.swapaxes(x1, source, destination)
if (not isinstance(x1, dparray)):
return numpy.swapaxes(x1, source, destination)
if not isinstance(source, collections.abc.Sequence): # assume scalar
source = (source,)
if not isinstance(destination, collections.abc.Sequence): # assume scalar
destination = (destination,)
source_norm = normalize_axis(source, x1.ndim)
destination_norm = normalize_axis(destination, x1.ndim)
if len(source_norm) != len(destination_norm):
checker_throw_axis_error(
"swapaxes",
"source_norm.size() != destination_norm.size()",
source_norm,
destination_norm)
# 'do nothing' pattern for transpose() with no elements in 'source'
input_permute = []
for i in range(x1.ndim):
if i not in source_norm:
input_permute.append(i)
# insert moving axes into proper positions
for destination_id, source_id in sorted(zip(destination_norm, source_norm)):
# if destination_id in input_permute:
# pytest tests/third_party/cupy/manipulation_tests/test_transpose.py::TestTranspose::test_moveaxis_invalid5_3
#checker_throw_value_error("swapaxes", "source_id exists", source_id, input_permute)
input_permute.insert(destination_id, source_id)
return transpose(x1, axes=input_permute)
[docs]def ravel(a, order='C'):
"""
Return a contiguous flattened array.
Parameters
----------
a: array_like
Input array.
order: {'C', 'F', 'A', 'K'}, optional
The elements of a are read using this index order.
Returns
-------
out: ndarray
Output array.
See Also
--------
flat, flatten, reshape
"""
if not use_origin_backend(a) and isinstance(a, dparray):
return a.ravel(order=order)
result = numpy.rollaxis(dp2nd_array(a), order=order)
return nd2dp_array(result)
[docs]def repeat(x1, repeats, axis=None):
"""
Repeat elements of an array.
"""
is_x1_dparray = isinstance(x1, dparray)
if (not use_origin_backend(x1)
and is_x1_dparray
and (axis is None or axis == 0)
and (x1.ndim < 2)
):
repeat_val = repeats
if isinstance(repeats, (tuple, list)):
if (len(repeats) > 1):
checker_throw_value_error("repeat", "len(repeats)", len(repeats), 1)
repeat_val = repeats[0]
return dpnp_repeat(x1, repeat_val, axis)
input1 = dpnp.asnumpy(x1) if is_x1_dparray else x1
# TODO need to put dparray memory into NumPy call
result_numpy = numpy.repeat(input1, repeats, axis=axis)
result = result_numpy
if isinstance(result, numpy.ndarray):
result = dparray(result_numpy.shape, dtype=result_numpy.dtype)
for i in range(result.size):
result._setitem_scalar(i, result_numpy.item(i))
return result
[docs]def rollaxis(a, axis, start=0):
"""
Roll the specified axis backwards, until it lies in a given position.
Parameters
----------
a: array_like
Input array.
axis: int
The axis to be rolled. The positions of the other axes do not change relative to one another.
start: int, optional
When start <= axis, the axis is rolled back until it lies in this position.
When start > axis, the axis is rolled until it lies before this position.
Returns
-------
out: ndarray
Output array.
See Also
--------
moveaxis, roll
"""
if not use_origin_backend(a):
if not isinstance(a, dparray):
pass
elif not isinstance(axis, int):
pass
elif start < -a.ndim or start > a.ndim:
pass
else:
start_norm = start + a.ndim if start < 0 else start
destination = start_norm - 1 if start_norm > axis else start_norm
return dpnp.moveaxis(a, axis, destination)
result = numpy.rollaxis(dp2nd_array(a), axis, start)
return nd2dp_array(result)
[docs]def swapaxes(x1, axis1, axis2):
"""
Interchange two axes of an array.
"""
if (use_origin_backend(x1)):
return numpy.swapaxes(x1, axis1, axis2)
if (not isinstance(x1, dparray)):
return numpy.swapaxes(x1, axis1, axis2)
if not (axis1 < x1.ndim):
checker_throw_value_error("swapaxes", "axis1", axis1, x1.ndim - 1)
if not (axis2 < x1.ndim):
checker_throw_value_error("swapaxes", "axis2", axis2, x1.ndim - 1)
# 'do nothing' pattern for transpose()
input_permute = [i for i in range(x1.ndim)]
# swap axes
input_permute[axis1], input_permute[axis2] = input_permute[axis2], input_permute[axis1]
return transpose(x1, axes=input_permute)
[docs]def transpose(x1, axes=None):
"""
Reverse or permute the axes of an array; returns the modified array.
"""
if (use_origin_backend(x1)):
return numpy.transpose(x1, axes=axes)
if (not isinstance(x1, dparray)):
return numpy.transpose(x1, axes=axes)
if (axes is not None):
if (not any(axes)):
"""
pytest tests/third_party/cupy/manipulation_tests/test_transpose.py
"""
axes = None
return dpnp_transpose(x1, axes=axes)


Anderson County High School Cross Country Official Website
Home
Schedule
Forms
Runner Info
Parent Info
Roster
Records
Contact
Schedule


Before Change
return acls_cleaned
def room_allows_cross_group_messaging(self, room_uuid: str) -> bool:
raise NotImplementedError()
def channel_for_room(self, room_id: str) -> str:
if room_id is None or len(room_id.strip()) == 0:
raise NoSuchRoomException
After Change
return acls_cleaned
def room_allows_cross_group_messaging(self, room_uuid: str) -> bool:
acls = self.get_acls(room_uuid)
if SessionKeys.crossgroup.value not in acls.keys():
return False
return acls[SessionKeys.crossgroup.value] == "y"
def channel_for_room(self, room_id: str) -> str:
if room_id is None or len(room_id.strip()) == 0:


The goal of this project is to provide a consistent apperance for Flamingo components under Substance look-and-feel.
This project is licensed under Berkeley Software Distribution (BSD) License.
|
See demo applications |
Learn how to use |
|
Get latest version |
Thanks and contributors |


Cardano Calculator
/ Docs
Demos
Pool rewards and leader stake demo
Pool performance demo
Documents
Reward Sharing Schemes for Stake Pools (PDF)


| Target | Parent | |
|---|---|---|
| VPN Prefix | ||
| IP Subnet Name | ||
| IP Subnet Address Name | ||
| Network Address | ||
| LastEdit | ||
| Operation | Edit |
Subnet Delegation:
| VPN Prefix | IP Subnet Namespace Name | IP Subnet Address Name | Network Address | Operation |
|---|---|---|---|---|
| <IP_ADDRESS>/0 | Remove |
Subnet Allocation
| VPN prefix | IP Subnet Name | Network Address | Operation |
|---|---|---|---|
| Remove |


{% extends "skeleton/_body_md.html" %}
{%hyde
title: "Tests"
navname: "Tests"
created: 2011-03-24
%}
{% block content_md %}
For the Cast tests we use a custom written test runner ([Whiskey][1]) which runs
every test file in a separate process.
Test files are located in the `tests` directory and are logically grouped in
files where each test is exported as a named function.
Currently we have two types of tests:
* simple tests (`tests/simple/`) - this tests are mostly a combination of simple
functional and integration tests
* integration tests (`tests/integration/`) - this tests perform assertions on the
actual running Cast agent and client
### Writing tests
When writing a test please make a function name as descriptive as possible (long
name is not problematic in this case).
Note that the test function names are an exception and use underscore separated
notation because this allows better for a better readability.
Also try to keep test functions short and create a separate test for each scenario
and aspect of the function / module you are testing.
For example, if you writing a test for a `mkdir` function which gets passed in
a base path, directory name and directory permissions and creates a directory,
create a separate test for each of the following scenarios:
* directory creation is successful (no permissions are passed in, default argument
value is used)
* directory creation is successful (permissions are passed in)
* directory creation failed (no permission to create a directory)
* directory creation failed (invalid base path is provided)
* directory creation failed (empty string is a provided for a directory name)
* directory creation failed (invalid permissions are provided)
### setUp and tearDown functions
Our test runner also supports `setUp` and `tearDown` functions. `setUp` function
is ran before the tests and `tearDown` function is ran after all the tests have
completed.
`setUp` function is usually used to perform some kind of setup and
`tearDown` is usually used to perform some kind of post-test cleanup.
Keep in mind that in most cases you won't need to use those two functions,
because we already use a global init function (`tests/init.js`), which deletes
and re-creates `.tests` directory before every test file is run.
### Test function example
Here is an example test taken from the hooks test file (`test/simple/hooks.js`):
{% syntax javascript %}
exports['test_success'] = function() {
var callback = function(err, killed, stdout, stderr) {
assert.ifError(err);
assert.ok(!killed);
assert.equal('test hook success stdout', stdout);
assert.equal('test hook success stderr', stderr);
};
var hook_file = 'hook_success.js';
var base_hook = new hooks.Hook('pre', hook_file,
path.join(hooks_path, hook_file),
false);
var instance_hook = new hooks.InstanceHook('pre', hook_file,
instance_version_path);
base_hook.execute(null, [], callback);
instance_hook.execute(null, [], callback);
};
{% endsyntax %}
### Running the tests
To run all the tests, issue the following command in the Cast root folder:
{% syntax console %}
scons test
{% endsyntax %}
If all the tests pass, you should see an output similar to the one bellow:
{% syntax console %}
scons: done reading SConscript files.
scons: Building targets ...
NODE_PATH=/data/buildslave/cast-nodejs-v0.4-ubuntu9.10_x86_64/build/lib
test_remotes [OK]
util-templates.js
test_getTemplateContext_with_various_arguments [OK]
test_renderTemplateAsString_with_various_arguments [OK]
test_render_and_save_templates [OK]
http-bundles.js
test_http_bundles [OK]
--------------------------------------------------------------------------------
Ran 5 tests in 5.465s
Successes: 5
Failures: 0
Timeouts: 0
PASSED
{% endsyntax %}
If you don't want to run all the tests, you can pass a comma separated list of
relative paths to the tests files to scons test target:
{% syntax console %}
scons test tests="tests/simple/util-version.js tests/simple/util-templates.js"
{% endsyntax %}
This will run all the tests in file `tests/simple/util-version.js` and
`tests/simple/util-templates.js`.
[1]: https://github.com/cloudkick/whiskey
{% endblock %}


Selecting a Cubee.
Click a Cubee to select. Shift and click to select more than one Cubee.
Rotation.
Clicking on each icon will rotate the selected Cubees through 90 degrees about an axis through the middle of the Cubee that joins the two colours.
Rotations are applied to each individual Cubee not the group of selected Cubees.
Clear, Select All, Copy and Delete do as they say.
The currently active colour is shown to the right of the colour selection table.


Avengers: Endgame
After the devastating events of Avengers: Infinity War (2018), the universe is in ruins.
With the help of remaining allies, the Avengers assemble once more in order to undo Thanos'
actions and restore order to the universe.
Cast:
Watch Now
Download


phot
"I'd rather be a fencepost in Texas than the king of Tenessee."
After living in Dallas all my life, moving to Los Angeles had me a little home sick. As a designer, I took this opportunity to revisit my roots and practice some iconography along the way. Each of these images depicts a familiar sight from downtown Dallas, and is stylized to highlight the details that stand out in my memory.
Adobe Illustrator Process
I started off with a list of the most memorable sights in Dallas, then created an art-board for each of them. On each artboard I included multiple reference photos and a color palette that I wanted to follow. I chose to work in the same project file to ensure that my icons were cohesive and the colors balanced across the set.
Here's a close up of a set of artboards of the Margaret Hunt Hill Bridge, or as I call it, the bridge to nowhere, as it connects downtown Dallas to a warehouse and storage district. I've made the cables of the bridge more stylized, but I prefer how they look in this version, especially with the reflection.
I also experimented with creating repetitive prints with one of the graphics.


This specific page is solving the problem of welcoming people to the site and trying to get them to sign up. It has the visual challenge of keeping a user engaged and leading them to the right information about signing and addressing any doubts that may arise.
This page, the home page of footytube, solves the problem providing the most current information and news about the soccer world while also guiding them to the most popular content, the videos. It has the visual challenge of not overwhelming the reader with information while still appealing to different audiences.
This page, also the home page, solves the problem of introducing the user to its content, showing current and pertinent information and easily guiding people to new music. It faces the visual challenge of providing enough information and visuals to keep the user interested while not bombarding the user.


Tuesday's weather: A chilly start for many
A cold and frosty start for all of the UK apart from Northern Ireland.
Freezing fog patches across parts of England and Wales will slowly lift, although the odd patch may linger into the afternoon.
It will become cloudier across the west, with some rain for Northern Ireland and perhaps the western fringes of Britain later in the day.
Cold for many, but a little milder in the far southwest, where we should see a top temperature of 11 Celsius (52F).


FutureGateway test API javascript |
API Calls
This is the main page testing the fg_apis.js javascript. The principal aim of this code is to provide a set of high level function calls hiding most of the technical details in calling FutureGateway REST APIs. In order to get the full feedback from the fg_apis.js code, this page should be opened enabling the Browser' web inspector, showing the log console and sometime interacting with it. Most of the fg_apis.js javascript functions return two variables:
- api_result - That normally contains the json data returned by the called API function
- api_return_code - A variable containing the return code of the REST API
This test makes use of the following futuregateway setup:
Infrastructures
- List infrastuctures
- Infrastructures list Details Get details of selected infrastructure (whatch variable api_result) Update details of selected infrastructure using values above Delete selected infrastructure
- Create new infrastucture; using fgtest infrastructure parameters Name: Description:
Applications
- List applications
- Applications list Get details of selected application (whatch variable api_result) Delete selected application Upload files to associate at the selected application
- Create new application; using infrastructure selected above Name: Description:
Tasks
- List tasks
- Tasks list Get details of selected task Delete selected task
- Create new task; using application selected above Description:


UTC + 5.1/2
Voltage: 230 V
Frequency: 50 Hz
Rupee (RP) of 100 paise.
No Indian currency may be imported or exported. So exchange receipts should be kept for reconversion on departure. Foreign currency must be declared to customs on arrival or it could be confiscated.
International Dialing code for India is +91.
The prepaid India SIM card with an international cell phone is the most convenient and affordable calling solution while you travel india.
Important Note: It is illegal to use any type of satellite phone while in the Andaman Sea and in Indian territorial waters. Such communications are monitored and can result in severe penalties, even imprisonment.
Emergency numbers
Police - Dial 100
Fire Servie - Dial 101
Ambulance - Dial 102
IMRAY AND ADLARD COLES PILOT BOOKS are available at a discounted price for Noonsite.com users via World Cruising Club
South East Asia Pilot 4th Edition (2013) (Formerly The Andaman Sea Pilot)
By Grenville Fordham Andy Dowden and Bill O'Leary
Publisher: Image Asia Press - Grenville Fordham
The definitive guide to South East Asia and beyond, complete with reference charts and colour photos. Updated Thailand, Malaysia, Myanmar, Vietnam, Hong Kong, Andamans and Singapore chapters. Completely new Philippines (Palawan), Indonesia, Raja Ampat and Palau chapters.
www.southeastasiapilot.com
Indian Ocean Cruising Guide
By Rod Heikell
Publisher: Imray,Laurie,Norie & Wilson Ltd- 2nd edition 2007
ISBN-13:<PHONE_NUMBER>725
A good general cruising guide covering the routes from Europe to Australia and points in between. This second edition has been thoroughly revised and contains a lot of additional information on Malaysia and Thailand, the Seychelles and the Chagos archipelago
Cruising Information for the Andaman Islands by SV Ocelot (2011).
http://svocelot.com/Cruise_Info/Indian/Andamans_Cruising.htm
Plenty of useful cruising info. gathered during a 3 week cruise here in 2011. Plus downloadable track files in both MaxSea (.ptf) format and in OpenCPN (.gpx) format.


Coding Quiz Challenge
Wanna test your skills by taking a timed quiz on coding?
Be careful, wrong answers will reduce your time left to complete!
Wanna test your skills by taking a timed quiz on coding?
Be careful, wrong answers will reduce your time left to complete!


Scan
Advanced
Target
Type:
Local Directory
Project URL
Local File
Source Directory:
Source or APK File:
Project URL (Azure DevOps / GIT / TFS):
..
Edit target list...
%code_targets%
Vulnerable Repositories (Demo)
PHP
Java
Pascal/Delphi
Lua
GIT Branch:
Hunt Method
Application Code Scan (Default)
Application Code Scan (Server-Side Focused)
Fault Injection
Top 25 (CWE Top 25 2021)
Top 10 (OWASP Top 10 2021)
Top 5 (OWASP PHP Top 5)
SQL Injection
Cross-Site Scripting (XSS)
File Inclusion
Spring4Shell Scan
Log4Shell Scan
Malware Content
Unvalited Redirects
Complete (Full Code Quality Review)
Complete Paranoid (Lengthy Experimental)
TFS Version:
2018 or higher (recommended)
2017
2015
2013
2012
2010
Start Scan
Cancel


class CompareSizesByArea : Comparator<Size>
Compares two Sizes based on their areas.
Size
<init>
CompareSizesByArea()
compare
fun compare(lhs: Size, rhs: Size): Int


{Before skateboarding camp person( 1 ) knew how to do|person( 1 ) already knows how to do} Q skateboarding tricks. {person( 1 ) hopes to one day be able to do randRange( 25, 50 ) tricks. |}{Every week, person( 1 ) will be taught P tricks.|At skateboarding camp, person( 1 ) will learn P tricks per week.}
If person( 1 ) spends X weeks at camp, how many skateboarding tricks will he( 1 ) know at the end of camp?
Let w = weeks person( 1 ) spends at camp. Since person( 1 ) learns P tricks per week, Pw represents the number of tricks person( 1 ) learns over w weeks.
Since person( 1 ) already knows Q tricks, let Pw + Q = the number of tricks person( 1 ) will know at the end of w weeks.
person( 1 ) spends X weeks at camp, so we can substitute X for w.
P * X + Q = R. person( 1 ) will know R tricks at the end of camp.
person( 1 ) has run plural( Q, "marathon" ){ and {plans|has commited to} to run P marathons per year.|. He( 1 ) {plans|is commited} to run P marathons per year.}{ person( 1 ) has been training for randRange(2, 3) months for this upcoming commitment.|}
After X years, how many marathons will person( 1 ) have run?
Let y = the number of years in which person( 1 ) runs marathons. Since person( 1 ) plans to run P marathons per year, Py represents the number of marathons person( 1 ) has run over y years.
Since person( 1 ) has already run plural( Q, "marathon" ), let Py + Q = the number of marathons person( 1 ) will have run at the end of y years.
person( 1 ) runs marathons for X years, so we can substitute X for y.
P * X + Q = R. person( 1 ) will have run R marathons at the end of X years.
{person( 1 ) has a coupon for shipping from Amazon.com|person( 1 ) has decided to purchase some books from Amazon.com}. {No matter how much he( 1 ) purchases, shipping will cost $Q.|Shipping is set at a flat-rate of $Q, regardless of the number of books purchased.}
If person( 1 ) buys X books for $P each, how much will the total bill be (assuming no sales tax)?
Let m = the price of each book. Since person( 1 ) bought X books, Xm represents represents the amount of money person( 1 ) will spend on books.
Since person( 1 ) has to pay $Q for shipping, let Xm + Q = the total person( 1 ) will spend on his(1) Amazon purchase.
person( 1 ) buys books for $P each, so we can substitute P for m.
X * P + Q = R. person( 1 ) will spend $R on his(1) Amazon purchase.
{Q articles have been published by person( 1 ) in The New York Times|person( 1 ) has written Q articles for The New York Times}{ (Q - randRange(2, 8) of them in the last year)|}{. He( 1 ) has a new contract| and he( 1 ) has a new contract} to write plural( P, "article" ) per month for the next X months.
At the end of X months, how many articles will he( 1 ) have had published in The New York Times?
Let m = the number of months person( 1 ) spends writing for The New York Times. Since person( 1 ) writes plural( P, "article" ) per month, Pm represents the number of articles person( 1 ) writes for The New York Times over m months.
Since person( 1 ) has already written Q articles, let Pm + Q = the number of articles person( 1 ) will have written at the end of m months.
person( 1 ) writes for The New York Times for X months so we can substitute X for m.
P * X + Q = R. person( 1 ) will have written R articles at the end of X months.
{After practicing for randRange( 2, 5 ) months, |}person( 1 ) {has reached proficiency|is proficient} in Q exercises on Khan Academy.
If person( 1 ) completes P exercises per week for the next X weeks, how many exercises will he( 1 ) have completed in total?
Let w = the number of weeks person( 1 ) spends working on Khan Academy. Since person( 1 ) completes P exercises per week, Pw represents the number of exercises person( 1 ) completes over w weeks.
Since person( 1 ) is already proficient in Q exercises, let Pw + Q = the number of exercises person( 1 ) will have completed at the end of w weeks.
person( 1 ) works on Khan Academy for X weeks so we can substitute X for w.
P * X + Q = R. person( 1 ) will have completed R exercises at the end of X weeks.
person( 1 ) sells magazine subscriptions and earns $P for every new subscriber he( 1 ) signs up. person( 1 ) also earns a $Q weekly bonus regardless of how many magazine subscriptions he( 1 ) sells.
If person( 1 ) wants to earn more than $R this week, what is the minimum number of subscriptions he( 1 ) needs to sell?
Let s = subscriptions person( 1 ) sells in a given week. Since person( 1 ) earns $P per subscription, Ps represents the amount of money person( 1 ) earns on subscriptions in a given week.
Since person( 1 ) earns a weekly bonus of $Q, let Ps + Q = the total amount of money person( 1 ) earns in a given week.
person( 1 ) wants to earn more than $R this week. This can be represented as Ps + Q > R
Ps > R - Q
s > (R - Q) / P
person( 1 ) must sell at least X subscriptions this week.
For every level person( 1 ) completes in his( 1 ) favorite game, he( 1 ) earns P points. At the end of each hour spent playing the game, person( 1 ) earns a bonus of Q. Name already has 10 * randRange( 500 / 10, 5000 / 10 ) in the game and wants to earn more than R additional points in the next hour.
What is the minimum number of levels that person( 1 ) needs to complete in the next hour to meet his( 1 ) goal?
Let l = levels person( 1 ) completes in a given hour. Since person( 1 ) earns P points per level, P * l represents the number of points person( 1 ) earns in a given hour.
Since person( 1 ) earns a bonus of Q per hour, let P * l + Q = the total amount of points person( 1 ) earns in a given hour.
person( 1 ) wants to earn more than R additional points in the next hour. This can be represented as P * l + Q > R
P * l > R - Q
l > (R - Q) / P
person( 1 ) needs to complete at least X levels in the next hour.
A bear named person( 1 ) is preparing to hibernate for the winter. he( 1 ) has already stored up Q units of energy and needs to store up at least R total units of energy before winter.
If there are X left before winter, what is the minimum units of energy the bear needs to store up per month?
Let e = units of energy person( 1 ) stores up per month. Since there are X months left before winter, Xe = the amount of energy person( 1 ) can store up between now and winter.
Since person( 1 ) has already stored up Q units of energy, let Xe + Q = the total units of energy person( 1 ) will have stored up when winter begins.
person( 1 ) needs to store up at least R units of energy before winter. This can be represented as Xe + Q > R.
Xe > R - Q.
e > (R - Q) / X.
person( 1 ) needs to store up at least P units of energy before the winter.
To move up to the maestro level in his( 1 ) piano school, person( 1 ) needs to master at least R songs. person( 1 ) has already mastered Q songs.
If person( 1 ) can typically master P songs per month, what is the minimum amount of months it will take him( 1 ) to move to the maestro level?
Let m = months person( 1 ) takes to move to the maestro level. Since he( 1 ) typically masters P songs per month, Pm = the number of songs person( 1 ) masters in a given number of months.
Since person( 1 ) has already mastered Q songs, let Pm + Q = total songs person( 1 ) will have mastered after a given number of months.
person( 1 ) needs to master R songs to move to the maestro level. This can be represented as Pm + Q > R.
Pm>R - Q.
m > (R - Q) / P.
It will take person( 1 ) at least X months to move to the maestro level.


I have just bought a second hand Apollo Ultrasonic Oil Level Monitor, which I would like to hook up to my computer for oil consumption analysis etc.
I have many questions about the Apollo device:
1. What channel of the 433MHz band does it use for communicating between the transmitter and the receiver? As I understand it there are 69 possible channels.
2. I understand that it uses FM, but what else do I need to know to buy to build a compatible receiver? I.e. what is the frequency deviation? What is the bit rate (assuming that it is simply encoding binary data)?
3. What protocol or data format does it use to transmit the data from the transmitter to the receiver?
4. Does it just transmit from the transmitter to the receiver, or ius there any sort of acknowledgement or other data sent in the reverse direction? I.e. is it open loop, or closed loop?
5. What is the accuracy of the sensor?
6. What is the resolution of the sensor?
7. Do all the models of Apollo device have the same accuracy and resolution, or are some more accurate than others?
8. How do I open the case of the receiver without damaging it?
If you know anything about these devices, or know where to find this out, or are interested in a simialr project, please reply.
Thanks - Rowan
Re: Using Apollo Oil Monitor for energy monitoring
I suggest that you locate a spec sheet for the unit, or contact the manufacturer.
Paul
Re: Using Apollo Oil Monitor for energy monitoring
I have a spec sheet, for what it's worth, but it doesn't give answers to any of the above questions. I have written to the manufacturer, but I doubt they will answer me, because using their sensor in a DIY project is probably not something they would welcome, and would certainly not wish their staff to be taking time answering detailed technical questions. Usually when asked this type of questions, product companies answer "we have no documentation on that, and the guy who designed it left years ago".
We will see what comes back from the manufacturer! But I suspect have to rely on finding someone who has managed to puzzle this stuff out before me, or do it myself.
Rowan
Re: Using Apollo Oil Monitor for energy monitoring
It can be difficult! I had a similar problem where the company concerned refused to give me any technical information, claiming it to be intellectual property...
Paul
Re: Using Apollo Oil Monitor for energy monitoring
Any news about that? I'm trying to do a similiar stuff, receiving the Apollo sensor rf signal with an rfm01 and arduino. Actually i've found the following information that can be usefull:
- The same electronics (sender, receiver) are used in 'The Rocket Sensor' and "Whatchman Sonic " (i'm using the second one), but i cannot retrieve other information
- Modulation used in transmission is FSK (my RFM01 receiver has the same SI4320 rf)
- "pairing" the sensor with the receiver starts a continous data transfer, maybe for sync, and offers a good way for testing communication (i'm using a magnet to put the sensor in "pairing mode)
- each transmission has a duration of 0.140 sec and has 140bit of data (maybe 1000-1200kbps), the first 16 bit (but i'm not shure) are the same in each transmission, so i think is a sort of header, that reduces the "data" bit to 124, probably 31 nibbles.
- transmission frequency I supposed is 433.9Mhz (in my case I have two peak at 433.87 and 433.93)
- watching radio scheme i've seen 18 peak/oscilation for bit value 0 and 86 peak for bit value 1 (probably is not a precise measurements, i've used rtl-sdr + audacity for signal view)
I hope that can help us to find a way to get sensor data
P.S.: my receiver is broken due to power faults, opening it is so difficult, it appears to be glued. With a functional one i think it's possible to read what the receiver pic sends to the Si4320 fsk receiver. By pin configuration I think it uses SPI for communication and connecting an arduino can be a way to grab what pic sends to Si4320, that's probably all the configuration data (frequency,data rate, mode, etc..), take a look at SI4320 datasheet.
Re: Using Apollo Oil Monitor for energy monitoring
Thank you very much for your reply. It's great to find someone who is trying to do the same stuff that I am! I'm afraid that I haven't made much progress with my project (not as much as you). What you have discovered is certainly useful. Can you please give me full details about how you set up your RFM01 and what mode you used it in, to get those 140 bits of data? I would like to set up the same arrangement and then see if we can puzzle out what those 140 bits mean, and how to decode them into an oil level reading.
Please can you tell me what I need to do to duplicate your results? I guess I need to buy an RFM01, which I see that I can do for GBP 4.48 from Farnell. Have you written some Arduino software to configure the RFM01 correctly and to receive and decode the data? If so, would you be prepared to share this with me? If so, I guess I need to buy an Arduino - which model exactly? My preference would be to use a Raspberry Pi since I happen to have one here waiting for a project :-).
How does the RFM01 need to be set up to work with the Apollo transmitter? Presumably we need to set up:
- the configuration settings (including the frequency band, the bandwidth, the crystal load capacitance etc.)
- the frequency or channel number to use within the 433MHz band.
- the receiver settings (including VDI mode, LNA gain, RSSI detector threshold).
- The AFC settings
- The Data Filter settings
- The Data Rate setting
- The FIFO setting
Presumably these things need to be set up via the SPI bus. How did you set yours up? Did you write any code to do this?
Would you be prepared to send me your 140 bit string that you received from your device? Then I can try to puzzle out what the bits mean. I imagine that there must be some kind of signature in the string, which the receiver uses to ignore 433 MHz signals from devices that are not Apollo oil tank transmitters, and signals from other oil tank transmitters that your neighbour might have on their tank. I imagine the in "pairing" process the receiver learns this signature, and thereafter ignores transmissions that do not have the correct signature.
Have you been able to capture the regular transmissions that the transmitter makes (I guess about once per hour) of the current oil level?
What is "rtl-sdr", that you refer to using with Audacity to read the data?
I would like to get myself to the same point that you are at as quickly as possible, then we can try to work out the format of the data within the string of bits that we are receiving. I have two Apollo transmitters here, so that should help.
Thanks - Rowan
Re: Using Apollo Oil Monitor for energy monitoring
Sorry, actually i haven't found working RFM01 settings, I've retrieved all the previous information by watching the signal waveform. rtl-sdr is a software defined radio based on dvb-t tv usb dongle (the cheapest way for inspecting radio signals), with sdrsharp I can view any signal from 52 to 2200 Mhz, and record it. Opening the recorded signal with audacity shows the waveform of the transmission. Watching the apollo signal it I've seen that it is fsk (but I already known that, by SI4320 datasheet), and assuming that high signal frequency is "1" and low "0" i can identify each bit of transmission and count them. I can also view the total duration of the transmission and the single bit duration.
With RFM01 I've tried with the more matching settings but without result: band 433, frequency 433.9 (center between 433.83 and 433.97) and directly 433.83 and 433.97, for the other settings I'm trying all the combinations, but it requires a lot of time.
For the RFM01 there are these arduino library https://myfablab.wordpress.com/2010/06/22/rfm01-and-rfm02-libraries-for-... (opening the library with notepad++ shows all the method you can use but my preferred one is "trans" that accepts directly the configuration code).
Configuration code can be generated using the silabs tools at http://www.silabs.com/products/wireless/EZRadio/Pages/Si4320.aspx
My next step is trying with an RFM12B or RFM02 (RFM01 is a receiver only, RFM12B is both receiver and transmitter, RFM02 is a transmitter only) because I want to check if there is a frequency offset in my measurements and trying to reproduce a similar signal. The "idea" is to generate a 140bit signal (probably the already retrieved sequence of 0 and 1), adjusting transmission frequency until it comes over the apollo transmission and then compare my transmission with the apollo one and make changes to the settings (step by step) until i get a perfect match between the two transmission. Use that settings in RFM01 and see if i can get some data and then adapt the RFM01 library to 4bit packet (actually is 8bit) or a single 140bit stream... The reason is that i can't know what's wrong with my receiver, it simply doesn't receive nothing, but with a transmission i can see the difference between the two signals and correct the difference..
When I will get data with the RFM01 and arduino I think it will be simple to decode what is transmitted, probably (hoping that the signal is not encrypted) is a simple number. I know that the calculation are made by the receiver unit (dip switch for settings the tank size), so the transmitter sends a value that can be the measured distance or the ping time (looking to the poor transmitter electronics i think is the second one)
[Two more copies of this post have been deleted - see "NEW USERS, PLEASE READ - Posts held for moderation"]
Re: Using Apollo Oil Monitor for energy monitoring
Thanks for your reply.
Thanks for the info about rtl-dsr - a whole area of modern technology that I was unaware of! My thoughts about this were to see if I could see the 433MHz signal on my oscilloscope, but it probably would never have worked, since it is only supposed to have 100MHz bandwidth. Your approach sounds better, if a bit long winded.
I have not tried hard to open up my receiver (which works fine) because I did not want to damage it. As you say, it seems like it is glued together. I suppose that in there there is an SI4320 and a microcomputer of some kind, and I suppose that they communicate via SPI. Might it be possible with a working receiver to monitor the SPI communication and capture the setup commands that the micro must send to the SI4320? That would give a set of settings that could presumably be sent to the RFM01 and would then receive the signals from the Apollo transmitter correctly.
As you say, all the processing to create the tank level seems to be done in the receiver. Like you I am expecting the transmitter to send just a number, which is presumably a count of some clock for the length of time to receive a reflected ultrasonic signal from the surface of the oil. I am hoping that maybe the resolution of this reading is finer than the 1/10 of a tank resolution of the receiver display, which would enable better/faster readings of oil consumption to be calculated.
Maybe I just have to break or hacksaw open my receiver, and see if this appears possible. Then I would need to design something that will monitor and decode the SPI signals without disrupting the operation of the receiver. Does not sound impossible with a little micro of some sort. Maybe it could even be done by monitoring the signals on my scope.
That's as far as I have got for now. Please let me know if you progress farther!
Thanks - Rowan
Re: Using Apollo Oil Monitor for energy monitoring
Another idea: there are not that many channels in the 433MHz band (69 in fact). Could we not simply try them all to find out which one receives the signals from the Apollo transmitter best? A C program could potentially do this automatically with the transmitter in "continuous transmission" mode.
Rowan
Re: Using Apollo Oil Monitor for energy monitoring
Unfortunately my receiver is incredibly damaged and I can't make the spi test, however the SI4320 is connected to a PIC16F630. Referring to the SI4320 datasheet,the connection with PIC are in SPI mode (the SI4320 could work in standalone mode but following the wiring I think this is not the case), and it's easy to identify MOSI, MISO, SCK and SS (in SI4320 datasheet there is a full connection diagram).
The receiver is glued or soldered, mine was already broken so I've used hard manners for opening it. Probably using a little cutter is possible to open it without evident damage.
About che transmission channel I think that is only a small part of the problem, knowing the channel but not the data rate doesn't produce any result (or bad result, with that approach I have believed that I've found the signal but it was from another source..)
A good but very challenging idea (for me) is this: https://hackaday.io/project/1548-rocket-receiver-teardown
Make a script that tries all the possible RFM01/Si4320 settings combinations, but I think it is more complicated
Re: Using Apollo Oil Monitor for energy monitoring
I got a spare receiver and tried to hook it up to sniff the SPI traffic, but unfortunately I was being too impatient — rather than waiting for a proper SOIC chip probe that would clip on, I was trying to use normal probes. And in the process I blew up both my receiver and the Bus Pirate I was trying to do the sniffing with.
Still, the information above should be enough to get us a lot further. If you see peaks at 433.9MHz ± 30kHz, that implies that the baseband bandwidth (bits i0-2 in the configuration) should be 67kHz, surely?
That's probably all we need to care about to get started. Stick a magnet on the transmitter to make it stream data constantly instead of only chirping every few minutes. With a simple SI4320 we could monitor the ARSSI output of the chip to see when it's getting a signal, and we can fine-tune the frequency (and perhaps set up AFC). However, the RFM01 module doesn't give us an ARSSI connector. Is it actually using a Si4320 on the module, and if so can we still access the ARSSI pin even though it's not brought out to the external connectors? (I've ordered some RFM01 modules but mine haven't arrived yet.)
Otherwise, we'd have to use the digital RSSI — set the VDI bits (d0-1) to zeroes to enable the DRSSI to be output on the VDI pin, then use that for fine-tuning the receiver. Probably starting at the lowest trigger level (bits r0-r2) and increasing it as we get closer to the optimal settings. Probably set the LNA gain somewhere in the mid range and tweak it only if we need to.
Then we can move on to the data rate. There are tens of possible data rates in the 1000-1200bps range, and it's probably not impossible to just try them.
I'd stick with the polled mode, where you just clock data out directly whenever the FFIT pin goes high. We can set up the FIFO later; that's purely a software construct between the receiver and the host, and not really what we need to work out here.
Re: Using Apollo Oil Monitor for energy monitoring
FWIW I've also had a response from Dunraven Systems. They're not interested in helping:
Re: Using Apollo Oil Monitor for energy monitoring
Oh, rtl-sdr is a wonderful thing. How did I never find *that* before?
So rtl_power shows peaks at 433867 kHz and 433925 kHz which go away if I stick the transmitter in the microwave. That's about 60kHz bandwidth, at 433.895MHz.
Capture that with 'rtl_fm -f 433895000 -l 140' — result at http://david.woodhou.se/watchman.cap.
Import it into Audacity and you can see a nice clean waveform. I'll see if I can show it here...
Re: Using Apollo Oil Monitor for energy monitoring
I think I now see where you got your 140 bits in 0.140 seconds. But I wouldn't interpret it like that. My first guess would be that it's a Manchester encoding — so a 0 bit is indicated by a transition from low to high frequency, while a 1 is indicated by a transition from high to low (or perhaps vice versa).
The start of the frame is indicated by three high half-bits followed by three low half-bits. And the end of frame is marked by repeating the last half-bit two more times.
I count 64 bits of data, in that case. So (decoding by hand, so expect some bit errors) the data in the packet I showed above — when it eventually makes it past moderation and shows up — was D73929E27EBFAE7C. Which will contain the unit ID, the current measurement, and also some indication of the battery status. And maybe a CRC or checksum of some kind.
I'll throw together something to decode them by hand and see if I can make further progress....
Re: Using Apollo Oil Monitor for energy monitoring
I've been posting updates in the project at https://hackaday.io/project/1548-rocket-receiver-teardown because they're not delayed by moderation there. One more update here though...
At http://david.woodhou.se/watchman-demod.c there is a program which works with rtl-sdr to receive the signals. Looks something like this:
Found 1 device(s):
0: Realtek, RTL2838UHIDIR, SN: 00000001
Found Rafael Micro R820T tuner
Tuner gain set to automatic.
Tuned to 434152000 Hz.
Oversampling input by: 21x.
Oversampling output by: 1x.
Buffer size: 8.13ms
Exact sample rate is: 1008000.009613 Hz
Sampling at 1008000 S/s.
Output at 48000 Hz.
At 2015-12-04 13:50:00: 28 c7 47 8b 80 40 0a (crc ok 76)
Unit ID: 0x28c7478b flags 0x8040 height 10
At 2015-12-04 13:50:01: 28 c7 47 8b 80 40 0d (crc ok f5)
Unit ID: 0x28c7478b flags 0x8040 height 13
At 2015-12-04 13:50:04: 28 c7 47 8b 80 40 0d (crc ok f5)
Unit ID: 0x28c7478b flags 0x8040 height 13
At 2015-12-04 13:50:43: 28 4e 84 b4 61 4c 50 (crc ok 30)
Unit ID: 0x284e84b4 flags 0x614c rebinding countdown 0
At 2015-12-04 13:50:44: 28 4e 84 b4 61 4c 51 (crc ok 6e)
Unit ID: 0x284e84b4 flags 0x614c rebinding countdown 1
At 2015-12-04 13:50:44: 28 4e 84 b4 61 4c 51 (crc ok 6e)
Unit ID: 0x284e84b4 flags 0x614c rebinding countdown 1
At 2015-12-04 13:50:45: 28 4e 84 b4 60 4c 36 (crc ok 23)
Unit ID: 0x284e84b4 flags 0x604c height 54
At 2015-12-04 13:50:45: 28 4e 84 b4 60 4c 36 (crc ok 23)
Unit ID: 0x284e84b4 flags 0x604c height 54
At 2015-12-04 13:50:46: 28 4e 84 b4 60 4c 36 (crc ok 23)
Unit ID: 0x284e84b4 flags 0x604c height 54
At 2015-12-04 13:50:47: 28 4e 84 b4 60 4c 36 (crc ok 23)
Unit ID: 0x284e84b4 flags 0x604c height 54
The signal decoding is a terrible hack. I felt less ashamed of it when it needed precise tuning and only worked with one unit at a time; now I've made it a little bit more robust it's just more obvious how bad it is :)
I'd like to throw out my own signal decoder and use something else — there must be an open source one we can use which will adapt properly and be more robust. But this works OK as a proof of concept.
Re: Using Apollo Oil Monitor for energy monitoring
I've now added support for these devices to rtl_433: https://github.com/merbanan/rtl_433
However, although the signal processing is now Not My Fault™, it's not perfect — the reception at long range was better when I was using rtl_fm: https://github.com/merbanan/rtl_433/issues/223
Re: Using Apollo Oil Monitor for energy monitoring
A quick screen shot using the setup described at http://www.domoticz.com/wiki/Lua_-_Oil_Tank_Monitor
Re: Using Apollo Oil Monitor for energy monitoring
The RF signal process is a lot better now, FWIW. Tommy Vestermark has done a lot of work on the FM decoding and level detection, and it's much more reliable. I've been using this "in anger" for a while now, and it's doing a really good job.


Make Your Project Our Project
This is an example website. This page would normally list successful projects with annoying pictures of us high-fiving happy clients. Except it won't be us or anyone we know. It'll be business clip-art images of unrealistically attractive models who have evidently never opened a spreadsheet or code editor in their entire glamorous lives.
PWA success
Apologies for the cynical nature of these pages. I had to write something. It actually took longer than the whole process of adapting the site into a Progressive Web App.
Fewer details
Again, there's nothing more to see here. Do you have an urge for some Latin gibberish? You got it!…
Morbi sit amet lorem maximus, dictum magna in, porta nisi. Proin nec fermentum nisl. Proin vel volutpat nisl, non condimentum tellus. Pellentesque tristique lacinia erat eu mollis. Integer tincidunt elit sit amet odio faucibus sagittis.
Quisque euismod, ex sit amet rutrum vestibulum, libero neque porttitor ipsum, at hendrerit risus quam non dui. Maecenas gravida congue mauris sit amet mattis. Nullam gravida nunc in consectetur venenatis. Vestibulum tincidunt a eros at dictum. Donec ultricies varius leo, a finibus augue tincidunt quis. Ut nec sagittis diam, vitae egestas sapien. Fusce a aliquet massa.
Vestibulum id fermentum urna. Praesent efficitur faucibus turpis, quis aliquet magna ullamcorper in. Nullam consequat imperdiet quam id aliquet.


Levels and changes of productivity and profitability are measured with various indices. The package contains the multiplicatively complete Färe-Primont, Fisher, Hicks-Moorsteen, Laspeyres, Lowe, and Paasche indices, as well as the classic Malmquist productivity index. Färe-Primont and Lowe indices verify the transitivity property and can therefore be used for multilateral or multitemporal comparison. Fisher, Hicks-Moorsteen, Laspeyres, Malmquist, and Paasche indices are not transitive and are only to be used for binary comparison. All indices can also be decomposed into different components, providing insightful information on the sources of productivity and profitability changes. In the use of Malmquist productivity index, the technological change index can be further decomposed into bias technological change components. The package also allows to prohibit technological regression (negative technological change). In the case of the Fisher, Hicks-Moorsteen, Laspeyres, Paasche and the transitive Färe-Primont and Lowe indices, it is furthermore possible to rule out technological change. Deflated shadow prices can also be obtained. Besides, the package allows parallel computing as an option, depending on the user's computer configuration. All computations are carried out with the nonparametric Data Envelopment Analysis (DEA), and several assumptions regarding returns to scale are available. All DEA linear programs are implemented using 'lp_solve'.
| Version: | 1.1.0 |
| Depends: | R (≥ 2.15.3) |
| Imports: | lpSolveAPI, doParallel, foreach, iterators, methods |
| Published: | 2018-03-28 |
| Author: | K Hervé Dakpo [aut], Yann Desjeux [aut, cre], Laure Latruffe [aut] |
| Maintainer: | Yann Desjeux <yann.desjeux at inra.fr> |
| BugReports: | https://r-forge.r-project.org/tracker/?group_id=2245 |
| License: | GPL-3 |
| NeedsCompilation: | no |
| Citation: | productivity citation info |
| Materials: | NEWS |
| CRAN checks: | productivity results |
| Reference manual: | productivity.pdf |
| Package source: | productivity_1.1.0.tar.gz |
| Windows binaries: | r-devel: productivity_1.1.0.zip, r-release: productivity_1.1.0.zip, r-oldrel: productivity_1.1.0.zip |
| OS X binaries: | r-release: productivity_1.1.0.tgz, r-oldrel: productivity_1.1.0.tgz |
| Old sources: | productivity archive |
Please use the canonical form https://CRAN.R-project.org/package=productivity to link to this page.


CCMS
Home
(current)
Cases
(current)
Clients
Documents
User Management
N/A
(
N/A
)
USER MANAGEMENT
Create New User
#
FIRSTNAME
LASTNAME
OTHERNAME(s)
EMAIL ADDRESS
ROLE
STATUS
Controls
Reset Password
Delete User(s)
CREATE NEW SYSTEM USER
×
Gender
Male
Female
Role
CLERK
LAWYER
ADMINISTRATOR


Pokémon:
Reset Selection
#
Species
Candy Needed
Candy Inventory
# Evolutions possible
New Species Evolution
Total XP Gained
#
Evolutions
XP gained
XP gained with lucky egg


Trip ID : {{ trip.id }}
Trip FROM LOCATION: {{ trip.fromLocation }}
Trip TO LOCATION: {{ trip.toLocation }}
Trip AUTHOR INFORMATION: {{ trip.authorInformation }}
Trip HOTEL NAME: {{ trip.hotelName }}
Trip TYPE: {{ trip.type }}


We have seen few HTML tags and their usage like heading tags
,
, paragraph tag
 and other tags. We used them so far in their simplest form, but most of the HTML tags can also have attributes, which are extra bits of information.
An attribute is used to define the characteristics of an HTML element and is placed inside the element's opening tag. All attributes are made up of two parts: a name and a value:
The name is the property you want to set. For example, the paragraph
 element in the example carries an attribute whose name is align, which you can use to indicate the alignment of paragraph on the page.
The value is what you want the value of the property to be set and always put within quotations. The below example shows three possible values of align attribute: left, center and right.
Attribute names and attribute values are case-insensitive. However, the World Wide Web Consortium (W3C) recommends lowercase attributes/attribute values in their HTML 4 recommendation.
<!DOCTYPE html>   <title>Align Attribute Example</title>
This is left aligned

This is center aligned

This is right aligned

This will display following result:
This is left aligned
This is center aligned
This is right aligned
The four core attributes that can be used on the majority of HTML elements (although not all) are:
The id attribute of an HTML tag can be used to uniquely identify any element within an HTML page. There are two primary reasons that you might want to use an id attribute on an element:
If an element carries an id attribute as a unique identifier it is possible to identify just that element and its content.
If you have two elements of the same name within a Web page (or style sheet), you can use the id attribute to distinguish between elements that have the same name.
We will discuss style sheet in separate tutorial. For now, let's use the id attribute to distinguish between two paragraph elements as shown below.

This para explains what is HTML

This para explains what is Cascading Style Sheet

The title attribute gives a suggested title for the element. They syntax for the title attribute is similar as explained for id attribute:
The behavior of this attribute will depend upon the element that carries it, although it is often displayed as a tooltip when cursor comes over the element or while the element is loading.
<!DOCTYPE html>   <title>The title Attribute Example</title>
Titled Heading Tag Example

This will produce following result:
Now try to bring your cursor over "Titled Heading Tag Example" and you will see that whatever title you used in your code is coming out as a tooltip of the cursor.
The class attribute is used to associate an element with a style sheet, and specifies the class of element. You will learn more about the use of the class attribute when you will learn Cascading Style Sheet (CSS). So for now you can avoid it.
The value of the attribute may also be a space-separated list of class names. For example:
class="className1 className2 className3"
The style attribute allows you to specify Casecading Style Sheet (CSS) rules within the element.
<!DOCTYPE html>   <title>The style Attribute</title>
Some text...

This will produce following result:
Some text...
At this point of time, we are not learning CSS, so just let's proceed without bothering much about CSS. Here you need to understand what are HTML attributes and how they can be used while formatting content.
There are three internationalization attributes, which are available for most (although not all) XHTML elements.
The dir attribute allows you to indicate to the browser the direction in which the text should flow. The dir attribute can take one of two values, as you can see in the table that follows:
| Value | Meaning |
|---|---|
| ltr | Left to right (the default value) |
| rtl | Right to left (for languages such as Hebrew or Arabic that are read right to left) |
<!DOCTYPE html>   <title>Display Directions</title>   This is how IE 5 renders right-to-left directed text.
This will produce following result:
When dir attribute is used within the  tag, it determines how text will be presented within the entire document. When used within another tag, it controls the text's direction for just the content of that tag.
The lang attribute allows you to indicate the main language used in a document, but this attribute was kept in HTML only for backwards compatibility with earlier versions of HTML. This attribute has been replaced by the xml:lang attribute in new XHTML documents.
The values of the lang attribute are ISO-639 standard two-character language codes. Check HTML Language Codes: ISO 639 for a complete list of language codes.
<!DOCTYPE html>   <title>English Language Page</title>   This page is using English Language
The xml:lang attribute is the XHTML replacement for the lang attribute. The value of the xml:lang attribute should be an ISO-639 country code as mentioned in previous section.
Here's a table of some other attributes that are readily usable with many of the HTML tags.
| Attribute | Options | Function |
|---|---|---|
| align | right, left, center | Horizontally aligns tags |
| valign | top, middle, bottom | Vertically aligns tags within an HTML element. |
| bgcolor | numeric, hexidecimal, RGB values | Places a background color behind an element |
| background | URL | Places a background image behind an element |
| id | User Defined | Names an element for use with Cascading Style Sheets. |
| class | User Defined | Classifies an element for use with Cascading Style Sheets. |
| width | Numeric Value | Specifies the width of tables, images, or table cells. |
| height | Numeric Value | Specifies the height of tables, images, or table cells. |
| title | User Defined | "Pop-up" title of the elements. |
We will see related examples as we will proceed to study other HTML tags. For a complete list of HTML Tags and related attributes please check reference to htmlHTML Tags List


bundle packaging
If you see Hello World in each frame with no console errors, all is well!
babel-standalone (dev only)
globals (dev)
globals (prod)
requirejs (dev)
requirejs (prod)
systemjs (dev)
systemjs (prod)
browserify (dev)
browserify (prod)
brunch (dev)
brunch (prod)
rjs (dev)
rjs (prod)
systemjs-builder (dev)
systemjs-builder (prod)
webpack (dev)
webpack (prod)
webpack-alias (dev)
webpack-alias (prod)


A block-level element always starts on a new line and takes up the full width available
| div | The div tag defines a division or a section in an HTML document. |
|---|---|
| h1-h6 | The h1 to h6 tags are used to define HTML headings. h1 defines the most important heading. h6 defines the least important heading. |
| p | The p tag defines a paragraph. |
| ul | The ul tag defines an unordered list. |
| li | The li tag defines an item in a list. |
| table | The table tag defines an HTML table. An HTML table consists of the table element and one or more tr, th, and td elements. The tr element defines a table row, the th element defines a table header, and the td element defines a table cell. |
An inline element does not start on a new line and only takes up as much width as necessary
| span | The span tag is used to group inline-elements in a document. The span tag provides no visual change by itself. The span tag provides a way to add a hook to a part of a text or a part of a document. |
|---|---|
| strong | the strong tag defines important text. |
| em | the em tag defines emphasized text. |
| img | the img tag defines images. |
| br | the br tag produces a line break. |
| input | The input tag specifies an input field where the user can enter data. |
Self enclosing elements don't require a closing tag. They are represented by just the opening tab.
| br | Inserts a single line break |
|---|---|
| img | Inserts an image |
| meta | Provides metadata about the HTML document |
| embeded | Defines a container for an external application or interactive content (a plug-in) |
| param | Define parameters for plugins embedded with an |
| hr | Define a thematic change in the content |
These elements provide structure to the layout and they are the norm with HTML5. Below are the most commonly used structural elements:
| header | Defines a header for the document or a section |
|---|---|
| nav | Defines navigation links in the document |
| section | Defines a section in the document |
| aside | Defines content aside from the page content |
| footer | Defines a footer for the document or a section |
| article | Defines an article in the document |