Giter Club home page Giter Club logo

ecoji's Introduction

Ecoji 2.0 🏣🔉🦐🩻🍈🚞🤹🥷

Ecoji encodes data using 1024 emojis. This repository contains the canonical implementation of the Ecoji standard written in Go. Version 2 of the Ecoji standard was released in 2022 with an improved set of emojis. Ecoji version 2 produces output that is much more interesting and visually stimulating than what version 1 produced.

Visit ecoji.io to try Ecoji in your browser.

Usage

$ ecoji -h
usage: ecoji [OPTIONS]... [FILE]

Encode or decode data as Unicode emojis. 😁

For compatability, when given no options stdin will be encoded using Ecoji 
version 1. When using the new -e option, stdin is encoded using Ecoji 
version 2.  The -e and -d options are mutually exclusive.

Options:
    -e, --encode          Encode data using Ecoji version 2.  Omitting this
                          option will encode using Ecoji version 1.
    -d, --decode          Decodes data encoded using the Ecoji version 1 or 2 standard.
    -w, --wrap=COLS       wrap encoded lines after COLS character (default 76).
                          Use 0 to disable line wrapping.  This options is
                          ignored when decoding.
    -h, --help            Print this message
    -v, --version         Print version information.

🏣🔉🦐🩻🍈🚞🤹🥷

Examples

Encoding:

$ echo "Base64 is so 1999, isn't there something better?" | ecoji -e
🧏📩🧈🐇🧅📘🔯🚜💞😽♏🐊🎱🥁🚄🌱💞😭💮✊💢🪠🐭🩴🍉🚲🦑🐶💢🪠🔮🩹🍉📸🐮🌼👦🚟🥴📑

Decoding:

$ echo 🧏📩🧈🐇🧅📘🔯🚜💞😽♏🐊🎱🥁🚄🌱💞😭💮✊💢🪠🐭🩴🍉🚲🦑🐶💢🪠🔮🩹🍉📸🐮🌼👦🚟🥴📑 | ecoji -d
Base64 is so 1999, isn't there something better?

Concatenation:

$ echo -n abc | ecoji -e
👖📸🎈☕
$ echo -n 6789 | ecoji -e
🎥🤠📠🛼
$ echo XY | ecoji -e
🐲👡🪚☕
$ echo 👖📸🎈☕🎥🤠📠🛼🐲👡🪚☕ | ecoji -d
abc6789XY

Making Hashes More Interesting

$ cat encode.go  | openssl dgst -binary -sha1 | ecoji -e
🧘🎺🥧🗽🍻🏺💨🥿🍚📇🌱👞👻🌁🥉🗾
$ echo 🧘🎺🥧🗽🍻🏺💨🥿🍚📇🌱👞👻🌁🥉🗾 | ecoji -d | openssl base64
Qo7e3rIs0pdfySSfYaWNaoO+ZrM=
$ cat encode.go  | openssl dgst -binary -sha1 | openssl base64
Qo7e3rIs0pdfySSfYaWNaoO+ZrM=

(If you want to use Ecoji for hashes, consider the dangers inherent in older systems without utf8 emoji support, different fonts, and similar emojis.)

A URL Shortener

Four base1024 emojis can represent 1 trillion unique IDs. In the example below af82dd48f7 represents a 5 byte id for a URL in a key value store like Accumulo. When someone enters the URL, the 5 byte id could be used to obtain the actual URL from the database and then redirect.

$ printf "https://ecoji.io/%s\n" $(echo af82dd48f7 | xxd -r -p | ecoji -e)
https://ecoji.io/😉🤌🫢🏄

Other Implementations

Libraries implementing the Ecoji encoding standard. Submit a PR to add a library to the list. Libraries are given a quick review if time permits and tested before being added. However, libraries are not examined after being added. Adding something to the list is not an endorsement of its correctness or the projects security practices.

Before Ecoji V2 there was not a standard cross language test script, so the testing done for V1 only implementations was inconsistent adhoc manual tests.

Language Version Comments
D V1 Implementation of Ecoji written in the D programming language.
Go V1,V2 This repository offers a Go library package with three functions ecoji.Encode() ecoji.EncodeV2() and ecoji.Decode().
Java V1 Implementation of Ecoji written in Java, usable in any JVM language.
JavaScript V1,V2 A collection of base converters, which includes an implementation of Ecoji written in JavaScript.
.NET V1 Implementation of Ecoji written in C# targeting .NET Standard 2.0: dotnet add package Ecoji.
PHP V1 PHP 7.x implementation of Ecoji. Available as rayne/ecoji on Packagist.
Python V1 Implementation of Ecoji written in the Python3 programming language.
Rust V1 Implementation of Ecoji written in the Rust programming language.
Swift V1 Implementation of Ecoji written in the Swift programming language.

Building

To build the command line version of ecoji, run the following commands.

git clone https://github.com/keith-turner/ecoji.git
cd ecoji/cmd
go build ecoji.go
./ecoji --help

For an example of how to use Ecoji as library see library-example.md.

ecoji's People

Contributors

keith-turner avatar rayne avatar netvl avatar mecforlove avatar abock avatar ctubbsii avatar phrocker avatar pmkielstra avatar robindiddams avatar umamiappearance avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.