Basic graphs#
The methods defined here appear in sage.graphs.graph_generators
.
- sage.graphs.generators.basic.BullGraph()#
Return a bull graph with 5 nodes.
A bull graph is named for its shape. It’s a triangle with horns. See the Wikipedia article Bull_graph for more information.
PLOTTING:
Upon construction, the position dictionary is filled to override the spring-layout algorithm. By convention, the bull graph is drawn as a triangle with the first node (0) on the bottom. The second and third nodes (1 and 2) complete the triangle. Node 3 is the horn connected to 1 and node 4 is the horn connected to node 2.
EXAMPLES:
Construct and show a bull graph:
sage: g = graphs.BullGraph(); g Bull graph: Graph on 5 vertices sage: g.show() # long time
The bull graph has 5 vertices and 5 edges. Its radius is 2, its diameter 3, and its girth 3. The bull graph is planar with chromatic number 3 and chromatic index also 3:
sage: g.order(); g.size() 5 5 sage: g.radius(); g.diameter(); g.girth() 2 3 3 sage: g.chromatic_number() 3
The bull graph has chromatic polynomial \(x(x - 2)(x - 1)^3\) and Tutte polynomial \(x^4 + x^3 + x^2 y\). Its characteristic polynomial is \(x(x^2 - x - 3)(x^2 + x - 1)\), which follows from the definition of characteristic polynomials for graphs, i.e. \(\det(xI - A)\), where \(x\) is a variable, \(A\) the adjacency matrix of the graph, and \(I\) the identity matrix of the same dimensions as \(A\):
sage: chrompoly = g.chromatic_polynomial() sage: x = chrompoly.parent()('x') sage: x * (x - 2) * (x - 1)^3 == chrompoly True sage: charpoly = g.characteristic_polynomial() sage: M = g.adjacency_matrix(); M [0 1 1 0 0] [1 0 1 1 0] [1 1 0 0 1] [0 1 0 0 0] [0 0 1 0 0] sage: Id = identity_matrix(ZZ, M.nrows()) sage: D = x*Id - M sage: D.determinant() == charpoly True sage: x * (x^2 - x - 3) * (x^2 + x - 1) == charpoly True
- sage.graphs.generators.basic.ButterflyGraph()#
Return the butterfly graph.
Let \(C_3\) be the cycle graph on 3 vertices. The butterfly or bowtie graph is obtained by joining two copies of \(C_3\) at a common vertex, resulting in a graph that is isomorphic to the friendship graph \(F_2\). See the Wikipedia article Butterfly_graph for more information.
See also
GraphGenerators.FriendshipGraph()
EXAMPLES:
The butterfly graph is a planar graph on 5 vertices and having 6 edges:
sage: G = graphs.ButterflyGraph(); G Butterfly graph: Graph on 5 vertices sage: G.show() # long time sage: G.is_planar() True sage: G.order() 5 sage: G.size() 6
It has diameter 2, girth 3, and radius 1:
sage: G.diameter() 2 sage: G.girth() 3 sage: G.radius() 1
The butterfly graph is Eulerian, with chromatic number 3:
sage: G.is_eulerian() True sage: G.chromatic_number() 3
- sage.graphs.generators.basic.CircularLadderGraph(n)#
Return a circular ladder graph with \(2 * n\) nodes.
A Circular ladder graph is a ladder graph that is connected at the ends, i.e.: a ladder bent around so that top meets bottom. Thus it can be described as two parallel cycle graphs connected at each corresponding node pair.
PLOTTING: Upon construction, the position dictionary is filled to override the spring-layout algorithm. By convention, the circular ladder graph is displayed as an inner and outer cycle pair, with the first \(n\) nodes drawn on the inner circle. The first (0) node is drawn at the top of the inner-circle, moving clockwise after that. The outer circle is drawn with the \((n+1)`th node at the top, then counterclockwise as well. When `n == 2\), we rotate the outer circle by an angle of \(\pi/8\) to ensure that all edges are visible (otherwise the 4 vertices of the graph would be placed on a single line).
EXAMPLES:
Construct and show a circular ladder graph with 26 nodes:
sage: g = graphs.CircularLadderGraph(13) sage: g.show() # long time
Create several circular ladder graphs in a Sage graphics array:
sage: g = [] sage: j = [] sage: for i in range(9): ....: k = graphs.CircularLadderGraph(i+3) ....: g.append(k) sage: for i in range(3): # needs sage.plot ....: n = [] ....: for m in range(3): ....: n.append(g[3*i + m].plot(vertex_size=50, vertex_labels=False)) ....: j.append(n) sage: G = graphics_array(j) # needs sage.plot sage: G.show() # long time # needs sage.plot
- sage.graphs.generators.basic.ClawGraph()#
Return a claw graph.
A claw graph is named for its shape. It is actually a complete bipartite graph with
(n1, n2) = (1, 3)
.PLOTTING: See
CompleteBipartiteGraph()
.EXAMPLES:
Show a Claw graph:
sage: (graphs.ClawGraph()).show() # long time
Inspect a Claw graph:
sage: G = graphs.ClawGraph() sage: G Claw graph: Graph on 4 vertices
- sage.graphs.generators.basic.CompleteBipartiteGraph(p, q, set_position=True)#
Return a Complete Bipartite Graph on \(p + q\) vertices.
A Complete Bipartite Graph is a graph with its vertices partitioned into two groups, \(V_1 = \{0,...,p-1\}\) and \(V_2 = \{p,...,p+q-1\}\). Each \(u \in V_1\) is connected to every \(v \in V_2\).
INPUT:
p,q
– number of vertices in each sideset_position
– boolean (defaultTrue
); if set toTrue
, we assign positions to the vertices so that the set of cardinality \(p\) is on the line \(y=1\) and the set of cardinality \(q\) is on the line \(y=0\).
PLOTTING: Upon construction, the position dictionary is filled to override the spring-layout algorithm. By convention, each complete bipartite graph will be displayed with the first \(p\) nodes on the top row (at \(y=1\)) from left to right. The remaining \(q\) nodes appear at \(y=0\), also from left to right. The shorter row (partition with fewer nodes) is stretched to the same length as the longer row, unless the shorter row has 1 node; in which case it is centered. The \(x\) values in the plot are in domain \([0, \max(p, q)]\).
In the Complete Bipartite graph, there is a visual difference in using the spring-layout algorithm vs. the position dictionary used in this constructor. The position dictionary flattens the graph and separates the partitioned nodes, making it clear which nodes an edge is connected to. The Complete Bipartite graph plotted with the spring-layout algorithm tends to center the nodes in \(p\) (see
spring_med
in examples below), thus overlapping its nodes and edges, making it typically hard to decipher.Filling the position dictionary in advance adds \(O(n)\) to the constructor. Feel free to race the constructors below in the examples section. The much larger difference is the time added by the spring-layout algorithm when plotting. (Also shown in the example below). The spring model is typically described as \(O(n^3)\), as appears to be the case in the NetworkX source code.
EXAMPLES:
Two ways of constructing the complete bipartite graph, using different layout algorithms:
sage: # needs networkx sage: import networkx sage: n = networkx.complete_bipartite_graph(389, 157) # long time sage: spring_big = Graph(n) # long time sage: posdict_big = graphs.CompleteBipartiteGraph(389, 157) # long time
Compare the plotting:
sage: n = networkx.complete_bipartite_graph(11, 17) # needs networkx sage: spring_med = Graph(n) # needs networkx sage: posdict_med = graphs.CompleteBipartiteGraph(11, 17)
Notice here how the spring-layout tends to center the nodes of \(n1\):
sage: spring_med.show() # long time # needs networkx sage: posdict_med.show() # long time
View many complete bipartite graphs with a Sage Graphics Array, with this constructor (i.e., the position dictionary filled):
sage: g = [] sage: j = [] sage: for i in range(9): ....: k = graphs.CompleteBipartiteGraph(i+1,4) ....: g.append(k) sage: for i in range(3): # needs sage.plot ....: n = [] ....: for m in range(3): ....: n.append(g[3*i + m].plot(vertex_size=50, vertex_labels=False)) ....: j.append(n) sage: G = graphics_array(j) # needs sage.plot sage: G.show() # long time # needs sage.plot
We compare to plotting with the spring-layout algorithm:
sage: # needs networkx sage.plot sage: g = [] sage: j = [] sage: for i in range(9): ....: spr = networkx.complete_bipartite_graph(i+1,4) ....: k = Graph(spr) ....: g.append(k) sage: for i in range(3): ....: n = [] ....: for m in range(3): ....: n.append(g[3*i + m].plot(vertex_size=50, vertex_labels=False)) ....: j.append(n) sage: G = graphics_array(j) sage: G.show() # long time
sage: graphs.CompleteBipartiteGraph(5,6).complement() complement(Complete bipartite graph of order 5+6): Graph on 11 vertices
- sage.graphs.generators.basic.CompleteGraph(n)#
Return a complete graph on \(n\) nodes.
A Complete Graph is a graph in which all nodes are connected to all other nodes.
PLOTTING: Upon construction, the position dictionary is filled to override the spring-layout algorithm. By convention, each complete graph will be displayed with the first (0) node at the top, with the rest following in a counterclockwise manner.
In the complete graph, there is a big difference visually in using the spring-layout algorithm vs. the position dictionary used in this constructor. The position dictionary flattens the graph, making it clear which nodes an edge is connected to. But the complete graph offers a good example of how the spring-layout works. The edges push outward (everything is connected), causing the graph to appear as a 3-dimensional pointy ball. (See examples below).
EXAMPLES:
We view many Complete graphs with a Sage Graphics Array, first with this constructor (i.e., the position dictionary filled):
sage: # needs sage.plot sage: g = [] sage: j = [] sage: for i in range(9): ....: k = graphs.CompleteGraph(i+3) ....: g.append(k) sage: for i in range(3): ....: n = [] ....: for m in range(3): ....: n.append(g[3*i + m].plot(vertex_size=50, vertex_labels=False)) ....: j.append(n) sage: G = graphics_array(j) sage: G.show() # long time
We compare to plotting with the spring-layout algorithm:
sage: # needs networkx sage.plot sage: import networkx sage: g = [] sage: j = [] sage: for i in range(9): ....: spr = networkx.complete_graph(i+3) ....: k = Graph(spr) ....: g.append(k) sage: for i in range(3): ....: n = [] ....: for m in range(3): ....: n.append(g[3*i + m].plot(vertex_size=50, vertex_labels=False)) ....: j.append(n) sage: G = graphics_array(j) sage: G.show() # long time
Compare the constructors (results will vary):
sage: # needs networkx sage: import networkx sage: t = cputime() sage: n = networkx.complete_graph(389); spring389 = Graph(n) sage: cputime(t) # random 0.59203700000000126 sage: t = cputime() sage: posdict389 = graphs.CompleteGraph(389) sage: cputime(t) # random 0.6680419999999998
We compare plotting:
sage: # needs networkx sage: import networkx sage: n = networkx.complete_graph(23) sage: spring23 = Graph(n) sage: posdict23 = graphs.CompleteGraph(23) sage: spring23.show() # long time # needs sage.plot sage: posdict23.show() # long time # needs sage.plot
- sage.graphs.generators.basic.CompleteMultipartiteGraph(L)#
Return a complete multipartite graph.
INPUT:
L
– a list of integers; the respective sizes of the components
PLOTTING: Produce a layout of the vertices so that vertices in the same vertex set are adjacent and clearly separated from vertices in other vertex sets.
This is done by calculating the vertices of an \(r\)-gon then calculating the slope between adjacent vertices. We then ‘walk’ around the \(r\)-gon placing graph vertices in regular intervals between adjacent vertices of the \(r\)-gon.
Makes a nicely organized graph like in this picture: https://commons.wikimedia.org/wiki/File:Turan_13-4.svg
EXAMPLES:
A complete tripartite graph with sets of sizes \(5, 6, 8\):
sage: g = graphs.CompleteMultipartiteGraph([5, 6, 8]); g Multipartite Graph with set sizes [5, 6, 8]: Graph on 19 vertices
It clearly has a chromatic number of 3:
sage: g.chromatic_number() 3
- sage.graphs.generators.basic.CorrelationGraph(seqs, alpha, include_anticorrelation)#
Constructs and returns a correlation graph with a node corresponding to each sequence in \(seqs\).
Edges are added between nodes where the corresponding sequences have a correlation coeffecient greater than alpha.
If include_anticorrelation is true, then edges are also added between nodes with correlation coeffecient less than -alpha.
EXAMPLES:
sage: # needs numpy sage: from sage.graphs.generators.basic import CorrelationGraph sage: data = [[1,2,3], [4,5,6], [7,8,9999]] sage: CG1 = CorrelationGraph(data, 0.9, False) sage: CG2 = CorrelationGraph(data, 0.9, True) sage: CG3 = CorrelationGraph(data, 0.1, True) sage: CG1.edges(sort=False) [(0, 0, None), (0, 1, None), (1, 1, None), (2, 2, None)] sage: CG2.edges(sort=False) [(0, 0, None), (0, 1, None), (1, 1, None), (2, 2, None)] sage: CG3.edges(sort=False) [(0, 0, None), (0, 1, None), (0, 2, None), (1, 1, None), (1, 2, None), (2, 2, None)]
- sage.graphs.generators.basic.CycleGraph(n)#
Return a cycle graph with \(n\) nodes.
A cycle graph is a basic structure which is also typically called an \(n\)-gon.
PLOTTING: Upon construction, the position dictionary is filled to override the spring-layout algorithm. By convention, each cycle graph will be displayed with the first (0) node at the top, with the rest following in a counterclockwise manner.
The cycle graph is a good opportunity to compare efficiency of filling a position dictionary vs. using the spring-layout algorithm for plotting. Because the cycle graph is very symmetric, the resulting plots should be similar (in cases of small \(n\)).
Filling the position dictionary in advance adds \(O(n)\) to the constructor.
EXAMPLES:
Compare plotting using the predefined layout and networkx:
sage: # needs networkx sage.plot sage: import networkx sage: n = networkx.cycle_graph(23) sage: spring23 = Graph(n) sage: posdict23 = graphs.CycleGraph(23) sage: spring23.show() # long time sage: posdict23.show() # long time
We next view many cycle graphs as a Sage graphics array. First we use the
CycleGraph
constructor, which fills in the position dictionary:sage: # needs networkx sage.plot sage: g = [] sage: j = [] sage: for i in range(9): ....: k = graphs.CycleGraph(i+3) ....: g.append(k) sage: for i in range(3): ....: n = [] ....: for m in range(3): ....: n.append(g[3*i + m].plot(vertex_size=50, vertex_labels=False)) ....: j.append(n) sage: G = graphics_array(j) sage: G.show() # long time
Compare to plotting with the spring-layout algorithm:
sage: # needs networkx sage.plot sage: g = [] sage: j = [] sage: for i in range(9): ....: spr = networkx.cycle_graph(i+3) ....: k = Graph(spr) ....: g.append(k) sage: for i in range(3): ....: n = [] ....: for m in range(3): ....: n.append(g[3*i + m].plot(vertex_size=50, vertex_labels=False)) ....: j.append(n) sage: G = graphics_array(j) sage: G.show() # long time
- sage.graphs.generators.basic.DartGraph()#
Return a dart graph with 5 nodes.
PLOTTING: Upon construction, the position dictionary is filled to override the spring-layout algorithm. By convention, the dart graph is drawn as a dart, with the sharp part on the bottom.
EXAMPLES:
Construct and show a dart graph:
sage: g = graphs.DartGraph() sage: g.show() # long time
- sage.graphs.generators.basic.DiamondGraph()#
Return a diamond graph with 4 nodes.
A diamond graph is a square with one pair of diagonal nodes connected.
PLOTTING: Upon construction, the position dictionary is filled to override the spring-layout algorithm. By convention, the diamond graph is drawn as a diamond, with the first node on top, second on the left, third on the right, and fourth on the bottom; with the second and third node connected.
EXAMPLES:
Construct and show a diamond graph:
sage: g = graphs.DiamondGraph() sage: g.show() # long time
- sage.graphs.generators.basic.EmptyGraph()#
Return an empty graph (0 nodes and 0 edges).
This is useful for constructing graphs by adding edges and vertices individually or in a loop.
PLOTTING: When plotting, this graph will use the default spring-layout algorithm, unless a position dictionary is specified.
EXAMPLES:
Add one vertex to an empty graph and then show:
sage: empty1 = graphs.EmptyGraph() sage: empty1.add_vertex() 0 sage: empty1.show() # long time
Use for loops to build a graph from an empty graph:
sage: empty2 = graphs.EmptyGraph() sage: for i in range(5): ....: empty2.add_vertex() # add 5 nodes, labeled 0-4 0 1 2 3 4 sage: for i in range(3): ....: empty2.add_edge(i,i+1) # add edges {[0:1],[1:2],[2:3]} sage: for i in range(1, 4): ....: empty2.add_edge(4,i) # add edges {[1:4],[2:4],[3:4]} sage: empty2.show() # long time
- sage.graphs.generators.basic.ForkGraph()#
Return a fork graph with 5 nodes.
A fork graph, sometimes also called chair graph, is 5 vertex tree.
PLOTTING: Upon construction, the position dictionary is filled to override the spring-layout algorithm. By convention, the fork graph is drawn as a fork, with the sharp part on the bottom.
EXAMPLES:
Construct and show a fork graph:
sage: g = graphs.ForkGraph() sage: g.show() # long time
- sage.graphs.generators.basic.GemGraph()#
Return a gem graph with 5 nodes.
A gem graph is a fan graph (4,1).
PLOTTING: Upon construction, the position dictionary is filled to override the spring-layout algorithm. By convention, the gem graph is drawn as a gem, with the sharp part on the bottom.
EXAMPLES:
Construct and show a gem graph:
sage: g = graphs.GemGraph() sage: g.show() # long time
- sage.graphs.generators.basic.Grid2dGraph(p, q, set_positions=True)#
Return a \(2\)-dimensional grid graph with \(p \times q\) nodes (\(p\) rows and \(q\) columns).
A 2d grid graph resembles a \(2\) dimensional grid. All inner nodes are connected to their \(4\) neighbors. Outer (non-corner) nodes are connected to their \(3\) neighbors. Corner nodes are connected to their 2 neighbors.
INPUT:
p
andq
– two positive integersset_positions
– boolean (default:True
); whether to set the position of the nodes
PLOTTING: Upon construction, the position dictionary is filled to override the spring-layout algorithm. By convention, nodes are labelled in (row, column) pairs with \((0, 0)\) in the top left corner. Edges will always be horizontal and vertical - another advantage of filling the position dictionary.
EXAMPLES:
Construct and show a grid 2d graph Rows = \(5\), Columns = \(7\):
sage: g = graphs.Grid2dGraph(5,7) sage: g.show() # long time
- sage.graphs.generators.basic.GridGraph(dim_list)#
Return an \(n\)-dimensional grid graph.
INPUT:
dim_list
– a list of integers representing the number of nodes toextend in each dimension
PLOTTING: When plotting, this graph will use the default spring-layout algorithm, unless a position dictionary is specified.
EXAMPLES:
sage: G = graphs.GridGraph([2,3,4]) sage: G.show() # long time
sage: C = graphs.CubeGraph(4) sage: G = graphs.GridGraph([2,2,2,2]) sage: C.show() # long time sage: G.show() # long time
- sage.graphs.generators.basic.HouseGraph()#
Return a house graph with 5 nodes.
A house graph is named for its shape. It is a triangle (roof) over a square (walls).
PLOTTING: Upon construction, the position dictionary is filled to override the spring-layout algorithm. By convention, the house graph is drawn with the first node in the lower-left corner of the house, the second in the lower-right corner of the house. The third node is in the upper-left corner connecting the roof to the wall, and the fourth is in the upper-right corner connecting the roof to the wall. The fifth node is the top of the roof, connected only to the third and fourth.
EXAMPLES:
Construct and show a house graph:
sage: g = graphs.HouseGraph() sage: g.show() # long time
- sage.graphs.generators.basic.HouseXGraph()#
Return a house X graph with 5 nodes.
 The upper-right corner is connected to the lower-left. And the upper-left corner is connected to the lower-right.
PLOTTING: Upon construction, the position dictionary is filled to override the spring-layout algorithm. By convention, the house X graph is drawn with the first node in the lower-left corner of the house, the second in the lower-right corner of the house. The third node is in the upper-left corner connecting the roof to the wall, and the fourth is in the upper-right corner connecting the roof to the wall. The fifth node is the top of the roof, connected only to the third and fourth.
EXAMPLES:
Construct and show a house X graph:
sage: g = graphs.HouseXGraph() sage: g.show() # long time
- sage.graphs.generators.basic.LadderGraph(n)#
Return a ladder graph with \(2 * n\) nodes.
A ladder graph is a basic structure that is typically displayed as a ladder, i.e.: two parallel path graphs connected at each corresponding node pair.
PLOTTING: Upon construction, the position dictionary is filled to override the spring-layout algorithm. By convention, each ladder graph will be displayed horizontally, with the first n nodes displayed left to right on the top horizontal line.
EXAMPLES:
Construct and show a ladder graph with 14 nodes:
sage: g = graphs.LadderGraph(7) sage: g.show() # long time
Create several ladder graphs in a Sage graphics array:
sage: # needs sage.plot sage: g = [] sage: j = [] sage: for i in range(9): ....: k = graphs.LadderGraph(i+2) ....: g.append(k) sage: for i in range(3): ....: n = [] ....: for m in range(3): ....: n.append(g[3*i + m].plot(vertex_size=50, vertex_labels=False)) ....: j.append(n) sage: G = graphics_array(j) sage: G.show() # long time
- sage.graphs.generators.basic.PathGraph(n, pos=None)#
Return a path graph with \(n\) nodes.
A path graph is a graph where all inner nodes are connected to their two neighbors and the two end-nodes are connected to their one inner neighbors (i.e.: a cycle graph without the first and last node connected).
INPUT:
n
– number of nodes of the path graphpos
– string (default:None
); indicates the embedding to use between ‘circle’, ‘line’ or the default algorithm. See the plotting section below for more detail.
PLOTTING: Upon construction, the position dictionary is filled to override the spring-layout algorithm. By convention, the graph may be drawn in one of two ways: The ‘line’ argument will draw the graph in a horizontal line (left to right) if there are less than 11 nodes. Otherwise the ‘line’ argument will append horizontal lines of length 10 nodes below, alternating left to right and right to left. The ‘circle’ argument will cause the graph to be drawn in a cycle-shape, with the first node at the top and then about the circle in a clockwise manner. By default (without an appropriate string argument) the graph will be drawn as a ‘circle’ if \(10 < n < 41\) and as a ‘line’ for all other \(n\).
EXAMPLES: Show default drawing by size: ‘line’: \(n \leq 10\)
sage: p = graphs.PathGraph(10) sage: p.show() # long time
‘circle’: \(10 < n < 41\)
sage: q = graphs.PathGraph(25) sage: q.show() # long time
‘line’: \(n \geq 41\)
sage: r = graphs.PathGraph(55) sage: r.show() # long time
Override the default drawing:
sage: s = graphs.PathGraph(5,'circle') sage: s.show() # long time
- sage.graphs.generators.basic.StarGraph(n)#
Return a star graph with \(n + 1\) nodes.
A Star graph is a basic structure where one node is connected to all other nodes.
PLOTTING: Upon construction, the position dictionary is filled to override the spring-layout algorithm. By convention, each star graph will be displayed with the first (0) node in the center, the second node (1) at the top, with the rest following in a counterclockwise manner. (0) is the node connected to all other nodes.
The star graph is a good opportunity to compare efficiency of filling a position dictionary vs. using the spring-layout algorithm for plotting. As far as display, the spring-layout should push all other nodes away from the (0) node, and thus look very similar to this constructor’s positioning.
EXAMPLES:
sage: import networkx # needs networkx
Compare the plots:
sage: # needs networkx sage.plot sage: n = networkx.star_graph(23) sage: spring23 = Graph(n) sage: posdict23 = graphs.StarGraph(23) sage: spring23.show() # long time sage: posdict23.show() # long time
View many star graphs as a Sage Graphics Array
With this constructor (i.e., the position dictionary filled)
sage: # needs sage.plot sage: g = [] sage: j = [] sage: for i in range(9): ....: k = graphs.StarGraph(i+3) ....: g.append(k) sage: for i in range(3): ....: n = [] ....: for m in range(3): ....: n.append(g[3*i + m].plot(vertex_size=50, vertex_labels=False)) ....: j.append(n) sage: G = graphics_array(j) sage: G.show() # long time
Compared to plotting with the spring-layout algorithm
sage: # needs networkx sage.plot sage: g = [] sage: j = [] sage: for i in range(9): ....: spr = networkx.star_graph(i+3) ....: k = Graph(spr) ....: g.append(k) sage: for i in range(3): ....: n = [] ....: for m in range(3): ....: n.append(g[3*i + m].plot(vertex_size=50, vertex_labels=False)) ....: j.append(n) sage: G = graphics_array(j) sage: G.show() # long time
- sage.graphs.generators.basic.Toroidal6RegularGrid2dGraph(p, q)#
Return a toroidal 6-regular grid.
The toroidal 6-regular grid is a 6-regular graph on \(p \times q\) vertices and its elements have coordinates \((i, j)\) for \(i \in \{0...p-1\}\) and \(j \in \{0...q-1\}\).
Its edges are those of the
ToroidalGrid2dGraph()
, to which are added the edges between \((i, j)\) and \(((i + 1) \% p, (j + 1) \% q)\).INPUT:
p, q
– integers (see above)
EXAMPLES:
The toroidal 6-regular grid on \(25\) elements:
sage: g = graphs.Toroidal6RegularGrid2dGraph(5,5) sage: g.is_regular(k=6) True sage: g.is_vertex_transitive() # needs sage.groups True sage: g.line_graph().is_vertex_transitive() # needs sage.groups True sage: g.automorphism_group().cardinality() # needs sage.groups 300 sage: g.is_hamiltonian() # needs sage.numerical.mip True
- sage.graphs.generators.basic.ToroidalGrid2dGraph(p, q)#
Return a toroidal 2-dimensional grid graph with \(p \times q\) nodes (\(p\) rows and \(q\) columns).
The toroidal 2-dimensional grid with parameters \(p,q\) is the 2-dimensional grid graph with identical parameters to which are added the edges \(((i, 0), (i, q - 1))\) and \(((0, i), (p - 1, i))\).
EXAMPLES:
The toroidal 2-dimensional grid is a regular graph, while the usual 2-dimensional grid is not
sage: tgrid = graphs.ToroidalGrid2dGraph(8,9) sage: print(tgrid) Toroidal 2D Grid Graph with parameters 8,9 sage: grid = graphs.Grid2dGraph(8,9) sage: grid.is_regular() False sage: tgrid.is_regular() True


-->
We provide a variety of skill classes for our students. Our foremost priority is to give a genuine teaching experience. There's a high demand for skillful people, whether it's Coding, Robotics, Digital Marketing, Entrepreneurship, or Trading. We want India to be the next superpower so for that our youths should be competent.
We have well-planned courses from Beginner Level to the Advance Level.
Our planned course is students friendly. We will provide mentorship and personal attention to every student
Regular assignments and homework questions will be provided for deep learning of concepts. Pairwise counseling will be provided and overall performance will be monitored
Free Goodies, Swags, and Certificates will be given to the students on course completion to encourage them for Learning
We are strictly against Block-based coding and want that our kids must learn the real coding- unlike the other platforms, we will teach only on Real IDE's and Google Virtual labs.
Co-Founder SKILLCLAN
B.tech ECE and Python Enthusiast, Winner of E-yantra by IIT Bombay (Robotics), Robotics, WebDev, Git, DSA Expert, Cloud Computing
Co-founder Skill Clan.
BTech in Information Technolgy. experience in DS Algo C++ for 4+ years ,Working with Python and Python GUI.
Co-founder Skill Clan.
Blockchain Devloper ,Major interests in Finance and Entrepreneurship.
Real Learning and No Block Coding, We are always transparent
Tap the button below to whatsapp us or to call us


Cryptographic primitives are well-established, low-level cryptographic algorithms that are frequently used to build cryptographic protocols for computer security systems. These routines include, but are not limited to, one-way hash functions and encryption functions. 笔记：Cryptographic primitives就是low-level cryptographic algorithms。
When creating cryptographic systems, designers use cryptographic primitives as their most basic building blocks. Because of this, cryptographic primitives are designed to do one very specific task in a precisely defined and highly reliable fashion. 笔记：可以使用cryptographic primitives来构建cryptographic systems。
Since cryptographic primitives are used as building blocks, they must be very reliable, i.e. perform according to their specification. For example, if an encryption routine claims to be only breakable with X number of computer operations, and it is broken with significantly fewer than X operations, then that cryptographic primitive has failed. If a cryptographic primitive is found to fail, almost every protocol that uses it becomes vulnerable. 笔记：cryptographic primitives必须是安全可靠的
Since creating cryptographic routines is very hard, and testing them to be reliable takes a long time, it is essentially never sensible (nor secure) to design a new cryptographic primitive to suit the needs of a new cryptographic system. The reasons include: 笔记：从重设置新的cryptographic primitives是不明智的，原因有如下三方面
Cryptographic primitives are similar in some ways to programming languages. A computer programmer rarely invents a new programming language while writing a new program; instead, they will use one of the already established programming languages to program in. 笔记：这里做了一个对比，人们很少去创造一个新的编程语言，而是利用现有的编程语言去编程；同样，人们很少去创造一个新的加密算法，而是利用已有的、安全的加密算法。
Cryptographic primitives are one of the building blocks of every crypto system, e.g., TLS, SSL, SSH, etc.笔记：这里说明一个问题，TLS、SSL和SSH这三者，都不是一个的简单算法（cryptographic primitive），而是一个crypto system，它们都是由一系列的cryptographic primitive组成。 Crypto system designers, not being in a position to definitively prove their security, must take the primitives they use as secure.笔记：作为crypto system designers，需要选择使用安全的cryptographic primitive，但并不需要亲自去证明cryptographic primitive是安全的 Choosing the best primitive available for use in a protocol usually provides the best available security. However, compositional weaknesses are possible in any crypto system and it is the responsibility of the designer(s) to avoid them. 笔记：crypto system是由多个cryptographic primitives组成，但是，单个cryptographic primitive是安全的，并不能保证整个crypto system也是绝对安全的。
Cryptographic primitives, on their own, are quite limited. They cannot be considered, properly, to be a cryptographic system. For instance, a bare encryption algorithm will provide no authentication mechanism, nor any explicit message integrity checking. Only when combined in security protocols, can more than one security requirement be addressed. For example, to transmit a message that is not only encoded but also protected from tinkering (i.e. it is confidential and integrity-protected), an encoding routine, such as DES, and a hash-routine such as SHA-1 can be used in combination. If the attacker does not know the encryption key, he can not modify the message such that message digest value(s) would be valid. 笔记：单个cryptographic primitive能做的事情是很有限的，需要不同的cryptographic primitive来共同组合成一个完整的crypto system，以此来保证message在传输过程中的authentication、integrity和confidentiality。
Combining cryptographic primitives to make a security protocol is itself an entire specialization. Most exploitable errors (i.e., insecurities in crypto systems) are due not to design errors in the primitives (assuming always that they were chosen with care), but to the way they are used, i.e. bad protocol design and buggy or not careful enough implementation. Mathematical analysis of protocols is, at the time of this writing, not mature. There are some basic properties that can be verified with automated methods, such as BAN logic. There are even methods for full verification (e.g. the SPI calculus) but they are extremely cumbersome and cannot be automated. Protocol design is an art requiring deep knowledge and much practice; even then mistakes are common. 笔记：crypto system所面临的安全隐患，大部分的情况下，并不是来自于单个的cryptographic primitive，而是来自于crypto system的设计方案（bad protocol design）和在编写代码时的粗心大意（not careful enough implementation）


Sandi Toksvig (born 1958-05-03[ref]) has appeared in 915 episodes between 1990-2019. Sandi Toksvig on IMDB. Sandi Toksvig on Wikipedia. Sandi Toksvig on Chortle.
| 1990 | 1991 | 1992 | 1993 | 1994 | 1995 | 1996 | 1997 | 1998 | 1999 | 2000 | 2001 | 2002 | 2003 | 2004 | 2005 | 2006 | 2007 | 2008 | 2009 | 2010 | 2011 | 2012 | 2013 | 2014 | 2015 | 2016 | 2017 | 2018 | 2019 |


MSc in Microdata Analysis with mention in Business Intelligence
University of Dalarna Borlänge, SwedenThesis: Value Creation From User Generated Content for Smart Tourism Destinations.
Thesis: Value Creation From User Generated Content for Smart Tourism Destinations.
Graduated with 7.0/7.0 in the Final 6-month Capstone project + Internship.


INI file support
Table of Contents
Overview
Variables
Encoded Entries
Listeners
Command Line API
Serializing Config Files
Merging Config Files
1 - Overview
The {@link org.apache.juneau.ini.ConfigFileBuilder} and {@link org.apache.juneau.ini.ConfigFile} classes
implement an API for working with INI-style configuration files such as the following:
#--------------------------
# Default section
#--------------------------
key1 = 1
key2 = true
key3 = 1,2,3
key4 = http://foo
#--------------------------
# A comment about Section 1
#--------------------------
[Section1]
key1 = 2
key2 = false
key3 = 4,5,6
key4 = http://bar
The {@link org.apache.juneau.ini.ConfigFileBuilder} class is used to instantiate instances of
{@link org.apache.juneau.ini.ConfigFile} which can then be used to retrieve config file values through either
"key" or "Section/key" identifiers.
int key1;
boolean key2;
int[] key3;
URL key4;
// Get our config file using the default config manager
ConfigFile f = ConfigFile.create().build("C:/temp/MyConfig.cfg");
// Read values from default section
key1 = f.getInt("key1");
key2 = f.getBoolean("key2");
key3 = f.getObject(int[].class, "key3");
key4 = f.getObject(URL.class, "key4");
// Read values from Section #1
key1 = f.getInt("Section1/key1");
key2 = f.getBoolean("Section1/key2");
key3 = f.getObject(int[].class, "Section1/key3");
key4 = f.getObject(URL.class, "Section1/key4");
The interface also allows config files to be constructed programmatically...

Note how we're setting values as POJOs which will be automatically converted to strings when persisted to disk.
// Construct the sample INI file programmatically
ConfigFile f = ConfigFile.create().build("C:/temp/MyConfig.cfg", true)
.addLines(null,
"# Default section")
.addHeaderComments("Section1",
"A comment about Section 1");
cf.put("key1", 1);
cf.put("key2", true);
cf.put("key3", new int[]{1,2,3});
cf.put("key4", new URL("http://foo"));
cf.put("Section1/key1", 2);
cf.put("Section1/key2", false);
cf.put("Section1/key3", new int[]{4,5,6});
cf.put("Section1/key4", new URL("http://bar"));
cf.save();
Refer to {@link org.apache.juneau.ini.ConfigFile#put(String,Object,boolean)} for a description of
formats for various data types.
Various convenience getter methods are provided for retrieving different data types:
// Strings with default values
// key1 = foobar
String key1 = cf.getString("key1");
// Numbers
// key2 = 123
float key2 = cf.getObject(float.class, "key2");
// Booleans
// key3 = true
boolean key3 = cf.getBoolean("key3");
// Objects convertable to and from strings using the JSON serializer and parser
// key4 = http://foo
URL key4 = cf.getObject(URL.class, "key4");
// Arrays of strings
// key5 = foo, bar
String[] key5 = cf.getStringArray("key5");
// Arrays of objects
// key6 = http://foo,http://bar
URL[] key6 = cf.getObject(URL[].class, "key6");
// Arrays of primitives
// key7 = 1,2,3
int[] key7 = cf.getObject(int[].class, "key7");
// Enums
// key8 = MINUTES
TimeUnit key8 = cf.getObject(TimeUnit.class, "key8");
// Beans
// key9 = {name:'John Smith', addresses:[{street:'101 Main St', city:'Anywhere', state:'TX'}]}
Person key9 = cf.getObject(Person.class, "key9");
// Generic Maps
// key10 = {foo:'bar', baz:123}
Map key10 = cf.getObject(ObjectMap.class, "key10");
2 - Variables
Config files can contain variables that get resolved dynamically using the
{@link org.apache.juneau.svl.VarResolver} API.
Resolving config files can be retrieved through the following methods:
-
{@link org.apache.juneau.ini.ConfigFile#getResolving()} - Returns a config file that resolves a default
set of variables.
-
{@link org.apache.juneau.ini.ConfigFile#getResolving(VarResolver)} - Returns a config file that resolves
a custom set of variables.
The default {@link org.apache.juneau.ini.ConfigFile#getResolving()} method returns a config file that resolves
the following variables:
-
$S{key}
, $S{key,default}
- System properties.
-
$E{key}
, $E{key,default}
- Environment variables.
-
$C{key}
, $C{key,default}
- Values in this configuration file.
Examples:
#--------------------------
# Examples
#--------------------------
[MyProperties]
javaHome = $S{java.home}
path = $E{PATH}
customMessage = Java home is $C{MyProperties/javaHome} and the environment path is $C{MyProperties/path}.
Support for variables is extensible. You can add support for your own variables by implementing custom
{@link org.apache.juneau.svl.VarResolver VarResolvers}.
For example, the microservice Resource
class provides access to config files that
can contain any of the following variables:
$C
- Config variables.
$S
- System properties.
$E
- Environment variables.
$I
- Servlet init parameters.
$ARG
- JVM command-line arguments.
$MF
- Main jar manifest file entries.
$L
- Localized strings.
$A
- HTTP request attributes.
$P
- HTTP request URL parameters.
$R
- HTTP request variables.
$UE
- URL-encoding function.
3 - Encoded Entries
If a config file contains sensitive information such as passwords, those values can be
marked for encoding by appending '*' to the end of the key name.
If a marked and unencoded value is detected in the file during load, it will be encoded and saved immediately.
For example, the following password is marked for encoding....
[MyHost]
url = http://localhost:9080/foo
user = me
password* = mypassword
After initial loading, the file contents will contain an encoded value...
[MyHost]
url = http://localhost:9080/foo
user = me
password* = {AwwJVhwUQFZEMg==}
The default encoder is {@link org.apache.juneau.ini.XorEncoder} which is a simple XOR+Base64 encoder.
If desired, custom encoder can be used by implementing the {@link org.apache.juneau.ini.Encoder}
interface and creating your own ConfigFileBuilder
using the
{@link org.apache.juneau.ini.ConfigFileBuilder#encoder(Encoder)} method.
4 - Listeners
The following method is provided for listening to changes made on config files:
{@link org.apache.juneau.ini.ConfigFile#addListener(ConfigFileListener)}.
Subclasses are provided for listening for different kinds of events:
-
{@link org.apache.juneau.ini.ConfigFileListener} - Config file is saved, loaded, or modified.
-
{@link org.apache.juneau.ini.SectionListener} - One or more entries in a section are modified.
-
{@link org.apache.juneau.ini.EntryListener} - An individual entry is modified.
Example:
// Get our config file using the default config manager
ConfigFile f = ConfigFile.create().build("C:/temp/MyConfig.cfg");
// Add a listener for an entry
f.addListener(
new EntryListener("Section1/key1") {
@Override
public void onChange(ConfigFile cf) {
System.err.println("Entry changed! New value is " + cf.getString("Section1/key1"));
}
}
);
5 - Command Line API
The {@link org.apache.juneau.ini.ConfigFileBuilder} class contains a
{@link org.apache.juneau.ini.ConfigFileBuilder#main(String[])} method that can be used to work with config
files through a command-line prompt.
This is invoked as a normal Java command:
java -jar juneau.jar org.apache.juneau.ini.ConfigFileBuilder [args]
Arguments can be any of the following...
-
No arguments
Prints usage message.
-
createBatchEnvFile -configfile <configFile> -envfile <batchFile> [-verbose]
Creates a batch file that will set each config file entry as an environment variable.
Characters in the keys that are not valid as environment variable names (e.g. '/' and '.')
will be converted to underscores.
-
createShellEnvFile -configFile <configFile> -envFile <configFile> [-verbose]
Creates a shell script that will set each config file entry as an environment variable.
Characters in the keys that are not valid as environment variable names (e.g. '/' and '.')
will be converted to underscores.
-
setVals -configFile <configFile> -vals [var1=val1 [var2=val2...]] [-verbose]
Sets values in config files.
For example, the following command will create the file 'MyConfig.bat'
from the contents of the
file 'MyConfig.cfg'
.
java org.apache.juneau.ini.ConfigFileBuilder createBatchEnvFile -configfile C:\foo\MyConfig.cfg -batchfile C:\foo\MyConfig.bat
6 - Serializing Config Files
Instances of {@link org.apache.juneau.ini.ConfigFile} are POJOs that can be serialized to and parsed from
all supported Juneau languages.
The org.apache.juneau.microservice.resources.ConfigResource
is a predefined REST interface that
allows access to the config file used by a microservice.
The juneau-examples-rest
project is a microservice that includes this resource
at http://localhost:10000/sample/config
.
The sample microservice uses the following config file juneau-examples.cfg
:
#================================================================================
# Basic configuration file for SaaS microservices
# Subprojects can use this as a starting point.
#================================================================================
#================================================================================
# REST settings
#================================================================================
[REST]
# The HTTP port number to use.
# Default is Rest-Port setting in manifest file, or 8000.
port = 10000
# A JSON map of servlet paths to servlet classes.
# Example:
# resourceMap = {'/*':'com.foo.MyServlet'}
# Either resourceMap or resources must be specified.
resourceMap =
# A comma-delimited list of names of classes that extend from Servlet.
# Resource paths are pulled from @RestResource.path() annotation, or
# "/*" if annotation not specified.
# Example:
# resources = com.foo.MyServlet
# Default is Rest-Resources in manifest file.
# Either resourceMap or resources must be specified.
resources =
# The context root of the Jetty server.
# Default is Rest-ContextPath in manifest file, or "/".
contextPath =
# Authentication: NONE, BASIC.
authType = NONE
# The BASIC auth username.
# Default is Rest-LoginUser in manifest file.
loginUser =
# The BASIC auth password.
# Default is Rest-LoginPassword in manifest file.
loginPassword =
# The BASIC auth realm.
# Default is Rest-AuthRealm in manifest file.
authRealm =
# Stylesheet to use for HTML views.
# The default options are:
# - styles/juneau.css
# - styles/devops.css
# Other stylesheets can be referenced relative to the servlet package or working
# directory.
stylesheet = styles/devops.css
# What to do when the config file is saved.
# Possible values:
# NOTHING - Don't do anything.
# RESTART_SERVER - Restart the Jetty server.
# RESTART_SERVICE - Shutdown and exit with code '3'.
saveConfigAction = RESTART_SERVER
# Enable SSL support.
useSsl = false
#================================================================================
# Bean properties on the org.eclipse.jetty.util.ssl.SslSocketFactory class
#--------------------------------------------------------------------------------
# Ignored if REST/useSsl is false.
#================================================================================
[REST-SslContextFactory]
keyStorePath = client_keystore.jks
keyStorePassword* = {HRAaRQoT}
excludeCipherSuites = TLS_DHE.*, TLS_EDH.*
excludeProtocols = SSLv3
allowRenegotiate = false
#================================================================================
# Logger settings
# See FileHandler Java class for details.
#================================================================================
[Logging]
# The directory where to create the log file.
# Default is "."
logDir = logs
# The name of the log file to create for the main logger.
# The logDir and logFile make up the pattern that's passed to the FileHandler
# constructor.
# If value is not specified, then logging to a file will not be set up.
logFile = microservice.%g.log
# Whether to append to the existing log file or create a new one.
# Default is false.
append =
# The SimpleDateFormat format to use for dates.
# Default is "yyyy.MM.dd hh:mm:ss".
dateFormat =
# The log message format.
# The value can contain any of the following variables:
# {date} - The date, formatted per dateFormat.
# {class} - The class name.
# {method} - The method name.
# {logger} - The logger name.
# {level} - The log level name.
# {msg} - The log message.
# {threadid} - The thread ID.
# {exception} - The localized exception message.
# Default is "[{date} {level}] {msg}%n".
format =
# The maximum log file size.
# Suffixes available for numbers.
# See ConfigFile.getInt(String,int) for details.
# Default is 1M.
limit = 10M
# Max number of log files.
# Default is 1.
count = 5
# Default log levels.
# Keys are logger names.
# Values are serialized Level POJOs.
levels = { org.apache.juneau:'INFO' }
# Only print unique stack traces once and then refer to them by a simple 8 character hash identifier.
# Useful for preventing log files from filling up with duplicate stack traces.
# Default is false.
useStackTraceHashes = true
# The default level for the console logger.
# Default is WARNING.
consoleLevel =
#================================================================================
# System properties
#--------------------------------------------------------------------------------
# These are arbitrary system properties that are set during startup.
#================================================================================
[SystemProperties]
# Configure Jetty for StdErrLog Logging
org.eclipse.jetty.util.log.class = org.eclipse.jetty.util.log.StrErrLog
# Jetty logging level
org.eclipse.jetty.LEVEL = WARN
The config file looks deceivingly simple.
However, it should be noticed that the config file is a VERY powerful feature with many capabilities including:
When you point your browser to this resource, you'll notice that the contents of the config file are being
serialized to HTML as a POJO:
Likewise, the config file can also be serialized as any of the supported languages such as JSON:
The code for implementing this page could not be any simpler, since it simply returns the config file returned
by the RestServlet.getConfig()
method.
/**
* [GET /] - Show contents of config file.
*
* @return The config file.
* @throws Exception
*/
@RestMethod(name=GET, path="/", description="Show contents of config file.")
public ConfigFile getConfigContents() throws Exception {
return getConfig();
}
The edit page takes you to an editor that allows you to modify the contents of the config file:
This latter page uses the {@link org.apache.juneau.ini.ConfigFile#toString()} method to retrieve the
contents of the config file in INI format.
Since config files are serializable, that mean they can also be retrieved through the RestClient
API.
// Create a new REST client with JSON support
RestClient c = RestClient.create().build();
// Retrieve config file through REST interface
ConfigFile cf = c.doGet("http://localhost:10000/sample/config").getResponse(ConfigFileImpl.class);
7 - Merging Config Files
In the previous example, an edit page was shown that allows you to edit config files through
a REST interface.
Note that if only a single entry is modified in the config file, we only want to trigger
listeners for that change, not trigger all listeners.
This is where the {@link org.apache.juneau.ini.ConfigFile#merge(ConfigFile)} method comes into play.
This method will copy the contents of one config file over to another config file, but only
trigger listeners when the values are different.
The edit page is implemented with this method which is a simple PUT with the contents of the new INI file as
the body of the HTTP request:
/**
* [PUT /] - Sets contents of config file.
*
* @param contents The new contents of the config file.
* @return The new config file contents.
* @throws Exception
*/
@RestMethod(name=PUT, path="/",
description="Sets contents of config file.",
parameters={
@Parameter(in="body", description="New contents in INI file format.")
}
)
public ConfigFile setConfigContents(@Body Reader contents) throws Exception {
// Create a new in-memory config file based on the contents of the HTTP request.
ConfigFile cf2 = new ConfigFileBuilder.build().load(contents);
// Merge the in-memory config file into the existing config file and save it.
// Then return the modified config file to be parsed as a POJO.
return getConfig().merge(cf2).save();
}


Implemnetation for different Filter Algorithms. More...
#include <cloud_filter.h>
Public Member Functions | |
| cloudFilter (ros::NodeHandle nh) | |
| void | voxelGrid (const PointCloudType blob, PointCloudType &res) |
| Pass through Filter. More... | |
| ~cloudFilter () | |
Private Types | |
| typedef PointCloudType::Ptr | PoinCloudtPtr |
| typedef pcl::PointCloud< PointInType > | PointCloudType |
| typedef PointCloudType::ConstPtr | PointConstPtr |
Private Attributes | |
| ros::NodeHandle | _nh |
Implemnetation for different Filter Algorithms.
| PointInType | Input Point Cloud type |
Definition at line 19 of file cloud_filter.h.
|
private |
Definition at line 24 of file cloud_filter.h.
|
private |
Definition at line 23 of file cloud_filter.h.
|
private |
Definition at line 25 of file cloud_filter.h.
| nimbus::cloudFilter< PointInType >::cloudFilter | ( | ros::NodeHandle | nh | ) |
Definition at line 40 of file cloud_filter.h.
| nimbus::cloudFilter< PointInType >::~cloudFilter | ( | ) |
Definition at line 43 of file cloud_filter.h.
| void nimbus::cloudFilter< PointInType >::voxelGrid | ( | const PointCloudType | blob, |
| PointCloudType & | res | ||
| ) |
Pass through Filter.
| blob | input point clouds |
| res | Filteres Point cloud. |
Definition at line 46 of file cloud_filter.h.
|
private |
Definition at line 22 of file cloud_filter.h.


Get chat and newsletter schedule
Enter a year to display all chat and newsletter dates.
Add to my calendar
Chat schedule |
Newsletter schedule |
Enter a year to display all chat and newsletter dates.
Add to my calendar
Chat schedule |
Newsletter schedule |


Node.js provides http module which can be used to create either HTTP client of server. Following is a bare minimum structure of HTTP server which listens at 8081 port.
Create a js file named server.js:
File: server.js
var http = require('http');
var fs = require('fs');
var url = require('url');
// Create a server
http.createServer( function (request, response) {
// Parse the request containing file name
var pathname = url.parse(request.url).pathname;
// Print the name of the file for which request is made.
console.log("Request for " + pathname + " received.");
// Read the requested file content from file system
fs.readFile(pathname.substr(1), function (err, data) {
if (err) {
console.log(err);
// HTTP Status: 404 : NOT FOUND
// Content Type: text/plain
response.writeHead(404, {'Content-Type': 'text/html'});
}else{
//Page found
// HTTP Status: 200 : OK
// Content Type: text/plain
response.writeHead(200, {'Content-Type': 'text/html'});
// Write the content of the file to response body
response.write(data.toString());
}
// Send the response body
response.end();
});
}).listen(8081);
// Console will print the message
console.log('Server running at http://<IP_ADDRESS>:8081/');
Next let's create following html file named index.htm in the same directory where you created server.js
File: index.htm
<html>
<head>
<title>Sample Page</title>
</head>
<body>
Hello World!
</body>
</html>
Now let us run the server.js to see the result:
$ node server.js
Verify the Output
Server running at http://<IP_ADDRESS>:8081/
Make a request to Node.js server
Open http://<IP_ADDRESS>:8081/index.htm in any browser and see the below result.
Verify the Output at server end.
Server running at http://<IP_ADDRESS>:8081/
Request for /index.htm received.


Tic-Tac-Toe 9x9 Rules
- The game starts with X playing wherever they want.
- Next player can play only in the board that is related to the place where another player put their symbol
- When somebody wins on small board (have three in a row) whole board is marked as a victory
- When somebody should play on board which is marked as somebody's victory he can play wherever he wants
- When somebody has three victories in a row he wins


Installing the DAQ HAT board¶
Installing a single board¶
Power off the Raspberry Pi.
Locate the 4 standoffs. A typical standoff is shown here:
Attach the 4 standoffs to the Raspberry Pi by inserting the male threaded portion through the 4 corner holes on the Raspberry Pi from the top and securing them with the included nuts from the bottom.
Install the 2x20 receptacle with extended leads (MCC provides a Samtec SSQ-120-03-T-D or equivalent) onto the Raspberry Pi GPIO header by pressing the female portion of the receptacle onto the header pins, being careful not to bend the leads of the receptacle. The 2x20 receptacle looks like:
The HAT must be at address 0. Remove any jumpers from the address header locations A0-A2 on the HAT board.
Insert the HAT board onto the leads of the 2x20 receptacle so that the leads go into the holes on the bottom of the HAT board and come out through the 2x20 connector on the top of the HAT board. The 4 mounting holes in the corners of the HAT board must line up with the standoffs. Slide the HAT board down until it rests on the standoffs.
Insert the included screws through the mounting holes on the HAT board into the threaded holes in the standoffs and lightly tighten them.
Installing multiple boards¶
Follow steps 1-6 in the single board installation procedure for the first HAT board.
- Connect all desired field wiring to the installed board - the screw terminals will not be accessible once additional boards are installed above it.
- Install the standoffs of the additional board by inserting the male threaded portions through the 4 corner holes of the installed HAT board and threading them into the standoffs below.
- Install the next 2x20 receptacle with extended leads onto the leads of the previous 2x20 receptacle by pressing the female portion of the new receptacle onto the previous receptacle leads, being careful not to bend the leads of either receptacle.
- Install the appropriate address jumpers onto address header locations A0-A2 of the new HAT board. The recommended addressing method is to have the addresses increment from 0 as the boards are installed, i.e. 0, 1, 2, and so forth. There must always be a board at address 0. The jumpers are installed in this manner (install jumpers where “Y” appears):
| Address | A0 | A1 | A2 | Jumper Setting |
| 0 | ||||
| 1 | Y | |||
| 2 | Y | |||
| 3 | Y | Y | ||
| 4 | Y | |||
| 5 | Y | Y | ||
| 6 | Y | Y | ||
| 7 | Y | Y | Y |
- Insert the new HAT board onto the leads of the 2x20 receptacle so that the leads go into the holes on the bottom of the HAT board and come out through the 2x20 connector on the top of the HAT board. The 4 mounting holes in the corners of the HAT board must line up with the standoffs. Slide the HAT board down until it rests on the standoffs.
- Repeat steps 1-5 for each board to be added.
- Insert the included screws through the mounting holes on the top HAT board into the threaded holes in the standoffs and lightly tighten them.


The AKHAN-NAME Application is going to help you to know your day of birth and your akhan-name basing on Ghana's names. name their kids considering their day of birth.
© NIYONKURU Honorine, All right reseved


This testing facility has been developed within the NSF CINERGI project. If you need help or more information about this facility please send an an email to the OGC Compliance Team.


Oklahoma oil prices and drilling report for Nov. 21, 2019
Oklahoma crude oil prices as of 5 p.m. Wednesday:
Oklahoma Sweet:
Sunoco Inc. — $53.50
Oklahoma Sour:
Sunoco Inc. — $41.50
Oklahoma oil and gas drilling activity posted Nov. 11:
COMPLETION
Grady: Continental Resources Inc.; Ewing No. 9-13-12XHS Well; SE1/4 NE1/4 SW1/4 SE1/4 (BHL) of 12-06N-06W; 675,000 cu-ft gas per day, 639 barrels oil per day; TD 18,662.
Continental Resources Inc.; Phelps No. 2-31-30-19XHS Well; NE1/4 NE1/4 NE1/4 NW1/4 (BHL) of 19-07N-06W; 882,000 cu-ft gas per day, 433 barrels oil per day; TD 25,785.
Hughes: Calyx Energy III LLC; Maverick No. 1-14-23CH Well; SW1/4 SW1/4 SW1/4 SW1/4 (SL) of 11-09N-09E; 1,564,000 cu-ft gas per day, 7 barrels oil per day; TD 14,150.
Kingfisher: Chisholm Oil & Gas Operating LLC; Jake 19-09-35 No. 1H Well; NE1/4 NE1/4 NW1/4 NE1/4 (SL) of 02-18N-09W; 155,000 cu-ft gas per day, 48 barrels oil per day; TD 13,418.
Kingfisher: Oklahoma Energy Acquisitions LP; Lil Sebastian 1606 No. 2-24MH Well; NW1/4 NW1/4 NE1/4 NW1/4 of 24-16N-06W; 1,559,000 cu-ft gas per day, 478 barrels oil per day; TD 12,178.
Oklahoma Energy Acquisitions LP; Lil Sebastian 1606 No. 3-24MH Well; NW1/4 NW1/4 NE1/4 NW1/4 of 24-16N-06W; 802,000 cu-ft gas per day, 253 barrels oil per day; TD 11,971.
Oklahoma Energy Acquisitions LP; Sadiebug 1606 No. 5-35MH Well; SE1/4 SE1/4 SW1/4 SE1/4 of 35-16N-06W; 1,118,000 cu-ft gas per day, 447 barrels oil per day; TD 12,745.
Nowata: NEOK Production Co. LLC; Hall No. 44-23 Well; SE1/4 SE1/4 SE1/4 SE1/4 of 23-28N-17E; 10,000 cu-ft gas per day; TD 962.
Okfuskee: Calyx Energy III LLC; Cheatwood No. 1-15-27CH Well; NW1/4 NW1/4 SW1/4 SW1/4 (SL) of 15-10N-09E; 2,872,000 cu-ft gas per day, 7 barrels oil per day, 14,935.
Calyx Energy III LLC; Cheatwood No. 1-16-9CH Well; NE1/4 NW1/4 NE1/4 NE1/4 (BHL) of 09-10N-09E; 2,138,000 cu-ft gas per day, 9 barrels oil per day; TD 12,830.
INTENT TO DRILL
No Posting.
SOURCE: OIL-LAW RECORDS CORP.


Choose a destination...
YAHOO
GOOGLE
ALTAVISTA
AMAZON
ARTLUNG
Demonstration
Alabama
Alaska
Arizona
Arkansas
California
Colorado
Connecticut
Dist of Columbia
Delaware
Florida
Georgia
Hawaii
Idaho
Illinois
Indiania
Iowa
Kansas
Kentucky
Louisiana
Maine
Maryland
Massachusetts
Michigan
Minnesota
Mississippi
Missouri
Montana
Nebraska
New Hampshire
New Jersey
New Mexico
New York
Nevada
North Carolina
North Dakota
Ohio
Oklahoma
Oregon
Pennsylvania
Rhode Island
South Carolina
South Dakota
Tennessee
Texas
Utah
Vermont
Virginia
Washington
West Virginia
Wisconsin
Wyoming


---
layout: post
status: publish
published: true
title: "
Blackhawks, Bulls and Cubs
Share Comcast Sports Net Tonight"
author:
display_name: Corey Fineran
login: Corey
email<EMAIL_ADDRESS>url: ''
author_login: Corey
author_email<EMAIL_ADDRESS>wordpress_id: 9824
wordpress_url: http://ivyenvy.com/?p=9824
date: '2014-04-25 09:50:46 +0000'
date_gmt: '2014-04-25 14:50:46 +0000'
categories:
- Broadcasters/Networks
- General Sports
tags:
- Brewers
- Blackhawks
- Bulls
- Blues
- Wizards
comments:
- id: 10872
author: Jeff Kilgard
author_email: ''
author_url: ''
date: '2014-04-25 17:02:28 +0000'
date_gmt: '2014-04-25 22:02:28 +0000'
content: Those channels are off for Mediacom. Comcast HD is 732, Comcast HD+ is
733, CoziTV is 106. In the Quad Cities anyhow.
- id: 10873
author: Jeff Kilgard
author_email: ''
author_url: ''
date: '2014-04-25 20:15:33 +0000'
date_gmt: '2014-04-26 01:15:33 +0000'
content: Cubs are not on this CoziTV channel. I guess no game being shown in the
Quad Cities tonight.
---
Comcast Sports Net has a busy night, as the Blackhawks and Bulls have playoff games and the Cubs go to Milwaukee for an evening game. The Blackhawks game vs. the St. Louis Blues will be broadcast on CSN, while the Bulls game vs. the Washington Wizards will be on CSN+. This leaves the Cubs (deservedly) looking for a home tonight. If you decide you'd rather watch Carlos Villanueva match up against Matt Garza rather than playoff hockey or basketball, this image is from the Comcast website and will help you find the Cubs game.


{% extends "base.html" %} {% block scripts %} {% endblock %} {% block content %}
All feedback is welcomed, especially if it would help make this site more informative, accurate, and interesting.
I'm especially interested in fine-tuning the estimations and calculations for asteroid composition, value of materials, and cost of extraction.
Please contact me at .


Lorem ipsum dolor sit amet.
| TECHNICAL SPECIFICATIONS | |
|---|---|
| Solar LED Street Light Semi-integrated 10-36W LED | Inbuilt Driver cum Inbuilt Lithium P4 Battery 11AH-40AH |
| External Solar PV Module 40W-150W | No Manual ON-OFF Required (Fully Automatic) |
| No Maintenance Required (Lithium P4 Battery) | Long Life of Product,Long Battery Life |
| Dimming Sensor-uses Energy as Required | Huge Cost Saving on Installation |
| BENEFITS | |
| Ideal Solution for Rural and Remote Areas where Power lines are not Available. | |
| No External Cabling. Trenching and Zero Carbon Foot Prints | |
| Fully Renewable and Independent Green Energy Source. | |
| No Maintenance in Initial Years. |
| SPECIFICATIONS | |
|---|---|
| Solar Panel - 5V/35W | |
| Lamp-Japan Nochia SMD LED 15W | |
| Fully Renewable and Independent Green Energy Source. | |
| LED Life Span - 50000 Hours | |
| Battery -3.2V/30AH (Lithium P04) | |
| Battery Life Span - 8 to 10 Years | |
| Duration - whole Night Lighting | |
| Suggested Installation Height - 5 Meters | |
| Focus 12 to 15 Meters |


Home
Beta!
Architect
Calendar
City Planner
About
Beta!
Architect
Calendar
City Planner
About
Schedule a Consultation
Connect with Metamask
- City Planner -
- Duration -
1 hours
2 hours
3 hours
4 hours
- Topic -
Elevations
Accessibility
Arborist/Tree Preservation
Archaeological Assessment
Architecture Control Guidelines
Avenue Segment Review Study
Boundary Plan of Survey
Community Services and Facilities Studies
Computer Generated Building Mass Model
Concept Site and Landscape Plan
Construction Management Plan
Contaminated Site Assessment/Environmental Site Assessment
Context Plan
Draft Official Plan Amendment
Draft Plan of Condominium
Draft Plan of Subdivision
Draft Zoning By-Law Amendment (text and schedule)
Energy Modeling Guidelines
Energy Strategy
Environmental Impact Strategy
Erosion/Sediment Control Plan
Floor Plans
Erosion/Sediment Control Plan
Geotechnical Study/Hydrological Review
Heritage Impact Assessment/Conservation Strategy
Housing Issues Report
Landscape and Lighting Plan
Loading Study
Natural Heritage Impact Study
Noise Impact Study
Parking Study
Pedestrian Level Wind Study
Perspective Drawing (required for +4,000 sq.m
Planning Rationale
Public Consultation Plan
Public Utilities Plan
Roof Study
Servicing Report
Site Grading Plan
Site Plan
Site Building Elevations
Site Building Sections
Stormwater Management Report
Subdivision Concept Plan
Sun/Shadow Study
Topographic Survey
Toronto Green Standard Checklist
Traffic Operations Assessment
Transportation Impact Study
Tree Preservation Plan
Underground Garage Plans
Urban Design Guidelines
Vibration Study
Link to SPA Document
Consultation Date
Browse Calendar


DEJA VU
Reviewed by Harvey Karten, Ph.D. Rainbow Film Co./ Revere Entertainment Director: Henry Jaglom Writer: Henry Jaglom, Victoria Foyt Cast: Stephane Dillane, Victoria Foyt, Vanessa Redgrave, Glynis Barber, Michael Brandon, Vernon Dobtcheff, Graydon Gould, Noel Harrison
Only connect!...Only connect the prose and the passion and both will be exalted, and human love will be seen at its height." Did Henry Jaglom say this, or are we experiencing deja vu while we watch his latest offbeat--though accessible-- film about the nature of romance and love? Utilizing his wife Victoria Foyt in the principal role, Jaglom has fashioned a film with mystical undertones as a meditation on some heavy themes: destiny vs. free will, compromise vs. burning bridges, the pull of history vs. the allures of the present. If he doesn't quite succeed in realizing his ambition it is only because he is tackling exalted subjects, but "Deja Vu" features some solid if sometimes pretentious dialogue, intense performances, and some lush scenery from the majesty of Jerusalem to the beauty of Paris; from the richness of the white cliffs of Dover to the coziness of a London cottage.
The story opens as a store owner from Los Angeles, Dana (Victoria Foyt), is shopping for garments in Jerusalem for sale in her business. An elderly, enigmatic French woman (Akiva Marks) sits beside her in a scenic cafe and, opening up the way strangers often do to reveal secrets unknown even by their most intimate friends, she describes a liaison she had decades earlier with an American lover who gave her a ruby pin, left for home with a promise to send for her, and simply disappeared.
There ensues a progression of incidents that take Dana to Paris, to Dover's white cliffs, to London and ultimately home to Los Angeles, but before meeting her fiance, Alex (Michael Brandon) in London, she has a fateful meeting in Dover with Sean (Stephen Dillane) whom she observes painting a pretty scene and finds herself not only attracted to the urbane fellow but having the strangest feeling that they'd met before. By a remarkable coincidence, business draws both Dana and Sean to a London home where they are hosted by a comical pair with their own stories to tell, and are entertained by the host's sister, Skelly (Vanessa Redgrave). Skelly is a woman of the world who believes in taking life by the horns and refusing to compromise even if one must give up security in favor of a brash romance.
While Jaglom's latest effort is more structured than his autobiographical films such as "Can She Bake A Cherry Pie" (which furthered Karen Black's acting career) and "New Year's Day" which featured the director himself in a starring role, he continues to compete with the French penchant for talk. As with his most recent offering, "Last Summer in the Hamptons," which focused on a group of theater people talking up a storm to reveal all their neuroses, Jaglom seats his characters in the central scene around a living room where they tell campfire-like stories about their lives, one of which hits home so thunderously that Dana and her secret paramour Alex seem ready to crawl under a table.
The fable relies all too much on unbelievable coincidences to demonstrate that we poor mortals are often blown hither and thither by fate, our decisions made for us by some all- knowing entity which can disrupt our most solid plans and sweep us away to romantic bliss.  Dillane takes high honors for his finely-honed acting while Vanessa Redgrave is surprisingly underutilized and cast in a stereotypical role of a woman who is simply a type. Vanessa Redgrave's own mother has a banal cameo as an aging parent who is not wanted by either of her children, while Victoria Foyt is well cast as a sophisticated career woman overwhelmed by destiny.
Few movies have put a single song to such use, giving the audience a feeling of instant deja vu, as the refrains of "White Cliffs of Dover" is repeated interminably to illuminate the movie's title: "It seems we've stood and talked like this before/ We looked at each other in the same way then/ But I can't remember Where Or When." Not Rated. Running time: 115 minutes. (C) Harvey Karten 1998
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


The query below is a simple example with GeoJSON geometry data.
Iterator function iter:GeoJSON
iterates over the features collection of a GeoJSON document, and outputs (1) the Geometry as a wktLiteral, and (2) the Features as a JSON Literal
Binding function fun:GeoJSONGeometry
extracts the Geometry member from a Feature as a wktLiteral.


Thi Nhat Van Le
Assignment 1: Lab 0 & Lab 1
Lab 0 - Homepage
Lab 1 -
About Me
Assignment 2:
Homework 1 - Pie
Assignment 3: CSS Layout
Lab 2 - Journal
Homework 2 - Movie
Assignment 4: HTML Form
CapitalOne Form
Assignment 5: JS -1
Movie Popup
Assignment 6: JS -2
Bank Account
Assignment 7:
JS- Inheritance
Assignment 8: JS- JQuery
0 - Section 07 - jQuery
Lab 07 - Maze
Homework 9 - 15 Puzzle
Assignment 9:
Servlet 1
Assignment 10:
Servlet 2
Assignment 11:
Servlet 3


{% extends 'base.html' %} {% block content %}
This is a simple social blog website developed by<EMAIL_ADDRESS>Go ahead and explore.


Sorry.


Prefer v-slot in 2.6.0+
Used on content inserted into child components to indicate which named slot the content belongs to.
slot
Prefer v-slot in 2.6.0+
Used on content inserted into child components to indicate which named slot the content belongs to.
Deprecated |
|
Library: |<EMAIL_ADDRESS>|