MNode¶
-
class
MNode
(node=None, node_type=None, name=None)¶ Bases:
OpenMaya.MObject
Purpose: - Provides object oriented interface for querying/editing DAG or DG nodes inside Maya.
An instance of the MNode class provides storage and access to a single
Maya node. Methods within the class replace the most commonly use maya commands. Public methods operate on the object stored within the MNode. Note that most methods support the same keywords arguments as their maya.cmds equivalent.
Extends: OpenMaya.MObject
Methods Summary
addAttr
([long_name, attr_type])Adds an attribute of the given long name and given type to the node. addMenuCmd
(ui_name, cmd_str)Add a context sensitive making menu to this node. applyAttrMap
(attr_map[, skip_missing, …])Apply the attribute values in the given dictionary object to this node. attachMenuItems
(parent_menu)This method attaches any defined menu cmds on this node to the given Maya menu item. attributeQuery
(attr_name, **kargs)Query information about the given attribute. bakeResults
(*args, **kargs)Run bakeResults on this node with the given options capitalize
([include_namespaces])String operartion just like str.capitalize(). connectAttr
(src_attr, dst_node, dst_attr, …)Connects the given attribute of this node to the given node and attribute. count
(sub[, start, end, include_namespaces])String operartion just like str.count(). createNode
([node_type])Wrapper class method for maya.cmds.createNode thats returns a MNode object instead of a string name delete
()Delete the node from the scene. deleteAttr
(attr_name)Delete the attr with the given name from this node. duplicate
(**kargs)Duplicate the node with the given options endswith
(suffix[, start, end, …])String operartion just like str.endswith(). find
(sub[, start, end, include_namespaces])String operartion just like str.find(). getAddAttrCmd
(attr_name[, use_long_names])Returns a string containing mel addAttr command for re-creating given dynamic attribute. getAddAttrMaps
()Returns a dictionary that contains addAttr details for all user defined dynamic attributes on the current node. getAttr
(attr_name, **kargs)Returns the value of the given attr on this node. getAttrMap
(*args, **kargs)Returns an OrderedDict of attributes as keys and their values as values. getBasename
()Returns the string name of this node any namespaces. getHashCode
()Returns a hash code for the internal Maya object referenced by the MObject within this MNode getInheritedNodeTypes
()Returns the node classes that this node type is inherited from. getMObject
()Returns the MObject of this node getMObjectHandle
()Returns the MObjectHandle of this node getMenuCmds
()Return all custom marking menu items on this node. getMessageAttr
(attr_name)Returns the node that is connected to the given message attribute. getName
()Returns the string name of this node. getNamespace
()Return the namespace this node belongs to, if any. getNextAttr
(attr_prefix[, start_num, max_search])Finds the next available attribute that is available with the given prefix. getObjectType
()Returns the string node type of this node. getPath
()Returns the full path name of this node. getPluginName
()Return the name of the plugin that defines this node, if any getPlugs
()Returns the string names of all attributes that have incoming connections. getSetAttrCmds
(attr_name[, long_names, …])Returns an tuple of strings containing mel setAttr commands for given attribute and all of its descendent attrs. hasAttr
(attr_name[, parent_attr])Returns whether this node has an attribute with the given name. hasUniqueName
()Indicates whether or not this node’s name is unique within the scene. index
(sub[, start, end, include_namespaces])String operartion just like str.index(). isFromReferencedFile
()Indicates whether or not this node came from a referenced file. isLocked
()Indicates whether or not this node is locked. isValid
()Tests whether this node is still valid. isalnum
([include_namespaces])String operartion just like str.isalnum(). isalpha
([include_namespaces])String operartion just like str.isalpha(). islower
([include_namespaces])String operartion just like str.islower(). istitle
([include_namespaces])String operartion just like str.istitle(). isupper
([include_namespaces])String operartion just like str.isupper(). join
(iterable[, include_namespaces])String operartion just like str.join(). listAttr
(*args, **kargs)List the atributes on this node listConnections
([attr_name])List connections to this node lower
([include_namespaces])String operartion just like str.lower(). ls
(*args, **kargs)Wrapper class method for maya.cmds.ls thats returns a MNodeList result instead of a list of string names lstrip
([chars, include_namespaces])String operartion just like str.lstrip(). partition
(sep[, include_namespaces])String operartion just like str.partition(). removeInputConnections
(attr_name)Remove any incoming connections to the attribute with the given name. removeOutputConnections
(attr_name)Remove any output connections from the attribute with the given name. rename
(new_name, **kargs)Rename this node replace
(old, new[, count, include_namespaces])String operartion just like str.replace(). rfind
(sub[, start, end, include_namespaces])String operartion just like str.rfind(). rindex
(sub[, start, end, include_namespaces])String operartion just like str.rindex(). rpartition
(sep[, include_namespaces])String operartion just like str.rpartition(). rsplit
(sep[, maxsplit, include_namespaces])String operartion just like str.rsplit(). rstrip
([chars, include_namespaces])String operartion just like str.lstrip(). select
(**kargs)Selects this node with the given options. setAttr
(attr_name, *args, **kargs)Sets the given attr to the given value setAttrsFromMap
(attr_map[, skip_missing])Set attribute values from a dictionary object that has attribute names as keys and attribute values as values setDrivenKeyframe
(attr, driver, driver_attr, …)Sets a set driven key on the current node using the given options setMessageAttr
(attr_name, node[, lock])Connects the given node to the given message attribute on this node. setStringAttr
(attr_name, val, **kargs)Sets the given value on the given string attr. split
(sep[, maxsplit, include_namespaces])String operartion just like str.split(). startswith
(prefix[, start, end, …])String operartion just like str.startswith(). strip
([chars, include_namespaces])String operartion just like str.strip(). swapcase
([include_namespaces])String operartion just like str.swapcase(). upper
([include_namespaces])String operartion just like str.upper(). Methods Documentation
-
addAttr
(long_name=None, attr_type=None, **kargs)¶ Adds an attribute of the given long name and given type to the node. Supports all keyword args of maya.cmds.addAttr except “dt” and “at” which are replaced by the attr_type arg.
- long_name string long name of the attribute to add. This is optional if you prefer to use the
- standard Maya longName and/or shortName keywaords instead.
- attr_type string type of attribute to add. Supports all string types supported by
- the “dt” and “at” args of maya.cmds.addAttr
kargs keyword args supported by maya.cmds.addAttr and keyword ‘channelBox’
RETURNS None
>>> node_1.addAttr("test", "float")
-
addMenuCmd
(ui_name, cmd_str)¶ Add a context sensitive making menu to this node.
ui_name string menu item name to give this command in the marking menu
cmd string of python code to run when the menu item is selected
RETURNS None
-
applyAttrMap
(attr_map, skip_missing=False, skip_errors=False)¶ Apply the attribute values in the given dictionary object to this node.
attr_map dictionary object with str attribute names as keys and attribute values as values
- skip_missing bool - whether to skip over attributes that are missing from the scene. If False,
- a missing attribute will raise a RuntimeError
- skip_errors bool - whether to skip over setAttr errors. The default, False, will raise an exception
- if a setAttr error occurs.
RETURNS None
>>> attr_map = {"translateX":100.0, "visibility":True} >>> node.applyAttrMap(attr_map)
-
attachMenuItems
(parent_menu)¶ This method attaches any defined menu cmds on this node to the given Maya menu item. Defined menu commands should be created using the addMenuCmd method.
This is designed to be used in Maya’s dagMenuProc.mel but can be used with any Maya menu item.
To get this to work with default dag marking menu, Maya’s dagMenuProc.mel must be modified with the following mel code at the top of global proc dagMenuProc() —
python("import mpylib; mpylib.MNode('" + $object + "').attachMenuItems('" + $parent + "')");
parent_menu string parent menu item to attach to
RETURNS None
-
attributeQuery
(attr_name, **kargs)¶ Query information about the given attribute.
attr_name string name of the attribute to query
kargs keyword args supported by maya.cmds.attributeQuery
RETURNS results of the attribute query
>>> ## query the string values of an enum attr >>> node.attributeQuery("myEnumAttr", listEnum=True) >>> >>> ## tset if the attr is an enum >>> node.attributeQuery("myEnumAttr", enum=True)
-
bakeResults
(*args, **kargs)¶ Run bakeResults on this node with the given options
- args optional string args of attributes to bake. If args are given,
- any value given to the attribute flag will be overridden
kargs keyword args supported by maya.cmds.bakeResults
RETURNS None
>>> node_1.bakeResults("translateX", "scaleY", simulate=True)
-
capitalize
(include_namespaces=False)¶ String operartion just like str.capitalize(). Return a copy of the objects shortname with only its first character capitalized
include_namespaces bool - If False, returned string will not include namespaces. default=False
RETURNS string
-
connectAttr
(src_attr, dst_node, dst_attr, **kargs)¶ Connects the given attribute of this node to the given node and attribute.
src_attr string name of the source attr on this node
dst_node string name or MNode of the destination node
dst_attr string name of the destination node
kargs keywords arg supported by maya.cmds.connectAttr
RETURNS None
>>> ## connect node_a translateX to node_b translateZ >>> node_a.connectAttr("tx", node_b, "tz")
-
count
(sub, start=None, end=None, include_namespaces=False)¶ String operartion just like str.count(). Return the number of (non-overlapping) occurrences of substring sub in string s[start:end].
sub string substring to find with the object’s shortname
start optional int start index
end optional int end index
include_namespaces bool - If False, namespaces in the object’s name will be ignored. default=False
RETURNS int index or int -1 is sub-string not found
-
classmethod
createNode
(node_type=None, **kargs)¶ Wrapper class method for maya.cmds.createNode thats returns a MNode object instead of a string name
Parameters: - node_type : str node type to create
- kargs : dict
keyword args supported by maya.cmds.createNode
Returns: - *MNode* of newly created node
Examples
>>> new_node = MNode.createNode("transform", name="new_node") >>> new_node = MNode.createNode("time")
-
delete
()¶ Delete the node from the scene. Trying to access the node after running this method will raise a RuntimeError.
RETURNS None
>>> node.delete()
-
deleteAttr
(attr_name)¶ Delete the attr with the given name from this node.
src_attr string name of the attr to delete
RETURNS None
>>> node.addAttr("foo", "float") >>> node.deleteAttr("foo")
-
duplicate
(**kargs)¶ Duplicate the node with the given options
kargs keywords arg supported by maya.cmds.duplicate
RETURNS MNode of the new node
>>> new_node = node.duplicate()
-
endswith
(suffix, start=None, end=None, include_namespaces=False)¶ String operartion just like str.endswith().
Return True if the string ends with the specified suffix, otherwise return False. suffix can also be a tuple of suffixes to look for. With optional start, test beginning at that position. With optional end, stop comparing at that position. Operrates only on the node’s name itself and NOT it’s full path if DAG
suffix string or tuple of strings to test against
start optional int test beginning at position
end optional int stop comparing at position
include_namespaces optional bool to include namespace in the test (default=False)
RETURNS bool
>>> node = MNode("cool_node") >>> node.endswith("_node") >>> #RESULT - True
-
find
(sub, start=None, end=None, include_namespaces=False)¶ String operartion just like str.find().
Return the lowest index in objects shortname where the substring sub is found such that sub is wholly contained in s[start:end]. Return -1 on failure
sub string substring to find with the object’s shortname
start optional int start index
end optional int end index
include_namespaces bool - If False, namespaces in the object’s name will be ignored. default=False
RETURNS int index or int -1 is sub-string not found
-
getAddAttrCmd
(attr_name, use_long_names=False)¶ Returns a string containing mel addAttr command for re-creating given dynamic attribute. This string could be used in a mayaAscii like format.
attr_name string name of the dynamic attribute to query
long_names bool - whether to return cmds with long attribute names. default=False
RETURNS string mel addAttr commands like you would see in a mayaAscii file or None
>>> node = MNode.createNode("transform") >>> node.addAttr("test", "float") >>> node.getAddAttrCmd("test") >>> #RESULT - ' addAttr -ci true -sn "test" -ln "test" -at "float";'
-
getAddAttrMaps
()¶ Returns a dictionary that contains addAttr details for all user defined dynamic attributes on the current node.
RETURNS dict containing keywords: “long_name”, “short_name”, “attr_type”
-
getAttr
(attr_name, **kargs)¶ Returns the value of the given attr on this node.
attr_name string name of attr kargs keywords arg supported by maya.cmds.getAttr
RETURNS value of the attribute
>>> tx_val = node.getAttr("translateX")
-
getAttrMap
(*args, **kargs)¶ Returns an OrderedDict of attributes as keys and their values as values. This method supports all arguments and keyword arguments used by maya.cmds.listAttr.
args optional specific string pattern of an attribute to query on the node. This supports multiple string args
kargs keywords args supported by maya.cmds.listAttr
RETURNS OrderedDict or None
>>> ## get the names and values of all keyable attributes on this node >>> keyable_map = node.getAttrMap(keyable=True) >>> >>> ## get names and values of all attributes that start with "trans" >>> trans_attrs = node.getAttrMap("trans*")
-
getBasename
()¶ Returns the string name of this node any namespaces.
RETURNS string base name
>>> node.getName() >>> ## RESULT: "char:weapon:model:foo:testNode" >>> >>> node.getBasename() >>> ## RESULT: "testNode"
-
getHashCode
()¶ Returns a hash code for the internal Maya object referenced by the MObject within this MNode
RETURNS int hash code
>>> hash_code = node.getHashCode()
-
getInheritedNodeTypes
()¶ Returns the node classes that this node type is inherited from.
RETURNS tuple of string node types or None
>>> node = MNode.createNode("transform", name="testNode") >>> >>> node.getInheritedNodeTypes() >>> ## RESULT: ("containerBase", "entity", "dagNode", "transform")
-
getMObject
()¶ Returns the MObject of this node
RETURNS OpenMaya.MObject
>>> m_obj = node.getMObject()
-
getMObjectHandle
()¶ Returns the MObjectHandle of this node
RETURNS OpenMaya.MObjectHandle
>>> m_obj_hndl = node.getMObjectHandle()
-
getMenuCmds
()¶ Return all custom marking menu items on this node.
RETURNS OrderedDict with string menu item names as keys and string python commands as values
-
getMessageAttr
(attr_name)¶ Returns the node that is connected to the given message attribute.
attr_name string name of the message attr
RETURNS MNode or None
>>> connected_node = node.getMessageAttr("msgAttr")
-
getName
()¶ Returns the string name of this node. Note that is is the short name of the object. This method does not return DAG node full paths. Returned name will include all parent namespaces.
RETURNS string name
>>> node_a = MNode.createNode("transform", name="testNode") >>> node.getName() >>> ## RESULT: "testNode"
-
getNamespace
()¶ Return the namespace this node belongs to, if any. Any returned namespace will always start with “:”.
RETURN string namespace or None if node is in the default namespace
>>> node = MNode.createNode("transform", name="test_node") >>> mc.namespace(add="test") >>> node.rename("test:test_node") >>> >>> namespace = node.getNamespace() >>> ##RESULT - ':test'
-
getNextAttr
(attr_prefix, start_num=0, max_search=500)¶ Finds the next available attribute that is available with the given prefix. An int is added to the end of the given attr prefix. The attribute is not added.
attr_prefix string prefix to use for the attr
start_num int number to start from. default = 0
- max_search int protection against infinite loop. An error RuntimeError is raised if an
- attribute slot is not found after this many tries. default = 500
RETURNS string attribute name
>>> new_attr = node.getNextAttr("foo") >>> ## RESULT: "foo0" >>> >>> node.addAttr(new_attr, "float") >>> next_atr = node.getNextAttr("foo") >>> ## RESULT: "foo1"
-
getObjectType
()¶ Returns the string node type of this node.
RETURNS string node type
>>> node = MNode.createNode("transform", name="testNode") >>> >>> node.getObjectType() >>> ## RESULT: "transform"
-
getPath
()¶ Returns the full path name of this node. This is equivalent to casting the node as a string. If this node is not DAG, the name of the node will be returned.
RETURNS string
>>> node_a = MNode.createNode("transform", name="testNode") >>> node.getName() >>> ## RESULT: "testNode" >>> >>> node.getPath() >>> ## RESULT: "|testNode" >>> >>> str(node) >>> ## RESULT: "|testNode"
-
getPluginName
()¶ Return the name of the plugin that defines this node, if any
RETURNS string name of the plugin where this node is defined or None if the node is native
-
getPlugs
()¶ Returns the string names of all attributes that have incoming connections.
RETURNS tuple of attribute string names or None
>>> plugs = node.getPlugs() >>> ## RESULT: None >>> >>> node_b.connectAttr("tx", node, "tz") >>> >>> plugs = node.getPlugs() >>> ## RESULT: ("translateZ",)
-
getSetAttrCmds
(attr_name, long_names=False, non_defaults_only=True)¶ Returns an tuple of strings containing mel setAttr commands for given attribute and all of its descendent attrs. This string could be used in a mayaAscii like format. This can be used to, if non_defaults_only is *True, test if the attribute has changed since the node was created.
attr_name string name of the attribute to query
long_names bool - whether to return cmds with long attribute names. default=False
- non_defaults_only bool - If True, return a value only if the attribute has been change
- from its default value or if its referenced and has been changed from
its referenced value. default=True
- RETURNS tuple of string mel setAttr commands like you would see in a mayaAscii file or
- None
>>> node = MNode.createNode("transform") >>> node.setAttr("tx", 100.0) >>> node.getSetAttrCmds("tx") >>> #RESULT - [u' setAttr ".tx" 100.0;'] >>> >>> #translateY has not changed so it will return None with non_defaults_only set to True >>> node.getSetAttrCmds("ty") >>> #RESULT - None
-
hasAttr
(attr_name, parent_attr=None)¶ Returns whether this node has an attribute with the given name.
attr_name string attr name
RETURNS bool
>>> node.hasAttr("foo") >>> ## RESULT: False >>> >>> node.addAttr("foo", "float") >>> node.hasAttr("foo") >>> ## RESULT: True
-
hasUniqueName
()¶ Indicates whether or not this node’s name is unique within the scene.
RETURNS bool
>>> node.hasUniqueName()
-
index
(sub, start=None, end=None, include_namespaces=False)¶ String operartion just like str.index(). Return the lowest index in objects shortname where the substring sub is found such that sub is wholly contained in s[start:end]. Raises ValueError when the substring is not found.
sub string substring to find with the object’s shortname
start optional int start index
end optional int end index
include_namespaces bool - If False, namespaces in the object’s name will be ignored. default=False
RETURNS int index
-
isFromReferencedFile
()¶ Indicates whether or not this node came from a referenced file.
RETURNS bool
-
isLocked
()¶ Indicates whether or not this node is locked.
RETURNS bool
>>> node.isLocked()
-
isValid
()¶ Tests whether this node is still valid. Nodes become invalid if deleted from the scene or a new scene is opened.
RETURNS bool
>>> node.isValid() >>> ## RESULT: True >>> >>> node.delete() >>> node.isValid() >>> ## RESULT: False
-
isalnum
(include_namespaces=False)¶ String operartion just like str.isalnum().
Return true if all characters in the nodes’s shortname are alphanumeric and there is at least one character, false otherwise. If include_namespaces arg is True, any ‘:’ characters in the node’s name will be ignored and not count towards the result of this method.
RETURNS bool
-
isalpha
(include_namespaces=False)¶ String operartion just like str.isalpha().
Return true if all characters in the nodes’s shortname are alpha and there is at least one character, false otherwise. If include_namespaces arg is True, any ‘:’ characters in the node’s name will be ignored and not count towards the result of this method.
include_namespaces bool - If False, namespaces in the object’s name will be ignored. default=False
RETURNS bool
-
islower
(include_namespaces=False)¶ String operartion just like str.islower().
Return true if all cased characters in the nodes’s shortname are lowercase and there is at least one cased character, false otherwise. If include_namespaces arg is True, any ‘:’ characters in the node’s name will be ignored and not count towards the result of this method.
include_namespaces bool - If False, namespaces in the object’s name will be ignored. default=False
RETURNS bool
-
istitle
(include_namespaces=False)¶ String operartion just like str.istitle().
Return true if the nodes’s shortname is a titlecased string and there is at least one character, for example uppercase characters may only follow uncased characters and lowercase characters only cased ones. Return false otherwise. If include_namespaces arg is True, any ‘:’ characters in the node’s name will be ignored and not count towards the result of this method.
include_namespaces bool - If False, namespaces in the object’s name will be ignored. default=False
RETURNS bool
-
isupper
(include_namespaces=False)¶ String operartion just like str.isupper().
Return true if all cased characters in the nodes’s shortname are upercase and there is at least one cased character, false otherwise. If include_namespaces arg is True, any ‘:’ characters in the node’s name will be ignored and not count towards the result of this method.
include_namespaces bool - If False, namespaces in the object’s name will be ignored. default=False
RETURNS bool
-
join
(iterable, include_namespaces=False)¶ String operartion just like str.join().
Return a string which is the concatenation of the strings in the iterable. The separator while be the node’s shortname.
iterable sequence of strings to join using the node’s shortname as the separator
include_namespaces bool - If False, namespaces in the nodes’s name will be ignored. default=False
RETURNS string
-
listAttr
(*args, **kargs)¶ List the atributes on this node
- args specific string pattern of an attribute to query on the node. This supports
- multiple string args
kargs keywords args supported by maya.cmds.listAttr RETURNS List of string atribute names or None
>>> ## list all attributes ## >>> attrs = node.listAttr() >>> >>> ## list all translate attrs >>> attrs = node.listAttr("translate*") >>> >>> ## list translate and rotate attrs >>> attrs = node.listAttr("translate*", "rotate*")
-
listConnections
(attr_name=None, **kargs)¶ List connections to this node
attr_name optional string name of an connected atribute. kargs keywords args supported by maya.cmds.listConnections RETURNS (MNodeList, None) if the “plugs” karg is not used.
(MNodeList, tuple*(*string attr_names)) if “plugs” is used.(None, None) if there are no results.
>>> nodes, plugs = node.listConnections(source=True)
-
lower
(include_namespaces=False)¶ String operartion just like str.lower().
Return a copy of nodes’s shortname, but with upper case letters converted to lower case.
include_namespaces bool - If False, namespaces in the nodes’s name will be ignored. default=False
RETURNS string
-
classmethod
ls
(*args, **kargs)¶ Wrapper class method for maya.cmds.ls thats returns a MNodeList result instead of a list of string names
args args supported by maya.cmds.ls
kargs keyword args supported by maya.cmds.ls
RETURNS MNodeList of nodes or None
>>> foo_nodes = MNode.ls("foo*") >>> time_nodes = MNode.ls(type="time")
-
lstrip
(chars=None, include_namespaces=False)¶ String operartion just like str.lstrip().
Return a copy of the node’s shortname with leading characters removed. If chars is omitted or None, whitespace characters are removed. If given and not None, chars must be a string; the characters in the string will be stripped from the beginning of the string this method is called on.
chars optional string to strip from the node’s shortname
RETURNS string
-
partition
(sep, include_namespaces=False)¶ String operartion just like str.partition().
Split the nodes’s shortname at the first occurrence of sep, and return a 3-tuple containing the part before the separator, the separator itself, and the part after the separator. If the separator is not found, return a 3-tuple containing the nodes’s shortname itself, followed by two empty strings.
include_namespaces bool - If False, namespaces in the nodes’s name will be ignored. default=False
RETURNS 3-tuple containing the part before the separator, the separator itself, and the part after the separator
-
removeInputConnections
(attr_name)¶ Remove any incoming connections to the attribute with the given name.
attr_name string name of the attribute
RETURNS None
-
removeOutputConnections
(attr_name)¶ Remove any output connections from the attribute with the given name.
attr_name string name of the attribute
RETURNS None
-
rename
(new_name, **kargs)¶ Rename this node
new_name string new name kargs keywords args supported by maya.cmds.rename
RETURNS None
-
replace
(old, new, count=None, include_namespaces=False)¶ String operartion just like str.replace().
Return a copy of the string with all occurrences of substring old replaced by new. If the optional argument count is given, only the first count occurrences are replaced
old sub string in the objects name to replace
new string to replace sub-string old with
RETURNS string
-
rfind
(sub, start=None, end=None, include_namespaces=False)¶ String operartion just like str.rfind(). Return the highest index in objects shortname where the substring sub is found such that sub is wholly contained in s[start:end]. Return -1 on failure
sub string substring to find with the object’s shortname
start optional int start index
end optional int end index
include_namespaces bool - If False, namespaces in the object’s name will be ignored. default=False
RETURNS int index or int -1 is sub-string not found
-
rindex
(sub, start=None, end=None, include_namespaces=False)¶ String operartion just like str.rindex().
Return the highest index in objects shortname where the substring sub is found such that sub is wholly contained in s[start:end]. Raises ValueError when the substring is not found.
sub string substring to find with the object’s shortname
start optional int start index
end optional int end index
include_namespaces bool - If False, namespaces in the object’s name will be ignored. default=False
RETURNS int index
-
rpartition
(sep, include_namespaces=False)¶ String operartion just like str.rpartition().
Split the nodes’s shortname at the last occurrence of sep, and return a 3-tuple containing the part before the separator, the separator itself, and the part after the separator. If the separator is not found, return a 3-tuple containing two empty strings, followed by the string itself.
include_namespaces bool - If False, namespaces in the nodes’s name will be ignored. default=False
RETURNS 3-tuple containing the part before the separator, the separator itself, and the part after the separator
-
rsplit
(sep, maxsplit=None, include_namespaces=False)¶ String operartion just like str.rsplit().
Return a list of the words of the nodes’s shortname, scanning from the end. To all intents and purposes, the resulting list of words is the same as returned by split(), except when the optional third argument maxsplit is explicitly specified and nonzero. If maxsplit is given, at most maxsplit number of splits (the rightmost ones) occur, and the remainder of the string is returned as the first element of the list (thus, the list will have at most maxsplit+1 elements).
sep string delimiter to split by
maxsplit optional int limit the amount of splits
include_namespaces optional bool to include namespace in the test (default=False)
RETURNS list of strings
>>> node = MNode("super_awesome_naming_convention") >>> node.split("_") >>> #RESULT - ['super', 'awesome', 'naming', 'convention']
-
rstrip
(chars=None, include_namespaces=False)¶ String operartion just like str.lstrip().
Return a copy of the node’s shortname with trailing characters removed. If chars is omitted or None, whitespace characters are removed. If given and not None, chars must be a string; the characters in the string will be stripped from the beginning of the string this method is called on.
chars optional string to strip from the node’s shortname
RETURNS string
-
select
(**kargs)¶ Selects this node with the given options.
kargs keywords args supported by maya.cmds.select RETURNS None
>>> node.select(repalce=True) >>> node.select(deselect=True)
-
setAttr
(attr_name, *args, **kargs)¶ Sets the given attr to the given value
attr_name string name of attr to set args args supported by maya.cmds.setAttr
kargs keywords arg supported by maya.cmds.setAttr
RETURNS None
>>> node.setAttr("translateX", 40.0)
-
setAttrsFromMap
(attr_map, skip_missing=True)¶ Set attribute values from a dictionary object that has attribute names as keys and attribute values as values
attr_map dict or OrderedDict that has has attribute names as keys and attribute values as values skip_missing bool - whether to skip over attributes that exist in the incomming data
but not on the node. default=TrueRETURNS None
>>> data = {"tx":1.0, "ty":2.0, "tz":3.0} >>> node.setAttrsFromMap(data)
-
setDrivenKeyframe
(attr, driver, driver_attr, **kargs)¶ Sets a set driven key on the current node using the given options
attr string name of the attr to be driven. Use this instead of the standard ‘attribute’ option driver MNode of the node to use as the driver. Use this with the driver_attr
arg instead of using the standard ‘currentDriver’ optiondriver_attr string name of the attribute on the dirver node to use kargs keywords arg supported by maya.cmds.setDrivenKeyframe RETURNS None
-
setMessageAttr
(attr_name, node, lock=True)¶ Connects the given node to the given message attribute on this node. If the attr does not exist, it is created.
attr_name string name of the message attr
node MNode of the node to connect
RETURNS MNode or None
>>> node_a = MNode.createNode("transform") >>> node_b = MNode.createNode("transform") >>> >>> node_a.setMessageAttr("nodeB", node_b)
-
setStringAttr
(attr_name, val, **kargs)¶ Sets the given value on the given string attr. If the attr does not exist, it is created. attr_name string name of the string attr val value to set the attr to. Non-string values will be cast to string.
RETURNS None
>>> node.setStringAttr("fooAttr", "fooVal")
-
split
(sep, maxsplit=None, include_namespaces=False)¶ String operartion just like str.split().
Return a list of the words in the node name, using sep as the delimiter string. If maxsplit is given, at most maxsplit splits are done (thus, the list will have at most maxsplit+1 elements). If maxsplit is not specified or -1, then there is no limit on the number of splits (all possible splits are made).
If sep is given, consecutive delimiters are not grouped together and are deemed to delimit empty strings (for example, ‘1,,2’.split(‘,’) returns [‘1’, ‘’, ‘2’]). The sep argument may consist of multiple characters (for example, ‘1<>2<>3’.split(‘<>’) returns [‘1’, ‘2’, ‘3’]). Splitting an empty string with a specified separator returns [‘’].
If sep is not specified or is None, a different splitting algorithm is applied: runs of consecutive whitespace are regarded as a single separator, and the result will contain no empty strings at the start or end if the string has leading or trailing whitespace. Consequently, splitting an empty string or a string consisting of just whitespace with a None separator returns [].
sep string delimiter to split by
maxsplit optional int limit the amount of splits
include_namespaces optional bool to include namespace in the test (default=False)
RETURNS list of strings
>>> node = MNode("super_awesome_naming_convention") >>> node.split("_") >>> #RESULT - ['super', 'awesome', 'naming', 'convention']
-
startswith
(prefix, start=None, end=None, include_namespaces=False)¶ String operartion just like str.startswith().
Return True if nodes’ shortname starts with the prefix, otherwise return False. prefix can also be a tuple of prefixes to look for. With optional start, test string beginning at that position. With optional end, stop comparing string at that position.
prefix string or tuple of strings to test against
start optional int test beginning at position
end optional int stop comparing at position
include_namespaces optional bool to include namespace in the test (default=False)
RETURNS bool
>>> node = MNode("cool_node") >>> node.startswith("cool_") >>> #RESULT - True
-
strip
(chars=None, include_namespaces=False)¶ String operartion just like str.strip().
Return a copy of the node’s shortname with leading and trailing characters removed. If chars is omitted or None, whitespace characters are removed. If given and not None, chars must be a string; the characters in the string will be stripped from the both ends of the string this method is called on.
chars optional string to strip from the node’s shortname
RETURNS string
-
swapcase
(include_namespaces=False)¶ String operartion just like str.swapcase().
Return a copy of node’s shortname, but with lower case letters converted to upper case and vice versa.
RETURNS string
-
upper
(include_namespaces=False)¶ String operartion just like str.upper(). Return a copy of object’s shortname, but with lower case letters converted to upper case.
RETURNS string


Calm: SSH Key Creation¶
Overview¶
In this exercise you will create SSH private and public keys to be used with Calm. These keys will be required for any pre-seeded Marketplace appplication, as the default Cloud CentOS image does not allow password based authentication. They are also required for any of the public clouds.
The methods to generate the SSH keys are different depending on if you’re running MacOS / Linux, or Windows. Please jump to the appropriate section.
MacOS / Linux¶
SSH Key Creation¶
Open up your terminal of choice, and type in ssh-keygen -t rsa -f ~/[KEY_FILENAME] -C [USERNAME]. After hitting enter, follow the prompts. Note: Using a passphrase on your key is only supported if your Prism Central version is greater than or equal to 5.8.1, otherwise a passphrase cannot be used. The below example will not use a passphrase as this will work on all Prism Central versions.
$ ssh-keygen -t rsa -f ~/calmkey -C<EMAIL_ADDRESS>Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/michael.haigh/calmkey.
Your public key has been saved in /Users/michael.haigh/calmkey.pub.
The key fingerprint is:
SHA256:WFAeoxKbQqFf8qt0F8za9tt3KfXf69LJuESG/N4jy+o<EMAIL_ADDRESS>The key's randomart image is:
+---[RSA 2048]----+
| o.. ..+ |
| o + + o |
|. o = . o |
| . = + o . . |
| . . = S o o |
| + . + . |
| . + + ++o.|
| . o o . . *++=o|
| . o.oE.B*+*|
+----[SHA256]-----+
Accessing the Private Key¶
When working through Calm blueprints and application launches, you’ll need the username you provided in the first step (centos in my example, as the majority of the pre-seeded marketplace apps use centos as the username), and the contents of the private key (including the —–BEGIN RSA PRIVATE KEY—– and —–END RSA PRIVATE KEY—– lines, without any additional new lines at the end).
$ cat calmkey
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAw6CZT4/gAj8hxptH/hck0D0bfptR+ibLci7bxSVJ7Q8hdv3a
qXEPUHyisNUHI8xnUkvAeh63Tjoymc+No9Nf2C1hctmKwy0Dh3DSYul6MAkNOfQu
2x3oT+ZajTem0SM3UJ6hmRmIvIimM1AoTFbrH7D3eWWaNKxwgIggD9chaq3EpqvN
0DTdV/BWdQjqDAeurysg9qxKHis+JYpRHlisj+ES5pDnNXjGEDXcjDgjRRWypgtZ
zyfjKcaNR3zUfOEe1jZeaBGjUDjkTfjWjs7uQcYptoYSb1N+yfudOGs2dTwlIh4g
tPswcOCX3jijL7SJ5pBGUBHd8uEayBy1ygeGGwIDAQABAoIBADINZSx2I1pvzLSE
Bmd8hG7DM8Ww98iJJISSeKh4YfHFbUqEqO2xf7mYKggUeT8vjUABIb4dHclmGoxA
Dn1cF6m38rbv8hD982kz9KBaHGkt57RsRZDKliXbSk/XbVcVK5H1BGOnpNSYIe3/
FFBz7LSvEqJ83Hedpys7qPhkkqg4WsgRZrrQNgkA4WOSm8wSnTHrZnI7VHY/MpYI
606nKx39O1cjN0tiiXKnasgqKZWDfOO7NvhD+YXPnky2XT+mWoPFmDEx8jrbHt7Q
DTs7xFpC6TYfQPh7lyhsQDcEYjWZn/ZdEKOhCeo24REbez+tz4s2dL3EyGKbQKkz
FltVMAECgYEA8IGp5e8zJBhwWq/N7bM5NutUZn9SsEQ039KUTzGUmeE4nnt+0iFf
t4Uor1/Hzj1PrYqgJl9tHhAXQslYH/l6W7X+u49TJAl5SuESfrH3x5+V95lC5nI4
SEai7PjmTRZ45jc0tCKnxOgQnCcS6qHgyxWxItr3ps7aMCHrmaBTjCsCgYEA0DrO
YdRxWCFZOrmwP0xfbPKbuv2sjV6MN+SeDFAl4MV+DYMIF0xgESakLWybisaYytwH
IRANEDAEuXMUblCJic+a35FC14IlzU3ksZVf83zyleKB15iEgDkI7EoyczumlKiD
sumBoCBALWzwxNd1tiDm9LyHjnpx2+y640VfxdECgYAPleeDrg+bXDYTumbW65Fe
nLt4dPHP2GuwwX248BaYLj80Df628VC5nNh5HPTeyZxbO6uLMQ3qL9LCEjgywkEK
pm2ei/gwUqjYkGNZcIEFH7NhOz5ZnrdE/8bZInwSLM2i5Zr1vXUvznYdGG8iY2Ek
5//1qUj5N1huXBRffUNMxwKBgELQq8p+ZYQ25y/Nx3z4H6KQ0mGU5lpSXUHODNy8
lvrhxAnH4r+/FRBLyuB8egh0ozBsm6kDQn3QOqPbBlJDa26Z/AMC1GTccQ7IkLpe
yPQTQq/Ph4RLfzC5nGBdioSpPlFzJRcykBJ2ZsFstHElBbNUKWecWw7fwUslUe59
IzcRAoGBAJsNwacNC6VeojCKcp4aaQhH8vEd8F5cff2qGTMjplhqSyl1eqr7IJ3n
AajZbsS2UJa35UxpSXzeMoUaQB6EG5e//BG5Br+6n1aOHlERJV7t9/Z4re9g2lIk
msuEm+VNsXpZQ4lspARV8kqWcNzrhGSfgq1BEHWIHBKp93mMigL4
-----END RSA PRIVATE KEY-----
Accessing the Public Key¶
Depending on the cloud that you’re deploying onto, the public SSH key will be used in different places. For AHV launches, there’s a INSTANCE_PUBLIC_KEY macro that you’ll paste the key into, and for GCP there’s a SSH KEYS section. You’ll want to copy the entire single line of the public key (starting with ssh-rsa and ending with the username and domain), without any new lines.
$ cat calmkey.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDDoJlPj+ACPyHGm0f+FyTQPRt+m1H6JstyLtvFJUntDyF2/dqpcQ9QfKKw1QcjzGdSS8B6HrdOOjKZz42j01/YLWFy2YrDLQOHcNJi6XowCQ059C7bHehP5lqNN6bRIzdQnqGZGYi8iKYzUChMVusfsPd5ZZo0rHCAiCAP1yFqrcSmq83QNN1X8FZ1COoMB66vKyD2rEoeKz4lilEeWKyP4RLmkOc1eMYQNdyMOCNFFbKmC1nPJ+Mpxo1HfNR84R7WNl5oEaNQOORN+NaOzu5Bxim2hhJvU37J+504azZ1PCUiHiC0+zBw4JfeOKMvtInmkEZQEd3y4RrIHLXKB4Yb<EMAIL_ADDRESS>Windows¶
SSH Key Creation¶
If Putty Keygen is not already present on your machine, first download and install puttygen.exe.
Open up Putty Key Generator
Create a key by clicking Generate and then moving your mouse in the blank section
Convert the private key to OpenSSH format by selecting Conversion > Export OpenSSH key
On the pop-up, select Yes as a passphrase is not required, and not supported for Prism Central versions less than 5.8.1
Save the key with a name of your choice (I’m using calmPem.pem in my example)
Accessing the Private Key¶
When working through Calm blueprints and application launches, you’ll need the contents of the private key that we just generated. The easiest thing to do is to open the private key (calmPem.pem in this example) with a text editor of your choice, and copy the key, starting with —–BEGIN RSA PRIVATE KEY—– and ending with —–END RSA PRIVATE KEY—– lines, without any additional new lines at the end.
Accessing the Public Key¶
Back in Putty Keygen, near the top there’s a Public key section. Copy the contents of that key, open up a text editor, and save the single line for later use. Depending on the cloud that you’re deploying onto, the public SSH key will be used in different places. For AHV launches, there’s a INSTANCE_PUBLIC_KEY macro that you’ll paste the key into, and for GCP there’s a SSH KEYS section.
Takeaways¶
- Calm and the public clouds use private and public RSA SSH Keys for secure authentication
- Private keys are always entered in to the Credentials section of the blueprint or application launch page
- Public keys are inputted in different ways depending on the cloud you’re deploying onto


Set a new password for
Be aware, if you reset your password - all your current entries will be deleted!


$ git rev-list foo bar ^baz
git-rev-list(1) Manual Page
NAME
git-rev-list - Lists commit objects in reverse chronological order
SYNOPSIS
git rev-list [ --max-count=<number> ] [ --skip=<number> ] [ --max-age=<timestamp> ] [ --min-age=<timestamp> ] [ --sparse ] [ --merges ] [ --no-merges ] [ --min-parents=<number> ] [ --no-min-parents ] [ --max-parents=<number> ] [ --no-max-parents ] [ --first-parent ] [ --remove-empty ] [ --full-history ] [ --not ] [ --all ] [ --branches[=<pattern>] ] [ --tags[=<pattern>] ] [ --remotes[=<pattern>] ] [ --glob=<glob-pattern> ] [ --ignore-missing ] [ --stdin ] [ --quiet ] [ --topo-order ] [ --parents ] [ --timestamp ] [ --left-right ] [ --left-only ] [ --right-only ] [ --cherry-mark ] [ --cherry-pick ] [ --encoding=<encoding> ] [ --(author|committer|grep)=<pattern> ] [ --regexp-ignore-case | -i ] [ --extended-regexp | -E ] [ --fixed-strings | -F ] [ --date=(local|relative|default|iso|rfc|short) ] [ [--objects | --objects-edge] [ --unpacked ] ] [ --pretty | --header ] [ --bisect ] [ --bisect-vars ] [ --bisect-all ] [ --merge ] [ --reverse ] [ --walk-reflogs ] [ --no-walk ] [ --do-walk ] <commit>... [ -- <paths>... ]
DESCRIPTION
List commits that are reachable by following the parent links from the given commit(s), but exclude commits that are reachable from the one(s) given with a ^ in front of them. The output is given in reverse chronological order by default.
You can think of this as a set operation. Commits given on the command line form a set of commits that are reachable from any of them, and then commits reachable from any of the ones given with ^ in front are subtracted from that set. The remaining commits are what comes out in the command's output. Various other options and paths parameters can be used to further limit the result.
Thus, the following command:
means "list all the commits which are reachable from foo or bar, but not from baz".
A special notation "<commit1>..<commit2>" can be used as a short-hand for "^<commit1> <commit2>". For example, either of the following may be used interchangeably:
$ git rev-list origin..HEAD $ git rev-list HEAD ^origin
Another special notation is "<commit1>...<commit2>" which is useful for merges. The resulting set of commits is the symmetric difference between the two operands. The following two commands are equivalent:
$ git rev-list A B --not $(git merge-base --all A B) $ git rev-list A...B
rev-list is a very essential Git command, since it provides the ability to build and traverse commit ancestry graphs. For this reason, it has a lot of different options that enables it to be used by commands as different as git bisect and git repack.
OPTIONS
Commit Limiting
Besides specifying a range of commits that should be listed using the special notations explained in the description, additional commit limiting may be applied.
Using more options generally further limits the output (e.g. --since=<date1> limits to commits newer than <date1>, and using it with --grep=<pattern> further limits to commits whose log message has a line that matches <pattern>), unless otherwise noted.
Note that these are applied before commit ordering and formatting options, such as --reverse.
- -<number>
- -n <number>
- --max-count=<number>
Limit the number of commits to output.
- --skip=<number>
Skip number commits before starting to show the commit output.
- --since=<date>
- --after=<date>
Show commits more recent than a specific date.
- --until=<date>
- --before=<date>
Show commits older than a specific date.
- --max-age=<timestamp>
- --min-age=<timestamp>
Limit the commits output to specified time range.
- --author=<pattern>
- --committer=<pattern>
Limit the commits output to ones with author/committer header lines that match the specified pattern (regular expression). With more than one --author=<pattern>, commits whose author matches any of the given patterns are chosen (similarly for multiple --committer=<pattern>).
- --grep-reflog=<pattern>
Limit the commits output to ones with reflog entries that match the specified pattern (regular expression). With more than one --grep-reflog, commits whose reflog message matches any of the given patterns are chosen. It is an error to use this option unless --walk-reflogs is in use.
- --grep=<pattern>
Limit the commits output to ones with log message that matches the specified pattern (regular expression). With more than one --grep=<pattern>, commits whose message matches any of the given patterns are chosen (but see --all-match).
When --show-notes is in effect, the message from the notes as if it is part of the log message.
- --all-match
Limit the commits output to ones that match all given --grep, instead of ones that match at least one.
- -i
- --regexp-ignore-case
Match the regular expression limiting patterns without regard to letter case.
- --basic-regexp
Consider the limiting patterns to be basic regular expressions; this is the default.
- -E
- --extended-regexp
Consider the limiting patterns to be extended regular expressions instead of the default basic regular expressions.
- -F
- --fixed-strings
Consider the limiting patterns to be fixed strings (don't interpret pattern as a regular expression).
- --perl-regexp
Consider the limiting patterns to be Perl-compatible regular expressions. Requires libpcre to be compiled in.
- --remove-empty
Stop when a given path disappears from the tree.
- --merges
Print only merge commits. This is exactly the same as --min-parents=2.
- --no-merges
Do not print commits with more than one parent. This is exactly the same as --max-parents=1.
- --min-parents=<number>
- --max-parents=<number>
- --no-min-parents
- --no-max-parents
Show only commits which have at least (or at most) that many parent commits. In particular, --max-parents=1 is the same as --no-merges, --min-parents=2 is the same as --merges. --max-parents=0 gives all root commits and --min-parents=3 all octopus merges.
--no-min-parents and --no-max-parents reset these limits (to no limit) again. Equivalent forms are --min-parents=0 (any commit has 0 or more parents) and --max-parents=-1 (negative numbers denote no upper limit).
- --first-parent
Follow only the first parent commit upon seeing a merge commit. This option can give a better overview when viewing the evolution of a particular topic branch, because merges into a topic branch tend to be only about adjusting to updated upstream from time to time, and this option allows you to ignore the individual commits brought in to your history by such a merge.
- --not
Reverses the meaning of the ^ prefix (or lack thereof) for all following revision specifiers, up to the next --not.
- --all
Pretend as if all the refs in refs/ are listed on the command line as <commit>.
- --branches[=<pattern>]
Pretend as if all the refs in refs/heads are listed on the command line as <commit>. If <pattern> is given, limit branches to ones matching given shell glob. If pattern lacks ?, *, or [, /* at the end is implied.
- --tags[=<pattern>]
Pretend as if all the refs in refs/tags are listed on the command line as <commit>. If <pattern> is given, limit tags to ones matching given shell glob. If pattern lacks ?, *, or [, /* at the end is implied.
- --remotes[=<pattern>]
Pretend as if all the refs in refs/remotes are listed on the command line as <commit>. If <pattern> is given, limit remote-tracking branches to ones matching given shell glob. If pattern lacks ?, *, or [, /* at the end is implied.
- --glob=<glob-pattern>
Pretend as if all the refs matching shell glob <glob-pattern> are listed on the command line as <commit>. Leading refs/, is automatically prepended if missing. If pattern lacks ?, *, or [, /* at the end is implied.
- --ignore-missing
Upon seeing an invalid object name in the input, pretend as if the bad input was not given.
- --stdin
In addition to the <commit> listed on the command line, read them from the standard input. If a -- separator is seen, stop reading commits and start reading paths to limit the result.
- --quiet
Don't print anything to standard output. This form is primarily meant to allow the caller to test the exit status to see if a range of objects is fully connected (or not). It is faster than redirecting stdout to /dev/null as the output does not have to be formatted.
- --cherry-mark
Like --cherry-pick (see below) but mark equivalent commits with = rather than omitting them, and inequivalent ones with +.
- --cherry-pick
Omit any commit that introduces the same change as another commit on the other side when the set of commits are limited with symmetric difference.
For example, if you have two branches, A and B, a usual way to list all commits on only one side of them is with --left-right (see the example below in the description of the --left-right option). However, it shows the commits that were cherry-picked from the other branch (for example, 3rd on b may be cherry-picked from branch A). With this option, such pairs of commits are excluded from the output.
- --left-only
- --right-only
List only commits on the respective side of a symmetric range, i.e. only those which would be marked < resp. > by --left-right.
For example, --cherry-pick --right-only A...B omits those commits from B which are in A or are patch-equivalent to a commit in A. In other words, this lists the + commits from git cherry A B. More precisely, --cherry-pick --right-only --no-merges gives the exact list.
- --cherry
A synonym for --right-only --cherry-mark --no-merges; useful to limit the output to the commits on our side and mark those that have been applied to the other side of a forked history with git log --cherry upstream...mybranch, similar to git cherry upstream mybranch.
- -g
- --walk-reflogs
Instead of walking the commit ancestry chain, walk reflog entries from the most recent one to older ones. When this option is used you cannot specify commits to exclude (that is, ^commit, commit1..commit2, nor commit1\...commit2 notations cannot be used).
With --pretty format other than oneline (for obvious reasons), this causes the output to have two extra lines of information taken from the reflog. By default, commit@{Nth} notation is used in the output. When the starting commit is specified as commit@{now}, output also uses commit@{timestamp} notation instead. Under --pretty=oneline, the commit message is prefixed with this information on the same line. This option cannot be combined with --reverse. See also git-reflog(1).
- --merge
After a failed merge, show refs that touch files having a conflict and don't exist on all heads to merge.
- --boundary
Output excluded boundary commits. Boundary commits are prefixed with -.
History Simplification
Sometimes you are only interested in parts of the history, for example the commits modifying a particular <path>. But there are two parts of History Simplification, one part is selecting the commits and the other is how to do it, as there are various strategies to simplify the history.
The following options select the commits to be shown:
- <paths>
Commits modifying the given <paths> are selected.
- --simplify-by-decoration
Commits that are referred by some branch or tag are selected.
Note that extra commits can be shown to give a meaningful history.
The following options affect the way the simplification is performed:
- Default mode
Simplifies the history to the simplest history explaining the final state of the tree. Simplest because it prunes some side branches if the end result is the same (i.e. merging branches with the same content)
- --full-history
Same as the default mode, but does not prune some history.
- --dense
Only the selected commits are shown, plus some to have a meaningful history.
- --sparse
All commits in the simplified history are shown.
- --simplify-merges
Additional option to --full-history to remove some needless merges from the resulting history, as there are no selected commits contributing to this merge.
- --ancestry-path
When given a range of commits to display (e.g. commit1..commit2 or commit2 ^commit1), only display commits that exist directly on the ancestry chain between the commit1 and commit2, i.e. commits that are both descendants of commit1, and ancestors of commit2.
A more detailed explanation follows.
Suppose you specified foo as the <paths>. We shall call commits that modify foo !TREESAME, and the rest TREESAME. (In a diff filtered for foo, they look different and equal, respectively.)
In the following, we will always refer to the same example history to illustrate the differences between simplification settings. We assume
that you are filtering for a file foo in this commit graph:
.-A---M---N---O---P---Q / / / / / / I B C D E Y \ / / / / / `-------------' X
The horizontal line of history A---Q is taken to be the first parent of each merge. The commits are: * `I` is the initial commit, in which `foo` exists with contents ``asdf'', and a file `quux` exists with contents ``quux''. Initial commits are compared to an empty tree, so `I` is !TREESAME. * In `A`, `foo` contains just ``foo''. * `B` contains the same change as `A`. Its merge `M` is trivial and hence TREESAME to all parents. * `C` does not change `foo`, but its merge `N` changes it to ``foobar'', so it is not TREESAME to any parent. * `D` sets `foo` to ``baz''. Its merge `O` combines the strings from `N` and `D` to ``foobarbaz''; i.e., it is not TREESAME to any parent. * `E` changes `quux` to ``xyzzy'', and its merge `P` combines the strings to ``quux xyzzy''. `P` is TREESAME to `O`, but not to `E`. * `X` is an independent root commit that added a new file `side`, and `Y` modified it. `Y` is TREESAME to `X`. Its merge `Q` added `side` to `P`, and `Q` is TREESAME to `P`, but not to `Y`. `rev-list` walks backwards through history, including or excluding commits based on whether `--full-history` and/or parent rewriting (via `--parents` or `--children`) are used. The following settings are available. Default mode:: Commits are included if they are not TREESAME to any parent (though this can be changed, see `--sparse` below). If the commit was a merge, and it was TREESAME to one parent, follow only that parent. (Even if there are several TREESAME parents, follow only one of them.) Otherwise, follow all parents. + This results in: +
.-A---N---O / / / I---------D
+ Note how the rule to only follow the TREESAME parent, if one is available, removed `B` from consideration entirely. `C` was considered via `N`, but is TREESAME. Root commits are compared to an empty tree, so `I` is !TREESAME. + Parent/child relations are only visible with `--parents`, but that does not affect the commits selected in default mode, so we have shown the parent lines. --full-history without parent rewriting:: This mode differs from the default in one point: always follow all parents of a merge, even if it is TREESAME to one of them. Even if more than one side of the merge has commits that are included, this does not imply that the merge itself is! In the example, we get +
I A B N D O P Q
+ `M` was excluded because it is TREESAME to both parents. `E`, `C` and `B` were all walked, but only `B` was !TREESAME, so the others do not appear. + Note that without parent rewriting, it is not really possible to talk about the parent/child relationships between the commits, so we show them disconnected. --full-history with parent rewriting:: Ordinary commits are only included if they are !TREESAME (though this can be changed, see `--sparse` below). + Merges are always included. However, their parent list is rewritten: Along each parent, prune away commits that are not included themselves. This results in +
.-A---M---N---O---P---Q / / / / / I B / D / \ / / / / `-------------'
+ Compare to `--full-history` without rewriting above. Note that `E` was pruned away because it is TREESAME, but the parent list of P was rewritten to contain `E`'s parent `I`. The same happened for `C` and `N`, and `X`, `Y` and `Q`. In addition to the above settings, you can change whether TREESAME affects inclusion: --dense:: Commits that are walked are included if they are not TREESAME to any parent. --sparse:: All commits that are walked are included. + Note that without `--full-history`, this still simplifies merges: if one of the parents is TREESAME, we follow only that one, so the other sides of the merge are never walked. --simplify-merges:: First, build a history graph in the same way that `--full-history` with parent rewriting does (see above). + Then simplify each commit `C` to its replacement `C'` in the final history according to the following rules: + -- * Set `C'` to `C`. + * Replace each parent `P` of `C'` with its simplification `P'`. In the process, drop parents that are ancestors of other parents or that are root commits TREESAME to an empty tree, and remove duplicates, but take care to never drop all parents that we are TREESAME to. + * If after this parent rewriting, `C'` is a root or merge commit (has zero or >1 parents), a boundary commit, or !TREESAME, it remains. Otherwise, it is replaced with its only parent. -- + The effect of this is best shown by way of comparing to `--full-history` with parent rewriting. The example turns into: +
.-A---M---N---O / / / I B D \ / / `---------'
+ Note the major differences in `N`, `P`, and `Q` over `--full-history`: + -- * `N`'s parent list had `I` removed, because it is an ancestor of the other parent `M`. Still, `N` remained because it is !TREESAME. + * `P`'s parent list similarly had `I` removed. `P` was then removed completely, because it had one parent and is TREESAME. + * `Q`'s parent list had `Y` simplified to `X`. `X` was then removed, because it was a TREESAME root. `Q` was then removed completely, because it had one parent and is TREESAME. -- Finally, there is a fifth simplification mode available: --ancestry-path:: Limit the displayed commits to those directly on the ancestry chain between the ``from'' and ``to'' commits in the given commit range. I.e. only display commits that are ancestor of the ``to'' commit and descendants of the ``from'' commit. + As an example use case, consider the following commit history: +
D---E-------F / \ \ B---C---G---H---I---J / \ A-------K---------------L--M
+ A regular 'D..M' computes the set of commits that are ancestors of `M`, but excludes the ones that are ancestors of `D`. This is useful to see what happened to the history leading to `M` since `D`, in the sense that ``what does `M` have that did not exist in `D`''. The result in this example would be all the commits, except `A` and `B` (and `D` itself, of course). + When we want to find out what commits in `M` are contaminated with the bug introduced by `D` and need fixing, however, we might want to view only the subset of 'D..M' that are actually descendants of `D`, i.e. excluding `C` and `K`. This is exactly what the `--ancestry-path` option does. Applied to the 'D..M' range, it results in: +
E-------F \ \ G---H---I---J \ L--M
The `--simplify-by-decoration` option allows you to view only the big picture of the topology of the history, by omitting commits that are not referenced by tags. Commits are marked as !TREESAME (in other words, kept after history simplification rules described above) if (1) they are referenced by tags, or (2) they change the contents of the paths given on the command line. All other commits are marked as TREESAME (subject to be simplified away). Bisection Helpers ~~~~~~~~~~~~~~~~~ --bisect:: Limit output to the one commit object which is roughly halfway between included and excluded commits. Note that the bad bisection ref `refs/bisect/bad` is added to the included commits (if it exists) and the good bisection refs `refs/bisect/good-*` are added to the excluded commits (if they exist). Thus, supposing there are no refs in `refs/bisect/`, if +
$ git rev-list --bisect foo ^bar ^baz
+ outputs 'midpoint', the output of the two commands +
$ git rev-list foo ^midpoint $ git rev-list midpoint ^bar ^baz
+ would be of roughly the same length. Finding the change which introduces a regression is thus reduced to a binary search: repeatedly generate and test new 'midpoint's until the commit chain is of length one. --bisect-vars:: This calculates the same as `--bisect`, except that refs in `refs/bisect/` are not used, and except that this outputs text ready to be eval'ed by the shell. These lines will assign the name of the midpoint revision to the variable `bisect_rev`, and the expected number of commits to be tested after `bisect_rev` is tested to `bisect_nr`, the expected number of commits to be tested if `bisect_rev` turns out to be good to `bisect_good`, the expected number of commits to be tested if `bisect_rev` turns out to be bad to `bisect_bad`, and the number of commits we are bisecting right now to `bisect_all`. --bisect-all:: This outputs all the commit objects between the included and excluded commits, ordered by their distance to the included and excluded commits. Refs in `refs/bisect/` are not used. The farthest from them is displayed first. (This is the only one displayed by `--bisect`.) + This is useful because it makes it easy to choose a good commit to test when you want to avoid to test some of them for some reason (they may not compile for example). + This option can be used along with `--bisect-vars`, in this case, after all the sorted commit objects, there will be the same text as if `--bisect-vars` had been used alone. Commit Ordering ~~~~~~~~~~~~~~~ By default, the commits are shown in reverse chronological order. --date-order:: Show no parents before all of its children are shown, but otherwise show commits in the commit timestamp order. --author-date-order:: Show no parents before all of its children are shown, but otherwise show commits in the author timestamp order. --topo-order:: Show no parents before all of its children are shown, and avoid showing commits on multiple lines of history intermixed. + For example, in a commit history like this: +
---1----2----4----7 \ \ 3----5----6----8---
+ where the numbers denote the order of commit timestamps, `git rev-list` and friends with `--date-order` show the commits in the timestamp order: 8 7 6 5 4 3 2 1. + With `--topo-order`, they would show 8 6 5 3 7 4 2 1 (or 8 7 4 2 6 5 3 1); some older commits are shown before newer ones in order to avoid showing the commits from two parallel development track mixed together. --reverse:: Output the commits in reverse order. Cannot be combined with `--walk-reflogs`. Object Traversal ~~~~~~~~~~~~~~~~ These options are mostly targeted for packing of Git repositories. --objects:: Print the object IDs of any object referenced by the listed commits. `--objects foo ^bar` thus means ``send me all object IDs which I need to download if I have the commit object _bar_ but not _foo_''. --objects-edge:: Similar to `--objects`, but also print the IDs of excluded commits prefixed with a ``-'' character. This is used by linkgit:git-pack-objects[1] to build ``thin'' pack, which records objects in deltified form based on objects contained in these excluded commits to reduce network traffic. --unpacked:: Only useful with `--objects`; print the object IDs that are not in packs. --no-walk[=(sorted|unsorted)]:: Only show the given commits, but do not traverse their ancestors. This has no effect if a range is specified. If the argument `unsorted` is given, the commits are shown in the order they were given on the command line. Otherwise (if `sorted` or no argument was given), the commits are shown in reverse chronological order by commit time. --do-walk:: Overrides a previous `--no-walk`. Commit Formatting ~~~~~~~~~~~~~~~~~ Using these options, linkgit:git-rev-list[1] will act similar to the more specialized family of commit log tools: linkgit:git-log[1], linkgit:git-show[1], and linkgit:git-whatchanged[1] --pretty[=<format>]:: --format=<format>:: Pretty-print the contents of the commit logs in a given format, where '<format>' can be one of 'oneline', 'short', 'medium', 'full', 'fuller', 'email', 'raw' and 'format:<string>'. See the "PRETTY FORMATS" section for some additional details for each format. When omitted, the format defaults to 'medium'. + Note: you can specify the default pretty format in the repository configuration (see linkgit:git-config[1]). --abbrev-commit:: Instead of showing the full 40-byte hexadecimal commit object name, show only a partial prefix. Non default number of digits can be specified with "--abbrev=<n>" (which also modifies diff output, if it is displayed). + This should make "--pretty=oneline" a whole lot more readable for people using 80-column terminals. --no-abbrev-commit:: Show the full 40-byte hexadecimal commit object name. This negates `--abbrev-commit` and those options which imply it such as "--oneline". It also overrides the 'log.abbrevCommit' variable. --oneline:: This is a shorthand for "--pretty=oneline --abbrev-commit" used together. --encoding=<encoding>:: The commit objects record the encoding used for the log message in their encoding header; this option can be used to tell the command to re-code the commit log message in the encoding preferred by the user. For non plumbing commands this defaults to UTF-8. --notes[=<ref>]:: Show the notes (see linkgit:git-notes[1]) that annotate the commit, when showing the commit log message. This is the default for `git log`, `git show` and `git whatchanged` commands when there is no `--pretty`, `--format` nor `--oneline` option given on the command line. + By default, the notes shown are from the notes refs listed in the 'core.notesRef' and 'notes.displayRef' variables (or corresponding environment overrides). See linkgit:git-config[1] for more details. + With an optional '<ref>' argument, show this notes ref instead of the default notes ref(s). The ref is taken to be in `refs/notes/` if it is not qualified. + Multiple --notes options can be combined to control which notes are being displayed. Examples: "--notes=foo" will show only notes from "refs/notes/foo"; "--notes=foo --notes" will show both notes from "refs/notes/foo" and from the default notes ref(s). --no-notes:: Do not show notes. This negates the above `--notes` option, by resetting the list of notes refs from which notes are shown. Options are parsed in the order given on the command line, so e.g. "--notes --notes=foo --no-notes --notes=bar" will only show notes from "refs/notes/bar". --show-notes[=<ref>]:: --[no-]standard-notes:: These options are deprecated. Use the above --notes/--no-notes options instead. --show-signature:: Check the validity of a signed commit object by passing the signature to `gpg --verify` and show the output. --relative-date:: Synonym for `--date=relative`. --date=(relative|local|default|iso|rfc|short|raw):: Only takes effect for dates shown in human-readable format, such as when using `--pretty`. `log.date` config variable sets a default value for the log command's `--date` option. + `--date=relative` shows dates relative to the current time, e.g. ``2 hours ago''. + `--date=local` shows timestamps in user's local time zone. + `--date=iso` (or `--date=iso8601`) shows timestamps in ISO 8601 format. + `--date=rfc` (or `--date=rfc2822`) shows timestamps in RFC 2822 format, often found in email messages. + `--date=short` shows only the date, but not the time, in `YYYY-MM-DD` format. + `--date=raw` shows the date in the internal raw Git format `%s %z` format. + `--date=default` shows timestamps in the original time zone (either committer's or author's). --header:: Print the contents of the commit in raw-format; each record is separated with a NUL character. --parents:: Print also the parents of the commit (in the form "commit parent..."). Also enables parent rewriting, see 'History Simplification' below. --children:: Print also the children of the commit (in the form "commit child...").  Commits from the left side are prefixed with `<` and those from the right with `>`. If combined with `--boundary`, those commits are prefixed with `-`. + For example, if you have this topology: +
y---b---b branch B / \ / / . / / \ o---x---a---a branch A
+ you would get an output like this: +
$ git rev-list --left-right --boundary --pretty=oneline A...B
>bbbbbbb... 3rd on b >bbbbbbb... 2nd on b <aaaaaaa... 3rd on a <aaaaaaa... 2nd on a -yyyyyyy... 1st on b -xxxxxxx... 1st on a
--graph:: Draw a text-based graphical representation of the commit history on the left hand side of the output. This may cause extra lines to be printed in between commits, in order for the graph history to be drawn properly. + This enables parent rewriting, see 'History Simplification' below. + This implies the `--topo-order` option by default, but the `--date-order` option may also be specified. --count:: Print a number stating how many commits would have been listed, and suppress all other output. When used together with `--left-right`, instead print the counts for left and right commits, separated by a tab. When used together with `--cherry-mark`, omit patch equivalent commits from these counts and print the count for equivalent commits separated by a tab. PRETTY FORMATS
If the commit is a merge, and if the pretty-format is not oneline, email or raw, an additional line is inserted before the Author: line. This line begins with "Merge: " and the sha1s of ancestral commits are printed, separated by spaces. Note that the listed commits may not necessarily be the list of the direct parent commits if you have limited your view of history: for example, if you are only interested in changes related to a certain directory or file.
There are several built-in formats, and you can define additional formats by setting a pretty.<name> config option to either another format name, or a format: string, as described below (see git-config(1)).  Notably, the SHA-1s are displayed in full, regardless of whether --abbrev or --no-abbrev are used, and parents information show the true parent commits, without taking grafts nor history simplification into account.
format:<string>
The format:<string> format allows you to specify which information you want to show. It works a little bit like printf format, with the notable exception that you get a newline with %n instead of \n.
E.g, format:"The author of %h was %an, %ar%nThe title was >>%s<<%n" would show something like this:
The author of fe6e0ee was Junio C Hamano, 23 hours ago The title was >>t4119: test autocomputing -p<n> for traditional diff input.<<
The placeholders are:
%H: commit hash
%h: abbreviated commit hash
%T: tree hash
%t: abbreviated tree hash
%P: parent hashes
%p: abbreviated parent hashes
%an: author name
%aN: author name (respecting .mailmap, see git-shortlog(1) or git-blame(1))
%ae: author email
%aE: author email (respecting .mailmap, see git-shortlog(1) or git-blame(1))
%ad: author date (format respects --date= option)
%aD: author date, RFC2822 style
%ar: author date, relative
%at: author date, UNIX timestamp
%ai: author date, ISO 8601 format
%cn: committer name
%cN: committer name (respecting .mailmap, see git-shortlog(1) or git-blame(1))
%ce: committer email
%cE: committer email (respecting .mailmap, see git-shortlog(1) or git-blame(1))
%cd: committer date
%cD: committer date, RFC2822 style
%cr: committer date, relative
%ct: committer date, UNIX timestamp
%ci: committer date, ISO 8601 format
%d: ref names, like the --decorate option of git-log(1)
%e: encoding
%s: subject
%f: sanitized subject line, suitable for a filename
%b: body
%B: raw body (unwrapped subject and body)
%N: commit notes
%GG: raw verification message from GPG for a signed commit
%G?: show "G" for a Good signature, "B" for a Bad signature, "U" for a good, untrusted signature and "N" for no signature
%GS: show the name of the signer for a signed commit
%GK: show the key used to sign a signed commit
%gD: reflog selector, e.g., refs/stash@{1}
%gd: shortened reflog selector, e.g., stash@{1}
%gn: reflog identity name
%gN: reflog identity name (respecting .mailmap, see git-shortlog(1) or git-blame(1))
%ge: reflog identity email
%gE: reflog identity email (respecting .mailmap, see git-shortlog(1) or git-blame(1))
%gs: reflog subject
%Cred: switch color to red
%Cgreen: switch color to green
%Cblue: switch color to blue
%Creset: reset color
%C(...): color specification, as described in color.branch.* config option; adding auto, at the beginning will emit color only when colors are enabled for log output (by color.diff, color.ui, or --color, and respecting the auto settings of the former if we are going to a terminal). auto alone (i.e. %C(auto)) will turn on auto coloring on the next placeholders until the color is switched again.
%m: left, right or boundary mark
%n: newline
%%: a raw %
%x00: print a byte from a hex code
%w([<w>[,<i1>[,<i2>]]]): switch line wrapping, like the -w option of git-shortlog(1).
%<(<N>[,trunc|ltrunc|mtrunc]): make the next placeholder take at least N columns, padding spaces on the right if necessary. Optionally truncate at the beginning (ltrunc), the middle (mtrunc) or the end (trunc) if the output is longer than N columns. Note that truncating only works correctly with N >= 2.
%<|(<N>): make the next placeholder take at least until Nth columns, padding spaces on the right if necessary
%>(<N>), %>|(<N>): similar to %<(<N>), %<|(<N>) respectively, but padding spaces on the left
%>>(<N>), %>>|(<N>): similar to %>(<N>), %>|(<N>) respectively, except that if the next placeholder takes more spaces than given and there are spaces on its left, use those spaces
%><(<N>), %><|(<N>): similar to % <(<N>), %<|(<N>) respectively, but padding both sides (i.e. the text is centered)
Note |
Some placeholders may depend on other options given to the revision traversal engine. For example, the %g* reflog options will insert an empty string unless we are traversing reflog entries (e.g., by git log -g). The %d placeholder will use the "short" decoration format if --decorate was not already provided on the command line. |
If you add a + (plus sign) after % of a placeholder, a line-feed is inserted immediately before the expansion if and only if the placeholder expands to a non-empty string.
If you add a - (minus sign) after % of a placeholder, line-feeds that immediately precede the expansion are deleted if and only if the placeholder expands to an empty string.
If you add a (space) after % of a placeholder, a space is inserted immediately before the expansion if and only if the placeholder expands to a non-empty string.
tformat:
The tformat: format works exactly like format:, except that it provides "terminator" semantics instead of "separator" semantics. In other words, each commit has the message terminator character (usually a newline) appended, rather than a separator placed between entries. This means that the final entry of a single-line format will be properly terminated with a new line, just as the "oneline" format does. For example:
$ git log -2 --pretty=format:%h 4da45bef \ | perl -pe '$_ .= " -- NO NEWLINE\n" unless /\n/' 4da45be 7134973 -- NO NEWLINE $ git log -2 --pretty=tformat:%h 4da45bef \ | perl -pe '$_ .= " -- NO NEWLINE\n" unless /\n/' 4da45be 7134973
In addition, any unrecognized string that has a % in it is interpreted as if it has tformat: in front of it. For example, these two are equivalent:
$ git log -2 --pretty=tformat:%h 4da45bef $ git log -2 --pretty=%h 4da45bef
GIT
Part of the git(1) suite


Here you will find the MegaMod, a mod that adds a virtual load of cheats and helpers to The Ur-Quan Masters Classic and HD. The Ur-Quan Masters is a port of the classic PC/3DO game, Star Control II, which I guess is redundant because if you're here you already knew that. Although to learn more about The Ur-Quan Masters you can head over to The Ur-Quan Masters project page.


Wellcome NodeJs...
...This is learn project Nodejs-WebRTC
Your Id:
Online User
Tên người dùng:
Sigin
Call To:
Call


< back
{{book.title}}by {{book.author}}
Published in {{book.year}} by {{book.publisher}}ISBN: {{book.isbn}}
{{book.review}}
No book was found.


Scholarship Program
At-Risk Scholars Get a Hand-Up We sponsor the neediest of students, usually in Kenya, and typically orphans. Sometimes we will sponsor a student who still has one parent if that parent has a disability. We provide scholarships for high school, university, polytechnic (trade) school, and rehabilitation schools. While elementary school is tuition free, we assist with uniforms, books, and shoes as well as various school fees. We like to protect the privacy of our students on scholarship but these are some recent recipients:
A high school student’s parents both died before he was 2 yrs old. He spent over a decade in an orphanage until he was ejected upon finishing the 8th grade because “funds were tight and the home was overflowing.” He’s been living with Good Samaritans since then, and Riva Refuge has been paying for his school expenses. We hope to increase his scholarship so that he can attend a boarding high school with a rigorous science curriculum for the next two years to help him meet his dream of becoming an engineer.
A freshman was about to begin high school when her father was injured and unable to work for months. We sponsored her until he was able to get back on the job to pay her expenses herself. Without the scholarship, she’s have had to sit out the full year.
Another of our scholarship/grant recipients had been a young elementary teacher before a catastrophic illness left her blind. We provided a Braille machine, a laptop with screen reading software, and many supplies to assist her rehabilitation. She now runs a nonprofit organization in Tanzania where she assists others with Community Based Rehabilitation.


lukechilds
thanks for you answers
also, re the devisor
I'm still not quite sure what exactly this is
when you get a value and devide it by a deviser it gives you the interest per minute, right?
so you can multiply that up for the duration of minutes to find the total interest amount
how did you actually calculate the value 10512000?
would just like to make the meaning a bit more clear in my code so I understand it when I come back to it
jl777c
it does all the multiplying and dividing needed to end up at 5% APR
i just combined numerator and denominator constants into a single one, but this way it avoids any overflow/underflow issues
in essence it is a constant. if you use half its value, then it will be 10% APR
if you use double the value 2.5% APR
it is just the constant that calculates 5% APR when used in the equation where it is
365 * 24 * 60 / 10512000 = 0.05
it is the divisor to use on the minutes in a year to get 5%


Chapter 13: And now what?
Where to start
This is not a book. It is almost a proposal. The start of future work. I'd like for a new movement to be born from here. We have been doing things the same way for a long time and I would like to break with this. But in a beautiful way. Nice. And within the reach of everyone.
This is my contribution.
Perhaps this may seem a bit pretentious, but I like the idea so much that I cannot help it. Excuse my audacity.
With this book I have tried to explain how I understand STxT, and what I meant to do when I created this language. Have I really created it? I guess the language was already there, and the only thing I had to do was bring it out into the light. I'd like to think that I made it as a sculptor.
Pending things
There is much left to do if we really want to adopt this technology. I'm going to give ideas, although surely I can’t even imagine the most interesting applications right now.
This is the beautiful part, you toss an idea and it no longer belongs to you, it grows and matures alone, and you can just watch where it goes :-)
In future editions I hope to be able to "delete" some of these things, and add new ones that are now unthinkable.
Editors with assisted content
We have many text editors, for many different languages. How would you like STxT editors? Our favorite editor, but now collecting web semantics and creating any type of structured content. Quickly and easily. For everyone. Now the content rules come up alone. With descriptions. Content is easy and quick to create. By everyone.
Libraries
We need STxT parsers in any programming language. There is much work to be done here. Fast and efficient language parsers.
It's like carrying what we already have in XML to STxT. And there is a lot.
Language converter
Surely we have languages that we don’t like, or that we believe can be simpler. We can pass directly to STxT or make converters that pass from STxT to another more specialized, but less semantic language.
For example we have Latex, second to none in terms of quality of output documents, but a bit difficult for most people. What would a STxT to Latex converter be like? We could make document types (articles, letters,...) and their converters to Latex. The original text would be very clear (STxT) and the final result file (pdf) would be excellent.
This would allow computer techs to keep more specialized technologies, and the rest to use simple formats like STxT.
Language substitution
This can be done in a lot of sites, XML documents, RSS's, special text files, program configurations; there are thousands of sites where a language or files could be replaced directly by STxT.
What would we gain? We would have enough with just one editor, texts would be easier to maintain, and by having a grammar we would also have the description of what a document should look like.

Who knows what may come up! :-D


Select My Store:
Log out
EN
English
SHOP
SALE
FLYER
SHOWCASE
MY CART(0)
Shopping Cart
Clear Cart
Continue shopping
Added items?
Update cart


| Class | OpenSocial::Connection |
| In: |
lib/opensocial/connection.rb
|
| Parent: | Object |
Describes a connection to an OpenSocial container, including the ability to declare an authorization mechanism and appropriate credentials.
| ORKUT | = | { :endpoint => 'http://sandbox.orkut.com/social', :rest => 'rest/', :rpc => 'rpc/' } |
| IGOOGLE | = | { :endpoint => 'http://sandbox.gmodules.com/api', :rest => '', :rpc => 'rpc' } |
| MYSPACE | = | { :endpoint => 'http://api.myspace.com/v2', :rest => '', :rpc => '', :base_uri => 'http://api.myspace.com', :request_token_path => '/request_token', :authorize_path => '/authorize', :access_token_path => '/access_token', :http_method => :get } |
| AUTH_HMAC | = | 0 |
| AUTH_ST | = | 1 |
| DEFAULT_OPTIONS | = | { :container => ORKUT, :st => '', :consumer_key => '', :consumer_secret => '', :consumer_token => OAuth::Token.new('', ''), :xoauth_requestor_id => '', :auth => AUTH_HMAC } |
| auth | [RW] | Defines the authentication scheme: HMAC or security token. |
| consumer_key | [RW] | Defines the consumer key for OAuth. |
| consumer_secret | [RW] | Defines the consumer secret for OAuth. |
| consumer_token | [RW] | Defines the consumer token for OAuth. |
| container | [RW] | Defines the container that will be used in requests. |
| st | [RW] | Defines the security token, for when OAuth is not in use. |
| xoauth_requestor_id | [RW] | Defines the ID of the requestor (required by some implementations when using OAuth). |
Initializes the Connection using the supplied options hash, or the defaults. Verifies that the supplied authentication type has proper (ie. non-blank) credentials, and that the authentication type is known.


| Package | com.whirled.contrib.card.graphics |
| Class | public class CardArraySprite |
| Inheritance | CardArraySprite flash.display.Sprite |
| Subclasses | HandSprite, TrickSprite |
| Property | Defined by | ||
|---|---|---|---|
| factory : CardSpriteFactory
[read-only] Access the factory for card creation and layout.
| CardArraySprite |
| Property | Defined by | ||
|---|---|---|---|
| _animations : Array | CardArraySprite | ||
| _cards : Array | CardArraySprite | ||
| _factory : CardSpriteFactory | CardArraySprite | ||
| _target : CardArray | CardArraySprite |
| Method | Defined by | ||
|---|---|---|---|
|
Create a new sprite for a CardArray.
| CardArraySprite |
| Method | Defined by | ||
|---|---|---|---|
|
animateAddition(card:CardSprite):void
Animates the addition of the card.
| CardArraySprite | ||
|
animateRemoval(card:CardSprite):void
Animates the removal of a card.
| CardArraySprite | ||
|
cardArrayListener(event:CardArrayEvent):void
When the card array changes, update our child sprites and re-layout.
| CardArraySprite | ||
|
getStaticCardPosition(i:int, pos:Point):void
Get the x, y position of a card in the array.
| CardArraySprite | ||
|
positionCards():void
Positions all cards (that are not currently animating).
| CardArraySprite | ||
|
refresh():void
Update our card sprites with the contents of the target card array.
| CardArraySprite |
| _animations | property |
protected var _animations:Array
| _cards | property |
protected var _cards:Array
| _factory | property |
protected var _factory:CardSpriteFactory
| factory | property |
factory:CardSpriteFactory
[read-only]Access the factory for card creation and layout.
Implementation public function get factory():CardSpriteFactory
| _target | property |
protected var _target:CardArray
| CardArraySprite | () | constructor |
public function CardArraySprite(target:CardArray, factory:CardSpriteFactory, doPositioning:Boolean = true)
Create a new sprite for a CardArray. The sprite will always listen for all changes on the array events and unregister when removed from the display list. Re-adding to the display list is not supported.
Parameterstarget:CardArray — the CardArray to listen to for changes to the sprite
|
|
factory:CardSpriteFactory — the embedded deck object to use when creating CardSprite instances
|
|
doPositioning:Boolean (default = true ) — specify whether to call positionCards |
| animateAddition | () | method |
protected function animateAddition(card:CardSprite):void
Animates the addition of the card. Default does nothing. Subclasses should set the starting position of the card and use slide to move it into its static position.
Parameterscard:CardSprite |
| animateRemoval | () | method |
protected function animateRemoval(card:CardSprite):void
Animates the removal of a card. The _cards array will be taken care of, this function must only guarantee that removeChild is called later. By default, just calls removeChild immediately.
Parameterscard:CardSprite |
| cardArrayListener | () | method |
protected function cardArrayListener(event:CardArrayEvent):void
When the card array changes, update our child sprites and re-layout.
Parametersevent:CardArrayEvent |
| getStaticCardPosition | () | method |
protected function getStaticCardPosition(i:int, pos:Point):void
Get the x, y position of a card in the array. The base implmentation just lays out the cards in a row using some hard-wired constants for width and height. Subclasses should override and use more specific values.
Parametersi:int |
|
pos:Point |
| positionCards | () | method |
protected function positionCards():void
Positions all cards (that are not currently animating).
| refresh | () | method |
protected function refresh():void
Update our card sprites with the contents of the target card array.


| 2021-present | Just-Evotec Biologics | Software Engineer |
Fulfilled unique role as software engineer and scientist. Oversaw improvement of scientific processes and data analyses. Developed custom web applications for bench and data scientists.
| 2018-2021 | UW-Seattle / DARPA | Researcher |
Led an interdisciplinary team focused on yeast strain manufacturing. Collaborated with mathematicians, software engineers, automation specialists, and AI/ML experts with the goal of expediting the generation of AI-ready biological datasets.
| 2014-2021 | UW-Seattle | PhD Candidate |
Conducted synthetic biology research on yeast and mammalian cells. In a small team, designed CRISPR technologies and tools for eukaryotic cells
| 2017-2019 | Global Impact | Co-founder and Software Lead |
Co-founded a global health start-up focusing on low-cost accessible diagnostics.
| 2021-present | JSeq | Lead Developer (Just-Evotec Biologics) |
Developed an internal data processing and analysis platform for analyzing biological sequences and large sequence libraries derived from sequencing data. The platform provides a Python API for the creation of re-configurable processing jobs, which are executed on an AWS EKS cluster. The results, such as library diversity and NGS QC metrics, are stored in an SQL database, and visualizations are displayed via a React front-end application using a GraphQL API.
| 2019-2021 | Terrarium |
Lead Developer (DARPA) |
Developed a dynamic computer-aided process planner (CAPP) for biology, which is designed to support agile manufacturing of biological products. The planner converts cell strain specifications into executable wetlab plans.
| 2017-2020 | DASi | Lead Developer (DARPA) |
Developed DASi, an automated DNA cloning plan designer designed for operation on small budgets. It emphasizes material reuse and features a user-friendly interface. DASi converts user-defined DNA sequences into executable molecular biology steps to construct the specified sequences
| 2016-2020 | Aquarium | Developer (UW-Seattle) |
Contributed as a developer for an open-source, human-in-the-loop laboratory automation system that facilitates rapid, flexible, and reproducible workflow development and execution. Contributed to the back-end development, which remains in use at the university's cloud service lab (UW-Biofab).
| 2023 | Robustness and reproducibility of simple and complex synthetic logic circuit designs using a DBTL loop | Oxford Univeristy Press: Synthetic Biology | B Cummins, JD Vrana, ..., SB Hasse |
| 2021 | Aquarium: open-source laboratory software for design, execution and data management | Oxford University Press: Synthetic Biology | JD Vrana, OD Lange, ..., E Klavins |
| 2021 | Implementation of an interactive mobile application to pilot a rapid assay to detect HIV drug resistance mutations in Kenya | AIDS |
JD Vrana, N Panpradist, ..., IA Beck |
| 2017 | Digital logic circuits in yeast with CRISPR-dCas9 NOR gates | Nature Communications | MW Gander, JD Vrana, WE Voje, JM Carothers, E Klavins |
| 2014 | An optimized optogenetic clustering tool for probing protein interaction and function | Nature communications | A Taslimi, JD Vrana, D Chen, S Borinskaya, BJ Mayer, MJ Kennedy, CL Tucker |


public class DiscreteDistribution extends AbstractDistribution implements java.io.Serializable, Copyable
random
| Constructor and Description |
|---|
DiscreteDistribution(double[] probabilities)
Make a new single discrete output
that models the given probabilities
|
DiscreteDistribution(Vector vector)
Make a new single discrete output
that models the given probabilities
|
| Modifier and Type | Method and Description |
|---|---|
Copyable |
copy()
Make a copy of this
|
void |
estimate(DataSet observations)
Reestimage based on the given data set
|
double |
getM()
Get the m value
|
double[] |
getPrior()
Get the prior probability
|
double[] |
getProbabilities()
Get the probabilities
|
int |
getRange()
Get the range of values represented
|
Instance |
mode(Instance ignored)
Generate the most likely value
|
double |
p(Instance i)
Get the probability of i
|
static DiscreteDistribution |
random(int range)
Make a new single discrete output
that models values [0, 1, 2, ..., range - 1]
|
Instance |
sample(Instance ignored)
Generate a discrete value consistent with the distribution
|
void |
setM(double d)
Set the m value
|
void |
setPrior(double[] priors)
Set the prior probability
|
void |
setProbabilities(double[] probabilities)
Set the probabilities
|
java.lang.String |
toString() |
static DiscreteDistribution |
uniform(int range)
Make a new single discrete output
that models values [0, 1, 2, ..., range - 1]
|
logp, mode, sample
public DiscreteDistribution(Vector vector)
probabilities
- array of probabilitites
such that the probabilities of output i
is probabilitites[i]m
- the continuity parameterpublic DiscreteDistribution(double[] probabilities)
probabilities
- array of probabilitites
such that the probabilities of output i
is probabilitites[i]m
- the continuity parameterpublic void setProbabilities(double[] probabilities)
probabilities
- the probabilitiespublic double[] getProbabilities()
public double p(Instance i)
p
in interface Distribution
i
- the discrete value to get the probability ofpublic Instance sample(Instance ignored)
sample
in interface Distribution
ignored
- the conditional values or nullpublic Instance mode(Instance ignored)
mode
in interface Distribution
ignored
- the instancepublic void estimate(DataSet observations)
estimate
in interface Distribution
observations
- the observationspublic int getRange()
public double getM()
public void setM(double d)
d
- the new m valuepublic void setPrior(double[] priors)
priors
- the priorpublic double[] getPrior()
public java.lang.String toString()
toString
in class java.lang.Object
Object.toString()
public Copyable copy()
Copyable
copy
in interface Copyable
Copyable.copy()
public static DiscreteDistribution random(int range)
range
- the upper range of the outputpublic static DiscreteDistribution uniform(int range)
range
- the upper range of the output


|
BFS module
|
This class will mimic the Acme's high level planner's . This class will provide the hight and width of the area, obstacle space and start - goal points. And evoke the planner. More...
#include <obstacle_generator.hpp>
Public Member Functions | |
| Obstacle_generator (void) | |
| A constructor sets width_ and height_ vars of the class. More... | |
| Obstacle_generator (std::pair< int, int > start_point, std::pair< int, int > goal_point, bool debug) | |
| A constructor sets start point, goal point and debug flag vars of the class. More... | |
| auto | generate_obstacles (void) -> void |
| This method will generate obstacle artificially. More... | |
| auto | get_height (void) -> int |
| Getter method to get the height_ var of the class. More... | |
| auto | get_width (void) -> int |
| Getter method to get the width_ var of the class. More... | |
| auto | get_startpoint (void) -> std::pair< int, int > |
| Getter method to retrive the start_point_ var of the class. More... | |
| auto | get_goalpoint (void) -> std::pair< int, int > |
| Getter method to retrive the goal_point_ var of the class. More... | |
| auto | run_bfs (void) -> void |
| This function will handle Bfs object. More... | |
| auto | run_sdl (void) -> void |
| This function will handle Sdl_wrapper object. More... | |
| auto | calculate_euclidean_dist (int x1, int y1, int x2, int y2) -> double |
| This function will provide euclidean distace. More... | |
| auto | get_obstacle_space (void) -> std::vector< int > |
| This function will return class var obstacle_space_. More... | |
This class will mimic the Acme's high level planner's . This class will provide the hight and width of the area, obstacle space and start - goal points. And evoke the planner.
| Obstacle_generator::Obstacle_generator | ( | void | ) |
A constructor sets width_ and height_ vars of the class.
| Obstacle_generator::Obstacle_generator | ( | std::pair< int, int > | start_point, |
| std::pair< int, int > | goal_point, | ||
| bool | debug | ||
| ) |
A constructor sets start point, goal point and debug flag vars of the class.
| [in] | start_point,goal_point | Start and goal point for BFS. |
| [in] | debug | true for debug, false for not debug. |
| auto Obstacle_generator::calculate_euclidean_dist | ( | int | x1, |
| int | y1, | ||
| int | x2, | ||
| int | y2 | ||
| ) | -> double |
This function will provide euclidean distace.
| [in] | x1,x2,y1,y2 | point (x1, y1) and (x2, y2) |
| auto Obstacle_generator::generate_obstacles | ( | void | ) | -> void |
This method will generate obstacle artificially.
Storing all the obstacle pairs (coordinates) into vector.
| auto Obstacle_generator::get_goalpoint | ( | void | ) | -> std::pair<int, int> |
Getter method to retrive the goal_point_ var of the class.
| auto Obstacle_generator::get_height | ( | void | ) | -> int |
Getter method to get the height_ var of the class.
| auto Obstacle_generator::get_obstacle_space | ( | void | ) | -> std::vector<int> |
This function will return class var obstacle_space_.
| auto Obstacle_generator::get_startpoint | ( | void | ) | -> std::pair<int, int> |
Getter method to retrive the start_point_ var of the class.
| auto Obstacle_generator::get_width | ( | void | ) | -> int |
Getter method to get the width_ var of the class.
| auto Obstacle_generator::run_bfs | ( | void | ) | -> void |
This function will handle Bfs object.
| auto Obstacle_generator::run_sdl | ( | void | ) | -> void |
This function will handle Sdl_wrapper object.


Analyze industry trends, competitors’ performance, gather end users’ feedback, prototype a future solution’s power, and create an application concept for your project.
Deliver a clear application architecture ready for multiple integrations with your or third-party systems and help you optimize your software for increased reliability and performance.
Help optimize your software for increased reliability and performance, future scalability, engaging UX, big data introduction, implementation of real-time components, etc.
Understand constantly about evolving security threats and using best practices and tools of multi-level control, we help you introduce the highest standard of safety.
Front end
Back end
Databases
Open Source
App shows list of fail and success SpaceX launches since the company started. It uses NojeJS, Express, React and GraphQl.
SpaceXApp tracks Corona virus stats around the world getting the most updated data from every country around the world. It uses React, GraphQl, Gastby and Leaflet maps.
Corona V Tracker


{% extends "layout.html" %} {% block section %}
The project is completelly Open Source. You can find our source code here and help us to improve it if you wish.
Our service supported by big database of games and puzzles we generated for several years of research. This database is constantly improved by authomatic bots so currently there is no final version of it.
We have plans to publish database at some point, but currently it is not ready yet.
Please Help us to improve our service.
You are also welcome to try our API to explore our service.
{% endblock %}


Portfolio
Apache Stanbol
An Apache Project which provides a set of reusable components for semantic content management.
Ling Peer
A Web Application to get thousands of language learners together and exchange their native languages with the help of text, audio/video chat
Phrase Teacher
An Android Application for English learners which teaches daily phrases with the features listen, record, play and test with speech recognition
DevCloud
A Web Application which combines facilities of general purpose IDE and cloud computing in a modular manner to allow users to design, compile, and debug their projects without any requirement in the cloud.