An open source mesh slicer framework for Unity3D Game Engine. Written in C#.

EzySlice Logo

Twitter: @DavidArayan Join the chat at https://gitter.im/ezyframeworks/ezyslice License Codacy Badge


Open Source Slicer Framework for the Unity3D Game Engine

  • Ability to slice any convex Mesh using a Plane
  • UV/Normal/Tangent Space Interpolation for seamless cuts
  • Flexible and Documented API
  • No external plugin dependencies, fully written in C#
  • Updated for Unity3D 2018
  • MIT Open Source License

Algorithms in use

  • General purpose Monotone Chain for cross section triangulation for Convex slices
  • Barycentric Coordinates for UV/Normal/Tangent space Interpolation
  • Purpose built Triangle to Plane intersection to cover all general cases for slicing
  • Designed with performance in mind

Contributions and Bug Reports

  • Contributions are always welcome and highly appreciated! please use pull request.
  • Bugs, Comments, General Enquiries and Feature Requests please use the Issue Tracker

Example Projects


Usage Examples

Getting started with EzySlice is easy. Below you will find sample usage functions. EzySlice uses extension methods to hide most of the internal complexity.

  • The examples below will slice a GameObject and return SlicedHull object. SlicedHull has functionality for generating the final GameObjects for rendering. An additional API exists to generate the GameObjects automatically without any additional work required.
  • All functions will return null if slicing fails.
SlicedHull Example
public GameObject objectToSlice; // non-null

/**
 * Example on how to slice a GameObject in world coordinates.
 */
public SlicedHull Slice(Vector3 planeWorldPosition, Vector3 planeWorldDirection) {
	return objectToSlice.Slice(planeWorldPosition, planeWorldDirection);
}
Direct Instantiated Example
public GameObject objectToSlice; // non-null

/**
 * Example on how to slice a GameObject in world coordinates.
 */
public GameObject[] Slice(Vector3 planeWorldPosition, Vector3 planeWorldDirection) {
	return objectToSlice.SliceInstantiate(planeWorldPosition, planeWorldDirection);
}
  • A custom TextureRegion can be defined to map the final UV coordinates of the cross-section. TextureRegion is essentially a reference to a specific part of a texture in UV coordinate space. This can be useful if single materials are used repeatedly as atlasses.
SlicedHull Example
public GameObject objectToSlice; // non-null

/**
 * Example on how to slice a GameObject in world coordinates.
 * Uses a custom TextureRegion to offset the UV coordinates of the cross-section
 */
public SlicedHull Slice(Vector3 planeWorldPosition, Vector3 planeWorldDirection, TextureRegion region) {
	return objectToSlice.Slice(planeWorldPosition, planeWorldDirection, region);
}
Direct Instantiated Example
public GameObject objectToSlice; // non-null

/**
 * Example on how to slice a GameObject in world coordinates.
 * Uses a custom TextureRegion to offset the UV coordinates of the cross-section
 */
public GameObject[] Slice(Vector3 planeWorldPosition, Vector3 planeWorldDirection, TextureRegion region) {
	return objectToSlice.SliceInstantiate(planeWorldPosition, planeWorldDirection, region);
}
  • There are cases where supplying the material directly can have performance benefits. In the previous examples, the Slicer will simply create the cross section as a submesh which will allow adding the Material externally when the GameObject is created. By supplying the Material directly, this will allow the Slicer to potentially batch the final results instead of creating repeated submeshes.
SlicedHull Example
public GameObject objectToSlice; // non-null
public Material crossSectionMaterial; // non-null

/**
 * Example on how to slice a GameObject in world coordinates.
 * Uses a custom TextureRegion to offset the UV coordinates of the cross-section
 * Uses a custom Material
 */
public SlicedHull Slice(Vector3 planeWorldPosition, Vector3 planeWorldDirection, TextureRegion region) {
	return objectToSlice.Slice(planeWorldPosition, planeWorldDirection, region, crossSectionMaterial);
}
Direct Instantiated Example
public GameObject objectToSlice; // non-null
public Material crossSectionMaterial; // non-null

/**
 * Example on how to slice a GameObject in world coordinates.
 * Uses a custom TextureRegion to offset the UV coordinates of the cross-section
 * Uses a custom Material
 */
public GameObject[] Slice(Vector3 planeWorldPosition, Vector3 planeWorldDirection, TextureRegion region) {
	return objectToSlice.SliceInstantiate(planeWorldPosition, planeWorldDirection, region, crossSectionMaterial);
}
  • Below is a sample on how to generate a TextureRegion. TextureRegion is stored in UV Coordinate space and is a reference to a specific region of a texture.
Using a Texture
/**
 * Example on how to calculate a custom TextureRegion to reference a different part of a texture
 * 
 * px -> The start X Position in Pixel Coordinates
 * py -> The start Y Position in Pixel Coordinates
 * width -> The width of the texture in Pixel Coordinates
 * height -> The height of the texture in Pixel Coordinates
 */
public TextureRegion CalculateCustomRegion(Texture myTexture, int px, int py, int width, int height) {
	return myTexture.GetTextureRegion(px, py, width, height);
}
Using a Material
/**
 * Example on how to calculate a custom TextureRegion to reference a different part of a texture
 * This example will use the mainTexture component of a Material
 * 
 * px -> The start X Position in Pixel Coordinates
 * py -> The start Y Position in Pixel Coordinates
 * width -> The width of the texture in Pixel Coordinates
 * height -> The height of the texture in Pixel Coordinates
 */
public TextureRegion CalculateCustomRegion(Material myMaterial, int px, int py, int width, int height) {
	return myMaterial.GetTextureRegion(px, py, width, height);
}
Owner
David Arayan
Co-Founder and Lead Software Engineer @Plattar and Founder @OvisTek. Polyglot Software Developer.
David Arayan
Comments
  • Null Reference exception when game is played in android

    Null Reference exception when game is played in android

    DOES YOUR FRAMEWORK WORKS FOR ANDROID BUILDS?

    I am using ezyslice in my android game and it runs fine when using unity editor but it doesn't work when I make a build and runs it into null reference exceptions as given below

    1.)AndroidPlayer([email protected]:34999) NullReferenceException: Object reference not set to an instance of an object at EzySlice.Intersector.Intersect (Plane pl, Triangle tri, EzySlice.IntersectionResult& result) [0x00003] in C:\Users\Mani\Documents\BeatSaberCloneMobile\Assets\3rd-Party\EzySlice-fbb271fad6762b7a81c18f4bba19bdd59defbfca\EzySlice\Framework\Intersector.cs:60 at EzySlice.Triangle.Split (Plane pl, EzySlice.IntersectionResult result) [0x0000a] in C:\Users\Mani\Documents\BeatSaberCloneMobile\Assets\3rd-Party\EzySlice-fbb271fad6762b7a81c18f4bba19bdd59defbfca\EzySlice\Framework\Triangle.cs:308


    2.)AndroidPlayer([email protected]:34999) NullReferenceException: Object reference not set to an instance of an object at EzySlice.Intersector.Intersect (Plane pl, Triangle tri, EzySlice.IntersectionResult& result) [0x00003] in C:\Users\Mani\Documents\BeatSaberCloneMobile\Assets\3rd-Party\EzySlice-master\EzySlice\Framework\Intersector.cs:60 at EzySlice.Triangle.Split (Plane pl, EzySlice.IntersectionResult result) [0x0000a] in C:\Users\Mani\Documents\BeatSaberCloneMobile\Assets\3rd-Party\EzySlice-master\EzySlice\Framework\Triangle.cs:308 at EzySlice.Slicer.Slice (UnityEngine.Mesh sharedMesh, Plane pl, TextureRegion region, Int32 crossIndex) [0x0018d] in C:\Users\Mani\Documents\BeatSaberCloneMobile\Assets\3rd-Party\EzySlice-master\EzySlice\Slicer.cs:194 at EzySlice.Slicer.Slice (UnityEngine.GameObject obj, Plane pl, TextureRegion crossRegion, UnityEngine.Material crossMaterial) [0x000e9] in C:\Users\Mani\Documents\BeatSaberCloneMobile\Assets\3rd-Party\EzySlice-master\EzySlice\Slicer.cs:124 at EzySlice.SlicerExtensions.Slice (UnityEngine.GameObject obj, Plane pl, TextureRegion textureRegion, UnityEngine.Material crossSectionMaterial) [0x00005] in C:\Users\Mani\Documents\BeatSaberCloneMobile\Assets\3rd-Party\EzySlice-master\EzySlice\SlicerExtensions.cs:33 at EzySlice.SlicerExtensions.Slice (UnityEngine.GameObject obj, Vector3 position, Vector3 direction, TextureRegion textureRegion, UnityEngine.Material crossSectionMaterial) [0x00027] in C:\Users\Mani\Documents\BeatSaberCloneMobile\Assets\3rd-Party\EzySlice-master\EzySlice\SlicerExtensions.cs:27 at EzySlice.SlicerExtensions.Slice (UnityEngine.GameObject obj, Vector3 position, Vector3 direction, UnityEngine.Material crossSectionMaterial) [0x0001e] in C:\Users\Mani\Documents\BeatSaberCloneMobile\Assets\3rd-Party\EzySlice-master\EzySlice\SlicerExtensions.cs:18 at SlicerRealTimeMod.SliceObject (UnityEngine.GameObject obj, UnityEngine.Material crossSectionMaterial) [0x00019] in C:\Users\Mani\Documents\BeatSaberCloneMobile\Assets\Scripts\ImportedScripts\SlicerRealTimeMod.cs:25 at ShellCreator+c__Iterator0.MoveNext () [0x00035] in C:\Users\Mani\Documents\BeatSaberCloneMobile\Assets\Scripts\ShellCreator.cs:41 at UnityEngine.SetupCoroutine.InvokeMoveNext (IEnumerator enumerator, IntPtr returnValueAddress) [0x00028] in /Users/builduser/buildslave/unity/build/Runtime/Export/Coroutines.cs:17 UnityEngine.MonoBehaviour:StartCoroutine_Auto_Internal(IEnumerator) UnityEngine.MonoBehaviour:StartCoroutine(IEnumerator) (at /Users/builduser/buildslave/unity/build/artifacts/generated/common/runtime/MonoBehaviourBindings.gen.cs:63) ShellCreator:startShellCreator(GameObject) (at C:\Users\Mani\Documents\BeatSaberCloneMobile\Assets\Scripts\ShellCreator.cs:37) SourceCubeController:OnPointerExit(PointerEventData) (at C:\Users\Mani\Documents\BeatSaberCloneMobile\Assets\Scripts\SourceCubeController.cs:64) UnityEngine.EventSystems.ExecuteEvents:Execute(IPointerExitHandler, BaseEventData) (at C:\buildslave\unity\build\Extensions\guisystem\UnityEngine.UI\EventSystem\ExecuteEvents.cs:29) UnityEngine.EventSystems.ExecuteEvents:Execute(GameObject, BaseEventData, EventFunction`1) (at C:\buildslave\unity\build\Extensions\guisystem\UnityEngine.UI\EventSystem\ExecuteEvents.cs:261) UnityEngine.EventSystems.BaseInputModule:HandlePointerExitAndEnter(PointerEventData, GameObject) (at C:\buildslave\unity\build\Extensions\guisystem\UnityEngine.UI\EventSystem\InputModules\BaseInputModule.cs:136) UnityEngine.EventSystems.PointerInputModule:ProcessMove(PointerEventData) (at C:\buildslave\unity\build\Extensions\guisystem\UnityEngine.UI\EventSystem\InputModules\PointerInputModule.cs:248) UnityEngine.EventSystems.StandaloneInputModule:ProcessTouchEvents() (at C:\buildslave\unity\build\Extensions\guisystem\UnityEngine.UI\EventSystem\InputModules\StandaloneInputModule.cs:232) UnityEngine.EventSystems.StandaloneInputModule:Process() (at C:\buildslave\unity\build\Extensions\guisystem\UnityEngine.UI\EventSystem\InputModules\StandaloneInputModule.cs:211) UnityEngine.EventSystems.EventSystem:Update() (at C:\buildslave\unity\build\Extensions\guisystem\UnityEngine.UI\EventSystem\EventSystem.cs:294)

    (Filename: C Line: 0)

  • Incorrect plane slice with non uniform scale

    Incorrect plane slice with non uniform scale

    If the object is not scaled in a uniform way (e.g scaleX, scaleY, and scaleZ are different) then the slicing is not correct.

    How to reproduce:

    1. Open SliceDebugScene from https://github.com/DavidArayan/EzySlice-Example-Scenes
    2. Change scale of ObjectToSlice in the editor from (10, 10, 10) to (10, 50, 10) for example
    3. Set the SlicerPlane field and click Cut Object
    4. Inspect the resulting objects (Lower_Hull and Upper_Hull)
  • A little help on Slicing an object.

    A little help on Slicing an object.

    Ill be honest, I have no idea how to use this.

    I just want to slice an object when it gets in touch with another when collided.

    Example a sword through a branch of a tree.

    I've messed around with the example scene but there seems to be a button to slice the things. Im not sure if Im looking at the right thing.

    Anything would be helpful! thank you!

  • [Feature] Single Material

    [Feature] Single Material

    It would be nice if instead of creating a new material on every cut the entire mesh shared the same material and cut faces could simply be mapped to a select portion of the texture instead. (0.5 , 0.5 would map the cut face UVs to the bottom right quadrant of the texture for example). As it stands repeatedly cutting a mesh creates a big material array because of all the submeshes, and Unity is throwing some errors because of that.

  • Oculus Quest crashing

    Oculus Quest crashing

    anyone able to help me? designing a beat saber clone and this happens around second or third. this issue is 100% coming from the mesh slice. im using https://github.com/DavidArayan/ezy-slice which should support mobile. works on pc version fine. i have change materials and shaders with same result. thanks btw this is for oculus quest

    https://www.facebook.com/mike.donovan.5836711/videos/1127587397610188/

  • Floating point error causing artefacts.

    Floating point error causing artefacts.

    The following happens when attempting to slice the plane using the following parameters. Slice produces artefacts (left of the grey line). https://imgur.com/a/CGMr5Wx

    • Mesh Verts: { Vector3.zero, Vector3.right * -5, Vector3.forward*5, new Vector3(-5, 0, 5)}
    • Mesh Triangles: { 0, 1, 2, 1, 3, 2 }
    • Mesh Position: (32.8732147216797f, 0.00100000004749745f, 47.9289321899414f)
    • Slice Position: (32.8732147216797f, 0, 50)
    • Slice Direction: (0.353553384542465f, 0, -0.853553414344788f)
  • [FEATURE] - Generate proper Normals and Tangents from the original mesh

    [FEATURE] - Generate proper Normals and Tangents from the original mesh

    A recent feature request to generate normals and tangents from the original mesh which is being sliced. From observation it seems the final cut meshes do not render properly, this is due to using Mesh.RegenerateNormals() which is too generic.

    • Look into using normals and tangents from the original mesh to ensure the cut mesh renders properly
    • Ensure the generated normals and tangents work properly with the generated cross section
  • Doesn't work for more complex objects

    Doesn't work for more complex objects

    I tested the demo project and it works for the cube in the demo project. However it doesn't work with my object.

    I have a 3d model of a piece of toast, and I am trying to slice the toast. The lower_hull and upper_hull that are created from the slice are not what they should be. I have attached a screenshot here:

    Screenshot 2021-02-08 at 12 13 28

    I have uploaded the 3d model here:

    toast.zip

    Thank you for your help!

  • Ezyslice crashes on IOS.

    Ezyslice crashes on IOS.

    The game crashes when slicing is attempted. Doesnt seem to be a RAM issue because i tested on IPhone XR, it crashes. But it doesnt crash on IPhone 5C. Do you have any idea on the possible issues of the crash?

    From the XCode Debug Log, error EXC_BAD_ACCESS happens when i do the slicing.

    I've tried unticking Auto Graphics API, removing Metal from the Graphics API but it's still not working currently.

  • Array Index Is Out Of Range

    Array Index Is Out Of Range

    Hi, I'm using Unity 5.4.5 and on some meshes I get "Array Index Is Out Of Range" on Slicer.cs Line 123

    Triangle newTri = new Triangle(ve[i0], ve[i1], ve[i2], uv[i0], uv[i1], uv[i2]);

    The meshes are simple shapes exported from blender as .obj (cube, icosphere). Curiously, the default unity cube mesh works, but not one exported straight from blender. It appears the triangles are in a different configuration that's causing some bug (I think).

    On the meshes that do work, when I call SliceInstantiate() the upper and lower hulls have no end caps on the cut face.

  • Ezy Slice -  imported objects don't get sliced

    Ezy Slice - imported objects don't get sliced

    Hello David, I am a big fan of your Ezy-Slice script.

    My issue is as the GIF shows on the left is the unity primitve cube(created inside unity) getting cut by the sliceplane. In the middle and on the right are objects i created inside Autodesk Maya and exported to unity. The rock and (generic) cube both are on the layer "sliceable" but are not affected by cut-script.

    How is the correct way to export objects to make them work with your script? Or is the script only working with the unity-primitives? I try to solve it since friday but there must be something i don't understand! slice_error

    I attached the script, cube and rock mesh. script_and_objects.zip

    Thank you for your support! Hope you know the answer for this to work! Would like to support you aswell!

    Greetings Oliver

  • Can't download the project through unity git system.

    Can't download the project through unity git system.

    [Package Manager Window] Cannot perform upm operation: Unable to add package [https://github.com/DavidArayan/ezy-slice.git]: [https://github.com/DavidArayan/ezy-slice.git] does not point to a valid package. No package manifest was found. [NotFound]. UnityEditor.EditorApplication:Internal_CallUpdateFunctions ()

    First I had an error about git not installed on windows, now I have this error, seems it is coming from the git repository ?

    Thanks for further help

  • Randomly doesn't slice (this could well be user error)

    Randomly doesn't slice (this could well be user error)

    This is coming from the slicer somewhat randomly. I know the triggers are working right because the haptics and the score keeping works. But sometimes, it just randomly doesn't slice. Most of the time, on the same blocks, it slices perfectly fine. It does seem like when there's a bunch of stuff right up in your face is when it fails the most often.

    NullReferenceException: Object reference not set to an instance of an object Slicer.Update () (at Assets/Scripts/Slicer.cs:26)

    This happens at the point where it attempts to create the upper and lower objects.

  • SliceInstantiate in transforms can cause problems

    SliceInstantiate in transforms can cause problems

    When you create the newObject, it copies the local position, rotation and scale of the original object, which is all fine, however, if the object itself is inside a transform with a position, rotation or scale that isn't the default one, it can cause some problems. It cam be fixed by simply assigning the same parent to the newObject.

    You could argue that it wouldn't be necessary to do that if instead of using local position and rotation you used the global one, however, the scale is still a problem.

    I was stuck trying to figure out why the sliced parts teleported through the map and it turned out to be this. I am sure this is a very hacky way of fixing this, but it worked for me, and hey, if it turns out to be a good solution, then perfect!

    Leaving that aside, the slicing scripts work like a charm, thanks a lot for writing this!

  • Slicing Unity's sphere results in meshes with uncovered holes

    Slicing Unity's sphere results in meshes with uncovered holes

    Slicing a sphere created with Unity's right click>3D Object>Sphere, with identity transform with planeWorldPosition = Vector3.zero and planeWorldDirection = Vector3.right results in hemisphere meshes with holes.

    image

    When I rotate the sphere 5 degrees along the y axis, it doesn't happen.

    image

    This happens in master at commit https://github.com/DavidArayan/ezy-slice/commit/b93d68c24371a1fc7c7f0c3b70bd85ac28d950b0 Unity Version 2019.3.5f1 (d691e07d38ef) Personal

    This doesn't happen on release 1.0.0

    Script used for slicing:

    using EzySlice;
    using UnityEngine;
    
    public class SliceOnClick : MonoBehaviour
    {
    
      public Material innerMaterial;
    
      // Start is called before the first frame update
      void Start()
      {
    
      }
    
      // Update is called once per frame
      void Update()
      {
    
      }
    
      void OnMouseDown()
      {
        Debug.Log("CUTTING");
        if (this.Slice(Vector3.zero, Vector3.right) == null)
        {
          Debug.Log("FAILED");
        }
        Debug.Log("WORKED");
      }
    
      public GameObject[] Slice(Vector3 planeWorldPosition, Vector3 planeWorldDirection)
      {
        return this.gameObject.SliceInstantiate(planeWorldPosition, planeWorldDirection, CalculateCustomRegion(0, 0, 512, 512), this.innerMaterial);
      }
    
      public TextureRegion CalculateCustomRegion(int px, int py, int width, int height)
      {
        return this.innerMaterial.GetTextureRegion(px, py, width, height);
      }
    }
    
    

    PD: Thank you for making this project!

  • Feature: Allow the user to access edgeloops

    Feature: Allow the user to access edgeloops

    Thank you for your awesome work on this library. I added a few changes that allow the user to also explicitly request an edgeloop cut at a specified coordinate. For example:

                List<Vector3> slicePoints = EzySlice.Slicer.EdgeLoop(source, cuttingPlane);
    
                if (slicePoints == null)
                {
                    Debug.LogWarning("Slice did not produce loop!");
                    return false;
                } 
    
                layersPointList.Add(slicePoints);
    

    Let me know if this is something that you think would be worth it to add to ezy-slice main, otherwise I can maintain it in my fork. I can also make any changes required to make it suitable for main.

Code snippets by first time open source contributors

Introduction Golang code snippets by first time open source contributors Rules How to contribute Add a folder and create your desired code snippet fil

Oct 6, 2021
Tidb - An open-source NewSQL database that supports Hybrid Transactional and Analytical Processing (HTAP) workloads
Tidb - An open-source NewSQL database that supports Hybrid Transactional and Analytical Processing (HTAP) workloads

What is TiDB? TiDB ("Ti" stands for Titanium) is an open-source NewSQL database

Jan 5, 2022
Zinc Search engine. A lightweight alternative to elasticsearch that requires minimal resources, written in Go.
Zinc Search engine. A lightweight alternative to elasticsearch that requires minimal resources, written in Go.

Zinc Search Engine Zinc is a search engine that does full text indexing. It is a lightweight alternative to Elasticsearch and runs using a fraction of

Jan 1, 2023
Wordle - Wordle game in Go
Wordle - Wordle game in Go

wordle wordle game in Go rules - You have 5 guesses - You can only guess using 5

Feb 26, 2022
Supply chain management indie game... IN SPACE!
Supply chain management indie game... IN SPACE!

Ship shape Supply chain management indie game ... IN SPACE! Current state is preliminary - there's a six-level tutorial, about an hour's worth of game

Nov 3, 2022
community search engine

Lieu an alternative search engine Created in response to the environs of apathy concerning the use of hypertext search and discovery.

Dec 24, 2022
Weaviate is a cloud-native, modular, real-time vector search engine
Weaviate is a cloud-native, modular, real-time vector search engine

Weaviate is a cloud-native, real-time vector search engine (aka neural search engine or deep search engine). There are modules for specific use cases such as semantic search, plugins to integrate Weaviate in any application of your choice, and a console to visualize your data.

Jan 5, 2023
Self hosted search engine for data leaks and password dumps
Self hosted search engine for data leaks and password dumps

Self hosted search engine for data leaks and password dumps. Upload and parse multiple files, then quickly search through all stored items with the power of Elasticsearch.

Aug 2, 2021
IBus Engine for GoVarnam. An easy way to type Indian languages on GNU/Linux systems.

IBus Engine For GoVarnam An easy way to type Indian languages on GNU/Linux systems. goibus - golang implementation of libibus Thanks to sarim and haun

Feb 10, 2022
A BPMN engine, meant to be embedded in Go applications with minim hurdles, and a pleasant developer experience using it.

A BPMN engine, meant to be embedded in Go applications with minim hurdles, and a pleasant developer experience using it. This approach can increase transparency for non-developers.

Dec 29, 2022
Program to generate ruins using the Numenera Ruin Mapping Engine

Ruin Generator This is my attempt to build a program to generate ruins for Numenera using the rules from the Jade Colossus splatbook. The output only

Nov 7, 2021
An experimental vulkan 3d engine for linux (raspberry 4)

protomatter an experimental vulkan 3d engine for linux (raspberry 4).

Nov 14, 2021
Rule engine implementation in Golang
Rule engine implementation in Golang

Rule engine implementation in Golang

Dec 30, 2022
A search engine for XKCD

xkcd_searchtool a search engine for XKCD What is it? This tool can crawling the comic transcripts from XKCD.com Users can search a comic using key wor

Sep 29, 2021
Nune - High-performance numerical engine based on generic tensors

Nune (v0.1) Numerical engine is a library for performing numerical computation i

Nov 9, 2022
Nune-go - High-performance numerical engine based on generic tensors

Nune (v0.1) Numerical engine is a library for performing numerical computation i

Nov 9, 2022
OTS: Open Terraforming Server
 OTS: Open Terraforming Server

OTS: Open Terraforming Server A prototype open source alternative to terraform enterprise

Jan 2, 2023
A bin which will keep screen open by moving a mouse

Stay Awake This is a small program which will move mouse up and down to keep screen on. This stimulates like user is doing something. Motivation I had

Oct 21, 2021
QuickAbeHiroshi - The golang program to open a web site which is the fastest in the world
QuickAbeHiroshi - The golang program to open a web site which is the fastest in the world

The golang program to open a web site which is the fastest in the world.

Jan 2, 2022