Package golp gives Go bindings for LPSolve, a Mixed Integer Linear Programming (MILP) solver. For usage examples, see https://github.com/draffensperger/golp#examples. Not all LPSolve functions have bindings. Feel free to open an issue or contact me if you would like more added. One difference from the LPSolve C library, is that the golp columns are always zero-based. The Go code of golp is MIT licensed, but LPSolve itself is licensed under the LGPL. This roughly means that you can include golp in a closed-source project as long as you do not modify LPSolve itself and you use dynamic linking to access LPSolve (and provide a way for someone to link your program to a different version of LPSolve). For the legal details: http://lpsolve.sourceforge.net/5.0/LGPL.htm
Package dsp provides processors that can be chained together to build digital signal processing systems. Digital signals are represented as sequence of numbers where each number is associated with a disctrete time. Discrete time is represented as a squence of integers that can correspond to physycal time sampled at fixed time intervals. Sequences are divided into equally-spaced frames such that each frame corresponds to a fixed number of samples. Processors can return values for a frame index or a global value for the entire sequence. To compute frame-level values, the processor must implement the Framer interface which defines the "Get(int) (Value, error)" method. To return a global value the processor must implement the OneValuer interface which defines the "Get() (Value, error.)" method. The application is a graph of processors where the input of a processor is read from the output of another processor. Processors exchange values of interface type Value. To perform operations, the Processors must agree on the underlying types of Value. Values are lazily computed when they are requested by a consumer. That is, when a value is requested for one of the processor's outputs, the computation chain propagates all the way to the source. To achieve high performance, computed frames are cached by the processors. If the cache capacity is big enough, values are only computed once. (For example, to do a moving average, the same input frames may be requested multiple times.) For a comrehensive example see examples/speech2/main.go. Convention: Input values should be treated as read-only because they may be shared with other processors. CONTACT: Leo Neumeyer leo@akualab.com
package waddell implements a low-latency signaling server that allows peers to exchange small messages (up to around 64kB) over TCP. It is named after William B. Waddell, one of the founders of the Pony Express. Peers are identified by randomly assigned peer ids (type 4 UUIDs), which are used to address messages to the peers. For the scheme to work, peers must have some out-of-band mechanism by which they can exchange peer ids. Note that as soon as one peer contacts another via waddell, the 2nd peer will have the 1st peer's address and be able to reply using it. Peers can obtain new ids simply by reconnecting to waddell, and depending on security requirements it may be a good idea to do so periodically. Here is an example exchange between two peers: Message structure on the wire (bits):
Package semver provides Semantic Versioning for Go packages. For more information about semver please see: http://semver.org/ This package allows for implementing semantic versioning of Go packages on a single GitHub user or organization under a custom domain, for example: Would contact the Go HTTP server (using this package) running at example.com which would redirect the request to clone the Git repository located at: Usage is pretty simple, first create a Handler with your configuration: Then register a root ("/") HTTP handler: Inside of the root HTTP handler give the semver HTTP handler a chance to handle the request if it needs to: The package exposes a matcher only for GitHub. But others can be implemented outside the package as well for e.g. Google Code or privately hosted Git repositories.