pymatgen.analysis.graphs module¶
-
class
ConnectedSite
(site, jimage, index, weight, dist)¶ Bases:
tuple
Create new instance of ConnectedSite(site, jimage, index, weight, dist)
-
dist
¶ Alias for field number 4
-
index
¶ Alias for field number 2
-
jimage
¶ Alias for field number 1
-
site
¶ Alias for field number 0
-
weight
¶ Alias for field number 3
-
-
class
MoleculeGraph
(molecule, graph_data=None)[source]¶ Bases:
monty.json.MSONable
This is a class for annotating a Molecule with bond information, stored in the form of a graph. A “bond” does not necessarily have to be a chemical bond, but can store any kind of information that connects two Sites.
If constructing this class manually, use the with_empty_graph method or with_local_env_strategy method (using an algorithm provided by the local_env module, such as O’Keeffe).
This class that contains connection information: relationships between sites represented by a Graph structure, and an associated structure object.
This class uses the NetworkX package to store and operate on the graph itself, but contains a lot of helper methods to make associating a graph with a given molecule easier.
Use cases for this include storing bonding information, NMR J-couplings, Heisenberg exchange parameters, etc.
Parameters: - molecule – Molecule object
- graph_data – dict containing graph information in
dict format (not intended to be constructed manually, see as_dict method for format)
-
add_edge
(from_index, to_index, weight=None, warn_duplicates=True, edge_properties=None)[source]¶ Add edge to graph.
Since physically a ‘bond’ (or other connection between sites) doesn’t have a direction, from_index, from_jimage can be swapped with to_index, to_jimage.
However, images will always always be shifted so that from_index < to_index and from_jimage becomes (0, 0, 0).
Parameters: - from_index – index of site connecting from
- to_index – index of site connecting to
- (float) (weight) – e.g. bond length
- (bool) (warn_duplicates) – if True, will warn if
trying to add duplicate edges (duplicate edges will not be added in either case) :param edge_properties (dict): any other information to store on graph edges, similar to Structure’s site_properties :return:
-
alter_edge
(from_index, to_index, new_weight=None, new_edge_properties=None)[source]¶ Alters either the weight or the edge_properties of an edge in the MoleculeGraph.
Parameters: - from_index – int
- to_index – int
- new_weight – alter_edge does not require
that weight be altered. As such, by default, this is None. If weight is to be changed, it should be a float. :param new_edge_properties: alter_edge does not require that edge_properties be altered. As such, by default, this is None. If any edge properties are to be changed, it should be a dictionary of edge properties to be changed. :return:
-
as_dict
()[source]¶ As in :Class: pymatgen.core.Molecule except with using to_dict_of_dicts from NetworkX to store graph information.
-
break_edge
(from_index, to_index, allow_reverse=False)[source]¶ Remove an edge from the MoleculeGraph
Parameters: - from_index – int
- to_index – int
- allow_reverse – If allow_reverse is True, then break_edge will
attempt to break both (from_index, to_index) and, failing that, will attempt to break (to_index, from_index). :return:
-
build_unique_fragments
()[source]¶ Find all possible fragment combinations of the MoleculeGraphs (in other words, all connected induced subgraphs)
Returns:
-
diff
(other, strict=True)[source]¶ Compares two MoleculeGraphs. Returns dict with keys ‘self’, ‘other’, ‘both’ with edges that are present in only one MoleculeGraph (‘self’ and ‘other’), and edges that are present in both.
The Jaccard distance is a simple measure of the dissimilarity between two MoleculeGraphs (ignoring edge weights), and is defined by 1 - (size of the intersection / size of the union) of the sets of edges. This is returned with key ‘dist’.
Important note: all node indices are in terms of the MoleculeGraph this method is called from, not the ‘other’ MoleculeGraph: there is no guarantee the node indices will be the same if the underlying Molecules are ordered differently.
Parameters: - other – MoleculeGraph
- strict – if False, will compare bonds
from different Molecules, with node indices replaced by Specie strings, will not count number of occurrences of bonds :return:
-
draw_graph_to_file
(filename='graph', diff=None, hide_unconnected_nodes=False, hide_image_edges=True, edge_colors=False, node_labels=False, weight_labels=False, image_labels=False, color_scheme='VESTA', keep_dot=False, algo='fdp')[source]¶ Draws graph using GraphViz.
The networkx graph object itself can also be drawn with networkx’s in-built graph drawing methods, but note that this might give misleading results for multigraphs (edges are super-imposed on each other).
If visualization is difficult to interpret, hide_image_edges can help, especially in larger graphs.
Parameters: filename – filename to output, will detect filetype from extension (any graphviz filetype supported, such as pdf or png) :param diff (StructureGraph): an additional graph to compare with, will color edges red that do not exist in diff and edges green that are in diff graph but not in the reference graph :param hide_unconnected_nodes: if True, hide unconnected nodes :param hide_image_edges: if True, do not draw edges that go through periodic boundaries :param edge_colors (bool): if True, use node colors to color edges :param node_labels (bool): if True, label nodes with species and site index :param weight_labels (bool): if True, label edges with weights :param image_labels (bool): if True, label edges with their periodic images (usually only used for debugging, edges to periodic images always appear as dashed lines) :param color_scheme (str): “VESTA” or “JMOL” :param keep_dot (bool): keep GraphViz .dot file for later visualization :param algo: any graphviz algo, “neato” (for simple graphs) or “fdp” (for more crowded graphs) usually give good outputs :return:
-
edge_weight_name
¶ Name of the edge weight property of graph
Type: return
-
edge_weight_unit
¶ Units of the edge weight property of graph
Type: return
-
find_rings
(including=None)[source]¶ Find ring structures in the MoleculeGraph.
Parameters: including – list of site indices. If including is not None, then find_rings will only return those rings including the specified sites. By default, this parameter is None, and all rings will be returned. :return: dict {index:cycle}. Each entry will be a ring (cycle, in graph theory terms) including the index found in the Molecule. If there is no cycle including an index, the value will be an empty list.
-
classmethod
from_dict
(d)[source]¶ As in :Class: pymatgen.core.Molecule except restoring graphs using from_dict_of_dicts from NetworkX to restore graph information.
-
get_connected_sites
(n)[source]¶ Returns a named tuple of neighbors of site n: periodic_site, jimage, index, weight. Index is the index of the corresponding site in the original structure, weight can be None if not defined. :param n: index of Site in Molecule :param jimage: lattice vector of site :return: list of ConnectedSite tuples, sorted by closest first
-
get_coordination_of_site
(n)[source]¶ Returns the number of neighbors of site n. In graph terms, simply returns degree of node corresponding to site n. :param n: index of site :return (int):
-
insert_node
(i, species, coords, validate_proximity=False, site_properties=None, edges=None)[source]¶ A wrapper around Molecule.insert(), which also incorporates the new site into the MoleculeGraph.
Parameters: - i – Index at which to insert the new site
- species – Species for the new site
- coords – 3x1 array representing coordinates of the new site
- validate_proximity – For Molecule.insert(); if True (default False), distance will be checked to ensure that site can be safely added.
- site_properties – Site properties for Molecule
- edges – List of dicts representing edges to be added to the MoleculeGraph. These edges must include the index of the new site i, and all indices used for these edges should reflect the MoleculeGraph AFTER the insertion, NOT before. Each dict should at least have a “to_index” and “from_index” key, and can also have a “weight” and a “properties” key.
Returns:
-
isomorphic_to
(other)[source]¶ Checks if the graphs of two MoleculeGraphs are isomorphic to one another. In order to prevent problems with misdirected edges, both graphs are converted into undirected nx.Graph objects.
Parameters: other – MoleculeGraph object to be compared. Returns: bool
-
name
¶ Name of graph
Type: return
-
remove_nodes
(indices)[source]¶ A wrapper for Molecule.remove_sites().
Parameters: indices – list of indices in the current Molecule (and graph) to be removed. Returns:
-
replace_group
(index, func_grp, strategy, bond_order=1, graph_dict=None, strategy_params=None, reorder=True, extend_structure=True)[source]¶ Builds off of Molecule.substitute and MoleculeGraph.substitute_group to replace a functional group in self.molecule with a functional group. This method also amends self.graph to incorporate the new functional group.
TODO: Figure out how to replace into a ring structure.
Parameters: - index – Index of atom to substitute.
- func_grp –
Substituent molecule. There are three options:
- Providing an actual molecule as the input. The first atom must be a DummySpecie X, indicating the position of nearest neighbor. The second atom must be the next nearest atom. For example, for a methyl group substitution, func_grp should be X-CH3, where X is the first site and C is the second site. What the code will do is to remove the index site, and connect the nearest neighbor to the C atom in CH3. The X-C bond indicates the directionality to connect the atoms.
- A string name. The molecule will be obtained from the relevant template in func_groups.json.
- A MoleculeGraph object.
- strategy – Class from pymatgen.analysis.local_env.
- bond_order – A specified bond order to calculate the bond length between the attached functional group and the nearest neighbor site. Defaults to 1.
- graph_dict – Dictionary representing the bonds of the functional group (format: {(u, v): props}, where props is a dictionary of properties, including weight. If None, then the algorithm will attempt to automatically determine bonds using one of a list of strategies defined in pymatgen.analysis.local_env.
- strategy_params – dictionary of keyword arguments for strategy. If None, default parameters will be used.
- reorder – bool, representing if graph nodes need to be reordered following the application of the local_env strategy
- extend_structure – If True (default), then a large artificial box will be placed around the Molecule, because some strategies assume periodic boundary conditions.
Returns:
-
set_node_attributes
()[source]¶ Replicates molecule site properties (specie, coords, etc.) in the MoleculeGraph.
Returns:
-
sort
(key=None, reverse=False)[source]¶ Same as Molecule.sort(), also remaps nodes in graph. :param key: :param reverse: :return:
-
split_molecule_subgraphs
(bonds, allow_reverse=False, alterations=None)[source]¶ Split MoleculeGraph into two or more MoleculeGraphs by breaking a set of bonds. This function uses MoleculeGraph.break_edge repeatedly to create disjoint graphs (two or more separate molecules). This function does not only alter the graph information, but also changes the underlying Moledules. If the bonds parameter does not include sufficient bonds to separate two molecule fragments, then this function will fail. Currently, this function naively assigns the charge of the total molecule to a single submolecule. A later effort will be to actually accurately assign charge. NOTE: This function does not modify the original MoleculeGraph. It creates a copy, modifies that, and returns two or more new MoleculeGraph objects.
Parameters: bonds – list of tuples (from_index, to_index) representing bonds to be broken to split the MoleculeGraph. :param alterations: a dict {(from_index, to_index): alt}, where alt is a dictionary including weight and/or edge properties to be changed following the split. :param allow_reverse: If allow_reverse is True, then break_edge will attempt to break both (from_index, to_index) and, failing that, will attempt to break (to_index, from_index). :return: list of MoleculeGraphs
-
substitute_group
(index, func_grp, strategy, bond_order=1, graph_dict=None, strategy_params=None, reorder=True, extend_structure=True)[source]¶ Builds off of Molecule.substitute to replace an atom in self.molecule with a functional group. This method also amends self.graph to incorporate the new functional group.
NOTE: using a MoleculeGraph will generally produce a different graph compared with using a Molecule or str (when not using graph_dict). This is because of the reordering that occurs when using some of the local_env strategies.
Parameters: - index – Index of atom to substitute.
- func_grp –
Substituent molecule. There are three options:
- Providing an actual molecule as the input. The first atom must be a DummySpecie X, indicating the position of nearest neighbor. The second atom must be the next nearest atom. For example, for a methyl group substitution, func_grp should be X-CH3, where X is the first site and C is the second site. What the code will do is to remove the index site, and connect the nearest neighbor to the C atom in CH3. The X-C bond indicates the directionality to connect the atoms.
- A string name. The molecule will be obtained from the relevant template in func_groups.json.
- A MoleculeGraph object.
- strategy – Class from pymatgen.analysis.local_env.
- bond_order – A specified bond order to calculate the bond length between the attached functional group and the nearest neighbor site. Defaults to 1.
- graph_dict – Dictionary representing the bonds of the functional group (format: {(u, v): props}, where props is a dictionary of properties, including weight. If None, then the algorithm will attempt to automatically determine bonds using one of a list of strategies defined in pymatgen.analysis.local_env.
- strategy_params – dictionary of keyword arguments for strategy. If None, default parameters will be used.
- reorder – bool, representing if graph nodes need to be reordered following the application of the local_env strategy
- extend_structure – If True (default), then a large artificial box will be placed around the Molecule, because some strategies assume periodic boundary conditions.
Returns:
-
static
with_edges
(molecule, edges)[source]¶ Constructor for MoleculeGraph, using pre-existing or pre-defined edges with optional edge parameters.
Parameters: - molecule – Molecule object
- edges – dict representing the bonds of the functional group (format: {(u, v): props}, where props is a dictionary of properties, including weight. Props should be None if no additional properties are to be specified.
Returns: mg, a MoleculeGraph
-
classmethod
with_empty_graph
(molecule, name='bonds', edge_weight_name=None, edge_weight_units=None)[source]¶ Constructor for MoleculeGraph, returns a MoleculeGraph object with an empty graph (no edges, only nodes defined that correspond to Sites in Molecule).
Parameters: - (Molecule) (molecule) –
- (str) (edge_weight_name) – name of graph, e.g. “bonds”
- (str) – name of edge weights,
e.g. “bond_length” or “exchange_constant” :param edge_weight_units (str): name of edge weight units e.g. “Å” or “eV” :return (MoleculeGraph):
-
static
with_local_env_strategy
(molecule, strategy, reorder=True, extend_structure=True)[source]¶ Constructor for MoleculeGraph, using a strategy from :Class: pymatgen.analysis.local_env.
Parameters: - molecule – Molecule object
- strategy – an instance of a :Class: pymatgen.analysis.local_env.NearNeighbors object
- reorder – bool, representing if graph nodes need to be reordered following the application of the local_env strategy
- extend_structure – If True (default), then a large artificial box will be placed around the Molecule, because some strategies assume periodic boundary conditions.
Returns: mg, a MoleculeGraph
-
class
StructureGraph
(structure, graph_data=None)[source]¶ Bases:
monty.json.MSONable
This is a class for annotating a Structure with bond information, stored in the form of a graph. A “bond” does not necessarily have to be a chemical bond, but can store any kind of information that connects two Sites.
If constructing this class manually, use the with_empty_graph method or with_local_env_strategy method (using an algorithm provided by the local_env module, such as O’Keeffe).
This class that contains connection information: relationships between sites represented by a Graph structure, and an associated structure object.
This class uses the NetworkX package to store and operate on the graph itself, but contains a lot of helper methods to make associating a graph with a given crystallographic structure easier.
Use cases for this include storing bonding information, NMR J-couplings, Heisenberg exchange parameters, etc.
For periodic graphs, class stores information on the graph edges of what lattice image the edge belongs to.
Parameters: - structure – a Structure object
- graph_data – dict containing graph information in
dict format (not intended to be constructed manually, see as_dict method for format)
-
add_edge
(from_index, to_index, from_jimage=(0, 0, 0), to_jimage=None, weight=None, warn_duplicates=True, edge_properties=None)[source]¶ Add edge to graph.
Since physically a ‘bond’ (or other connection between sites) doesn’t have a direction, from_index, from_jimage can be swapped with to_index, to_jimage.
However, images will always always be shifted so that from_index < to_index and from_jimage becomes (0, 0, 0).
Parameters: - from_index – index of site connecting from
- to_index – index of site connecting to
- (tuple of ints) (from_jimage) – lattice vector of periodic
image, e.g. (1, 0, 0) for periodic image in +x direction :param to_jimage (tuple of ints): lattice vector of image :param weight (float): e.g. bond length :param warn_duplicates (bool): if True, will warn if trying to add duplicate edges (duplicate edges will not be added in either case) :param edge_properties (dict): any other information to store on graph edges, similar to Structure’s site_properties :return:
-
alter_edge
(from_index, to_index, to_jimage=None, new_weight=None, new_edge_properties=None)[source]¶ Alters either the weight or the edge_properties of an edge in the StructureGraph.
Parameters: - from_index – int
- to_index – int
- to_jimage – tuple
- new_weight – alter_edge does not require
that weight be altered. As such, by default, this is None. If weight is to be changed, it should be a float. :param new_edge_properties: alter_edge does not require that edge_properties be altered. As such, by default, this is None. If any edge properties are to be changed, it should be a dictionary of edge properties to be changed. :return:
-
as_dict
()[source]¶ As in :Class: pymatgen.core.Structure except with using to_dict_of_dicts from NetworkX to store graph information.
-
break_edge
(from_index, to_index, to_jimage=None, allow_reverse=False)[source]¶ Remove an edge from the StructureGraph. If no image is given, this method will fail.
Parameters: - from_index – int
- to_index – int
- to_jimage – tuple
- allow_reverse – If allow_reverse is True, then break_edge will
attempt to break both (from_index, to_index) and, failing that, will attempt to break (to_index, from_index). :return:
-
diff
(other, strict=True)[source]¶ Compares two StructureGraphs. Returns dict with keys ‘self’, ‘other’, ‘both’ with edges that are present in only one StructureGraph (‘self’ and ‘other’), and edges that are present in both.
The Jaccard distance is a simple measure of the dissimilarity between two StructureGraphs (ignoring edge weights), and is defined by 1 - (size of the intersection / size of the union) of the sets of edges. This is returned with key ‘dist’.
Important note: all node indices are in terms of the StructureGraph this method is called from, not the ‘other’ StructureGraph: there is no guarantee the node indices will be the same if the underlying Structures are ordered differently.
Parameters: - other – StructureGraph
- strict – if False, will compare bonds
from different Structures, with node indices replaced by Specie strings, will not count number of occurrences of bonds :return:
-
draw_graph_to_file
(filename='graph', diff=None, hide_unconnected_nodes=False, hide_image_edges=True, edge_colors=False, node_labels=False, weight_labels=False, image_labels=False, color_scheme='VESTA', keep_dot=False, algo='fdp')[source]¶ Draws graph using GraphViz.
The networkx graph object itself can also be drawn with networkx’s in-built graph drawing methods, but note that this might give misleading results for multigraphs (edges are super-imposed on each other).
If visualization is difficult to interpret, hide_image_edges can help, especially in larger graphs.
Parameters: filename – filename to output, will detect filetype from extension (any graphviz filetype supported, such as pdf or png) :param diff (StructureGraph): an additional graph to compare with, will color edges red that do not exist in diff and edges green that are in diff graph but not in the reference graph :param hide_unconnected_nodes: if True, hide unconnected nodes :param hide_image_edges: if True, do not draw edges that go through periodic boundaries :param edge_colors (bool): if True, use node colors to color edges :param node_labels (bool): if True, label nodes with species and site index :param weight_labels (bool): if True, label edges with weights :param image_labels (bool): if True, label edges with their periodic images (usually only used for debugging, edges to periodic images always appear as dashed lines) :param color_scheme (str): “VESTA” or “JMOL” :param keep_dot (bool): keep GraphViz .dot file for later visualization :param algo: any graphviz algo, “neato” (for simple graphs) or “fdp” (for more crowded graphs) usually give good outputs :return:
-
edge_weight_name
¶ Name of the edge weight property of graph
Type: return
-
edge_weight_unit
¶ Units of the edge weight property of graph
Type: return
-
classmethod
from_dict
(d)[source]¶ As in :Class: pymatgen.core.Structure except restoring graphs using from_dict_of_dicts from NetworkX to restore graph information.
-
get_connected_sites
(n, jimage=(0, 0, 0))[source]¶ Returns a named tuple of neighbors of site n: periodic_site, jimage, index, weight. Index is the index of the corresponding site in the original structure, weight can be None if not defined. :param n: index of Site in Structure :param jimage: lattice vector of site :return: list of ConnectedSite tuples, sorted by closest first
-
get_coordination_of_site
(n)[source]¶ Returns the number of neighbors of site n. In graph terms, simply returns degree of node corresponding to site n. :param n: index of site :return (int):
-
get_subgraphs_as_molecules
(use_weights=False)[source]¶ Retrieve subgraphs as molecules, useful for extracting molecules from periodic crystals.
Will only return unique molecules, not any duplicates present in the crystal (a duplicate defined as an isomorphic subgraph).
Parameters: (bool) (use_weights) – If True, only treat subgraphs as isomorphic if edges have the same weights. Typically, this means molecules will need to have the same bond lengths to be defined as duplicates, otherwise bond lengths can differ. This is a fairly robust approach, but will treat e.g. enantiomers as being duplicates.
Returns: list of unique Molecules in Structure
-
insert_node
(i, species, coords, coords_are_cartesian=False, validate_proximity=False, site_properties=None, edges=None)[source]¶ A wrapper around Molecule.insert(), which also incorporates the new site into the MoleculeGraph.
Parameters: - i – Index at which to insert the new site
- species – Species for the new site
- coords – 3x1 array representing coordinates of the new site
- coords_are_cartesian – Whether coordinates are cartesian. Defaults to False.
- validate_proximity – For Molecule.insert(); if True (default False), distance will be checked to ensure that site can be safely added.
- site_properties – Site properties for Molecule
- edges – List of dicts representing edges to be added to the MoleculeGraph. These edges must include the index of the new site i, and all indices used for these edges should reflect the MoleculeGraph AFTER the insertion, NOT before. Each dict should at least have a “to_index” and “from_index” key, and can also have a “weight” and a “properties” key.
Returns:
-
name
¶ Name of graph
Type: return
-
remove_nodes
(indices)[source]¶ A wrapper for Molecule.remove_sites().
Parameters: indices – list of indices in the current Molecule (and graph) to be removed. Returns:
-
set_node_attributes
()[source]¶ Gives each node a “specie” and a “coords” attribute, updated with the current species and coordinates.
Returns:
-
sort
(key=None, reverse=False)[source]¶ Same as Structure.sort(), also remaps nodes in graph. :param key: :param reverse: :return:
-
substitute_group
(index, func_grp, strategy, bond_order=1, graph_dict=None, strategy_params=None)[source]¶ Builds off of Structure.substitute to replace an atom in self.structure with a functional group. This method also amends self.graph to incorporate the new functional group.
NOTE: Care must be taken to ensure that the functional group that is substituted will not place atoms to close to each other, or violate the dimensions of the Lattice.
Parameters: - index – Index of atom to substitute.
- func_grp –
Substituent molecule. There are two options:
- Providing an actual Molecule as the input. The first atom must be a DummySpecie X, indicating the position of nearest neighbor. The second atom must be the next nearest atom. For example, for a methyl group substitution, func_grp should be X-CH3, where X is the first site and C is the second site. What the code will do is to remove the index site, and connect the nearest neighbor to the C atom in CH3. The X-C bond indicates the directionality to connect the atoms.
- A string name. The molecule will be obtained from the relevant template in func_groups.json.
- strategy – Class from pymatgen.analysis.local_env.
- bond_order – A specified bond order to calculate the bond length between the attached functional group and the nearest neighbor site. Defaults to 1.
- graph_dict – Dictionary representing the bonds of the functional group (format: {(u, v): props}, where props is a dictionary of properties, including weight. If None, then the algorithm will attempt to automatically determine bonds using one of a list of strategies defined in pymatgen.analysis.local_env.
- strategy_params – dictionary of keyword arguments for strategy. If None, default parameters will be used.
Returns:
-
types_and_weights_of_connections
¶ Extract a dictionary summarizing the types and weights of edges in the graph.
Returns: A dictionary with keys specifying the species involved in a connection in alphabetical order (e.g. string ‘Fe-O’) and values which are a list of weights for those connections (e.g. bond lengths).
-
types_of_coordination_environments
(anonymous=False)[source]¶ Extract information on the different co-ordination environments present in the graph.
Parameters: anonymous – if anonymous, will replace specie names with A, B, C, etc. :return: a list of co-ordination environments, e.g. [‘Mo-S(6)’, ‘S-Mo(3)’]
-
weight_statistics
¶ Extract a statistical summary of edge weights present in the graph.
Returns: A dict with an ‘all_weights’ list, ‘minimum’, ‘maximum’, ‘median’, ‘mean’, ‘std_dev’
-
static
with_edges
(structure, edges)[source]¶ Constructor for MoleculeGraph, using pre-existing or pre-defined edges with optional edge parameters.
Parameters: - molecule – Molecule object
- edges – dict representing the bonds of the functional group (format: {(from_index, to_index, from_image, to_image): props}, where props is a dictionary of properties, including weight. Props should be None if no additional properties are to be specified.
Returns: sg, a StructureGraph
-
classmethod
with_empty_graph
(structure, name='bonds', edge_weight_name=None, edge_weight_units=None)[source]¶ Constructor for StructureGraph, returns a StructureGraph object with an empty graph (no edges, only nodes defined that correspond to Sites in Structure).
Parameters: - (Structure) (structure) –
- (str) (edge_weight_name) – name of graph, e.g. “bonds”
- (str) – name of edge weights,
e.g. “bond_length” or “exchange_constant” :param edge_weight_units (str): name of edge weight units e.g. “Å” or “eV” :return (StructureGraph):


Euro kings hammered, Goddard and Saunders shine, and it's all smiles for Derby in Italy
The stories behind the matches - these memorable Rams games happened this week in the club's history
by Steve NicholsonHere, we take a look back at Derby County matches that took place this week in the club's history.
But rather than recalling just the match and the result, we look at the stories behind the matches.
24 YEARS AGO ... Nov 21, 1995: Birmingham City 1 Derby County 4
This away win signalled that Derby had found their feet after an early-season struggle.
The Rams had lost their previous away game 5-1 at Tranmere but successive home wins against West Bromwich Albion and Charlton saw them travel to Birmingham in a more confident mood.
Goals from Dean Sturridge, Ron Willems, Marco Gabbiadini and Darryl Powell - his first for Derby - gave the Rams victory.
27 YEARS AGO ... 1992: Cosenza 0 Derby County 3
Headers from Andy Comyn and Paul Kitson, and an emphatic finish by Marco Gabbiadini had Derby three up by half time in this Anglo-Italian Cup tie against Cosenza in front of 4,263 at the San Vito Stadium. Derby reached the final of the competition where they were beaten 3-1 by Cremonese at Wembley.
29 YEARS AGO ... Nov 24, 1990: Derby County 2 Nottingham Forest 1
Derby had won only two of 13 league games going into this home game against rivals Nottingham Forest.
Craig Ramage, with his first league goal of the season, and Dean Saunders gave the Rams a 2-1 victory.
Derby finished the season bottom of Division One and they were relegated.
31 YEARS AGO ... Nov 19, 1988: Aston Villa 1 Derby County 2
The Dean Saunders and Paul Goddard double act was in full swing for Derby.
They both scored in this 2-1 victory over Aston Villa at Villa Park.
It was Saunders' fifth goal in four league appearances since he had become Derby's first £1m signing.
The strikers scored 21 league goals between them during the season as the Rams finished fifth in the top division under Arthur Cox.
Derby would have qualified for the UEFA Cup but for the ban on English clubs.
Derby County latest
This is your round up of all things Derby; the one-stop shop that will keep you updated on the latest goings on at Pride Park and beyond.
Transfers, injuries, match-days and managers, we’ve got you covered.
We’ll be bringing the very latest on the Rams throughout the week and around the clock.
Make sure you keep yourself updated with our handy daily catch up...
Must reads...
- January targets - this is where Derby County boss Phillip Cocu is likely to strengthen
- 'Ambition' - That Feyenoord link, Phillip Cocu and his plans for Derby County
- Euro kings hammered, Goddard and Saunders shine, and it's all smiles for Derby in Italy
- 'We have been looking' - latest on new investment plans for Derby County
- 'Wanted list' - Steve Nicholson's take on Derby County's link to Luciano Acosta
- Scottish duo set to battle for transfer of former Derby County defender - reports
For all your latest Rams news, opinion, analysis and transfer gossip, click here
You can follow our Rams reporter Steve Nicholson on Twitter, and his email address is<EMAIL_ADDRESS>34 YEARS AGO ... 1985: Bolton Wanderers 0 Derby County 1
Forgive the personal indulgence but this was the first Derby County first-team game I covered for the Derby Evening Telegraph having been at the Telegraph for less than a month. Sports editor Gerald Mortimer could not make the fixture at Burnden Park and so I was sent to report on a Gary Micklewhite goal sinking Bolton. John Gregory made his league debut for Derby that afternoon.
If only to refresh my own memory, the Derby team that day was: Wallington; Blades, Buckley, Williams, Hindmarch, MacLaren, Micklewhite, Christie, Davison, Gregory, Chandler (Garner, 66).
40 YEARS AGO ... Nov 24, 1979: Derby County 4 Nottingham Forest 1
Derby sent reigning European champions Nottingham Forest packing on a remarkable afternoon at the Baseball Ground.
All pre-match caution about Derby's prospects for this meeting with their rivals was swept away in a delirious burst of goals in the first half.
Three times in the space of four minutes, the world's best goalkeeper Peter Shilton was left to pick the ball out of the net as Gerry Daly, John Duncan and Steve Emery scored to put Derby 3-0 up inside 17 minutes.
Forest pulled one back in the second half through John Robertson's penalty, but Duncan put the game out of reach 13 minutes from the end with Derby's fourth.
47 YEARS AGO ... Nov 18, 1972: West Ham United 1 Derby County 2
There was so much to admire in this First Division clash at Upton Park.
The brilliance of Colin Todd and Roy McFarland, the classy Trevor Brooking, the unruffed Bobby Moore, John McGovern's work rate, the control of John O'Hare and the elusive running of Kevin Hector.
Hector scored both of Derby's goals, the second coming from what was described as a "masterpiece" of a move.
McGovern swept a pass to Alan Hinton, he turned the ball first-time inside to Terry Hennessey and ran for the return. Hinton's centre to the near post was one few players could have accomplished and there was O'Hare, throwing himself forward, twisting, and sending the ball crashing against the underside of the bar before Hector tucked in the rebound.
51 YEARS AGO ... Nov 23, 1968: Derby County 3 Carlisle United 3
Goals from Dave Mackay, John O'Hare and Willie Carlin were not enough to give Derby County victory on a day when the conditions played a big part in the result.
The rain teemed down in the second half and left the players up to their ankles in mud and standing water on the Baseball Ground pitch.
The ball shot anywhere and everywhere, and so did players who tried to stop dead or turn quickly.
The Second Division fixture ended 3-3, but maintained Derby's unbeaten league run that would stretch for 13 matches.


Evercam Media v1.0.1 EvercamMedia.ArchiveController
ArchiveController Module is being used to do all operations for Archives.
Summary
Functions
import EvercamMedia.ArchiveController, only: [index: 2]
Functions
import EvercamMedia.ArchiveController, only: [index: 2]
Method is being used to enlist all list of archives.
iex> conn.assigns[:current_user]
iex> %Plug.Conn{adapter: {Plug.Adapters.Cowboy.Conn, :...},
assigns: %{current_user: %User{__meta__: #Ecto.Schema.Metadata<:loaded, "users">,
access_tokens: #Ecto.Association.NotLoaded<association :access_tokens is not loaded>,
api_id: "--", api_key: "--"...}
current user is within conn
.
iex> ensure_camera_exists(camera, exid, conn)
"Camera 'exid' not found!"
This method will ensure if the camera exists or not and work accordingly.
iex> ensure_can_list(current_user, camera, conn)
:ok
"Unauthorized"
This method will check the rights of user for given camera
Archive
|> Archive.by_camera_id(camera.id)
|> Archive.with_status_if_given(status)
|> Archive.get_all_with_associations
These are all EvercamMedia.Archive
model functions.
iex> render(conn, ArchiveView, "index.json", %{archives: archives})
This will render EvercamMedia.ArchiveView
for index.json


Now that the tournament settings have changed, you have to update the tournament before the changes are final.


With support from the Sloan Foundation, PLOS hosted the second annual ALM workshop on Oct 10-12, 2013. Presentation slides and links to post-workshop write-ups from the community have been linked on Lanyrd. Over 80 participants registered for the 26 “black diamond” presentations in the first two days of the program. And 20 people participated in the Data Challenge on the closing day. We had representation from a wide spectrum of the scholarly research ecosystem – researchers, publishers, academic institutions, funders, technology providers, etc.
Robert N. Dennis collection of stereoscopic views. / United States. / States / Rhode Island. / Stereoscopic views, possibly of Newport, Rhode Island, or vicinity.
Since the first ALM workshop just a year ago there have been exciting developments on a number of fronts. We welcome you to revisit the 2012 technical report documenting where the conversation started. We have a richer body of knowledge to draw on this year: more data to better understand the properties of these emerging metrics, more analysis on the evolving behaviors of the research community captured and revealed, and more demonstrations of their application in research discovery and assessment. And yet it was clearly expressed by all parties at the workshop that this is just the beginning. We have only begun to develop, understand, and use these new metrics.
We spent a lot of time listening to the conversations at the workshop, and since then, thinking about future directions for the field. One way to sum up our view of these occurences – no matter how disparate – is with the following phrase taken from Adam Smith: a rising tide lifts all boats. Certainly, there is an open horizon before us, but we envision a number of developments over the course of the upcoming year. These forecasts are encouraging ones, which will give buoyancy not just to the individual players currently in the ALM arena. They will benefit all participants in scholarly research.
ALM Data Environment: we forecast an expansion in the suite of metrics covered beyond the existing set to capture not only more quantitative measures but also qualitative ones. We see more bibliometrics research that will give the community clearer descriptions of the ALM data from each source so that we can begin to parse out meaning from the metrics.
We also expect to gain greater understanding of the impact that these new metrics will have across the scholarly landscape (across fields, institutions, geographies, etc.). We forecast more programmatic access to the data and greater consolidation of data collection practices for metrics across publishers. And lastly, we see a deepening sense of trust for ALM data amongst the research community as data stewardship and data integrity programs mature.
Applications of ALM: we expect more investment on behalf of publishers and technology providers in finding novel ways to visualize the data. We also anticipate significant interest in making use of the data for developing tools that support discoverability in scholarly literature.
Communications of ALM: we forecast more formalized channels for the sharing and reporting of these research metrics by researchers, institutions, and funders, including evolving best practices for at least some aspects of communicating ALM.
Going beyond ALM: lastly, we hope that we see more activity around metrics that are not about articles, but other research outputs, from monographs to research data to software.
blog comments powered by Disqus


Well, this has really been a tough question to answer. My colleagues and I sat down last week and we spent at least 45 minutes thinking about it. Still we have nothing smart to say.
The best we could do was find a few interesting pictures and websites.


#include <cmodel.h>
Public Member Functions | |
| CModel () | |
| ~CModel () | |
| CModel (const CModel &m) | |
| void | LoadModel (char *fname) |
| void | SaveModel (char *fname) |
| void | Normalize () |
| void | FacetHarmonics (int fh, int bw, double r, gsl_complex *coeff) |
| void | AllFacetHarmonics (int bw, double r, gsl_complex *coeff) |
| int | Facets_no () |
| int | Vertices_no () |
Private Attributes | |
| int | p_no |
| int | f_no |
| Point_3 * | plist |
| int * | flist |
Definition at line 24 of file cmodel.h.
|
|
Create an empty model: 0 vertices and 0 facets Definition at line 27 of file cmodel.cpp. |
|
|
Destroy the model Definition at line 20 of file cmodel.cpp. |
|
|
A copy constructor Definition at line 34 of file cmodel.cpp. |
|
|
Calculate the spherical harmonic coefficiets for all faces Definition at line 103 of file cmodel.cpp. |
|
|
Calculate the spherical harmonic coefficiets for a certain face using Definition at line 84 of file cmodel.cpp. |
|
|
Definition at line 38 of file cmodel.cpp. |
|
|
Load the specified off file Definition at line 45 of file cmodel.cpp. |
|
|
Normalize the current model Definition at line 116 of file cmodel.cpp. |
|
|
Save the current model in off formate Definition at line 74 of file cmodel.cpp. |
|
|
Definition at line 41 of file cmodel.cpp. |
|
|
The number of facets |
|
|
The list of facets |
|
|
The number of points |
|
|
The list of points |


LENT 1 SUNDAY
ENTRANCE ANTIPHON
When he
calls on me, I will answer him; I will deliver him and give him glory, I will
grant him length of days.
The Gloria is not said.
COLLECT
Grant, almighty God, through the yearly observances of holy Lent, that we may grow in understanding of the riches hidden in Christ and by worthy conduct pursue their effects. Through our Lord Jesus Christ, your Son, who lives and reigns with you in the unity of the Holy Spirit, one God, for ever and ever.
The
PROFESSION OF FAITH (Creed) is
said. (English, Latin)
PRAYER OVER THE OFFERINGS
Give us the
right dispositions, O Lord, we pray, to make these offerings, for with them we
celebrate the beginning of this venerable and sacred time. Through Christ our
Lord.
PREFACE The Temptation of the Lord
It is truly right and just, our duty and our salvation,
always and everywhere to give you thanks,
Lord, holy Father, almighty and eternal God,
through Christ our Lord.
By abstaining forty long days from earthly food,
he consecrated through his fast
the pattern of our Lenten observance
and, by overturning all the snares of the ancient serpent,
taught us to cast out the leaven of malice,
so that, celebrating worthily the Paschal Mystery,
we might pass over at last to the eternal paschal feast.
And so, with the company of Angels and Saints,
we sing the hymn of your praise, as without end we acclaim:
Holy, holy, holy Lord...
Eucharistic
Prayer
COMMUNION ANTIPHON
One does
not live by bread alone, but by every word that comes from the mouth of God.
Or:
The Lord will conceal you with his pinions, and under his wings you will trust.
PRAYER AFTER COMMUNION
Renewed now
with heavenly bread, by which faith is nourished, hope increased, and charity strengthened,
we pray, O Lord, that we may learn to hunger for Christ, the true and living
Bread, and strive to live by every word which proceeds from your mouth. Through
Christ our Lord.
PRAYER OVER THE PEOPLE
May bountiful
blessing, O Lord, we pray, come down upon your people, that hope may grow in
tribulation, virtue be strengthened in temptation, and eternal redemption be
assured. Through Christ our Lord.


/> <~compress_css "lib"~> <~compress_css "app"~> <~compress_css "trade"~> <~str2html ""~> <~compress_js "lib"~> <~compress_js "validate"~> <~compress_js "effect"~>


Oh hai! I see you have an old browser, theres nothing here for you then :( You will need to upgrade your browser to play this game.


"MAGDALENE "a surname derived from Magdala, the place of her nativity, given to one of the Marys of the Gospels to distinguish her from the other Marys (Matthew 27:56, 61; 28:1, etc.). A mistaken notion has prevailed that this Mary was a woman of bad character, that she was the woman who is emphatically called “a sinner” (Luke 7:36-50). (See MARY.)
"MAGDALENE "a surname derived from Magdala, the place of her nativity, given to one of the Marys of the Gospels to distinguish her from the other Marys (Matthew 27:56, 61; 28:1, etc.). A mistaken notion has prevailed that this Mary was a woman of bad character, that she was the woman who is emphatically called “a sinner” (Luke 7:36-50). (See MARY.)


Apple starts construction of new US$1 billion campus in Texas
AUSTIN: Apple said on Wednesday it had started construction of a new campus in Austin, Texas, beside its existing facility where it makes the new MacBook Pro laptops.
Apple chief executive officer Tim Cook is set to give a tour of the Texas factory to U.S. President Donald Trump later on Wednesday.
The company has come under fire from Trump because it makes most of its products in China. But Cook and Trump have developed a good relationship. In 2017, Trump said Cook had "promised me three big plants — big, big, big."
The new US$1 billion, 3-million-square-foot campus will initially house 5,000 employees, with the capacity to grow to 15,000, and is expected to open in 2022, Apple said.
Austin is one of the fastest-growing U.S. cities, with a population of about 1 million, and is home to the University of Texas and other tech companies, including Dell in nearby Round Rock, Texas.
Apple currently employs about 7,000 employees in Austin.
The company also continues its expansion in Boulder, Culver City, New York, Pittsburgh, San Diego and Seattle, it said in a statement.
Apple said it is also preparing to ship the new Mac Pro desktop computers to customers, at a production facility just a short distance away from Austin, starting in December.
The new Mac Pro desktop became a political flashpoint earlier this year when the Wall Street Journal reported that Apple was moving production to China.


To activate the MYO-control, a synchronization gesture has to executed. For MYO to react to any future inputs, the gesture Double Tap has to be executed. The color of the circle in the middle of the App should now change from red to yellow.
To completely assume control, either of the two gestures Fist or Finger Spread has to be executed. If the activation is successful, the color of the circle will change from yellow to green.
To release control over the robot, either press the "Stop" button in the App, or execute the gesture Wave In (in which the wrist is tilted inwards). The color of the circle will change from green to red.
IMPORTANT! The gesture recognition isn't completely accurate yet. Gestures may be misinterpreted or not recognized at all. If that's the case, it might help to take the bracelet off for a few seconds. After putting it back on, the synchronization gesture has to be executed again.
Touch control is very simple. The left joystick controls the speed, the right one controls the direction of the robot.
The Smartphone sends relevant data to the robot up to ten times each second.
The control-data is structured as follows:
| Command | Meaning |
|---|---|
| ST; | status signal |
| <L-Value>:<M-Value>; | Direction-Value and Motor-Value are between -100 and 100, the value 0 standing for "driving straight" or "standing still". |


|
Registered Office :
State bank of India Ltd.
SBI Main,
Fort, Mumbai 400005.
|
Customers can contact our 24 X 7 Phone Banking numbers
from any Landline / Mobile number, our Toll free numbers are as follows:
1800-200-1345
1800-33-1470
|
| Debit Card Blocking Toll Free number: 1983-22-6999 |
Our Non-Toll Free number: (+91-22) 6663 7111
Contact number for outside India customers: (+91-22) 9999 7000
|
|


The level of your disability will affect the amount of benefit you may get. This will be assessed by a ‘medical advisor’ on a scale of 1 to 100%
Normally you must be assessed as 14% disabled or more to get the benefit
All amounts are guides only
| Assessed level of disablement | Weekly amonut |
|---|---|
| 100% | £168.00 |
| 90% | £151.20 |
| 80% | 134.40 |
| 70% | £117.60 |
| 60% | £100.80 | 50% | £84.00 |
| 40% | £67.20 |
| 30% | £50.40 |
| 20% | £33.60 |
How you’re paid
Industrial Injuries Disablement Benefit is usually paid weekly in advance, 4 weekly in arrears or every 13 weeks in arrears. It will normally be paid into an account, eg a bank account, building society or Credit Union.


About
Contact
Mail Me
Call Me
Web Design Day 04
Button
Login
Forgot Password
reset
submit
button
menu
Images
Media
Sorry, your browser doesn't support
audio
Sorry, your browser doesn't support embedded videos.
form
Full Name:
Age:
Email Address:
Gender
Male
Female
Notification:
Do you Want to received notification ?
Password:


🚩Seasoned Soaked Radish RM11.90
🚩Seasoned Black Beans RM11.90
🚩Seasoned Octopus RM27.90
Branches - Bukit Indah & Permas Jaya
🚛WHOLE JB DELIVERY only RM7
100% Imported goods from South Korea
🚩RM3.5
Grape Bongbong, SikHye Rice drinks, Orange Sacsac, Peach Juice, Pear Juice
🚩RM3.9
Woongjin Rice Milk
🚩RM2.8
Woojing Aloe Vera
🚩Seasoned Soaked Radish RM11.90
🚩Seasoned Black Beans RM11.90
🚩Seasoned Octopus RM27.90
🚩Sweet & Sour Garlic RM15.90
🚩Sour Leaf RM15.90
🚩Soy Sauce Soaked Peanut RM16.90
🚩Seasoned Sesame Leaf RM11.90
🚩Soy sauce Seasoned Sesama Leaf RM11.90
🚩Seasoned Squid RM22.90
Address: Jalan Indah 15/2, Taman Bukit Indah, 81200 Johor Bahru, Johor


OsmAnd has plenty of features and offers its full functional in the free version. In addition to that, you can expand your possibilities even further with paid OsmAnd services. Let's take a look at each of them in detail.
OsmAnd+ is a full version of OsmAnd. It provides you with:
Please note:
- You can buy OsmAnd+ as a separate app on Google Play.
- You can buy OsmAnd as an in-app purchase named 'OsmAnd Unlimited' from the free version of OsmAnd.
- 'OsmAnd Unlimited' = OsmAnd+
In addition to OsmAnd maps, you may want to view contour lines over the main layer of information or even add shading to view the terrain in 3D. To do it, just purchase OsmAnd Contour lines and download the files for your region. You can view hillshade and contour lines separately or add them together to the map. Read more about this feature here. To get the plugin, please visit Google Play or just go to OsmAnd - Plugins - Contour lines and press 'Get'. Get Contour lines
If you liked the contour lines representing terrain, try sea depth maps to view the contour lines showing the relief of the seabed. To get them, just go to the Download Maps menu and select 'Nautical depth contours'. You'll also be able to download a range of additional maps like the nautical depth points for each hemisphere. To view the information, please go to Configure map - Details and check the 'Nautical depth contours' option. Get Nautical Charts plugin.
Alongside the abovementioned options, you can try an all-in-one solution. OsmAnd Live has three periods of subscription for OsmAnd+ and OsmAnd Free that provides you with the following advantages:
You basically get full access to every possible OsmAnd feature for a fraction of cost.
To try this feature, please go to OsmAnd > OsmAnd Live > Subscribe. You can stop the subscription anytime you want using your Google Play settings.
The OsmAnd Live subscription for iOS has three periods: monthly, three months, yearly. This feature allows you to get unlimited download of all maps and get all the plug-ins for the subscription period. You also get the opportunity to frequently update maps.
To get this feature, go to the main menu-> Maps&Resources-> OsmAnd Live-> Get OsmAnd Live. You can stop the subscription at any time using the settings in your itunes account.
Also, everyone who gets OsmAnd Live automatically supports the volunteers who edit the map as the money supporters provide get distributed between those who edit the map. Read more about OsmAnd Live here or learn how it works in detail here.
The purchase system in iOS is a little different from that on Android. The Nautical maps and Contour lines are available for purchase while the Wikipedia plugin is free. The map downloads are available in bundles in case you do not need the maps of the entire world at the moment. For example, you can get the maps of Africa or Europe. Of course, free map downloads are available, as well. To view all the options, please visit the 'Maps & Resources' menu. Get OsmAnd for iOS.
Have questions about OsmAnd purchases? Please do not hesitate to contact OsmAnd support team<EMAIL_ADDRESS>We're glad to help.


We are showing you a question from popular software testing forums/feeds online. We give this class of exercise to help you better organize your arguments and solutions while also sparking interesting conversations with your QA colleagues. Think about the questions on your own and/or discuss it with your colleagues. The goal is not arrive at an answer or even agree with the premise of the question. Our hope, instead, is that you practice verbalizing your ideas and disagreements. When you are done thinking/discussing, click on the source link and read the discussion there. Pay attention to the words being used and the variety of view points presented. If you find this exercise boring, simply hit the 'Challenge Me' button to do to try a new challenge.
{% include 'challenge_button.html' %}
{% include 'copyright.html' %}


As a speaker, writer, and member of our community, Daniel Steinberg is my inspiration. That’s not a secret. If you and I have spent much time talking after a conference, I’ve probably mentioned it. It’s not the sort of thing you usually say to someone, and I don’t think I ever have, but I’ve learned a lot from his speaking style, and I constantly try to live up to his standard of kindness. I’m not by nature very kind, so if you see me behaving that way, I’m likely trying to do what I think Daniel might.
This isn’t to say we’re close. We see each other at conferences. We email and tweet. We’re members of a community. So of course I have some idealized picture of him in my mind, without all the this and that of a real person. Even so, he inspires me. When my wife, Janet, and I talk about what’s ahead for our future, we always talk about Daniel and his wife, Kim. I’ve seen them at conferences, traveling together, independent but a team, and I think, hey, we could pull that off when the kids go to school. And Janet and I talk about how to make that work. And we know we only have the shallowest understanding of their real lives, but they inspire us.
Kim died this week. I didn’t know her well. We’d met, and she was nice to me. She and Daniel always seemed so “together” even when they were apart most of the day. Hearing the news unmoored me and scared me and made me think about myself and my family and my plans. And then my heart broke for Daniel.
I’m not kind by nature. But I’m part of a community that is, and part of that is Daniel’s influence on us. Ellen Shapiro has been kind and set up a fund to let us support SmileTrain, where Daniel and his daughter Maggie have asked us to give in Kim’s name. I had never heard of SmileTrain, but it is so perfect. It is kind. And it is practical. It is literally the gift of a smile. It is Daniel and Kim.


New User Sign up
Username
Username is not valid or it is already taken. Please enter in a valid username.
Email
Email address is not valid. Please enter in a valid email address.
Security Question 1
{{question}}
The security question is not valid. Please choose a proper security question.
Security Answer #1
Security answer is not valid. Please enter in a security answer.
Security Question 2
{{question2}}
The security question is not valid. Please choose a proper security question.
Security Answer #2
Security answer is not valid. Please enter in a security answer.
Password
Password is not valid. Please enter in a valid password.
Sign up!


|
FP-GAme User Library
|
User Library for the FP-GAme PPU. More...
#include <stdlib.h>
#include <stdint.h>
#include <sys/types.h>
Go to the source code of this file.
Classes | |
| struct | pattern_t |
| A single 8x8 tiles worth of pattern data (8 rows of 8 pixels at 4bpp) (32B of data) More... | |
| struct | palette_t |
| A palette which contains 15 colors. More... | |
| struct | sprite_t |
| A sprite. More... | |
Macros | |
| #define | TILELAYER_MAX_PALETTES 16 |
| Maximum palettes for tile layers (as opposed to sprite layer) | |
| #define | SPRLAYER_MAX_PALETTES 32 |
| Maximum palettes for sprite layer (as opposed to tile layers) | |
| #define | TILELAYER_WIDTH 64 |
| Width (in tiles) of the tile layer. | |
| #define | TILELAYER_HEIGHT 64 |
| Height (in tiles) of the tile layer. | |
| #define | TILEPATTERN_BSIZE 32 |
| Size (in Bytes) of a single pattern_t (tile-pattern) | |
| #define | TILEPATTERN_HEIGHT 8 |
| Height in pixel rows of a single tile pattern (8x8 tile) | |
| #define | TILERAM_FGOFFSET 0x2000 |
| Byte offset for foreground tile layer within Tile RAM. | |
| #define | VRAM_PATTERNOFFSET 0x4000 |
| Byte offset of Pattern RAM in VRAM. | |
| #define | VRAM_PALETTEOFFSET 0xC000 |
| Byte offset of Palette RAM in VRAM. | |
| #define | VRAM_SPRITESOFFSET 0xD000 |
| Byte offset of Sprite RAM in VRAM. | |
| #define | PALETTERAM_BGOFFSET 0 |
| Byte offset from start of Palette RAM to BG section. | |
| #define | PALETTERAM_FGOFFSET 0x400 |
| Byte offset from start of Palette RAM to FG section. | |
| #define | PALETTERAM_SPROFFSET 0x800 |
| Byte offset from start of Palette RAM to SPR section. | |
| #define | PALETTERAM_SPRITEMAX 32 |
| Maximum number of palettes for sprites to access. | |
| #define | PALETTERAM_TILEMAX 16 |
| Maximum number of palettes for a tile layer to access. | |
| #define | SPRRAM_EXTRAOFFSET 0x100 |
| Byte offset from VRAM_SPRITEOFFSET of the extra data in Sprite RAM. | |
Typedefs | |
| typedef unsigned | pattern_addr_t |
| Address into pattern memory. Generate using ppu_pattern_addr. | |
| typedef uint16_t | tile_t |
| Tile data representation (technically 2B of data) | |
Enumerations | |
| enum | layer_e { LAYER_BG = 1 , LAYER_FG = 2 , LAYER_SPR = 4 } |
| An enum which specifies a render layer. More... | |
| enum | mirror_e { MIRROR_NONE = 0 , MIRROR_X = 1 , MIRROR_Y = 2 , MIRROR_XY = 3 } |
| Mirror state for graphics. More... | |
| enum | render_prio_e { PRIO_IN_BACK = 0 , PRIO_IN_MIDDLE = 1 , PRIO_IN_FRONT = 2 } |
| Rendering priority for sprites. More... | |
Functions | |
| int | ppu_enable (void) |
| Enable the PPU. More... | |
| void | ppu_disable (void) |
| Disable the PPU. More... | |
| int | ppu_update (void) |
| Request for the current frame changes to be send to the PPU on the next available frame. More... | |
| int | ppu_write_vram (const void *buf, size_t len, off_t offset) |
| Write directly to the VRAM buffer. More... | |
| pattern_addr_t | ppu_pattern_addr (unsigned x, unsigned y) |
| Generates a pattern_addr_t using (x, y) coordinates. More... | |
| tile_t | ppu_make_tile (pattern_addr_t pattern_addr, unsigned palette_id, mirror_e mirror) |
| Generate a tile data for use with the ppu_write_tile functions. More... | |
| void | ppu_load_tilemap (tile_t *tilemap, unsigned len, const char *file) |
| Loads tile-data from a file into an linear array of tile_t. More... | |
| void | ppu_load_pattern (pattern_t *pattern, const char *file, unsigned width, unsigned height) |
Loads width*height-tile graphics into pattern from file . More... | |
| void | ppu_load_palette (palette_t *palette, const char *file) |
Loads a color palette from file into palette . More... | |
| int | ppu_write_tiles_horizontal (const tile_t *tiles, unsigned len, layer_e layer, unsigned x_i, unsigned y_i, unsigned count) |
| Writes an array to a horizontal segment of tiles. More... | |
| int | ppu_write_tiles_vertical (const tile_t *tiles, unsigned len, layer_e layer, unsigned x_i, unsigned y_i, unsigned count) |
| Writes an array to a vertical segment of tiles. More... | |
| int | ppu_write_pattern (const pattern_t *pattern, unsigned width, unsigned height, pattern_addr_t pattern_addr) |
| Writes pattern_t patterns (8x8-pixel tiles) to a specified location in Pattern RAM. More... | |
| int | ppu_write_palette (const palette_t *palette, layer_e layer_id, unsigned palette_id) |
| Overwrites a palette in Palette RAM. More... | |
| int | ppu_write_sprites (const sprite_t *sprites, unsigned len, unsigned sprite_id_i) |
| Overwrites one or more sprite data entries in Sprite RAM. More... | |
| int | ppu_set_bgcolor (unsigned color) |
| Set the universal background color of the PPU. More... | |
| int | ppu_set_scroll (layer_e tile_layer, unsigned scroll_x, unsigned scroll_y) |
| Set pixel scroll of the background or foreground tile layer. More... | |
| int | ppu_set_layer_enable (unsigned enable_mask) |
| Enable or disable one or more of the three PPU render layers using a bit-mask. More... | |
User Library for the FP-GAme PPU.
| enum layer_e |
An enum which specifies a render layer.
These enum entries can be ORd together to form a bitmask.
| Enumerator | |
|---|---|
| LAYER_BG | Denotes the background tile render layer. |
| LAYER_FG | Denotes the foreground tile render layer. |
| LAYER_SPR | Denotes the sprite render layer. |
| enum mirror_e |
| enum render_prio_e |
| void ppu_disable | ( | void | ) |
Disable the PPU.
Releases the lock on the PPU. Other processes will be able to reserve access to the PPU.
It is illegal to call this function if the PPU is not currently enabled and owned by the calling process.
| int ppu_enable | ( | void | ) |
Enable the PPU.
Attempts to lock PPU access to this process. If successful, only this process will be able to write to the PPU.
Fails if the PPU is already owned by another process.
The caller of this function must call ppu_disable before program exit to prevent resource leaks.
| void ppu_load_palette | ( | palette_t * | palette, |
| const char * | file | ||
| ) |
Loads a color palette from file
into palette
.
file
must be a simple text file, containing 15 lines, each with a 24-bit hex color. For example, each line has something of the form: FF0000 The example above is a hex representation for the color RED.
| palette | Palette instance to copy the color data from file to. |
| file | File path of the text file to copy color data from. |
| void ppu_load_pattern | ( | pattern_t * | pattern, |
| const char * | file, | ||
| unsigned | width, | ||
| unsigned | height | ||
| ) |
Loads width*height-tile graphics into pattern
from file
.
file
must be a .pattern text file, height * 8 lines, each with width * 8 hex chars: 0-F. Each hex char represents a pixel's color for any palette. 0 is always transparent, 1-F correspond to the 15 available colors in a palette. This format is best exported from art_tools/c_to_pattern.py.
Example (width = height = 8):
112233445
F00000005
F00000006
E00000006
E00000007
D00000007
D00000008
CCBBAA998
A test file with the above text represents a multi-colored box outline with transparent center.
| pattern | Pattern instance to copy the pixel data from file to. |
| file | File path of the text file to copy pixel data from. |
| width | Number of 8x8 tile-patterns wide. Supports width >= 1 |
| height | Number of 8x8 tile-patterns tall. Supports height >= 1 |
| void ppu_load_tilemap | ( | tile_t * | tilemap, |
| unsigned | len, | ||
| const char * | file | ||
| ) |
Loads tile-data from a file into an linear array of tile_t.
The text file contains tile_t entries specified in the following format:
| tilemap | Array of tile_t to load into. |
| len | Number of tiles to copy to tilemap . |
| file | Path of the text file to open and read from. |
| tile_t ppu_make_tile | ( | pattern_addr_t | pattern_addr, |
| unsigned | palette_id, | ||
| mirror_e | mirror | ||
| ) |
Generate a tile data for use with the ppu_write_tile functions.
| pattern_addr | The address of this tile's pattern in Pattern RAM (see ppu_pattern_addr) |
| palette_id | The numerical id of the palette (location in Palette RAM) this tile will use. This must be within range [0, 16]. The final palette comes from the background layer palette section of Palette RAM if this tile is applied to the background tile layer, and similarly for forground palettes. |
| mirror | Mirror state for this tile's pattern. |
| pattern_addr_t ppu_pattern_addr | ( | unsigned | x, |
| unsigned | y | ||
| ) |
Generates a pattern_addr_t using (x, y) coordinates.
Pattern RAM is organized into 32x32 8x8-pixel tiles.
Note each small square in the diagram above represents an 8 pixel by 8 pixel tile.
The coordinate system starts with the origin (0,0) as the top-left most tile. The maximum value for either coordinate is 31; the minimum is 0.
| x | Horizontal tile offset. Range [0, 31]. |
| y | Vertical tile offset. Range [0, 31]. |
| int ppu_set_bgcolor | ( | unsigned | color | ) |
Set the universal background color of the PPU.
The universal background color is the color displayed when all PPU render layers are transparent.
This function will set this color to be displayed at the next ppu_update().
color
will be ignored! | color | 32-bit color holding a 24-bit RRGGBB hex color value. For example, 0xFF0000 for red. |
| int ppu_set_layer_enable | ( | unsigned | enable_mask | ) |
Enable or disable one or more of the three PPU render layers using a bit-mask.
The enable mask has three bits which enable or disable the PPU render layers as follows: Bit 0: Enable (1) or disable (0) the background tile layer Bit 1: Enable (1) or disable (0) the foreground tile layer Bit 2: Enable (1) or disable (0) the sprite layer To generate the enable_mask, use an OR of the layer_e options. For example, to enable both tile layers and disable the sprite layer set enable_mask = BG | FG.
Call this function before a ppu_update() to ensure the layer will be enabled on the next frame.
| enable_mask | Bit-mask used to enable/disable PPU rendering layers. |
| int ppu_set_scroll | ( | layer_e | tile_layer, |
| unsigned | scroll_x, | ||
| unsigned | scroll_y | ||
| ) |
Set pixel scroll of the background or foreground tile layer.
| tile_layer | Either LAYER_BG or LAYER_FG. LAYER_SPR doesn't support layer scrolling. |
| scroll_x | Horizontal pixel scroll. Values must be [0, 511]. |
| scroll_y | Vertical pixel scroll. Values must be [0, 511]. |
| int ppu_update | ( | void | ) |
Request for the current frame changes to be send to the PPU on the next available frame.
Any previous calls to ppu_set_[...] functions are guaranteed to take effect after this function returns successfully.
If you want to ensure your frame gets sent out to the PPU, and also want to synchronize to the PPU's internal 60FPS timing, keep polling this function until 0 (success) is returned.
Overwrites a palette in Palette RAM.
Overwrites a single palette
in Palette RAM at palette_id
and layer_id
Recall that Palette RAM is organized into three segments. layer_id
selects one of these layers: 0: Background Palettes. 16 Palettes 1: Foreground Palettes. 16 Palettes (Else): Sprite Palettes. 32 Palettes
| palette | A pointer to a palette data struct that we should write to Palette RAM. |
| layer_id | The target section of Palette RAM to start copying the palette to. |
| palette_id | The id of the palette to overwrite within the given layer. This must be within bounds of the palette layer section indicated by layer_id . |
| int ppu_write_pattern | ( | const pattern_t * | pattern, |
| unsigned | width, | ||
| unsigned | height, | ||
| pattern_addr_t | pattern_addr | ||
| ) |
Writes pattern_t patterns (8x8-pixel tiles) to a specified location in Pattern RAM.
Starting at the initial tile pointed to by pattern_addr, a set of width
pattern_t by height
pattern_t is formed.
pattern_t tile-patterns (8x8-pixel tiles) from patterns
are written sequentially by rows of width
until height
rows have been written.
The example diagram below demonstrates the effect of this function. Note however that this diagram is shortened to a 16x16 view for readability. The actual Pattern RAM is 32x32.
patterns
has length width
* height
(in terms of pattern_t).| pattern | The buffer of pattern_t tiles. patterns must have width * height total pattern_t. Create your buffer so that the pattern_t tiles occur row by row sequentially. |
| width | The width (in 8x8-pixel tiles) of patterns . Supports >= 1 |
| height | The height (in 8x8-pixel tiles) of patterns . Supports >= 1 |
| pattern_addr | The pattern address to start at. |
| int ppu_write_sprites | ( | const sprite_t * | sprites, |
| unsigned | len, | ||
| unsigned | sprite_id_i | ||
| ) |
Overwrites one or more sprite data entries in Sprite RAM.
| sprites | A pointer to an array of sprite data entries to submit to Sprite RAM. |
| len | Length of sprites array. |
| sprite_id_i | The starting index of the first sprite to overwrite in Sprite RAM. This number must fall in range [0, 63 - len ]. |
| int ppu_write_tiles_horizontal | ( | const tile_t * | tiles, |
| unsigned | len, | ||
| layer_e | layer, | ||
| unsigned | x_i, | ||
| unsigned | y_i, | ||
| unsigned | count | ||
| ) |
Writes an array to a horizontal segment of tiles.
This function copies a buffer of length len tiles into the Tile RAM overwriting count tiles starting at ( x_i
, y_i
) and moving horizontally. If overwriting count tiles would exceed the boundaries of the logical screen (63, y_i
), this function will automatically wrap around to the start of the logical screen (0, y_i
).
If len is lower than count, then this function repeats/tiles the given tiles buffer.
This function is more efficient than ppu_write_tiles_vertical. So if writing a rectangular block of tiles on the screen, prefer to call this function as the inner loop (make the row, y_i
be the outer loop variable).
| tiles | Buffer of tile data to write to Tile RAM. |
| len | Length of the tiles buffer. len will be clamped to 64 if len > 64. |
| layer | Must be either LAYER_FG or LAYER_BG, depending on which tile RAM section to write. |
| x_i | Horizontal position of the first tile to write. Must be in the range [0, 63] |
| y_i | Vertical position of the first tile to write. Must be in the range [0, 63] |
| count | The number of tiles to overwrite (horizontally) in Tile RAM. count will be set to 64 if count > 64. |
| int ppu_write_tiles_vertical | ( | const tile_t * | tiles, |
| unsigned | len, | ||
| layer_e | layer, | ||
| unsigned | x_i, | ||
| unsigned | y_i, | ||
| unsigned | count | ||
| ) |
Writes an array to a vertical segment of tiles.
This function copies a buffer of length len tiles into the Tile RAM overwriting count tiles starting at ( x_i
, y_i
) and moving vertically. If overwriting count tiles would exceed the boundaries of the logical screen ( x_y
, 63), this function will automatically wrap around to the start of the logical screen ( x_i
, 0).
If len is lower than count, then this function repeats/tiles the given tiles buffer.
| tiles | Buffer of tile data to write to Tile RAM. |
| len | Length of the tiles buffer. len will be clamped to 64 if len > 64. |
| layer | Must be either LAYER_FG or LAYER_BG, depending on which tile RAM section to write. |
| x_i | Horizontal position of the first tile to write. Must be in the range [0, 63]. |
| y_i | Vertical position of the first tile to write. Must be in the range [0, 63]. |
| count | The number of tiles to overwrite (vertically) in Tile RAM. count will be set to 64 if count > 64. |
| int ppu_write_vram | ( | const void * | buf, |
| size_t | len, | ||
| off_t | offset | ||
| ) |
Write directly to the VRAM buffer.
| buf | Pointer to a buffer to write to the VRAM. |
| len | Size of buf in bytes. |
| offset | Byte offset into VRAM. |


Some features that I would like to include in future updates of this website:
I would use the analogy of a vehicle.
HTML would represent the core components of a car - wheels, engine, doors, lights etc.
The CSS would refine the look of the car, chrome rims, bigger exhaust, leather seats, tinted windows, fluffy dice etc.
The DOM would be the interface we see/use - the gear stick, indicators, pedals, the dashboard to engage (with) with the car.
Everything visible on a webpage sits inside a box. As an example - Lego comes in a variety of block sizes - each representing different content/elements on a webpage. These can be moved around on the Lego Baseplate till we're happy with placement, styling etc. Similarly, mockups of webpages are created on a macro scale while the micro details come in towards the end.
This model references the content, it's padding, border and margin.
For a photographer capturing a portrait, his subject/content would be the person. The padding would be the amount of background captured in his composition - too much background and the subject may lose it's visual importance. The border would be the edge of said photograph. And the margin is the space, justified when juxtaposed against something else.
Understanding how to use these CSS properties ensure well spaced out elements inherent within good design.


Note: Applicants will be contacted for a brief telephone interview prior to being accepted into the training.


Sungae's
Cover Letter
Resume CV
Portfolios
Sungae's Github
Sungae's LinkedIn
Sungae's FaceBook
DevOps example using with Node.js and Bootstrap.css -- by Sungae Park


React Timespan
A neat timeline component that displays a gallery of activities with a pannable plot.
How to use
API
The display precision is based on year, which is a large unit. Sorting precision is down to the millisecond.
import Timeline from 'react-timespan';
const activities = [
{
name: 'Cole Turner',
start: '1991-02-24',
url: 'http://cole.codes/',
body: 'As a baby I was born because something about birds and bees.',
image: 'http://...'
},
{
name: 'The Year I Wrote This',
start: '2017-01-01',
end: '2017-12-31',
url: 'http://cole.codes/',
body: 'Truly I made this for my portfolio and decided to sh are.',
image: 'http://...'
}
];
<Timeline activities={activities} />
A SASS stylesheet is included separately...
Make it better
I decided to share this because I am fond of the end result and hope it will inspire a pull request to make it better.
Pull requests are warmly welcomed.
Contributors
Cole Turner


2018 marks the 10th edition of ffconf, and Julie and I (Remy) have been hard at work already to make it an excellent one.
In the lead up to the event, I wanted to share some of the behind the scenes that goes into creating ffconf, some of the challenges, heartaches and more importantly, give you an idea of what you can expect.
For those of you that have attended ffconf in the past, you'll have an inkling of when the event will run, but so it's safe in your business diary, we'll be running the event on Thursday 8th November and again on Friday 9th. Yes, we're doing it twice again ✌
I published the dates back in late March at 2018.ffconf.org , and rest assured I'm working with a graphic design and web designer to make sure my own design efforts, the tear-inducing pink and giant font, will be long gone! I'm hoping to also preview some of the graphic work here with you all.
Speaking of dates, we're discovered there's now two other events that are running the same dates as us - and Julie and I have been giving a lot of thought to how that impacts our event: whether it affects attendance and how it affects sponsorship (the much needed money to secure our venue and pay a lot of the big fees).
Our next big announcement will be the ticket release date (for your diaries: approximately June) - and we've had a few conversations about pre-selling tickets before anything is announced . But, we don't like this idea. We both want to make ffconf an excellent content-driven experience, and buying a ticket blind doesn't really hold true to our values (so, you'll have to wait 😉 ).
That's it for now. We'll be in touch again with more insights. As for me, I'll continue searching for speakers to match the topics I want to hear about this year (details of which I'll share in the future).
– Remy (& Julie)
If you find yourself wanting to learn something, check out Monica's talk from 2017 on Web Components 👆


This is a simple hero unit, a simple jumbotron-style component for calling extra attention to featured content or information.
This is my attempt on this challenge. I don't know how to space or border anything.
This is my cat. His name is Gerald Henderson


The Psychic Game
Guess what letter I'm thinking of
Wins: 0
Losses: 0
Guesses Left: 10
Your guesses so far:


Bloomin Brands
Bigelow Aerospace
One Harbour Place
NAUI
West Elm
Brighthouse Maitland
Brandon Professional
Westshore Center
EMI
Tiger
New York Life
Brighthouse
Coca-Cola
Ravis Banquet Hall
MyMatrix
4th Street
University Professional Park
Advantec
Addessi Financial
Glacial


|
MasterScan
Lab_Matlab_control Master Branch
|
Singleton to work with the OpenGL drawing context.
dotsTheScreen manages the Snow Dots OpenGL drawing context. "Context" includes the display and window to use for drawing, OpenGL system resources, OpenGL configuration, and state memory, all of which Snow Dots needs in order to draw graphics with OpenGL.
dotsTheMachineConfiguration provides hardware-specific default property values to dotsTheScreen.
Properties and Events | |
| Property | width |
| dispay width (cm) | |
| Property | height |
| dispay height (cm) | |
| Property | distance |
| display viewing distance (cm) | |
| Property | displayIndex |
| index of display on which to open drawing windows More... | |
| Property | displayPixels |
| rectangle representing the entire display (pixels, [0 0 w h]) | |
| Property | bitDepth |
| color depth of each pixel (number of bits) | |
| Property | multisample |
| whether or not to use OpenGL full-scene antialiasing | |
| Property | windowRect |
| pixel dimensions of the current drawing window [x y x2 y2] | |
| Property | windowFrameRate |
| Hz frame rate of the current drawing window. | |
| Property | pixelsPerDegree |
| approximate conversion factor for the current display | |
| Property | foregroundColor |
| a foreground color, [L] [LA] [RGB] [RGBA], 0-255 | |
| Property | backgroundColor = [0 0 0] |
| a background color, [L] [LA] [RGB] [RGBA], 0-255 | |
| Property | clockFunction |
| function that returns the current time as a number | |
| Property | gammaTableFileName |
| filename with path to .mat file that contains a gamma table | |
| Property | newGammaTable |
| newly loaded color calibration | |
| Properties and Events inherited from dotsAllSingletonObjects | |
| null | obj = theObject(varargin) |
| Return the current class instance from the private constructor. | |
| null | g = gui() |
| Launch a grapical interface for the current instance. | |
Protected Properties | |
| Property | flushGauge |
| utility object to account for OpenGL frame timing | |
| Property | lastFrameInfo |
| onset data from the last frame | |
| Property | systemGammaTable |
| color calibration that was in the video card at startup (nx3) | |
| Property | offsetTime =0 |
| for clock synchronization | |
| Property | isRemoteFlag = false |
| To check for remote mode. | |
| Property | isOpenFlag = false |
| Screen is open. | |
Methods | |
| initialize (self) | |
| Return the current instance to a fresh state, closing the window. | |
| open (self) | |
| Open an OpenGL drawing window. | |
| close (self) | |
| Close the OpenGL drawing window. | |
| frameInfo | nextFrame (self, doClear) |
| Flush OpenGL drawing commands and swap OpenGL frame buffers. More... | |
| time | getCurrentTime (self) |
| Gets the current time. | |
| frameInfo | blank (self, backgroundColor) |
| Swap OpenGL frame buffers twice without drawing. More... | |
| saveGammaTableToMatFile (self, fileName) | |
| Save gamma-correction data in newGammaTable to a .mat file. More... | |
| readGammaTableFromMatFile (self, fileName) | |
| Load gamma-correction data from a .mat file into newGammaTable. More... | |
| Methods inherited from dotsAllSingletonObjects | |
| null | reset (varargin) |
| Restore a fresh state without deleting the current instance. | |
| null | initialize (self) |
| Restore a fresh state without deleting the current object, used by constructor and reset(). More... | |
| initializeLists (self, listNames) | |
| Create or refresh topsGroupedList instances. | |
| set (self, varargin) | |
| Set multiple properties. | |
Static Methods | |
| static obj | theObject (varargin) |
| Access the current instance of the object. | |
| static isOpenFlag | isOpen () |
| Check if screen is open. | |
| static ensemble | theEnsemble (remoteDrawing, displayIndex, varargin) |
| Utility for creating or retrieving a screen ensemble, which is created either as a (local) topsEnsemble or for remote drawing using dotsClientEnsemble with default network values. More... | |
| static | reset (varargin) |
| Restore the current instance to a fresh state. | |
| static g | gui () |
| Launch a graphical interface to view dotsTheScreen properties. | |
| static gammaTableFileName | getHostGammaTableFilename () |
| Get a filename suitable for storing a machine-specific gamma table. More... | |
| static displayNumber | getDisplayNumber () |
| Get the number of the display used for drawing. More... | |
| static | openWindow () |
| Open an OpenGL drawing window. | |
| static | closeWindow () |
| Close the OpenGL drawing window. | |
| static gammaTable values | makeGammaTable (doTest, fileName, tableSize, targetSize) |
| Makes a gamma table using the optiCAL device from Cambridge Research Systems. More... | |
| static | openScreen (remoteDrawing, displayIndex, varargin) |
| Conventient routine to open a screen. | |
| static | closeScreen () |
| Conventient routine to close a screen. | |
| static frameInfo | blankScreen (varargin) |
| Convenient routine to blank the current screen, even if remote. More... | |
| static | setSyncTimes (offsetTime, referenceTime) |
| Save current screen offset time. | |
| static offsetTime referenceTime | getSyncTimes () |
| Get current screen offset time. | |
Private Methods | |
| self | dotsTheScreen (varargin) |
| Constructor is private. More... | |
|
private |
Constructor is private.
Use dotsTheScreen.theObject to access the current instance.
| frameInfo nextFrame | ( | self | , |
| doClear | |||
| ) |
Flush OpenGL drawing commands and swap OpenGL frame buffers.
| doClear | whether or not clear the frame buffer after displaying it |
Flushes any recent drawing commands throught OpenGL rendering pipeline, then calls for a frame buffer swap. This will cause the recently drawn frame to appear on-screen.
If doClear is true (default), sends a frame buffer clear command immediately after the swap command. This will cause new future frames to start out as clear. Use doClear = false to let drawings accumulate or "pile up" frame after frame.
Returns a struct with frame timing data obtained from flushGauge. The struct has fields:
Assigns the same struct to lastFrameInfo.
| frameInfo blank | ( | self | , |
| backgroundColor | |||
| ) |
Swap OpenGL frame buffers twice without drawing.
Calls for a clear of both OpenGL frame buffers as well as two frames buffer swaps. This will cause any previous drawing commands to be processed but not shown, and the screen to turn blank. Returns a struct with frame timing data obtained from flushGauge, for the first flush. The struct has fields:
Assigns the same struct to lastFrameInfo.
| saveGammaTableToMatFile | ( | self | , |
| fileName | |||
| ) |
Save gamma-correction data in newGammaTable to a .mat file.
Argument: fileName ... optional. If empty uses default from setHostGammaTableFileName.
| readGammaTableFromMatFile | ( | self | , |
| fileName | |||
| ) |
Load gamma-correction data from a .mat file into newGammaTable.
Argument: fileName ... optional. If empty uses default from setHostGammaTableFileName. Keywords: 'none' = skip 'make' = call makeGammaTable
|
static |
Utility for creating or retrieving a screen ensemble, which is created either as a (local) topsEnsemble or for remote drawing using dotsClientEnsemble with default network values.
Aguments (for creating): remoteDrawing ... flag for creating client/server ensembles displayIndex ... 0=debug screen; 1=main screen; 2=2nd screen; etc
|
static |
Get a filename suitable for storing a machine-specific gamma table.
|
static |
Get the number of the display used for drawing.
If Snow Dots has an open drawing window, returns a non-negative integer which corresponds to displayIndex. Otherwise, returns -1.
|
static |
Makes a gamma table using the optiCAL device from Cambridge Research Systems.
Easist way to call this is: -> dotsTheScreen.makeGammaTable(); If you want to check and plot the results, try this: -> [gammaTable, values] = dotsTheScreen.makeGammaTable(true); -> cla reset; hold on -> plot(values(:,1), values(:,2), 'k.'); % uncorrected -> plot(values(:,1), values(:,3), 'r.'); % corrected Note that this routine will put a file in your current working directory that contains the new gamma table. If you want to keep using this table by default, just make sure that it lives somewhere on your Matlab path. This function assumes that:
the sensor is suctioned onto the middle of the screen Arguments: doTest ... boolean flag to test gamma after correction fileName ... gammaFileName. [] for default. tableSize ... length of the gamma table targetSize ... diameter of spot to draw on screen, in deg visual angle Returns: gammaTable ... the new gamma table values ... nx3 matrix of [nominal values, measuredValues, correctedValues] (3rd column only if doTest=true)
|
static |
Convenient routine to blank the current screen, even if remote.
Argument (optional): backgroundColor
| Property displayIndex |
index of display on which to open drawing windows
A positive integer is a 1-based index for an attached display, on which to open a full-screen window. 0 calls for a small window centered on the primary display.


This is a simple HTML file.
This is as fancy as we'll get!
IDs (such as #content) are unique (there can only be one per page).
Classes (such as .callout can be used on many elements.)
A single HTML element can have multiple classes.
This is a simple HTML file.
This is as fancy as we'll get!
IDs (such as #content) are unique (there can only be one per page).
Classes (such as .callout can be used on many elements.)
A single HTML element can have multiple classes.


Ocean [aj37], ocean, in The Inner Sea
Last updated Turn #75
Ocean [aj37], ocean, in The Inner Sea
------------------------------------------------------------------------
25: Fast Sail [ht2u], ship, 3 hulls, 1 rowing port, 9 sails, arrived from
25: Ocean [aj38], owner:
25: Stewart [k0u], Pen, with 12 sailors
26: Fast Sail [ht2u], ship, 3 hulls, 1 rowing port, 9 sails, departed for
26: Ocean [aj36].
Routes leaving Ocean:
North, to Ocean [ai37], 6 days
East, to Ocean [aj38], 6 days
South, to Ocean [ak37], 6 days
West, to Ocean [aj36], 6 days


--- layout: post title: Trunk date: '2016-10-29T00:30:18+02:00' categories: - Storyboards - Sketches picture_url: https://film-Storyboards.tumblr.com/post/152453106764 ---


{% extends "base.html" %} {% block content %}
This is a demo using Django Channels
Welcome, {{ user.username }} Logout
{{ room.name }}
Create new chat room


--- layout: cohort title: Cohort 1 | About cohortlink: one cohort: ONE ---
SJP Cohort #1 is a dedicated group of thirty students led by Ms. Angell and Mr. Bloom. As the very first group of SJP students, we have been helping to design the program, giving input and suggestions as the pathway develops. Each of us is passionate about social justice, a passion that has been increased through our participation in the pathway. We have chosen to learn through projects, discussions, field trips, and guest speakers, instead of traditional methods. By taking charge of our own learning through self-motivation and organization, we have found that our levels of understanding and interest in the topics we study have flourished.
"Imagine that you are building an airplane, and all the parts that would go into it. Now imagine that the airplane is already in the air. That is the Social Justice Pathway." -Eric Bloom, Cohort #1 History Teacher


Your final is a take-home (or take wherever-you-are) activity. You can and should use all of the resources from the course as you work on your exam.
For your final exam, you will write a performance review that evaluates your work in the course. You will propose the grade you should receive, using information from your Labor Log and your Course Declarations to support your recommendation. In the workplace, this report would be similar to an annual self-evaluation.
Note: there is no grace period for this assignment. If you do not submit your exam on time (or do not submit it at all), your grade in the course will be lowered.
Step 1: Familiarize yourself with the characteristics and features of performance reviews.
The following articles offer advice on writing self-evaluations:
Note that some of these examples are by students who were analyzing their participation in the course. You are evaluating your labor, so your content will be different.
You can also review the videos in this Lynda.com Playlist: Final Exam Resources on Performance Reviews
Step 2: Review your work in the course and gather your data.
You need to collect the data on your work in the class. You should find much of what you need in your Labor Log. Be sure that you examine your work individually, with your writing group, and with the class as a whole as you consider these questions:
If you are working toward a grade higher than a B, also look for evidence of the following:
Find more details on grades higher than B on the Requirements page.
Using the information you have, gather the relevant numbers, links to examples, and pull out quotations or other evidence from your work. Remember that you are focusing on your work in the entire course, following the definition of labor on the Requirements page and in your Labor Log instructions.
Step 3: Compare your findings to the course expectations.
Once you have gathered your findings about your labor in the course, compare them to the expectations and conclude how well you did. The following areas, explained the Requirements page, count as labor in this course:
Be sure that you consider your work in the entire course, and if relevant, be honest about where you fell short.
Step 4: Pay attention to the expectations for the final exam.
To meet the requirements of the final exam assignment, your performance review should include the following sections and information:
Your performance review should be specific and detailed, since I will go by the information in your report as I determine your grade. If you do not provide adequate, specific details, your course grade may be effected.
Step 5: Compose your final exam.
Once you have gathered all of your information and drawn conclusions about your performance in the course, write your review in your word processor. Explain your findings, present your evidence, and include an indication of how your work in the course compares to the expectations. Your report should be professional, and avoid any whining, begging, or the like.
Use what you know about layout and design to create a report that is clear and easy to read. If it’s also fun and interesting, that’s great too. Think about how you might include graphs, tables, and other visual aids. Be sure to include information-rich headings.
Since the report focuses on your grade in the course, you do not need to share your draft with your writing group. Your grade in the course is private and personal, and any assignment to share details about your grade would be a FERPA violation.
Step 6. Review your exam for design and basic writing errors.
Everything you write should use accurate/appropriate image editing, grammar, spelling, punctuation, mechanics, linking, and formatting. These are important basic writing skills that you should have developed in high school.
Also review your project, considering the layout and design of your project.
Step 7: Submit your project in Canvas.
Upload your completed Peformance Review in Canvas.
Photo Credit: Typing II by OER Africa on Flickr, used under a CC-BY 2.0 license.


Shalpreet Kaur
About
Portfolio
Contact
Portfolio
Project Title: Form Generator
Link to the Github Repository:
https://github.com/kaurshalpreet/Form-Generator
Link to the deployed Application:
https://ancient-earth-94263.herokuapp.com
Project Title: Life Organizer
Link to the Github Repository:
https://github.com/kaurshalpreet/Life-Organizer
Link to the deployed Application:
https://kaurshalpreet.github.io/Life-Organizer/index.html
Project Title: Eat-Da-Burger
Link to the Github Repository:
https://github.com/kaurshalpreet/burger
Link to the deployed Application:
https://evening-chamber-99233.herokuapp.com
Project Title: Code Quiz
Link to the Github Repository:
https://github.com/kaurshalpreet/homework4-codeQuiz
Link to the deployed Application:
https://kaurshalpreet.github.io/homework4-codeQuiz/
Project Title: Work Day Scheduler
Link to the Github Repository:
https://github.com/kaurshalpreet/homework5-Work-Day-Scheduler
Link to the deployed Application:
https://kaurshalpreet.github.io/homework5-Work-Day-Scheduler/
Project Title: Weather Dashboard
Link to the Github Repository:
https://github.com/kaurshalpreet/homework6-Weather-Dashboard
Link to the deployed Application:
https://kaurshalpreet.github.io/homework6-Weather-Dashboard/
Project Title: Password Generator
Link to the Github Repository:
https://github.com/kaurshalpreet/homework3
Link to the deployed Application:
https://kaurshalpreet.github.io/homework3/


We, the admins, reserve the right to take any action that we see fit against any person or persons that are found to be in breach of these guidelines including; issuing a warning (verbal or written), asking the offending person or persons to leave the community, or expulsion from the community.
The Global {{ topic.name }} Community prides itself on being an open, respectful, and inclusive community. That means jerky behavior isn't allowed. Because we know that it's not obvious to everyone, here's a reminder of things we don't allow:jokes or offensive comments about sex/sexuality/race/religion/nationality/body size, showing port in public, touching people uninvited, or continuing to interact with someone after they've asked you to stop. Continuous jerky behavior may result in getting expelled from the community.
If someone is bothering you, please tell the admins and they will take care of it. We want to maintain Global {{ topic.name }} Community awesomeness.
Why do we have an official Anti-Harassment policy for The Global {{ topic.name }} Community?
The Global {{ topic.name }} Community is dedicated to providing a harassment-free event experience for everyone, regardless of:
The above is not an exhaustive list -- we do not tolerate harassment of event participants in any form.
Sexual language and imagery is not appropriate for any group. Exhibiting groups violating these rules may be expelled from the community, at the discretion of the admins.
Harassment includes (but is not limited to):
Participants asked to stop any harassing behavior are expected to comply immediately.
Exhibiting partners and guests are also subject to the anti-harassment policy. In particular, exhibitors and speakers should not use sexualized images, activities, or other material, or otherwise create a sexualized environment in their slide decks, exhibit material, exhibit staffing, promotional items or demo material.
If you are being harassed, notice that someone else is being harassed, or have any other concerns, please contact an admin immediately. Admins will investigate the issue and take appropriate action.
Though we hope that we never have to invoke this policy, we believe that having this document helps everyone think a little more about how their actions and words affect the whole community, as well as individuals in the community.
The Global {{ topic.name }} Community is an inclusive community where developers, designers, and entrepreneurs of all skill levels, genders, religions, and backgrounds are welcome to learn, practice, and share {{ topic.name }} technologies and services. Our motto is “Be excellent to each other”; if you see or experience anything different please contact the admins.


| Welcome to Microsoft XML Notepad |
| Version 2.6 |
|
Microsoft XML Notepad is a lightweight and fast tool for editing XML documents. XML has proliferated the planet and XML Notepad has been downloaded over a million times! Download Microsoft XML Notepad (requires .NET 4.0). See Change History for list of new features and bug fixes. |
|
Copyright © 2014 Microsoft Corporation. All Rights Reserved. Built using C# - requires .NET Framework 4.0. |


Orim of the Shadow:
Shaman of the Oaks, good to see you again. I am glad that I was able to return the remains of your hero to his people.


Blog
Technique 1: "Total Recall"
Try to remember some similar problems that you had to solve. Quite many problems do not have a brand new idea. So probably, you can use your experience of solving a similar problem to solve this one.
Technique 2: "From Specific to General"
Let's say that you've found the solution for the problem (hurray!). Let's consider some particular case of a problem. Of course, you can apply the algorithm/solution to it. That's why, in order to solve a general problem, you need to solve all of its specific cases. Try solving some (or multiple) specific cases and then try and generalize them to the solution of the main problem. Such specific cases can be regarded as the simplifications of the problem, i.e. we can reason by the following principle: "if I don't know how to solve a complex problem, I think I'll simplify it and find the solutions of the simplified version".
The popular examples of simplifications (specific cases):
Technique 3: "To solve a problem, you should think like a problem"
I'm serious, put yourself in the shoes of the character of the problem, imagine that it's your job to handle the input sets. Think about how you'd act in this case. Try to process some small samples on your own. If the problem is about a game, play it. Sometimes I try to visualize a process or a model for better understanding. It's a little like how movies show the way scientists think. Try to think in images, imagine the solution, see it unfolding.
Technique 4: "Pick a Method"
Try coming through popular algorithms or methods that can apply to the problem in any way. It is useful to see the problem limits. Having picked a method, try thinking on the solution assuming that the problem is solved using this method. Your reasonings should be somewhat like this: "Let's assume that the problem is solved by divide and conquer. Then let us solve this problem recursively for the left and right half. Now all that's left is to find a way to unite these solutions. I wonder how we can do that..."
Technique 5: "Google"
This technique can only be used if the round/contest rules allow it. If the problem is about sequences, then you can look for solutions (see technique 7) on the The On-Line Encyclopedia of Integer Sequences® (OEIS®) Wiki. It helps to understand the formal model of the problem and google the correct mathematical terms.