Tools for exploring OpenVG

Overview

Testbed for exploring OpenVG on the Raspberry Pi.

rotext

First program

Here is the graphics equivalent of "hello, world"

// first OpenVG program
// Anthony Starks ([email protected])
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "VG/openvg.h"
#include "VG/vgu.h"
#include "fontinfo.h"
#include "shapes.h"

int main() {
	int width, height;
	char s[3];

	init(&width, &height);					// Graphics initialization

	Start(width, height);					// Start the picture
	Background(0, 0, 0);					// Black background
	Fill(44, 77, 232, 1);					// Big blue marble
	Circle(width / 2, 0, width);			// The "world"
	Fill(255, 255, 255, 1);					// White text
	TextMid(width / 2, height / 2, "hello, world", SerifTypeface, width / 10);	// Greetings 
	End();						   			// End the picture

	fgets(s, 2, stdin);				   		// look at the pic, end with [RETURN]
	finish();					            // Graphics cleanup
	exit(0);
}

hellovg

API

OpenVG refcard

Coordinates are VGfloat values, with the origin at the lower left, with x increasing to the right, and y increasing up. OpenVG specifies colors as a VGfloat array containing red, green, blue, alpha values ranging from 0.0 to 1.0, but typically colors are specified as RGBA (0-255 for RGB, A from 0.0 to 1.0)

Window (canvas) functions

void WindowClear() 

WindowClear clears the window to previously set background colour

void AreaClear(unsigned int x, unsigned int y, unsigned int w, unsigned int h)

AreaClear clears a given rectangle in window coordinates

void WindowOpacity(unsigned int a)

WindowOpacity sets the window opacity

void WindowPosition(int x, int y)

WindowPosition moves the window to given position

Setup and shutdown

void init(int *w, int *h)

Initialize the graphics: width and height of the canvas are returned. This should begin every program.

void initWindowSize(int x, int y, unsigned int w, unsigned int h)

Initialize with specific dimensions

void finish() 

Shutdown the graphics. This should end every program.

void Start(int width, int height)

Begin the picture, clear the screen with a default white, set the stroke and fill to black.

void End()

End the picture, rendering to the screen.

void SaveEnd(char *filename)

End the picture, rendering to the screen, save the raster to the named file as 4-byte RGBA words, with a stride of width*4 bytes. The program raw2png converts the "raw" raster to png.

void saveterm(), restoreterm(), rawterm()

Terminal settings, save current settings, restore settings, put the terminal in raw mode.

Attributes

void setfill(float color[4])

Set the fill color

void Background(unsigned int r, unsigned int g, unsigned int b)

Fill the screen with the background color defined from RGB values.

void BackgroundRGB(unsigned int r, unsigned int g, unsigned int b, VGfloat a)

clears the screen to a background color with alpha

void StrokeWidth(float width)

Set the stroke width.

void RGBA(unsigned int r, unsigned int g, unsigned int b, VGfloat a, VGfloat color[4])

fill a color vector from RGBA values.

void RGB(unsigned int r, unsigned int g, unsigned int b, VGfloat color[4])

fill a color vector from RGB values.

void Stroke(unsigned int r, unsigned int g, unsigned int b, VGfloat a)

Set the Stroke color using RGBA values.

void Fill(unsigned int r, unsigned int g, unsigned int b, VGfloat a)

Set the Fill color using RGBA values.

void FillLinearGradient(VGfloat x1, VGfloat y1, VGfloat x2, VGfloat y2, VGfloat *stops, int n)

Set the fill to a linear gradient bounded by (x1, y1) and (x2, y2). using offsets and colors specified in n number of stops

void FillRadialGradient(VGfloat cx, VGfloat cy, VGfloat fx VGfloat fy, VGfloat r, VGfloat *stops, int n)

Set the fill to a radial gradient centered at (cx, cy) with radius r, and focal point at (fx, ry), using offsets and colors specified in n number of stops

Shapes

void Line(VGfloat x1, VGfloat y1, VGfloat x2, VGfloat y2)

Draw a line between (x1, y1) and (x2, y2).

void Rect(VGfloat x, VGfloat y, VGfloat w, VGfloat h)

Draw a rectangle with its origin (lower left) at (x,y), and size is (width,height).

void RectOutline(VGfloat x, VGfloat y, VGfloat w, VGfloat h)

Outlined version

void Roundrect(VGfloat x, VGfloat y, VGfloat w, VGfloat h, VGfloat rw, VGfloat rh)

Draw a rounded rectangle with its origin (lower left) at (x,y), and size is (width,height).
The width and height of the corners are specified with (rw,rh).

void RoundrectOutline(VGfloat x, VGfloat y, VGfloat w, VGfloat h, VGfloat rw, VGfloat rh)

Outlined version

void Polygon(VGfloat *x, VGfloat *y, VGint n)

Draw a polygon using the coordinates in arrays pointed to by x and y. The number of coordinates is n.

void Polyline(VGfloat *x, VGfloat *y, VGint n)

Draw a polyline using the coordinates in arrays pointed to by x and y. The number of coordinates is n.

void Circle(VGfloat x, VGfloat y, VGfloat d)

Draw a circle centered at (x,y) with diameter d.

void CircleOutline(VGfloat x, VGfloat y, VGfloat r)

Outlined version

void Ellipse(VGfloat x, VGfloat y, VGfloat w, VGfloat h)

Draw an ellipse centered at (x,y) with radii (w, h).

void EllipseOutline(VGfloat x, VGfloat y, VGfloat w, VGfloat h)

Outlined version

void Qbezier(VGfloat sx, VGfloat sy, VGfloat cx, VGfloat cy, VGfloat ex, VGfloat ey)

Draw a quadratic bezier curve beginning at (sx, sy), using control points at (cx, cy), ending at (ex, ey).

void QbezierOutline(VGfloat sx, VGfloat sy, VGfloat cx, VGfloat cy, VGfloat ex, VGfloat ey)

Outlined version

void Cbezier(VGfloat sx, VGfloat sy, VGfloat cx, VGfloat cy, VGfloat px, VGfloat py, VGfloat ex, VGfloat ey)

Draw a cubic bezier curve beginning at (sx, sy), using control points at (cx, cy) and (px, py), ending at (ex, ey).

void CbezierOutline(VGfloat sx, VGfloat sy, VGfloat cx, VGfloat cy, VGfloat px, VGfloat py, VGfloat ex, VGfloat ey) 

Outlined version

void Arc(VGfloat x, VGfloat y, VGfloat w, VGfloat h, VGfloat sa, VGfloat aext)

Draw an elliptical arc centered at (x, y), with width and height at (w, h). Start angle (degrees) is sa, angle extent is aext.

void ArcOutline(VGfloat x, VGfloat y, VGfloat w, VGfloat h, VGfloat sa, VGfloat aext)

Outlined version

Text and Images

void Text(VGfloat x, VGfloat y, char* s, Fontinfo f, int pointsize)

Draw a the text srtring (s) at location (x,y), using pointsize.

void TextMid(VGfloat x, VGfloat y, char* s, Fontinfo f, int pointsize)

Draw a the text srtring (s) at centered at location (x,y), using pointsize.

void TextEnd(VGfloat x, VGfloat y, char* s, Fontinfo f, int pointsize)

Draw a the text srtring (s) at with its lend aligned to location (x,y), using pointsize

VGfloat TextWidth(char *s, Fontinfo f, int pointsize)

Return the width of text

VGfloat TextHeight(Fontinfo f, int pointsize)

Return a font's height

TextDepth(Fontinfo f, int pointsize)

Return a font's distance beyond the baseline.

void Image(VGfloat x, VGfloat y, int w, int h, char * filename)

place a JPEG image with dimensions (w,h) at (x,y).

Transformations

void Translate(VGfloat x, VGfloat y)

Translate the coordinate system to (x,y).

void Rotate(VGfloat r)

Rotate the coordinate system around angle r (degrees).

void Scale(VGfloat x, VGfloat y)

Scale by x,y.

void Shear(VGfloat x, VGfloat y)

Shear by the angles x,y.

Clipping

void ClipRect(VGint x, VGint y, VGint w, VGint h)

Limit drawing the drawing area to the specified rectangle, end with ClipEnd()

void ClipEnd()

Ends clipping area

Using fonts

Also included is the font2openvg program, which turns font information into C source that you can embed in your program. The Makefile makes font code from files found in /usr/share/fonts/truetype/ttf-dejavu/. If you want to use other fonts, adjust the Makefile accordingly, or generate the font code on your own once the font2openvg program is built.

font2openvg takes three arguments: the TrueType font file, the output file to be included and the prefix for identifiers. For example to use the DejaVu Sans font:

./font2openvg /usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf DejaVuSans.inc DejaVuSans

and include the generated code in your program:

#include "DejaVuSans.inc"
Fontinfo DejaFont

The loadfont function creates OpenVG paths from the font data:

loadfont(DejaVuSans_glyphPoints, 
        DejaVuSans_glyphPointIndices, 
    	DejaVuSans_glyphInstructions,                
    	DejaVuSans_glyphInstructionIndices, 
        DejaVuSans_glyphInstructionCounts, 
        DejaVuSans_glyphAdvances,
        DejaVuSans_characterMap, 
    	DejaVuSans_glyphCount);

The unloadfont function releases the path information:

unloadfont(DejaFont.Glyphs, DejaFont.Count);

Note that the location of the font files may differ. (The current location for Jessie is /usr/share/fonts/truetype/ttf-dejavu) Use the FONTLIB makefile variable to adjust this location.

Build and run

Note that you will need at least 64 Mbytes of GPU RAM:. You will also need the DejaVu fonts, and the jpeg and freetype libraries. The indent tool is also useful for code formatting. Install them via:

[email protected] ~ $ sudo apt-get install libjpeg8-dev indent libfreetype6-dev ttf-dejavu-core

Next, build the library and test:

[email protected] ~ $ git clone git://github.com/ajstarks/openvg
[email protected] ~ $ cd openvg
[email protected] ~/openvg $ make
g++ -I/usr/include/freetype2 fontutil/font2openvg.cpp -o font2openvg -lfreetype
./font2openvg /usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf DejaVuSans.inc DejaVuSans
224 glyphs written
./font2openvg /usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono.ttf DejaVuSansMono.inc DejaVuSansMono
224 glyphs written
./font2openvg /usr/share/fonts/truetype/ttf-dejavu/DejaVuSerif.ttf DejaVuSerif.inc DejaVuSerif
224 glyphs written
gcc -O2 -Wall -I/opt/vc/include -I/opt/vc/include/interface/vmcs_host/linux -I/opt/vc/include/interface/vcos/pthreads -c libshapes.c
gcc -O2 -Wall -I/opt/vc/include -I/opt/vc/include/interface/vmcs_host/linux -I/opt/vc/include/interface/vcos/pthreads -c oglinit.c
[email protected] ~/openvg/client $ cd client
[email protected] ~/openvg/client $ make test
cc -Wall -I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads -o shapedemo shapedemo.c ../libshapes.o ../oglinit.o -L/opt/vc/lib -lGLESv2 -ljpeg
./shapedemo demo 5

The program "shapedemo" exercises a high-level API built on OpenVG found in libshapes.c.

./shapedemo                      # show a reference card
./shapedemo raspi                # show a self-portrait
./shapedemo image                # show four test images
./shapedemo astro                # the sun and the earth, to scale
./shapedemo text                 # show blocks of text in serif, sans, and mono fonts
./shapedemo rand 10              # show 10 random shapes
./shapedemo rotate 10 a          # rotated and faded "a"
./shapedemo test "hello, world"  # show a test pattern, with "hello, world" at mid-display in sans, serif, and mono.
./shapedemo fontsize             # show a range of font sizes (per <https://speakerdeck.com/u/idangazit/p/better-products-through-typography>)
./shapedemo demo 10              # run through the demo, pausing 10 seconds between each one; contemplate the awesome.

To install the shapes library as a system-wide shared library

[email protected] ~/openvg $ make library
[email protected] ~/openvg $ sudo make install

The openvg shapes library can now be used in C code by including shapes.h and fontinfo.h and linking with libshapes.so:

#include <shapes.h>
#include <fontinfo.h>

[email protected] ~ $ gcc -I/opt/vc/include -I/opt/vc/include/interface/vmcs_host/linux -I/opt/vc/include/interface/vcos/pthreads anysource.c -o anysource -lshapes
[email protected] ~ $ ./anysource

The Raspberry Pi, drawn by the Raspberry Pi

Go wrapper

A Go programming language wrapper for the library is found in openvg.go. Sample clients are in the directory go-client. The API closely follows the C API; here is the "hello, world" program in Go:

The Go API

package main

import (
	"bufio"
	"github.com/ajstarks/openvg"
	"os"
)

func main() {
	width, height := openvg.Init() // OpenGL, etc initialization

	w2 := openvg.VGfloat(width / 2)
	h2 := openvg.VGfloat(height / 2)
	w := openvg.VGfloat(width)

	openvg.Start(width, height)                               // Start the picture
	openvg.BackgroundColor("black")                           // Black background
	openvg.FillRGB(44, 77, 232, 1)                            // Big blue marble
	openvg.Circle(w2, 0, w)                                   // The "world"
	openvg.FillColor("white")                                 // White text
	openvg.TextMid(w2, h2, "hello, world", "serif", width/10) // Greetings 
	openvg.End()                                              // End the picture
	bufio.NewReader(os.Stdin).ReadBytes('\n')                 // Pause until [RETURN]
	openvg.Finish()                                           // Graphics cleanup
}

To build the wrapper: (make sure GOPATH is set)

[email protected] ~/openvg $ go install .
[email protected] ~/openvg $ cd go-client/hellovg
[email protected] ~/openvg/go-client/hellovg $ go build .
[email protected] ~/openvg/go-client/hellovg $ ./hellovg 
Comments
  • after installation: don't work, lib not found

    after installation: don't work, lib not found

    after installation: can't compile, lib not found

    source code: your helloWorld example

    openvg_helloworld.c:6:23: fatal error: VG/openvg.h: no such file or directory
    #include "VG/openvg.h"
    ^
    compilation terminated.
    

    which are the parameters which have to be passed go g++ call additionionally? unfortunately your description is misleading.

    currently my function call by Geany settings is
    for compile:
    g++ -Wall -c "%f" -lpthread  -lrt -lwiringPi
    for make:
    g++ -Wall -o "%e" "%f" -lpthread  -lrt -lwiringPi 
    

    what has to be added for your graph libs?

    opened by shiftleftplusone 35
  • Miscellaneous changes

    Miscellaneous changes

    Hey, just thought I'd push some changes I made upstream, mainly for the Go side of things.

    The main new features are:

    • New function (ImageGo) that takes an image.Image. This allows images already loaded into memory (e.g. from an http POST) to be displayed directly. In the future I'd like to take this a step further and create an openvg.Image object which is stored in Video memory instead of main memory to vastly increase image rendering speed.
    • Translation, rotation, scaling, and shearing now also apply to images and text. I debated creating additional functions to set the scaling values for each of these different resource types or using the VG_MATRIX_MODE as an additional parameter for these functions, but decided it was best to keep the API simple by just setting them all to the same value.

    Additional fixes/changes:

    • Changed all float64 values to float32. As defined in the OpenVG API specification VGfloat is only 32 bits wide, not 64. Using larger float values in Go can lead to an increase in space and processing time used to manipulate the values (especially on something as diminutive as the Pi), but I think it's also important that people using the API realise that they're only getting single-precision float accuracy with OpenVG.
    • Removed width and height from the Image() function call in Go; the fact that the image is at some point stored as a Go image.Image means the bounds of the image are available anyway, and if they were set to anything other than the image size they would just cause weirdness when trying to display the image. The Go API now automatically pulls the image size from images and pushes it through to the C API.

    I hope you'll find these changes useful and helpful. Let me know if there's any further adjustments or changes you'd like me to make.

    opened by genbattle 9
  • Add Go splash-image example

    Add Go splash-image example

    It's a common need for embedded devices (where RPi's are used extensively) to hide all the "nasty bits" of early boot (console, X startup, X apps' init, etc) under a nice "splash screen" vendor logo, same as with bios logo or windows logo, etc.

    Raspberry Pi's openvg api and this simple program makes it trivial to do by adding e.g. splash-image -bg-color ffffff mylogo.jpg at early boot (and stopping after X and all target apps start).

    Maybe would be useful in this repo as an "example", so that people won't need to write their own every time?

    opened by mk-fg 8
  • Scissoring support

    Scissoring support

    I added two functions to my copy:

    `// LimitTo limits the drawing area to specified rectangle void LimitTo(VGint x, VGint y, VGint w, VGint h) { vgSeti(VG_SCISSORING, VG_TRUE); VGint coords[4] = { x, y, w, h }; vgSetiv(VG_SCISSOR_RECTS, 4, coords); }

    // Unlimit stops limiting drawing area to specified rectangle void Unlimit() { vgSeti(VG_SCISSORING, VG_FALSE); }`

    If you find them useful, please add them.

    opened by lobsangludd 8
  • Some improvement suggestions / feature requests

    Some improvement suggestions / feature requests

    hello, according to other graphic libs I would like to suggest a lib improvement/extension:

    SetColor() // set brush color (foreground) DrawCircle() // draw outlined Circle (circle edge) by defined SetColor FillCircle() // draw filled Circle (circular area) by defined SetColor (aka Circle() )

    by analogous manner also for Rectangle, Polygon, Ellipse. As Circle() and FillCircle don't conflict, one can keep it both for legacy and lib compatibility purposes.

    What do you think?

    opened by shiftleftplusone 7
  • Transparent background / overlay possibility ?

    Transparent background / overlay possibility ?

    Hi,

    I am trying to create a simple text overlay on top of an existing opengl running application, is this possible ?

    I tried to create a BackgroundRGB(0, 0, 0, 0.1); but even with this it seems to cover the whole screen with a black background. When I remove the background I have a yellow background.

    Any hints? :-)

    My program is:

    int main() {
        int width, height;
        char s[3];
    
        init(&width, &height);                  // Graphics initialization
    
        VGfloat color[4] = { 255, 255, 255, 1 };
        vgSetfv(VG_CLEAR_COLOR, 4, color);
        vgClear(0, 0, 100, 200);
        color[0] = 0, color[1] = 0, color[2] = 0;
        setfill(color);
        setstroke(color);
        StrokeWidth(0);
        vgLoadIdentity();
    
        Fill(255, 255, 255, 1);                 // White text
        TextMid(width / 2, height / 2, "hello, world", SerifTypeface, width / 10);  // Greetings
        End();                                  // End the picture
    
        fgets(s, 2, stdin);                     // look at the pic, end with [RETURN]
        finish();                               // Graphics cleanup
        exit(0);
    }
    
    opened by ocZio 7
  • Printing text with accented characters

    Printing text with accented characters

    Is it possible to draw accented characters in this API? e.g. ÅåÖöÄä ?

    I could not see any way to do that; I don't know if there needs to be some locale sensitive handling, or more font data or something else?

    opened by grrussel 5
  • Enabling swapInterval?

    Enabling swapInterval?

    Apologies if this has is documented somewhere but as I couldn't find it I figured I'd raise an issue regarding enablement of vsync.

    Is there anyway to enable vsync for apps this library? Right now I'm set to call eglSwapInterval in oglinit() but I'm curious if there's a way to programatically do it without having to modify, recompile and re-link to the modified library.

    opened by ykram 4
  • fix a random VG_NO_CONTEXT_ERROR crash

    fix a random VG_NO_CONTEXT_ERROR crash

    diff --git a/openvg.go b/openvg.go
    index 70bb145..374588f 100644
    --- a/openvg.go
    +++ b/openvg.go
    @@ -20,6 +20,7 @@ import (
            "os"
            "strings"
            "unsafe"
    +       "runtime"
     )
    
     // RGB defines the red, green, blue triple that makes up colors.
    @@ -188,6 +189,8 @@ var colornames = map[string]RGB{
    
     // Init initializes the graphics subsystem
     func Init() (int, int) {
    +       // vg is not thread safe, avoid VG_NO_CONTEXT_ERROR
    +       runtime.LockOSThread()
            var rh, rw C.int
            C.init(&rw, &rh)
            return int(rw), int(rh)
    
    opened by ghost 4
  • Golang make failed

    Golang make failed

    I installed all dependecies sudo apt-get install libjpeg8-dev indent libfreetype6-dev ttf-dejavu-core

    If I start make in openvg I get following message:

    gcc -O2 -Wall -I/opt/vc/include -I/opt/vc/include/interface/vmcs_host/linux -I/opt/vc/include/interface/vcos/pthreads -fPIC -c libshapes.c
    gcc -L/opt/vc/lib -lEGL -lGLESv2 -ljpeg -shared -o libshapes.so oglinit.o libshapes.o
    /usr/bin/ld: cannot find -lEGL
    /usr/bin/ld: cannot find -lGLESv2
    collect2: error: ld returned 1 exit status
    Makefile:35: recipe for target 'library' failed
    make: *** [library] Error 1
    
    
    opened by y4roc 3
  • compiling library - no rule error... need by DejaVuSans.inc

    compiling library - no rule error... need by DejaVuSans.inc

    When I 'cd' into the openvg folder and 'make library' I get the following mo rule error

    $ make library gcc -O2 -Wall -I/opt/vc/include -I/opt/vc/include/interface/vmcs_host/linux -I/opt/vc/include/interface/vcos/pthreads -fPIC -c oglinit.c make: *** No rule to make target '/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf', needed by 'DejaVuSans.inc'. Stop.

    The library does not get made. I have not altered anything in the freshly downloaded openvg folder.

    I did not get this error before and it used to make fine, however I was using RPi Wheezy, but now I have just done a fresh install of Jessie OS. Is there anything else needed to do a make library?

    Thanks Steve

    opened by steverpi 3
  • How to paint a circle

    How to paint a circle

    I draw a circle, use the openvg command.

    1. draw a outside Arc.
    2. draw a line to the inside Arc end point.
    3. draw a inside Arc.
    4. draw a line to the outside Arc start point.
    5. Close the path. but I find a strange line between two Arcs. Why does it like this? pic_20220405223204
    opened by runner111 10
  • End() fails after a finish() and a init(). I'm trying to go back and forth from and to the raw terminal

    End() fails after a finish() and a init(). I'm trying to go back and forth from and to the raw terminal

    So far, the examples and the library works great.

    The idea is to be able to re-initialize and finish the full-screen image, but I cannot locate the problem...This is all I get on the console, on the End() of a simple sequence of circles and text, but after a second init() that followed the first finish()

    libshape.c: End: Asertion 'vgGetError() == VG_NO_ERROR' failed.

    Somehow finish() does not clean all up, for a new init() to work.

    I am getting started on a RPi zero, haven't figure out how to debug step-by-step yet on it.

    I see on the init(): bcm_host_init() and olginit() I don't see the corresponding ending of those on the finish() Maybe is something like that?

    Thanks.

    opened by a-colmenarez 0
  • How to rotate an image, with specific rotation

    How to rotate an image, with specific rotation

    Sorry not a bug but a question...

    I need a spinning animation, how would I display a loaded image (jpg, or maybe svg?) at a specific rotation?

    And whats the most efficient way?

    Thanks in advance :)

    opened by hippyau 0
  • Multiple instances one over other

    Multiple instances one over other

    Dear Sirs, I've tried to launch multiple scripts which show different text over the screen, sometime it happen that the screen goes entirely black for a few seconds, when the script is started. Is this supposed to be correct? Are multiple instances allowed or I'm using it in the wrong way? Thanks, BR

    opened by SummerSeaSun 0
  • Python version?

    Python version?

    Hi, is there a way to use Openvg in Python? I'm looking at https://docs.python.org/3/library/ctypes.html is there anyone that has already done this? Thanks, BR

    opened by SummerSeaSun 0
Owner
Anthony Starks
Human Being
Anthony Starks
A tool for exploring each layer in a docker image

dive A tool for exploring a docker image, layer contents, and discovering ways to shrink the size of your Docker/OCI image. To analyze a Docker image

Alex Goodman 34.6k Nov 23, 2022
Go Coverage in Shell: a tool for exploring Go Coverage reports from the command line

Go Coverage in Shell: a tool for exploring Go Coverage reports from the command line

Yury Fedorov 252 Nov 26, 2022
A tool to sent comments to Issues or Pull Requests in Github from CI tools.

CommentCI A tool to sent comments to Issues or Pull Requests in Github from CI tools. Usage Required environment variables: GITHUB_COMMENT_USER - User

Aliaksandr Shulyak 9 Apr 10, 2022
Procmon is a Linux reimagining of the classic Procmon tool from the Sysinternals suite of tools for Windows. Procmon provides a convenient and efficient way for Linux developers to trace the syscall activity on the system.

Process Monitor for Linux (Preview) Process Monitor (Procmon) is a Linux reimagining of the classic Procmon tool from the Sysinternals suite of tools

Windows Sysinternals 3.5k Nov 27, 2022
Basic command line example using golang grpc client tools

This is a basic command line interface that demonstrates using the golang GRPC API. The API is reused between dishy and the wifi router, however both

null 40 Nov 7, 2022
SSH Lightweight management tools

tssh golang 实现的ssh 工具 安装 下载安装 下载地址 release windows用户请手动下载,暂时不提供一键安装模式( 主要是批处理脚本不会写 ) Mac一键安装 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.

lrs 125 Sep 14, 2022
Soren L. Hansen 1.7k Nov 21, 2022
Simple activity indicator for your command line tools.

Simple activity indicator for your command line tools.

Luca Sepe 1 Oct 22, 2021
A personal collection of handy CLI tools

Toolkit A personal collection of handy CLI tools Installation 1.) Download and extract the ZIP package for the the latest release 2.) Copy the appropr

Luke Johnson 0 Nov 8, 2021
Various CLI tools in go

tools A collection of small command line utilities: hxd - a small hexdumper imgsize - show sizes of jpeg or png images kwed-dl - download latest track

Brian Schau 0 Mar 10, 2022
Command-line tools for the FFS module.

Command-line tools for FFS The blobd tool defines a JSON-RPC service that implements the FFS blob store interface over various underlying key-value st

M. J. Fromberger 0 Jan 6, 2022
Inotify-tools is a C library and a set of command-line programs providing a simple interface to inotify.

inotify-tools This is a package of some commandline utilities relating to inotify. The general purpose of this package is to allow inotify's features

null 2.7k Nov 21, 2022
A tools web api bases golang

1. tools-api 一个基于golang的开源web服务,专注于提供各类API以便在日常开发中提高生产效率 2. 部署 下载二进制程序后直接运行即可 ./go-tools-api 3. 二次开发 3.1. 环境依赖 Go版本 go version go1.15.2 linux/amd64 环境

chancel 1 Jun 13, 2022
wy : a set of command-line tools to test your container-based platform

wy wy (Abbreviation of Would You) is a set of command-line tools to test your container-based platform. ToC: Commands Deployment Monitoring Contributi

Yusuke Kuoka 2 Apr 30, 2022
Go-utils - Multiple tools and example for golang

go-utils Description Multiple tools and example for golang database : example to

null 0 Jan 1, 2022
A simple shopping list that keeps track of a users shopping list using charm.sh tools

Terminal Shopping List This repo is a practise project for learning practical Go. I have chosen to use a toolset called Charm as it provides a rich se

Ben Clarke 0 Jan 13, 2022
Go-ipfs-cmds - Cmds offers tools for describing and calling commands both locally and remotely

Go-ipfs-cmds - Cmds offers tools for describing and calling commands both locally and remotely

y 0 Jan 18, 2022
cli tools for list all pages in logseq repo, marked with public or private

logseq-pages A cli tool for list all pages in logseq repo, marked with public or private. When I using logseq to build my knowledge base and publish p

null 3 Jun 14, 2022
CLi tools helping to forge HTTP smuggling attack and others

HTTPCustomHouse CLi tools helping to forge HTTP smuggling attack and others (httpcustomhouse) Analyze smuggled request without interacting with remote

Ariary 15 Sep 23, 2022