| 程序包 | 说明 |
|---|---|
| cn.ac.ict.partition | |
| cn.ac.ict.partition.io.formats | |
| org.apache.giraph.aggregators |
Package of Giraph aggregators.
|
| org.apache.giraph.benchmark |
Package of benchmarks for performance testing and optimization
|
| org.apache.giraph.comm.requests |
Package for requests.
|
| org.apache.giraph.conf |
Package of Giraph configuration related things.
|
| org.apache.giraph.edge |
Package of Vertex implementations.
|
| org.apache.giraph.examples |
Package of Giraph examples.
|
| org.apache.giraph.graph |
Package of all the graph related objects, built on the
org.apache.bsp package.
|
| org.apache.giraph.integration |
Package of all helper integration test objects.
|
| org.apache.giraph.io |
Input/Output related things.
|
| org.apache.giraph.io.formats |
Package of reusable library Giraph objects.
|
| org.apache.giraph.io.iterables |
Iterable wrappers for IO readers/writers
|
| org.apache.giraph.job |
Package of all the classes involved in job launch.
|
| org.apache.giraph.master |
Package of all the master related things.
|
| org.apache.giraph.partition |
Package of partitioning related objects.
|
| org.apache.giraph.utils |
Package of all generic utility classes.
|
| org.apache.giraph.worker |
Package of all the worker related things
|
| 限定符和类型 | 类和说明 |
|---|---|
class |
MyLPAWithHopVertex |
class |
MyLPAWithHubVertex |
class |
MySimpleLPAVertex |
| 限定符和类型 | 类和说明 |
|---|---|
class |
IdValueEdgesTextOutputFormat<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable>
Write out Vertices' IDs and values, but not their edges nor edges' values.
|
protected class |
IdValueEdgesTextOutputFormat.IdWithValueVertexWriter
Vertex writer used with
IdValueEdgesTextOutputFormat . |
class |
JsonLongLongIntLongVertexInputFormat
VertexInputFormat that features
long vertex ID's,
double vertex values and float
out-edge weights, and double message types,
specified in JSON format. |
class |
LongLongVertexInputFormat
VertexInputFormat that features
long vertex ID's,
double vertex values and float
out-edge weights, and double message types,
specified in JSON format. |
class |
TextVertexFromMultiLinesInputFormat<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.WritableComparable,E extends org.apache.hadoop.io.WritableComparable> |
protected class |
TextVertexFromMultiLinesInputFormat.TextVertexFromMultiLinesVertexReader |
protected class |
TextVertexFromMultiLinesInputFormat.TextVertexReaderFromMultiLinesProcessed<T> |
protected class |
TextVertexFromMultiLinesInputFormat.TextVertexReaderFromMultiLinesProcessedHandingExceptions<T,X extends Throwable> |
| 限定符和类型 | 接口和说明 |
|---|---|
interface |
AggregatorWriter
An AggregatorWriter is used to export Aggregators during or at the end of
each computation.
|
| 限定符和类型 | 类和说明 |
|---|---|
class |
TextAggregatorWriter
Default implementation of
AggregatorWriter . |
| 限定符和类型 | 类和说明 |
|---|---|
static class |
AggregatorsBenchmark.AggregatorsBenchmarkMasterCompute
MasterCompute class for AggregatorsBenchmark
|
static class |
AggregatorsBenchmark.AggregatorsBenchmarkVertex
Vertex class for AggregatorsBenchmark
|
class |
PageRankVertex
Implementation of PageRank in which vertex ids are ints, page rank values
are floats, and graph is unweighted.
|
static class |
RandomMessageBenchmark.RandomMessageBenchmarkMasterCompute
Master compute associated with
RandomMessageBenchmark . |
static class |
RandomMessageBenchmark.RandomMessageVertex
Actual message computation (messaging in this case)
|
class |
ShortestPathsVertex
Shortest paths algorithm.
|
class |
WeightedPageRankVertex
Implementation of Page Rank algorithm on a weighted graph.
|
| 限定符和类型 | 类和说明 |
|---|---|
class |
ByteArrayRequest
Abstract request which has a byte array as its data
|
class |
ByteArrayWithSenderTaskIdRequest
Abstract request which has a byte array and task id of the sender as its
data
|
class |
SaslCompleteRequest
Reply from server to client after SASL authentication completes.
|
class |
SaslTokenMessageRequest
Send and receive SASL tokens.
|
class |
SendAggregatorsToMasterRequest
Request to send final aggregated values from worker which owns
aggregators to the master
|
class |
SendAggregatorsToOwnerRequest
Request to send final aggregatd values from master to worker which owns
the aggregators
|
class |
SendAggregatorsToWorkerRequest
Request to send final aggregated values from worker which owns them to
other workers
|
class |
SendPartitionCurrentMessagesRequest<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable,M extends org.apache.hadoop.io.Writable>
Send a collection of vertex messages for a partition.
|
class |
SendPartitionMutationsRequest<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable,M extends org.apache.hadoop.io.Writable>
Send a collection of vertex mutations for a partition.
|
class |
SendVertexRequest<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable,M extends org.apache.hadoop.io.Writable>
Send a collection of vertices for a partition.
|
class |
SendWorkerAggregatorsRequest
Request to send partial aggregated values for current superstep (values
which were computed by one worker's vertices)
|
class |
SendWorkerDataRequest<I extends org.apache.hadoop.io.WritableComparable,T,B extends ByteArrayVertexIdData<I,T>>
Abstract request to send a collection of data, indexed by vertex id,
for a partition.
|
class |
SendWorkerEdgesRequest<I extends org.apache.hadoop.io.WritableComparable,E extends org.apache.hadoop.io.Writable>
Send a collection of edges for a partition.
|
class |
SendWorkerMessagesRequest<I extends org.apache.hadoop.io.WritableComparable,M extends org.apache.hadoop.io.Writable>
Send a collection of vertex messages for a partition.
|
class |
WritableRequest<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable,M extends org.apache.hadoop.io.Writable>
Interface for requests to implement
|
| 限定符和类型 | 类和说明 |
|---|---|
class |
DefaultImmutableClassesGiraphConfigurable<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable,M extends org.apache.hadoop.io.Writable>
Default implementation of ImmutableClassesGiraphConfigurable
|
| 限定符和类型 | 类和说明 |
|---|---|
class |
ArrayListEdges<I extends org.apache.hadoop.io.WritableComparable,E extends org.apache.hadoop.io.Writable>
|
class |
ByteArrayEdges<I extends org.apache.hadoop.io.WritableComparable,E extends org.apache.hadoop.io.Writable>
OutEdges implementation backed by a byte array. |
class |
ConfigurableOutEdges<I extends org.apache.hadoop.io.WritableComparable,E extends org.apache.hadoop.io.Writable>
Common base class for
OutEdges implementations that require a
configuration. |
class |
HashMapEdges<I extends org.apache.hadoop.io.WritableComparable,E extends org.apache.hadoop.io.Writable>
|
class |
HashMultimapEdges<I extends org.apache.hadoop.io.WritableComparable,E extends org.apache.hadoop.io.Writable>
OutEdges implementation backed by an ArrayListMultimap . |
| 限定符和类型 | 类和说明 |
|---|---|
class |
AggregatorsTestVertex
Vertex which uses aggrergators.
|
static class |
AggregatorsTestVertex.AggregatorsTestMasterCompute
Master compute which uses aggregators.
|
class |
ConnectedComponentsVertex
Implementation of the HCC algorithm that identifies connected components and
assigns each vertex its "component identifier" (the smallest vertex id
in the component)
The idea behind the algorithm is very simple: propagate the smallest
vertex id along the edges to all vertices of a connected component.
|
class |
GeneratedVertexReader<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable>
Used by GeneratedVertexInputFormat to read some generated data
|
class |
IdentityVertex<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable,M extends org.apache.hadoop.io.Writable>
User applications can subclass IdentityVertex, which
simply prints the results that have been read for testing IO related
jobs under any inputformat
|
class |
LongDoubleDoubleTextInputFormat
Simple text-based
VertexInputFormat for
unweighted graphs with long ids. |
class |
LongDoubleDoubleTextInputFormat.LongDoubleDoubleDoubleVertexReader
Vertex reader associated with
LongDoubleDoubleTextInputFormat . |
class |
LongDoubleNullTextInputFormat
Input format for unweighted graphs with long ids and double vertex values
|
class |
LongDoubleNullTextInputFormat.LongDoubleNullDoubleVertexReader
Vertex reader associated with
LongDoubleNullTextInputFormat . |
class |
NormalizingLongDoubleDoubleTextInputFormat
Simple text-based
VertexInputFormat for
unweighted graphs with long ids. |
class |
NormalizingLongDoubleDoubleTextInputFormat.NormalizingLongDoubleDoubleDoubleVertexReader
Vertex reader associated with
LongDoubleDoubleTextInputFormat . |
class |
PartitionContextTestVertex
Vertex to test the functionality of PartitionContext
|
class |
RandomWalkVertex<E extends org.apache.hadoop.io.Writable>
Base class for executing a random walk on a graph
|
class |
RandomWalkVertexMasterCompute
Master compute associated with
RandomWalkVertex . |
class |
RandomWalkWithRestartVertex
Executes "RandomWalkWithRestart", a random walk on the graph which is biased
towards a source vertex.
|
class |
SimpleAggregatorWriter
This is a simple example for an aggregator writer.
|
static class |
SimpleCheckpointVertex.SimpleCheckpointComputation
Actual computation.
|
static class |
SimpleCheckpointVertex.SimpleCheckpointVertexMasterCompute
Master compute associated with
SimpleCheckpointVertex . |
class |
SimpleCombinerVertex
Test whether messages can go through a combiner.
|
class |
SimpleFailVertex
Vertex to allow unit testing of failure detection
|
class |
SimpleInDegreeCountVertex
Simple function to return the out degree for each vertex.
|
class |
SimpleLongDoubleDoubleDoubleIdentityVertex
A simple use of the Identity Vertex for taking care of Long, Double,
Double, Double type Inputformat Good for use with
io.LongDoubleDoubleAdjacencyListVertexInputFormat
|
class |
SimpleMasterComputeVertex
Demonstrates a computation with a centralized part implemented via a
MasterCompute.
|
static class |
SimpleMasterComputeVertex.SimpleMasterCompute
MasterCompute used with
SimpleMasterComputeVertex . |
class |
SimpleMsgVertex
Test whether messages can be sent and received by vertices.
|
class |
SimpleMutateGraphVertex
Vertex to allow unit testing of graph mutations.
|
class |
SimpleOutDegreeCountVertex
Simple function to return the out degree for each vertex.
|
class |
SimplePageRankVertex
Demonstrates the basic Pregel PageRank implementation.
|
static class |
SimplePageRankVertex.SimplePageRankVertexInputFormat
Simple VertexInputFormat that supports
SimplePageRankVertex |
static class |
SimplePageRankVertex.SimplePageRankVertexMasterCompute
Master compute associated with
SimplePageRankVertex . |
static class |
SimplePageRankVertex.SimplePageRankVertexOutputFormat
Simple VertexOutputFormat that supports
SimplePageRankVertex |
class |
SimplePageRankVertex.SimplePageRankVertexOutputFormat.SimplePageRankVertexWriter
Simple VertexWriter that supports
SimplePageRankVertex |
static class |
SimplePageRankVertex.SimplePageRankVertexReader
Simple VertexReader that supports
SimplePageRankVertex |
class |
SimpleShortestPathsVertex
Demonstrates the basic Pregel shortest paths implementation.
|
class |
SimpleSuperstepVertex
Just a simple Vertex compute implementation that executes 3 supersteps, then
finishes.
|
static class |
SimpleSuperstepVertex.SimpleSuperstepVertexInputFormat
Simple VertexInputFormat that supports
SimpleSuperstepVertex |
static class |
SimpleSuperstepVertex.SimpleSuperstepVertexOutputFormat
Simple VertexOutputFormat that supports
SimpleSuperstepVertex |
class |
SimpleSuperstepVertex.SimpleSuperstepVertexOutputFormat.SimpleSuperstepVertexWriter
Simple VertexWriter that supports
SimpleSuperstepVertex |
static class |
SimpleSuperstepVertex.SimpleSuperstepVertexReader
Simple VertexReader that supports
SimpleSuperstepVertex |
class |
SimpleTextVertexOutputFormat
Simple text based vertex output format example.
|
class |
SimpleTriangleClosingVertex
Demonstrates triangle closing in simple,
unweighted graphs for Giraph.
|
static class |
SimpleVertexWithWorkerContext.SimpleVertex
Actual vetex implementation
|
static class |
VerifyMessage.VerifyMessageMasterCompute
Master compute associated with
VerifyMessage.VerifyMessageVertex . |
static class |
VerifyMessage.VerifyMessageVertex
Send and verify messages.
|
class |
VertexWithDoubleValueDoubleEdgeTextOutputFormat
Simple vertex output format for weighted graphs.
|
class |
VertexWithDoubleValueDoubleEdgeTextOutputFormat.VertexWithDoubleValueWriter
Vertex writer used with
VertexWithComponentTextOutputFormat . |
class |
VertexWithDoubleValueNullEdgeTextOutputFormat
Output format for vertices with a long as id, a double as value and
null edges
|
class |
VertexWithDoubleValueNullEdgeTextOutputFormat.VertexWithDoubleValueWriter
Vertex writer used with
VertexWithDoubleValueNullEdgeTextOutputFormat . |
| 限定符和类型 | 类和说明 |
|---|---|
class |
DefaultVertexResolver<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable,M extends org.apache.hadoop.io.Writable>
Default implementation of how to resolve vertex creation/removal, messages
to nonexistent vertices, etc.
|
class |
Vertex<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable,M extends org.apache.hadoop.io.Writable>
Basic abstract class for writing a BSP application for computation.
|
class |
VertexMutations<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable,M extends org.apache.hadoop.io.Writable>
Structure to hold all the possible graph mutations that can occur during a
superstep.
|
| 限定符和类型 | 类和说明 |
|---|---|
class |
SuperstepHashPartitionerFactory<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable,M extends org.apache.hadoop.io.Writable>
Example graph partitioner that builds on
HashMasterPartitioner to
send the partitions to the worker that matches the superstep. |
| 限定符和类型 | 类和说明 |
|---|---|
class |
BasicVertexValueReader<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable>
Abstract base class for VertexValueReader.
|
class |
EdgeInputFormat<I extends org.apache.hadoop.io.WritableComparable,E extends org.apache.hadoop.io.Writable>
Input format for reading single edges.
|
class |
EdgeReader<I extends org.apache.hadoop.io.WritableComparable,E extends org.apache.hadoop.io.Writable>
Analogous to
RecordReader for edges. |
class |
ReverseEdgeDuplicator<I extends org.apache.hadoop.io.WritableComparable,E extends org.apache.hadoop.io.Writable>
An EdgeReader that creates the opposite direction edge for each edge read.
|
class |
VertexInputFormat<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable>
Use this to load data for a BSP application.
|
class |
VertexOutputFormat<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable>
Implement to output the graph after the computation.
|
class |
VertexReader<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable>
Analogous to Hadoop's RecordReader for vertices.
|
class |
VertexValueInputFormat<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable>
Vertex input format that only allows setting vertex id and value.
|
class |
VertexValueReader<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable>
Vertex reader for
VertexValueInputFormat . |
class |
VertexWriter<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable>
Implement to output a vertex range of the graph after the computation
|
| 限定符和类型 | 类和说明 |
|---|---|
class |
AdjacencyListTextVertexInputFormat<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable>
VertexReader that readers lines of text with vertices encoded as adjacency
lists and converts each token to the correct type.
|
protected class |
AdjacencyListTextVertexInputFormat.AdjacencyListTextVertexReader
Vertex reader associated with
AdjacencyListTextVertexInputFormat . |
class |
AdjacencyListTextVertexOutputFormat<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable>
OutputFormat to write out the graph nodes as text, value-separated (by
tabs, by default).
|
protected class |
AdjacencyListTextVertexOutputFormat.AdjacencyListTextVertexWriter
Vertex writer associated with
AdjacencyListTextVertexOutputFormat . |
class |
GeneratedVertexInputFormat<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable>
This VertexInputFormat is meant for testing/debugging.
|
class |
IdWithValueTextOutputFormat<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable>
Write out Vertices' IDs and values, but not their edges nor edges' values.
|
protected class |
IdWithValueTextOutputFormat.IdWithValueVertexWriter
Vertex writer used with
IdWithValueTextOutputFormat . |
class |
IntIntNullTextInputFormat
Simple text-based
VertexInputFormat for
unweighted graphs with int ids. |
class |
IntIntNullTextInputFormat.IntIntNullIntVertexReader
Vertex reader associated with
IntIntNullTextInputFormat . |
class |
IntIntTextVertexValueInputFormat<E extends org.apache.hadoop.io.Writable,M extends org.apache.hadoop.io.Writable>
Simple text-based
VertexValueInputFormat
for integer ids and values. |
class |
IntIntTextVertexValueInputFormat.IntIntTextVertexValueReader
VertexValueReader associated with
IntIntTextVertexValueInputFormat . |
class |
IntNullNullTextInputFormat
Simple text-based
VertexInputFormat for
unweighted graphs without edges or values, just vertices with ids. |
class |
IntNullNullTextInputFormat.IntNullNullNullVertexReader
Reader for this InputFormat.
|
class |
IntNullReverseTextEdgeInputFormat
Simple text-based
EdgeInputFormat for
unweighted graphs with int ids. |
class |
IntNullTextEdgeInputFormat
Simple text-based
EdgeInputFormat for
unweighted graphs with int ids. |
class |
IntNullTextEdgeInputFormat.IntNullTextEdgeReader
EdgeReader associated with
IntNullTextEdgeInputFormat . |
class |
JsonBase64VertexInputFormat<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable>
Simple way to represent the structure of the graph with a JSON object.
|
protected class |
JsonBase64VertexInputFormat.JsonBase64VertexReader
Simple reader that supports
JsonBase64VertexInputFormat |
class |
JsonBase64VertexOutputFormat<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable>
Simple way to represent the structure of the graph with a JSON object.
|
protected class |
JsonBase64VertexOutputFormat.JsonBase64VertexWriter
Simple writer that supports
JsonBase64VertexOutputFormat |
class |
JsonLongDoubleFloatDoubleVertexInputFormat
VertexInputFormat that features
long vertex ID's,
double vertex values and float
out-edge weights, and double message types,
specified in JSON format. |
class |
JsonLongDoubleFloatDoubleVertexOutputFormat
VertexOutputFormat that supports JSON encoded vertices featuring
double values and float out-edge weights |
class |
LongDoubleDoubleAdjacencyListVertexInputFormat
InputFormat for reading graphs stored as (ordered) adjacency lists
with the vertex ids longs and the vertex values and edges doubles.
|
protected class |
LongDoubleDoubleAdjacencyListVertexInputFormat.LongDoubleDoubleAdjacencyListVertexReader
VertexReader associated with
LongDoubleDoubleAdjacencyListVertexInputFormat . |
class |
PseudoRandomEdgeInputFormat
This
EdgeInputFormat generates pseudo-random edges on the fly. |
class |
PseudoRandomIntNullVertexInputFormat
VertexInputFormat for large scale testing,
like
PseudoRandomVertexInputFormat , but for the unweighted graphs
where vertex ids are integers. |
class |
PseudoRandomVertexInputFormat
This VertexInputFormat is meant for large scale testing.
|
class |
SequenceFileVertexInputFormat<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable,X extends Vertex<I,V,E,?>>
Sequence file vertex input format based on
SequenceFileInputFormat . |
static class |
SequenceFileVertexInputFormat.SequenceFileVertexReader<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable,X extends Vertex<I,V,E,?>>
Vertex reader used with
SequenceFileVertexInputFormat . |
class |
SequenceFileVertexOutputFormat<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable,OK extends org.apache.hadoop.io.Writable,OV extends org.apache.hadoop.io.Writable>
Sequence file vertex output format.
|
class |
TextDoubleDoubleAdjacencyListVertexInputFormat<M extends org.apache.hadoop.io.Writable>
Class to read graphs stored as adjacency lists with ids represented by
Strings and values as doubles.
|
protected class |
TextDoubleDoubleAdjacencyListVertexInputFormat.TextDoubleDoubleAdjacencyListVertexReader
Vertex reader used with
TextDoubleDoubleAdjacencyListVertexInputFormat |
class |
TextEdgeInputFormat<I extends org.apache.hadoop.io.WritableComparable,E extends org.apache.hadoop.io.Writable>
Abstract class that users should subclass to use their own text based
edge output format.
|
protected class |
TextEdgeInputFormat.TextEdgeReader
|
protected class |
TextEdgeInputFormat.TextEdgeReaderFromEachLine
Abstract class to be implemented by the user to read an edge from each
text line.
|
protected class |
TextEdgeInputFormat.TextEdgeReaderFromEachLineProcessed<T>
Abstract class to be implemented by the user to read an edge from each
text line after preprocessing it.
|
class |
TextVertexInputFormat<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable>
Abstract class that users should subclass to use their own text based
vertex input format.
|
protected class |
TextVertexInputFormat.TextVertexReader
Abstract class to be implemented by the user based on their specific
vertex input.
|
protected class |
TextVertexInputFormat.TextVertexReaderFromEachLine
Abstract class to be implemented by the user to read a vertex from each
text line.
|
protected class |
TextVertexInputFormat.TextVertexReaderFromEachLineProcessed<T>
Abstract class to be implemented by the user to read a vertex from each
text line after preprocessing it.
|
protected class |
TextVertexInputFormat.TextVertexReaderFromEachLineProcessedHandlingExceptions<T,X extends Throwable>
Abstract class to be implemented by the user to read a vertex from each
text line after preprocessing it with exception handling.
|
class |
TextVertexOutputFormat<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable>
Abstract class that users should subclass to use their own text based
vertex output format.
|
protected class |
TextVertexOutputFormat.TextVertexWriter
Abstract class to be implemented by the user based on their specific
vertex output.
|
protected class |
TextVertexOutputFormat.TextVertexWriterToEachLine
Abstract class to be implemented by the user to write a line for each
vertex.
|
class |
TextVertexValueInputFormat<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable,M extends org.apache.hadoop.io.Writable>
Abstract class that users should subclass to use their own text based
vertex value input format.
|
protected class |
TextVertexValueInputFormat.TextVertexValueReader
|
protected class |
TextVertexValueInputFormat.TextVertexValueReaderFromEachLine
Abstract class to be implemented by the user to read a vertex value from
each text line.
|
protected class |
TextVertexValueInputFormat.TextVertexValueReaderFromEachLineProcessed<T>
Abstract class to be implemented by the user to read a vertex value from
each text line after preprocessing it.
|
| 限定符和类型 | 类和说明 |
|---|---|
class |
EdgeReaderWrapper<I extends org.apache.hadoop.io.WritableComparable,E extends org.apache.hadoop.io.Writable>
Wraps
GiraphReader for edges into EdgeReader |
class |
VertexReaderWrapper<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable>
Wraps
GiraphReader for vertices into VertexReader |
| 限定符和类型 | 类和说明 |
|---|---|
class |
DefaultJobObserver
Default implementation of job observer that does nothing.
|
| 限定符和类型 | 接口和说明 |
|---|---|
interface |
MasterObserver
Observer for Master.
|
| 限定符和类型 | 类和说明 |
|---|---|
class |
DefaultMasterCompute
A dumb implementation of
MasterCompute . |
class |
DefaultMasterObserver
A no-op implementation of MasterObserver to make it easier for users.
|
class |
MasterCompute
Interface for defining a master vertex that can perform centralized
computation between supersteps.
|
| 限定符和类型 | 接口和说明 |
|---|---|
interface |
GraphPartitionerFactory<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable,M extends org.apache.hadoop.io.Writable>
Defines the partitioning framework for this application.
|
interface |
Partition<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable,M extends org.apache.hadoop.io.Writable>
A generic container that stores vertices.
|
interface |
ReusesObjectsPartition<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable,M extends org.apache.hadoop.io.Writable>
Empty interface to characterize
Partition implementations that
don't keep references to the Vertex objects they are passed. |
| 限定符和类型 | 类和说明 |
|---|---|
class |
BasicPartition<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable,M extends org.apache.hadoop.io.Writable>
Basic partition class for other partitions to extend.
|
class |
BasicPartitionOwner
Basic partition owner, can be subclassed for more complicated partition
owner implementations.
|
class |
ByteArrayPartition<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable,M extends org.apache.hadoop.io.Writable>
Byte array based partition.
|
class |
HashPartitionerFactory<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable,M extends org.apache.hadoop.io.Writable>
Divides the vertices into partitions by their hash code using a simple
round-robin hash for great balancing if given a random hash code.
|
class |
HashRangePartitionerFactory<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable,M extends org.apache.hadoop.io.Writable>
Divides the vertices into partitions by their hash code using ranges of the
hash space.
|
class |
RangePartitionerFactory<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable,M extends org.apache.hadoop.io.Writable>
Range partitioning will split the vertices by a key range based on a generic
type.
|
class |
RangePartitionOwner<I extends org.apache.hadoop.io.WritableComparable>
Added the max key index in to the
PartitionOwner . |
class |
RangeSplitHint<I extends org.apache.hadoop.io.WritableComparable>
Hint to the
RangeMasterPartitioner about how a
RangePartitionOwner can be split. |
class |
SimpleIntRangePartitionerFactory<V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable,M extends org.apache.hadoop.io.Writable>
Factory for simple range-based partitioners based on integer vertex ids.
|
class |
SimpleLongRangePartitionerFactory<V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable,M extends org.apache.hadoop.io.Writable>
Factory for simple range-based partitioners based on long vertex ids.
|
class |
SimplePartition<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable,M extends org.apache.hadoop.io.Writable>
A simple map-based container that stores vertices.
|
| 限定符和类型 | 类和说明 |
|---|---|
class |
ByteArrayVertexIdData<I extends org.apache.hadoop.io.WritableComparable,T>
Stores pairs of vertex id and generic data in a single byte array
|
class |
ByteArrayVertexIdEdges<I extends org.apache.hadoop.io.WritableComparable,E extends org.apache.hadoop.io.Writable>
Stores vertex id and edge pairs in a single byte array.
|
class |
ByteArrayVertexIdMessages<I extends org.apache.hadoop.io.WritableComparable,M extends org.apache.hadoop.io.Writable>
Stores vertex id and message pairs in a single byte array.
|
class |
InMemoryVertexInputFormat<I extends org.apache.hadoop.io.WritableComparable,V extends org.apache.hadoop.io.Writable,E extends org.apache.hadoop.io.Writable>
An input format that reads the input graph in memory.
|
class |
JMapHistoDumper
An observer for both worker and master that periodically dumps the memory
usage using jmap tool.
|
| 限定符和类型 | 类和说明 |
|---|---|
class |
DefaultWorkerObserver
Default Observer for Worker that does nothing.
|
Copyright © 2011-2014 The Apache Software Foundation. All Rights Reserved.


AP Top Health News at 12:12 a.m. EST
by EndPlayIs my kid too young for contact sports? Advice still unclear
Cholesterol levels dropping in US, but many still need care
Portland, Oregon, paramedics learn self-defense amid attacks
Trump, 2020 Dem contenders tout efforts to boost veterans
Vaping-related lung transplant performed at Detroit hospital
US officials identify 'strong culprit' in vaping illnesses
Juul halts US sales of popular mint-flavored e-cigarettes
Trump to pursue higher sales age for e-cigarettes
Doctors try CRISPR gene editing for cancer, a 1st in the US
New York judge sets opioid crisis trial for January


Compare Search
Compare cars side by side with our innovative search comparsion tools. A little tool to help make a smart decision.
Compare cars side by side with our innovative search comparsion tools. Simply search for your two favourite cars and add them to the compare basket, then press compare and we'll show you a breakdown of the cars specification and price. A little tool to help make a smart decision.
Car Lisiting
Teesside Used Motors stock and sell a wide range of vehicles. Browse our car lisitings
Teesside Used Motors stock and sell a wide range of vehicles. Browse our car lisitings by price, manufacturer, colour and much mobile-search-container and find your perfect car. Best of all, our vehicles come with a 3 year warranty.
Find Us
Teesside Used Motors, Southfield Rd, Middlesbrough TS1 3BX
Teesside Used motors are located in the heart of Tees Valley. Find our offices at Middlesbrough Teesside. Southfield Rd, Middlesbrough TS1 3BX


HTTP Version Not Suported
Your HTTP client version is not suported by this server.
ElvisServer/0.2 (Ubuntu)


Ben Fortier
IOS Developer / Full-Stack Developer
I am a senior majoring in Computer Science and Mathematics in the undergraduate program at Washington University in St. Louis. Upon my graduation in May 2020, I am looking for full time employment within the software life cycle. I am a full stack and IOS developer.


Dream it. Do it.
Communications
Message Expiration
Photo Albums
Decentralised
Cloud Storage
Own Your Content
Blogging
Decent Encryption
Chatrooms
Unsend Private Mail
Webpage Creation
Content Management
Games
Unincorporated
Forums
Share Anything Digital
Pseudonyms
Multiple Identities
No Advertising
Event Calendar
Bookmarking
Community Tagging
Internet-scale Privacy
Single Sign-On
Directory Services
Nomadic Identity
Social Networking
Derivative Channels
Multiple Profiles
Privacy Groups
Autonomy
Affinity Filtering
Friend Suggestions
Cross-Site Auth
Themes
Plugins
External API
3rd Party Apps
Open Source
Welcome to the Matrix
“The most fun you ever had without taking your clothes off.”
Public Sites
|
Project Home
|
Git
|
Developers


{% extends "base.html" %} {% load i18n %} {% block content %}
{% trans "You have already logged in" %}
{% trans "Lost password? Reset it here. You may use same form to get forgotten username." %}


Lagos commences recruitment of 1,000 teachers - Premium Times Nigeria
by Ajala Samuel AkindeleThe Lagos State Teaching Service Commission (TESCOM) has announced its decision to recruit 1,000 secondary school teachers into the state’s Post Primary Teaching Service.
According to a statement made available on the Lagos State Government’s website, the purpose of the recruitment is “to ensure that the standard of secondary school education in the state is in tandem with the 21st century global educational standard under the present administration of the State Governor, Mr Babajide Sanwo-Olu”.
All interested and qualified Nigerians who are resident in Lagos were asked to visit the TESCOM recruitment portal, @tescomjobs.lagosstate.gov.ng for full details of application procedures.
The portal will be accessible from November 13 to 20.


--- layout: page title: "Developing Web Applications with Haskell and Yesod" prev: OEBPS/pr01s05.html next: OEBPS/pt01.html book_path: books/michael-snoyman-developing-web-applications-with-haskell-and-yesod-_oeb/ --- {% include JB/setup %} {% raw %}
Yesod has been created by an entire community of developers, all of whom have put in significant effort to make sure that the final product is as polished and user-friendly as possible. Everyone from the core development team to the person making an API request on the mailing list has had an impact on bringing Yesod to where it is today.
In particular, I’d like to thank Greg Weber, who has shared the maintenance burden of the project; Kazu Yamamoto and Matt Brown, who transformed Warp from a simple testing server to one of the fastest application servers available today; and Felipe Lessa, Patrick Brisbin, and Luite Stegeman for their numerous contributions across the board.
A big thank you to my editor, Simon St. Laurent, for all of his guidance and support. Mark Lentczner, Johan Tibell, and Adam Turoff provided incredibly thorough reviews of this book, cleaning up many of my mistakes. Additionally, there have been dozens of readers who have looked over the content of this book online, and provided feedback on where either the prose or the message was not coming through clearly—not to mention numerous spelling errors.
But finally, and most importantly, I’d like to thank my wife, Miriam, for enduring all of the time spent on both this book and Yesod in general. She has been my editor and sounding-board, though I’m sure the intricacies of Template Haskell sometimes worked more as a sedative than any meaningful conversation. Without her support, neither the Yesod project nor this book would have been able to happen.
Also, you’ll notice that I use my kids’ names (Eliezer and Gavriella) in some examples throughout the book. They deserve special mention in a Haskell text, since I think they’re the youngest people to ever use the word “monad” in a sentence with their “Transformers: Monads in Disguise.”


-
Coursera
www.coursera.org
Take free online classes from 80+ top universities and organizations. Coursera is a social entrepreneurship company partnering with Stanford ...
-
WIRED
www.wired.com
Get in-depth coverage of current and future trends in technology, and how they are shaping business, entertainment, communications, science, ...
-
How Things Work sur Twitter : "This is how the Big Bird suit works ...
twitter.com
Mot de passe oublié ? Vous utilisez déjà Twitter via SMS ?
-
"Digital Darwinism is the evolution of consumer...
briansolis.tumblr.com
"Digital Darwinism is the evolution of consumer behavior when society and technology evolve faster than the ability to adapt.” via @seodeva
-
Docker Hub Official Repos: Announcing Language Stacks | Docker Blog
blog.docker.com
With Docker containers fast becoming the standard for building blocks for distributed apps, we’re working with the Docker community to make it easier ...
-
Evernote CEO Phil Libin on Growth in Asia
www.wsj.com
Evernote has more than 100 million users and most of them are outside the U.S. The WSJ's Yun-Hee Kim speaks with CEO Phil Libin about the future of ...
-
Here's Why iPhone 6 Plus Bending Is Probably A Nonissue
www.businessinsider.com
Bendgate is a nontroversy.
-
Kendrick Lamar’s Optimistic New Song Channels Maya Angelou, Is Played 1 ...
thinkprogress.org
Kendrick Lamar's new song sounds a lot like a classic Maya Angelou poem.
-
Over 50% of the world will be online by 2017
www.totaltele.com
UN Broadband Commission predicts mobile broadband uptake will reach 7.6 billion within five years.
-
Brian Solis
drt.fm
In this interview, Brian Solis Author of What's the Future of Business, explains why experiences are everything for a business, and why listening is ...
-
Being a Better Digital Friend
www.builtunstoppable.com
With likes, favorites and +1s we quickly flow through our social feeds, passively engaging with our friends. We do not meaningfully engage. There are ...
-
Ray Ozzie's startup Talko wants to reinvent the phone call, starting with ...
www.geekwire.com
Images via Talko What has Ray Ozzie been focusing on since leaving his position as Microsoft's chief software architect? Here's the answer. A new app ...
-
Digital Transformation Gives Brands an Edge Over Analog-first Competitors
www.linkedin.com
The tech sector has had its fair or unfair share of market turbulence recently. There’s a great sense of irony in all of this though. Investors doubt ...
-
"The Embrace" = What we going to do with someone’s...
briansolis.tumblr.com
"The Embrace" = What we going to do with someone’s attention once we have it. #previewofthingstocome via @LudicCreatives
-
Where Digital Is and Where It’s Going - Brian Solis
www.briansolis.com
Formerly part of the 3M’s digital team, Greg Gerik recently joined the team at Shoutlet as VP of Product Marketing. Gerik attended the annual Social ...
-
Infographic: The Top Color Trends of 2014
www.shutterstock.com
Using data from our collection of 40 million images, we analyzed which popular colors are set to dominate design in the coming months.
-
Brand Publishers Are Ditching Facebook in Favor of Microsites
www.adweek.com
Brand publishers are more aware that they’re really just renting social media space on Facebook and are moving resources away from the social network.
-
A Call for New Expertise in Business - Brian Solis
www.briansolis.com
In the third installment for HootSuite’s business video series, Brian Solis discusses the widening gap between current expertise and emergent roles ...
-
Where Social Is & Where It's Going: Brian Solis at #SocialShakeup
www.shoutlet.com
Robin Carey and Brian Solis kicked off Social Shake-Up 2014 by examining the current trends in the social media industry and looking forward to the ...
-
These cartoons from Hugh MacLeod with text from Brian Solis offer lessons ...
upstart.bizjournals.com
Thanks to the duo of Hugh MacLeod (illustrations) and Brian Solis (words), we've now got a series of cartoons that elevate the approach and offer ...
-
4 social media insights to ignite your strategy
streamdaily.tv
Digital execs from Turner Sports and MasterCard discuss how they built their social networks.
-
In conversation with @robincarey in Atlanta...
briansolis.tumblr.com
In conversation with @robincarey in Atlanta discussing the elements of experience architecture. She’s such an amazing person!
-
AT&T & Chernin Buy Fullscreen, the Big YouTube Video Network
recode.net
This deal indicates a growing interest in subscription video services for the joint venture.
-
Brian Solis - Social Insights [VIDEO]
blog.hootsuite.com
Altimeter's Brian Solis on trends in social business
-
The Hidden World of Facebook "Like Farms" | MIT Technology Review
www.technologyreview.com
If you pay a “like farm” to generate likes for your Facebook pages, what do you get?
-
"Welcome to a new era of marketing and service in...
briansolis.tumblr.com
"Welcome to a new era of marketing and service in which your brand is defined by those who experience it.” via @passionsquared
-
Social Insights with Brian Solis - A New Expertise
www.youtube.com
What expertise will businesses need in a more connected, social economy? Best-selling author and analyst Brian Solis takes us into his vision of the ...
-
Jennifer Lopez - Booty ft. Iggy Azalea
www.youtube.com
Jennifer Lopez "Booty” (ft. Iggy Azalea) Get “Booty” feat. Iggy Azalea here: http://smarturl.it/jlobootysingle Download J. Lo’s latest album A.K.A. ...


25Similar structural estimation exercises have been also performed by Palumbo (1999) and Gourinchas and Parker (2002).


Shopping
Categorias
Category 1
Category 2
Category 3
Shopping List
Shopping List (Total:$0.0)
Home
>


Read the below word, then look at the two wordlists presented.
Decide which list is better. Click the appropriate button or use the left or right arrow keys to select a list.
On a touch screen? Swipe left to select the left list, or swipe right to select the right.


Uses of Interface
org.apache.shiro.aop.MethodInvocation
-
Packages that use MethodInvocation Package Description org.apache.shiro.aop Components used to support the framework's AOP/interception support classes.org.apache.shiro.aspectj AspectJ support for enabling dynamic authorization using Shiro's annotations.org.apache.shiro.authz.aop Contains AOP implementation support classes specifically used for authorization operations, particularly supporting AOP Method Interceptors and JSR-175 metadata Annotations.org.apache.shiro.spring.aop org.apache.shiro.spring.security.interceptor Spring AOP support for enabling Shiro annotations in Spring-configured applications. -
-
Uses of MethodInvocation in org.apache.shiro.aop
Methods in org.apache.shiro.aop with parameters of type MethodInvocation Modifier and Type Method Description protected Annotation
AnnotationMethodInterceptor. getAnnotation(MethodInvocation mi)
Returns the Annotation that this interceptor will process for the specified method invocation.Annotation
AnnotationResolver. getAnnotation(MethodInvocation mi, Class<? extends Annotation> clazz)
Returns anAnnotation
instance of the specified type based on the givenMethodInvocation
argument, ornull
if no annotation of that type could be found.Annotation
DefaultAnnotationResolver. getAnnotation(MethodInvocation mi, Class<? extends Annotation> clazz)
Object
MethodInterceptor. invoke(MethodInvocation methodInvocation)
Invokes the specifiedMethodInvocation
, allowing implementations to perform pre/post/finally surrounding the actual invocation.boolean
AnnotationMethodInterceptor. supports(MethodInvocation mi)
Returnstrue
if this interceptor supports, that is, should inspect, the specifiedMethodInvocation
,false
otherwise. -
Uses of MethodInvocation in org.apache.shiro.aspectj
Classes in org.apache.shiro.aspectj that implement MethodInvocation Modifier and Type Class Description class
BeforeAdviceMethodInvocationAdapter
Helper class that adapts an AspectJJoinPoint
. -
Uses of MethodInvocation in org.apache.shiro.authz.aop
Methods in org.apache.shiro.authz.aop with parameters of type MethodInvocation Modifier and Type Method Description protected void
AnnotationsAuthorizingMethodInterceptor. assertAuthorized(MethodInvocation methodInvocation)
Iterates over the internalmethodInterceptors
collection, and for each one, ensures that if the interceptorsupports
the invocation, that the interceptorasserts
that the invocation is authorized to proceed.void
AuthorizingAnnotationMethodInterceptor. assertAuthorized(MethodInvocation mi)
Ensures the calling Subject is authorized to execute the specifiedMethodInvocation
.protected abstract void
AuthorizingMethodInterceptor. assertAuthorized(MethodInvocation methodInvocation)
Asserts that the specified MethodInvocation is allowed to continue by performing any necessary authorization (access control) checks first.Object
AuthorizingAnnotationMethodInterceptor. invoke(MethodInvocation methodInvocation)
Ensures themethodInvocation
is allowed to execute first before proceeding by calling theassertAuthorized
method first.Object
AuthorizingMethodInterceptor. invoke(MethodInvocation methodInvocation)
Invokes the specified method (methodInvocation.
if authorization is allowed by first callingproceed
()assertAuthorized
. -
Uses of MethodInvocation in org.apache.shiro.spring.aop
Methods in org.apache.shiro.spring.aop with parameters of type MethodInvocation Modifier and Type Method Description Annotation
SpringAnnotationResolver. getAnnotation(MethodInvocation mi, Class<? extends Annotation> clazz)
-
Uses of MethodInvocation in org.apache.shiro.spring.security.interceptor
Methods in org.apache.shiro.spring.security.interceptor that return MethodInvocation Modifier and Type Method Description protected MethodInvocation
AopAllianceAnnotationsAuthorizingMethodInterceptor. createMethodInvocation(Object implSpecificMethodInvocation)
Creates aMethodInvocation
that wraps anorg.aopalliance.intercept.MethodInvocation
instance, enabling Shiro Annotations in AOP Alliance environments (Spring, etc).
-


public class CourseInstance
extends java.lang.Object
The CourseInstance
represents an instance of a Course
within
a given term or semester. A Course
does not keep same for every term.
Given that, CourseInstance
s instantiate when a given course is being
offered. Examples include Fall 2018 CISC 675 which is a
CourseInstance
of the CISC 675 Course
.
CourseInstance
is an instance of a Course
, which contains all
courses in the university.
| Constructor and Description |
|---|
CourseInstance(Course course,
int term)
Constructs a new
CourseInstance with given Course and term. |
| Modifier and Type | Method and Description |
|---|---|
void |
addSection(Section sec)
Adds a
Section to this CourseInstance . |
void |
display()
Displays all the
Section s information in this term. |
Course |
getCourse()
Gets the
Course , represented as Course object consisting of prefix,
courseCode, courseName, and skills attributes. |
java.lang.Iterable<Section> |
getSections()
Gets the sections as an iterable sequence of
Section s. |
int |
getTerm()
A getter to get the term initialized, represented as an integer of unbounded
range.
|
boolean |
isHasLab()
A getter to get the hasLab attribute initialized, represented as a boolean
value where TRUE indicates that the
CourseInstance does have a lab
section and FALSE indicates that the CourseInstance does not have a
lab section. |
void |
setHasLab(boolean hasLab)
A setter to get the hasLab attribute for this
CourseInstance
initialized, represented as a boolean. |
java.lang.String |
toString()
Returns a human-readable representation of this
CourseInstance , in
the form "Prefix CourseCode CourseName". |
public CourseInstance(Course course, int term)
CourseInstance
with given Course
and term.course
- the Course
at which this CourseInstance
references.term
- the term (semester) at which this CourseInstance
is
offered, identified as an integer with an unbounded range.public Course getCourse()
Course
, represented as Course object consisting of prefix,
courseCode, courseName, and skills attributes.CourseInstance
.public boolean isHasLab()
CourseInstance
does have a lab
section and FALSE indicates that the CourseInstance
does not have a
lab section.CourseInstance
has lab, False if
CourseInstance
does not have lab.public void setHasLab(boolean hasLab)
CourseInstance
initialized, represented as a boolean.hasLab
- a boolean represented as TRUE if the CourseInstance
has
Lab.public int getTerm()
public java.lang.Iterable<Section> getSections()
Section
s.public void addSection(Section sec)
Section
to this CourseInstance
. If the given
Section
is already in this CourseInstance
, this is a no-op.sec
- a non-null
Section
to add to this
CourseInstance
.public java.lang.String toString()
CourseInstance
, in
the form "Prefix CourseCode CourseName".toString
in class java.lang.Object
public void display()
Section
s information in this term.


--- layout: post title: "Scheduled downtime due to maintenance." subtitle: "Laniakea will be offline in the next few hours for a scheduled maintenance." date: 2020-01-30 012:00:00 -0400 background: '/img/posts/maintenance.png' ---
Dear Users,
due to a scheduled maintenance, Laniakea will not be available in the few next hours. Please check our web site for further updates.
The Laniakea team.


Our Main Focus
SmartGrid
The modernized Smart Grid (SG) is expected to enable several new applications such as dynamic pricing, demand response, and fraud detection; however, a collection of such fine-grained data raises privacy issues.
Researchers
Performing research, creating innovations, demonstrating advanced wireless communications, using internet and sense-and-control technologies to enable the development of the next generation of the electric utility grid.
Educators
The use of the testbed promises to make smart grid learning experiences more accessible, more personal, and more relevant. Educators can use the testbed and engage the students as an ideal socially constructed process.


Countdown
Information about the timer
The timer is a standard timer that tells you how many days till Ocotober 31st of the current year.
Information about the clock
The clock tells you what time it is and the date no matter where you are.
Your Current Time
2/10/2021
2:45:12 p.m.


{% extends 'email_base.html' %} {% block styles %} {% endblock %} {% block title %} Reset your password {% endblock %} {% block content %}
Someone requested to reset your password for THIS SITE. Click the link below to change your password.
If this wasn't you you can safely ignore this email
{% endblock %}


DO NOT READ THIS FILE ON GITHUB, GUIDES ARE PUBLISHED ON https://guides.rubyonrails.org.
Creating and Customizing Rails Generators & Templates
Rails
generators are an essential tool for improving your workflow. With this
guide you will learn how to create generators and customize existing ones.
After reading this guide, you will know:
- How to see which generators are available in your application.
- How to create a generator using templates.
- How Rails searches for generators before invoking them.
- How to customize your scaffold by overriding generator templates.
- How to customize your scaffold by overriding generators.
- How to use fallbacks to avoid overwriting a huge set of generators.
- How to create an application template.
First Contact
When you create an application using the rails
command, you are in fact using
a Rails
generator. After that, you can get a list of all available generators by
invoking bin/rails generate
:
$ rails new myapp
$ cd myapp
$ bin/rails generate
NOTE: To create a rails application we use the rails
global command which uses
the version of Rails installed via gem install rails
. When inside the
directory of your application, we use the bin/rails
command which uses the
version of Rails bundled with the application.
You will get a list of all generators that come with Rails. To see a detailed
description of a particular generator, invoke the generator with the --help
option. For example:
$ bin/rails generate scaffold --help
Creating Your First Generator
Generators are built on top of Thor, which provides powerful options for parsing and a great API for manipulating files.
Let's build a generator that creates an initializer file named initializer.rb
inside config/initializers
. The first step is to create a file at
lib/generators/initializer_generator.rb
with the following content:
class InitializerGenerator < Rails::Generators::Base
def create_initializer_file
create_file "config/initializers/initializer.rb", <<~RUBY
# Add initialization content here
RUBY
end
end
Our new generator is quite simple: it inherits from ::Rails::Generators::Base
and has one method definition. When a generator is invoked, each public method
in the generator is executed sequentially in the order that it is defined. Our
method invokes create_file
, which will create a file at the given
destination with the given content.
To invoke our new generator, we run:
$ bin/rails generate initializer
Before we go on, let's see the description of our new generator:
$ bin/rails generate initializer --help
Rails is usually able to derive a good description if a generator is namespaced,
such as ::ActiveRecord::Generators::ModelGenerator
, but not in this case. We can
solve this problem in two ways. The first way to add a description is by calling
desc
inside our generator:
class InitializerGenerator < Rails::Generators::Base
desc "This generator creates an initializer file at config/initializers"
def create_initializer_file
create_file "config/initializers/initializer.rb", <<~RUBY
# Add initialization content here
RUBY
end
end
Now we can see the new description by invoking --help
on the new generator.
The second way to add a description is by creating a file named USAGE
in the
same directory as our generator. We are going to do that in the next step.
Creating Generators with Generators
Generators themselves have a generator. Let's remove our InitializerGenerator
and use bin/rails generate generator
to generate a new one:
$ rm lib/generators/initializer_generator.rb
$ bin/rails generate generator initializer
create lib/generators/initializer
create lib/generators/initializer/initializer_generator.rb
create lib/generators/initializer/USAGE
create lib/generators/initializer/templates
invoke test_unit
create test/lib/generators/initializer_generator_test.rb
This is the generator just created:
class InitializerGenerator < Rails::Generators::NamedBase
source_root File. ("templates", __dir__)
end
First, notice that the generator inherits from ::Rails::Generators::NamedBase
instead of ::Rails::Generators::Base
. This means that our generator expects at
least one argument, which will be the name of the initializer and will be
available to our code via name
.
We can see that by checking the description of the new generator:
$ bin/rails generate initializer --help
Usage:
bin/rails generate initializer NAME [options]
Also, notice that the generator has a class method called source_root
.
This method points to the location of our templates, if any. By default it
points to the lib/generators/initializer/templates
directory that was just
created.
In order to understand how generator templates work, let's create the file
lib/generators/initializer/templates/initializer.rb
with the following
content:
# Add initialization content here
And let's change the generator to copy this template when invoked:
class InitializerGenerator < Rails::Generators::NamedBase
source_root File. ("templates", __dir__)
def copy_initializer_file
copy_file "initializer.rb", "config/initializers/#{file_name}.rb"
end
end
Now let's run our generator:
$ bin/rails generate initializer core_extensions
create config/initializers/core_extensions.rb
$ cat config/initializers/core_extensions.rb
# Add initialization content here
We see that copy_file
created config/initializers/core_extensions.rb
with the contents of our template. (The file_name
method used in the
destination path is inherited from ::Rails::Generators::NamedBase
.)
Generator Command Line Options
Generators can support command line options using class_option
. For
example:
class InitializerGenerator < Rails::Generators::NamedBase
class_option :scope, type: :string, default: "app"
end
Now our generator can be invoked with a --scope
option:
$ bin/rails generate initializer theme --scope dashboard
Option values are accessible in generator methods via options
:
def copy_initializer_file
@scope = ["scope"]
end
Generator Resolution
When resolving a generator's name, Rails looks for the generator using multiple
file names. For example, when you run bin/rails generate initializer core_extensions
,
Rails tries to load each of the following files, in order, until one is found:
rails/generators/initializer/initializer_generator.rb
generators/initializer/initializer_generator.rb
rails/generators/initializer_generator.rb
generators/initializer_generator.rb
If none of these are found, an error will be raised.
We put our generator in the application's lib/
directory because that
directory is in $LOAD_PATH
, thus allowing Rails to find and load the file.
Overriding Rails Generator Templates
Rails will also look in multiple places when resolving generator template files.
One of those places is the application's lib/templates/
directory. This
behavior allows us to override the templates used by Rails' built-in generators.
For example, we could override the scaffold controller template or the
scaffold view templates.
To see this in action, let's create a lib/templates/erb/scaffold/index.html.erb.tt
file with the following contents:
<%% @<%= plural_table_name %>.count %> <%= human_name.pluralize %>
Note that the template is an ERB template that renders another ERB template.
So any <%
that should appear in the resulting template must be escaped as
<%%
in the generator template.
Now let's run Rails' built-in scaffold generator:
$ bin/rails generate scaffold Post title:string
...
create app/views/posts/index.html.erb
...
The contents of app/views/posts/index.html.erb
is:
<% @posts.count %> Posts
Overriding Rails Generators
Rails' built-in generators can be configured via config.generators
,
including overriding some generators entirely.
First, let's take a closer look at how the scaffold generator works.
$ bin/rails generate scaffold User name:string
invoke active_record
create db/migrate/20230518000000_create_users.rb
create app/models/user.rb
invoke test_unit
create test/models/user_test.rb
create test/fixtures/users.yml
invoke resource_route
route resources :users
invoke scaffold_controller
create app/controllers/users_controller.rb
invoke erb
create app/views/users
create app/views/users/index.html.erb
create app/views/users/edit.html.erb
create app/views/users/show.html.erb
create app/views/users/new.html.erb
create app/views/users/_form.html.erb
create app/views/users/_user.html.erb
invoke resource_route
invoke test_unit
create test/controllers/users_controller_test.rb
create test/system/users_test.rb
invoke helper
create app/helpers/users_helper.rb
invoke test_unit
invoke jbuilder
create app/views/users/index.json.jbuilder
create app/views/users/show.json.jbuilder
From the output, we can see that the scaffold generator invokes other
generators, such as the scaffold_controller
generator. And some of those
generators invoke other generators too. In particular, the scaffold_controller
generator invokes several other generators, including the helper
generator.
Let's override the built-in helper
generator with a new generator. We'll name
the generator my_helper
:
$ bin/rails generate generator rails/my_helper
create lib/generators/rails/my_helper
create lib/generators/rails/my_helper/my_helper_generator.rb
create lib/generators/rails/my_helper/USAGE
create lib/generators/rails/my_helper/templates
invoke test_unit
create test/lib/generators/rails/my_helper_generator_test.rb
And in lib/generators/rails/my_helper/my_helper_generator.rb
we'll define
the generator as:
class Rails::MyHelperGenerator < Rails::Generators::NamedBase
def create_helper_file
create_file "app/helpers/#{file_name}_helper.rb", <<~RUBY
module #{class_name}Helper
# I'm helping!
end
RUBY
end
end
Finally, we need to tell Rails to use the my_helper
generator instead of the
built-in helper
generator. For that we use config.generators
. In
config/application.rb
, let's add:
config.generators do |g|
g.helper :my_helper
end
Now if we run the scaffold generator again, we see the my_helper
generator in
action:
$ bin/rails generate scaffold Article body:text
...
invoke scaffold_controller
...
invoke my_helper
create app/helpers/articles_helper.rb
...
NOTE: You may notice that the output for the built-in helper
generator
includes "invoke test_unit", whereas the output for my_helper
does not.
Although the helper
generator does not generate tests by default, it does
provide a hook to do so using hook_for
. We can do the same by including
hook_for :test_framework, as: :helper
in the MyHelperGenerator
class. See
the hook_for
documentation for more information.
Generators Fallbacks
Another way to override specific generators is by using fallbacks. A fallback allows a generator namespace to delegate to another generator namespace.
For example, let's say we want to override the test_unit:model
generator with
our own my_test_unit:model
generator, but we don't want to replace all of the
other test_unit:*
generators such as test_unit:controller
.
First, we create the my_test_unit:model
generator in
lib/generators/my_test_unit/model/model_generator.rb
:
module MyTestUnit
class ModelGenerator < Rails::Generators::NamedBase
source_root File. ("templates", __dir__)
def do_different_stuff
say "Doing different stuff..."
end
end
end
Next, we use config.generators
to configure the test_framework
generator as
my_test_unit
, but we also configure a fallback such that any missing
my_test_unit:*
generators resolve to test_unit:*
:
config.generators do |g|
g.test_framework :my_test_unit, fixture: false
g.fallbacks[:my_test_unit] = :test_unit
end
Now when we run the scaffold generator, we see that my_test_unit
has replaced
test_unit
, but only the model tests have been affected:
$ bin/rails generate scaffold Comment body:text
invoke active_record
create db/migrate/20230518000000_create_comments.rb
create app/models/comment.rb
invoke my_test_unit
Doing different stuff...
invoke resource_route
route resources :comments
invoke scaffold_controller
create app/controllers/comments_controller.rb
invoke erb
create app/views/comments
create app/views/comments/index.html.erb
create app/views/comments/edit.html.erb
create app/views/comments/show.html.erb
create app/views/comments/new.html.erb
create app/views/comments/_form.html.erb
create app/views/comments/_comment.html.erb
invoke resource_route
invoke my_test_unit
create test/controllers/comments_controller_test.rb
create test/system/comments_test.rb
invoke helper
create app/helpers/comments_helper.rb
invoke my_test_unit
invoke jbuilder
create app/views/comments/index.json.jbuilder
create app/views/comments/show.json.jbuilder
Application Templates
Application templates are a special kind of generator. They can use all of the generator helper methods, but are written as a Ruby script instead of a Ruby class. Here is an example:
# template.rb
if yes?("Would you like to install Devise?")
gem "devise"
devise_model = ask("What would you like the user model to be called?", default: "User")
end
after_bundle do
if devise_model
generate "devise:install"
generate "devise", devise_model
rails_command "db:migrate"
end
git add: ".", commit: %(-m 'Initial commit')
end
First, the template asks the user whether they would like to install Devise.
If the user replies "yes" (or "y"), the template adds Devise to the Gemfile
asks the user for the name of the Devise user model (defaulting to User
).
Later, after bundle install
has been run, the template will run the Devise
generators and rails db:migrate
if a Devise model was specified. Finally, the
template will git add
and git commit
the entire app directory.
We can run our template when generating a new Rails application by passing the
-m
option to the rails new
command:
$ rails new my_cool_app -m path/to/template.rb
Alternatively, we can run our template inside an existing application with
bin/rails app:template
:
$ bin/rails app:template LOCATION=path/to/template.rb
Templates also don't need to be stored locally — you can specify a URL instead of a path:
$ rails new my_cool_app -m http://example.com/template.rb
$ bin/rails app:template LOCATION=http://example.com/template.rb
Generator Helper Methods
Thor provides many generator helper methods via Thor::Actions
, such as:
In addition to those, Rails also provides many helper methods via
::Rails::Generators::Actions
, such as:


| Ricacryl 3500 General Information
-
| Synonyms: |
Acrylated polybutadiene |
| CAS Registry No.: |
168612-08-6 |
| Chemical Category: |
Polymeric plasticizers |
| Butadiene Content, molar %: |
20-35 |
Usage and Performance Characteristics
-
| Manufacturer: |
SARTOMER Company |
| Outstanding Properties: |
Improved hardness, modulus, oil swell resistance |
| Used for Polymeric Materials: |
NBR, HNBR, SBS, SIS |
Physical Properties
-
| Specific Gravity: |
<1.0 (20°C) |
| Aggregate State at 25°C: |
Liquid, viscous |
Optical Properties
Hazard-Related Data
-
| Eye Irritation (human): |
Slight |
| Flash Point Temperature, °C: |
>121 |
Plasticizers Database (2nd Electronic Edition) Copyright © 2004 by ChemTec Publishing |


Finish Interview Questions - Due 10/15
Work on Web Dev or Game Dev Project
By 10/15, have a tutorial or an idea how to start your Game Dev project
Morning Trello
Afternoon Trello
Friday Check-In
Repl.it
Old P2T Student Site


Reinforced Concrete
In the first part we discussed the materials that form
r.c., i.e., concrete and steel and the problem of
durability of reinforced concrete.
In the second part we discussed the verification and
design procedures for columns subjected to axial forces
and beams subjected to bending moments.
The third part was intended for shear forces and the
combination of bending and axial forces, but due to time
restraints we couldn't discuss these topics. The
relevant material is however present in the slides.
Downloads
Material available for this class:


Although I've been in the medical field for several years, I came to the information late that Tylenol (acetominophen) destroys the liver. I've never been able to experience pleasure and when I met Butalbital (originally prescribed for migraines) I fell in love with it. Even when I learned of the damage it caused I didn't slow down a bit, continued my daily use - I am truly addicted to the stuff. I enjoyed myself enormously for the first two years, but over the past year the high has been about one-tenth of what I used to feel... yet I continue to use. I've been able to get as much as I need on the web and have been 'living to use and using to live' as they say in Narcotics Anonymous (which I don't attend).
My liver hurts, I'm fatigued every day, I experience confusion at home and work, lost a lot of weight because I can't eat much - all the classic symptoms. When I look in the mirror, I think, 'One year? Two?' I'm writing this first of all to let people know about the myth that Tylenol is harmless, and secondly to encourage folks to GET HELP with addiction, and EARLY. No one should have to suffer my fate.
If you have an addiction with a similar drug and you're fortunate enough to catch it early, I recommend the following:
-Get yourself into recovery.
-Daily,take glutathione, milk thistle, N-acetylcystine (300-600mg) and at least 1 gram of vitamin C with each dose. These supplements protect the liver to some degree. All of these may be found at any health food store.
-If you smoke, quit.
-Alcohol accelerates the damage - NEVER take the two together.
-While you're at the health food store buy a liver detox formula. There are several good ones.
These precautions are recommended for even the casual user of Tylenol, say, 15 pills a week.
Good luck to you.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


MUMFORD A film review by Mark R. Leeper
Capsule: Pleasant and amiable is Lawrence Kasdan's style in this story of two Mumfords. One is a small town of that name; one is the name of the town's successful but unorthodox psychologist. This film does a once-over lightly on the town and on the nature of psychological help. Rating: 6 (0 to 10), high +1 (-4 to +4)
Films like PLEASANTVILLE have questioned time-honored American small town values. But traditionally American films have given us idealized representations of American small town life. Generally in American films small towns are where good people live and work. Films like SHADOW OF A DOUBT have intentionally shown small town life as really being the American ideal. Hitchcock intentionally played up the theme in SHADOW OF A DOUBT to show wartime audiences that small town life was what Americans were fighting for. Films like DOC HOLLYWOOD press the idea that if you get to know the American small town you are bound to like it and the people in it. MUMFORD is a similar film extolling the virtues of the small town life. DOC HOLLYWOOD was about the outsider trying to leave the small town but falling in love with the town instead. MUMFORD is a variation in which the outsider already loves the town and really wants to stay in the small town in spite of forces to make him leave.
MUMFORD opens with a sequence that looks like it was from some luscious, steamy 1940s James M. Cain film adaptation. Are we in the right movie? Yes. We are in the fantasy life of the Mumford town pharmacist. The strong, handsome young man of the fantasy turns out to be plump, balding and nearly blind in real life. He is on the couch talking to bland, handsome psychologist Dr. Mumford (played by Lorn Dean). Doc Mumford is disarmingly pleasant and affable.
Through most of the first third of the film we get to know the unorthodox doctor and about six of his cases. We watch how he goes about treating them. Among them are Althea Brockett (Mary McDonnell) who lives in luxury but is becoming a compulsive buyer. Young Skip Skipperton (Jason Lee) skateboards through traffic and runs the most successful modem company in the world. Emotionally he is still a child just looking for a buddy with whom to talk and play catch. Then there is Sofie Crisp (Hope Davis) an attractive divorcee who is living with her parents and developing Chronic Fatigue Syndrome. Mumford's treatment in each case seems to be in equal parts pleasant conversation and intuitive pop psychology. Sooner or later he seems to get each of his patients up to a nice place in the hills he knows of that has an impressive overlook of the town. Kasdan's approach to getting to the story is as unhurried and even as pleasant as life in the American small town of the title.
Ernest Delbanco (David Paymer) and Phyllis Sheeler (Jane Adams), a psychiatrist and a psychologist, do not mind that the newcomer is more successful than they are, but have some reservations about his style. But we too start to notice something a little off in the psychologist's style. In shooting the breeze with his patients Mumford may indiscreetly talk about his other cases. Often his comments to his patients are a little more direct and frank than we might expect. He bones up on the Internet for some surprisingly basic psychological information. He also takes an immediate dislike to town lawyer Lionel Dillard (Martin Short). It may well be that Doc Mumford may have some problems of his own, psychological and otherwise.
In telling his story, Kasdan uses some unorthodox approaches. The primary story line is delayed well into the film and then only half- heartedly visited now and again. What drives the film is not the pace of the plot. Instead, one wants to see each of the cases Dr. Mumford is treating and how a simple intuitive approach works to solve problems. Nor is the cast a particularly high-powered one. Loren Dean, who played the title role in BILLY BATHGATE and was an investigator in GATTACA, is likeable and inoffensive, but he borders on being insipid and never generates much dramatic tension. Alfre Woodard is under-used as a friend and neighbor of Doc Mumford. Woodard previously shared with Mary McDonnell the films BLUE CHIPS, PASSION FISH, and GRAND CANYON. Martin Short is slightly abrasive as the town lawyer. Jason Lee as town entrepreneur may be familiar as the clueless Banky from CHASING AMY.
This will not be one of Kasdan's more memorable scripts, but it is certainly a pleasant way to spend an hour or two. I rate it a 6 on the 0 to 10 scale and a high +1 on the -4 to +4 scale.
Mark R. Leeper<EMAIL_ADDRESS>Copyright 1999 Mark R. Leeper
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


I’ve switched between Emacs and Vim a few times over the last 15-odd years, before finally (?) settling on Vim. I’ve come to the realization, as many have before me, that for all the elegant awesomeness of Emacs Lisp,
Vim is a better text editor, Emacs is good for everything else
Perhaps one day if Guile or Emacsey deliver their full promise, I’ll happily live inside a REPL forever.
Until then, it’s just much, much, much faster to do the equivalent text operations in Vim than in Emacs (yes, I mapped CapsLock to Control; yes, I replaced M-
by C-xC-m-
).
There were still a few Emacs-only things that haunted me (I outgrew the need to have a web browser or an IRC client in my editor environment, I now use Google Chrome for the former and BitchX/Irssi/Xchat for the latter. I also don’t mind reading my email in the browser), such as org-mode
. Fortunately for me, I don’t most of its features, and keeping a timestamped diary is something I was able to fix for myself with some shell scripting and vim shortcuts.
Recently, I decided to learn Common Lisp with as much of a newbie attitude as possible. And here I ran into a veritable wall of convention. Of course, didn’t I know, that Emacs + Slime is the one true way ?
I dithered, was flustered and nearly reconsidered.
And then I discovered the awesomeness I was looking for, a replacement for Slime in Vim, Slimv!
Here is a tutorial to get you started, but basically all I had to do was to install the plugin and the rest pretty much just worked.
There are quite a lot of nifty tricks here, but my most frequently used commands are:
,L
: that’s a comma followed by L): compile current file,D
: compile current form,s
: lookup a short summary description of the keyword under the cursor,c
: Open Slimv session (splits the window horizontally)I was also new to paredit mode
, which is pretty much necessary for making changes to heavily nested parantheses, and it has useful commands there too:
,W
: wrap an extra set of parentheses around the current form,S
: it’s opposite; remove one set of parentheses from the current form,<
, ,>
: move the parentheses under the cursor one form to the left or right… and much more. So next time someone tells you how Slime
is indispensable and hence Emacs is indispensable, throw Slimv in their face! Kudos to the guy who built it!


Requires that the samples are related (dependent) and normally distributed. You can read more about the test
at Laerd Statistics
or Real Statistics.
Tests the hypotheses:
H0
The means of the samples are equal
H1
The means of the samples are different
Data Entry
No samples:
Sample A:
Sample B:
Sample C:
Sample D:
Significance level α
Upload CSV file:
Post-test:
Correction:
Test Result
Data Summary
Sample
N
Mean
Stdev
A
B
C
D
Result
Significance level α:
P-value:
F-score:
Result:
Post-test
The post-test shows which pairs of samples that have different means (if any).
Check test assumptions
The samples should be normally distributed. If not, consider using the Friedman test instead.
Note that the normality test is not entirely accurate for sample sizes under 20.
Shapiro-Wilk test for normally distributed samples


Beigesoft™ Math code license / лицензия исходных кодов:
BSD 2-Clause License Copyright (c) 2021, Yury Demidenko (Beigesoft™) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.


School of Computer Science and Information Science Guangxi Normal University Guilin, Guangxi, China
Fundamentals of Java Programming Language


--- layout: post title: Dual WAN OpenVPN with EdgeRouter X or RT-AX86U date: '2021-02-27T14:35:00.044-08:00' author: gojimmypi tags: - EdgeRouter - AX86U - OpenVPN - VPN - Networking - uart - TTY - NordVPN - SSH modified_time: '2022-03-18T09:05:11.231-08:00' thumbnail: https://1.bp.blogspot.com/-zEByI_xT4ac/YDqaButJMhI/AAAAAAAADGk/2c-ZTEdSX7U6TOvtlCn79_rU9MsDU255ACLcBGAsYHQ/s72-w248-c-h400/EdgeRouter%2BUART.jpg blogger_id: tag:blogger.com,1999:blog-4109066286647243251.post-4245945991805471848 blogger_orig_url: https://gojimmypi.blogspot.com/2021/02/dual-wan-openvpn-with-edgerouter-x-or.html ---
This a blog about NordVPN (and networking setup in general) for the Ubiquiti EdgeRouter X. If you are interested in this topic, then you may also be interested in my notes on the Pi-Hole ad blocker.
WARNING: Before configuring your router, be sure to read until the end. TL;DR - config does not survive a reboot. This blog is a work in progress.
I have poor internet bandwidth even after load balancing two different providers. One problem I see is that once a connection is established with basic load balancing the connection is "stuck" on one ISP. So when available bandwidth drops to almost nothing, the same connection continues to be used.
I was hoping to perhaps setup a virtual tunnel using the dual WAN connections to an OpenVPN provider. That way the VPN server would aggregate the two channels and only appear to have a single public-facing IP address. Fortunately I had this idea while NordVPN was having a birthday party sale!
Download Filezilla, the EdgeOS OS User Guide, the latest EdgeRouter X Firmware, and of course putty. If things get dire, the Jounin Tftpd64 server works well. (See EdgeRouter - TFTP Recovery)
It is probably best to start with the most recent firmware image. The version used here is v2.0.9-hotfix.1. Other downloads can be found at the EdgeRouter-X download site.
To factory reset the router, there's either a convoluted hardware method holding down the reset button for 10 seconds after port LEDs start lighting up in sequence and until the LED on port 1 lights up again... or:
sudo cp /opt/vyatta/etc/config.boot.default /config/config.boot
reboot
The default address is https://<IP_ADDRESS> user name ubnt
and password ubnt
.
Note that for a freshly factory-reset EdgeRouter, no DHCP is available so a static IP address is needed; the web GUI can be found at http://<IP_ADDRESS>/ on Eth0.
Plug the network cable from the computer into the _left-most port_ when viewed from behind. Don't forget to change your hard-coded IP address, if now the fresh factory default is a new DHCP server for a differenmt network.
If the basic setup was selected, the left-most port is now WAN, so connect to send-from-left. When changing IP address setting on Windows, be sure to Close
the settings Window to ensure changes are applied.
Connect via putty to the serial port. 57600, 8N1:
For a brief time, the UART TTY will allow the bootloader update from something other than flash. This is vastly simpler than the convoluted power / hold-the-reset button method:
{% include code_header.html %}
Please choose the operation:
1: Load system code to SDRAM via TFTP.
2: Load system code then write to Flash via TFTP.
3: Boot system code via Flash (default).
4: Entr boot command line interface.
7: Load Boot Loader code then write to Flash via Serial.
9: Load Boot Loader code then write to Flash via TFTP.
r: Start TFTP recovery.
default: 3
sudo cp /opt/vyatta/etc/config.boot.default /config/config.boot
reboot
ip route
command after a fresh basic config looks like this:
default via <IP_ADDRESS> dev eth0 proto zebra
<IP_ADDRESS>/24 dev eth0 proto kernel scope link src <IP_ADDRESS>
<IP_ADDRESS>/24 dev switch0 proto kernel scope link src <IP_ADDRESS>
configure
set system package repository stretch components 'main contrib non-free'
set system package repository stretch distribution stretch
set system package repository stretch url http://http.us.debian.org/debian
commit
save
exit
# DO NOT RUN UPGRADE, (unless you want to break the EdgeRouter dependencies)
sudo apt-get update
sudo apt-get install nano
#
sudo rm -R /var/lib/apt/lists
sudo rm -R /var/cache/apt/archives
# optional: put back the empty directies as we should have found them
sudo mkdir /var/lib/apt/lists/partial
sudo echo "" | sudo tee /var/cache/apt/archives/lock
sudo mkdir /var/cache/apt/archives/partial
sudo -i
cd /config/
mkdir -p openvpn
chmod 770 openvpn
Copy your nordvpn ovpn (the ca1098 example used here is this file) and nordvpnauth.txt
(service username on line 1, password on line 2) files to the /config/openvpn
with FileZilla. Note that resetting your password on the ndaccount page will NOT close VPN connections. It should log you out of web sites, but I saw my VPN connection stay open after a password change.
log /config/openvpn/vpn.log
cat /config/openvpn/vpn.log
(That's one of the many tips I received from NordVPN support; they are awesome)
sudo chmod 600 /config/openvpn/vpn.log
sudo chmod 600 /config/openvpn/nordvpnauth.txt
# edit for your specific file name:
sudo chmod 600 /config/openvpn/ca1098.nordvpn.com.udp.ovpn
ca1098.nordvpn.com.udp.ovpn
for your own server for best performance, as well as your local desired network addresses) and configure as shown below:
{% include code_header.html %}
configure
# Download Server file recommended by NordVPN from:
#
# https://nordvpn.com/servers/tools/
#
# Edit the next line and for your file name:
set interfaces openvpn vtun0 config-file /config/openvpn/ca1098.nordvpn.com.udp.ovpn
set interfaces openvpn vtun0 description 'OpenVPN VPN tunnel'
commit
# rule 5000 and 5002 are defaults for WAN1/WAN2
# so we will usee 5100 instead of the NoprnVPN tutorial 5000
set service nat rule 5100 description 'OpenVPN Clients'
set service nat rule 5100 log disable
set service nat rule 5100 outbound-interface vtun0
set service nat rule 5100 source address <IP_ADDRESS>/24
set service nat rule 5100 type masquerade
commit
# we'll route all protocols for all addresses on vtun0
set protocols static table 1 interface-route <IP_ADDRESS>/0 next-hop-interface vtun0
# each network segment (e.g. eth2, eth3, eth4, switch0) will need rules
set firewall modify SOURCE_ROUTE rule 10 description 'traffic from <IP_ADDRESS>/24 to vtun0'
set firewall modify SOURCE_ROUTE rule 10 source address <IP_ADDRESS>/24
set firewall modify SOURCE_ROUTE rule 10 modify table 1
# here we assume Eth0 and Eth1 are WAN ports connected to ISP
# physical ports connected to ISP are what the tunnel travels on
# the remainder of the ports, eth2, eth3, eth4 and switch zero are all routed to vtun0
set interfaces switch switch0 firewall in modify SOURCE_ROUTE
set interfaces ethernet eth2 firewall in modify SOURCE_ROUTE
set interfaces ethernet eth3 firewall in modify SOURCE_ROUTE
set interfaces ethernet eth4 firewall in modify SOURCE_ROUTE
# reminder that if there's a local DNS such as a Pi-Hole on a different network segment,
# it will NOT be reachable.
commit
save
That's it! Right? Well sorta. Um, actually no. Visit https://nord-help.com/ and confirm the top of the page shows the text "Protected":
curl -v --silent https://www.ipchicken.com 2>&1 | grep -A 1 "Address:" \
| sed -e 's/<[^>]*>//g'
cli-shell-api --show-commands --show-cfg1 /dev/null --show-cfg2 /config/config.boot showConfig
#!/bin/vbash
# Restart OPENVPN Tunnel
VTUN="vtun0"
if [ -f "/var/run/openvpn-$VTUN.pid" ]; then
sudo kill $(cat "/var/run/openvpn-$VTUN.pid")
echo $(cat "/var/run/openvpn-$VTUN.pid")
fi
sudo /usr/sbin/openvpn --daemon --verb 3 --writepid /var/run/openvpn-$VTUN.pid \
--status /var/run/openvpn/status/$VTUN.status 30 \
--config /config/user-data/openvpn/nordvpn.ovpn \
--dev-type tun --dev $VTUN
ls -l /var/run/openvpn*.pid
# To reset the VPN connection
sudo systemctl stop openvpn.service
sudo systemctl start openvpn.service
sudo systemctl status openvpn.service
ip address
command can be used to see what IP addresses are assigned, and which ports are active on the EdgeRouter. Using the ip route
command, you should see something like this. Here 192.168.2.x is the WAN network; 192.168.170.x is the EdgeRouter:
{% include code_header.html %}
<IP_ADDRESS>/24 dev vtun0 proto kernel scope link
default via <IP_ADDRESS> dev eth0 proto zebra
<IP_ADDRESS>/24 dev vtun0 proto kernel scope link src <IP_ADDRESS>
<IP_ADDRESS>/24 dev eth0 proto kernel scope link src <IP_ADDRESS>
<IP_ADDRESS>/24 dev switch0 proto kernel scope link src <IP_ADDRESS>
Active: inactive (dead)
here:
{% include code_header.html %}
ubnt@EdgeRouter-X-5-Port:~$ sudo systemctl status openvpn.service
* openvpn.service - OpenVPN service
Loaded: loaded (/lib/systemd/system/openvpn.service; disabled; vendor preset:
Active: inactive (dead)
It seems that after a period of inactivity, perhaps the connection is closed, but once more internet activity is seen, the conection is re=established:
{% include code_header.html %}
ubnt@EdgeRouter-X-5-Port:~$ sudo systemctl status openvpn.service
* openvpn.service - OpenVPN service
Loaded: loaded (/lib/systemd/system/openvpn.service; disabled; vendor preset:
Active: active (exited) since Sun 2021-02-28 20:06:13 UTC; 32s ago
Process: 4709 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 4709 (code=exited, status=0/SUCCESS)
configure
delete interfaces ethernet eth3
set interfaces ethernet eth3 address <IP_ADDRESS>/24
commit ; save
Eth3
(the second port from the right, next to the PoE one). Assign a manual IP address such as <IP_ADDRESS> to a PC with manual DNS, and now we are back to having an operational port! This also survives a reboot! Visit your local https://<IP_ADDRESS> to see the EdgeOS web GUI.
configure
set service dhcp-server disabled false
set service dhcp-server shared-network-name LAN1 authoritative enable
set service dhcp-server shared-network-name LAN1 subnet <IP_ADDRESS>/24 default-router <IP_ADDRESS>
set service dhcp-server shared-network-name LAN1 subnet <IP_ADDRESS>/24 dns-server <IP_ADDRESS>
set service dhcp-server shared-network-name LAN1 subnet <IP_ADDRESS>/24 lease 86400
set service dhcp-server shared-network-name LAN1 subnet <IP_ADDRESS>/24 start <IP_ADDRESS> stop <IP_ADDRESS>
commit ; save
log /config/openvpn/vpn.log
The RT-AX86U:
With some of the problems I saw with the EdgeRouter, I thought I'd try a different router. There's an online Web GUI simulator to test drive some of the Asus features in the firmware UI without actually having your own router.
I tried ASUS AX5700 WiFi 6 Gaming Router (RT-AX86U) as it supports dual WAN, however neither of my ISP devices is LACP-IEEE 802.3ad capable, which is required for ASUS WAN bonded aggregation. Yes, I tried it anyhow, and the performance was unusably poor.
Additionally, despite having a UI to setup OpenVPN and appearance of it being successfully connected to VPN server, it was not actually being used:
I tried contacting Asus support. My first email was bounced back "mailbox full".
Asus support via a web form was not very helpful. In fact, their response claimed to be "confidential and not for publication". I did not agree to a non-disclosure agreement with them, nor does their web page indicate the support response is confidential:
The folks at NordVPN are considerably more helpful and cooperative. They did confirm that sometimes traffic is not routed though OpenVPN connection, even though it is up! This is completely unacceptable. I bought the RT-AX86U specifically as it was on the recommended list of NordVPN routers. I plan to return the router. Not worth $250 to me.
Unlike Asus, NordVPN has no such "confidentiality" in their tech support. So I will share this informative message from their helpful support staff:
If you want a router that is an out-of-the-box solution for NordVPN provided security and anonymity, you should head over to our partners at https://nordvpn.com/flashrouters/ . They will provide you with a preconfigured router that will deliver top-notch security and performance.
You can also buy a router and configure it yourself. We usually recommend these routers for simple home usage and if you do not require much performance (up to 10-40Mbps respectively): Asus RT-N18U, Asus RT-AC66U, Asus RT-AC68U, Asus RT-AC87U, Asus RT-AC3200.
Please note, that while you can get many different routers from other manufacturers, we strongly recommend getting an Asus router, as it has a built-in OpenVPN client on it default firmware and requires minimal effort to set up. Most other routers require firmware flashing, which might be a troublesome procedure and is not supported on all platforms.
You can also acquire any router that supports custom firmware:
DD-WRT: https://www.dd-wrt.com/wiki/index.php/Supported_Devices
Tomato: http://tomato.groov.pl/?page_id=69
Padavan: https://wikidevi.com/wiki/List_of_Padavan_firmware_supported_devices
OpenWRT: https://wiki.openwrt.org/toh/start
Merlin: https://github.com/RMerl/asuswrt-merlin/wiki/Supported-Devices
If you want a router that provides the best performance possible (in best case scenario up to 60Mbps), please look at these ones:
Asus: RT-AC66U B1, RT-AC68U, RT-AC86U, RT-AX3000, RT-AX82U, RT-AX86U, RT-AX88U, RT-AC5300
D-Link (Would need to be flashed with DD-WRT): DIR-885L, DIR-895L
Linksys (Would need to be flashed with DD-WRT): EA8500, WRT1900ACS, WRT3200ACM
Netgear (Would need to be flashed with DD-WRT): R7500, R7800, R8500, R9000
See also:
EdgeRouter and Ubiquiti setup with NordVPN
Install OVPN on an Edgerouter (EdgeOS)
Script to periodically reset an OpenVPN tunnel for NordVPN to the fastest server on Ubiquiti EdgeRouters
EdgeRouter - WAN Load-Balancing
EdgeRouter - Interface Bonding
How to check the version of OpenVPN on an AsusWRT-running router
How to Set Up VPN on Asus Router
[WAN] How to enable WAN Aggregation on ASUS Router?
[WAN] Dual WAN introduction and setup
Force Reconnect OpenVPN client connections (commandline) on EdgeOS


Testing Screenreader Detection Capabilities
This demo uses Windows’ JavaScript APIs and will not work without JavaScript support.


I do NOT store any of your personal data.
All data created while using Watch+ app is stored locally on your device.


Homepage
Categories
Fintech
Business
Blockchain
Science
Marketing
Education
Ecology
Networking
Log in
Homepage
Categories
Fintech
Business
Blockchain
Science
Marketing
Education
Ecology
Networking
Log in
Upload
Reviews
Upload video
Name
Email
Address
Select
Fintech
Blockchain
Business
Science
Marketing
Education
Ecology
Networking
Submit
Thank you! Your message has been sent.
Unable to send your message. Please fix errors then try again.
Add photo
Some reviews to your videos blah blah
blah blah nice video
Manage reviews


--- layout: page description: "撒。克。遜。故。事。集" ---
Posted by {% if post.author %}{{ post.author }}{% else %}{{ site.title }}{% endif %} on {{ post.date | date: "%B %-d, %Y" }}


Other versions and case studies
This visualization shows one week of intense bird migration in April 2013 recorded by 5 weather radars (shown in blue) and interpolated over the entire area. This proof of concept is the result of a 5 day hackathon in June 2014 by the LifeWatch INBO team, hosted at the University of Amsterdam and in collaboration with the KNMI. The long-term goal of the European Network for the Radar Surveillance of Animal Movement (ENRAM) is to retrieve this kind of data at a European scale. Documentation and source code are available on GitHub.
Comments


Using a saved pattern
If you've saved or imported a pattern, you can easily retrieve it and set it on the current tool.
Open the saved patterns drawer if it is not already open by clicking on the pattern editor's Saved Patterns button.
Double-click the desired pattern in the drawer.
or
Select the desired pattern in the drawer.
Click the Load toolbar button in the pattern editor.
The selected pattern will be set as the current tool's pattern, ready to be used in your image.
See also
Setting a tool's pattern
Saving a pattern
Importing a pattern
Patterns