All Projects → AdamNiederer → Base100

AdamNiederer / Base100

Licence: agpl-3.0
base💯 - Encode your data into emoji

Programming Languages

rust
11053 projects

Projects that are alternatives of or similar to Base100

Weird Json
A collection of strange encoded JSONs. For connoisseurs.
Stars: ✭ 53 (-78.28%)
Mutual labels:  base64, emoji
Emoji Keyboard
Type emoji easily! Virtual keyboard-like emoji palette for Linux with lots of features.
Stars: ✭ 231 (-5.33%)
Mutual labels:  emoji
Jekyll Spaceship
🚀 A Jekyll plugin to provide powerful supports for table, mathjax, plantuml, mermaid, emoji, video, audio, youtube, vimeo, dailymotion, soundcloud, spotify, etc.
Stars: ✭ 196 (-19.67%)
Mutual labels:  emoji
Jackknife
⚔️ 金轮法王,哦不,是轮子大师带你玩转Android,是时候尝试下MVVM了。这是一个Android应用开发全家桶库,支持Kotlin+MVVM+Dagger2+Retrofit架构。
Stars: ✭ 215 (-11.89%)
Mutual labels:  codec
Klakhap
HAP video player plugin for Unity
Stars: ✭ 209 (-14.34%)
Mutual labels:  codec
Markdown It Vue
The vue lib for markdown-it.
Stars: ✭ 219 (-10.25%)
Mutual labels:  emoji
Sela
SimplE Lossless Audio
Stars: ✭ 199 (-18.44%)
Mutual labels:  codec
React Tater
A React component to add annotations to any element on a page 🥔
Stars: ✭ 235 (-3.69%)
Mutual labels:  emoji
Emojisum
🙏 📎 Emoji that checksum! 🎉 💩
Stars: ✭ 230 (-5.74%)
Mutual labels:  emoji
Streamoji
Custom emoji rendering library for iOS apps with support for GIF & still images - plug-in extension for UITextView - performance, cache ✅ - Made with 💘 by @GetStream
Stars: ✭ 215 (-11.89%)
Mutual labels:  emoji
Simple Binary Encoding
Simple Binary Encoding (SBE) - High Performance Message Codec
Stars: ✭ 2,544 (+942.62%)
Mutual labels:  codec
Emoji Catalog
Get access to +3500 emojis as class constants
Stars: ✭ 211 (-13.52%)
Mutual labels:  emoji
Emojipedia
MacOS X Dictionary containing Emoji and their meanings
Stars: ✭ 220 (-9.84%)
Mutual labels:  emoji
Python Benedict
dict subclass with keylist/keypath support, I/O shortcuts (base64, csv, json, pickle, plist, query-string, toml, xml, yaml) and many utilities. 📘
Stars: ✭ 204 (-16.39%)
Mutual labels:  base64
Java China
🍡 此项目已废弃,请移步至 https://github.com/junicorn/roo
Stars: ✭ 232 (-4.92%)
Mutual labels:  emoji
Base64 Arraybuffer
Encode/decode base64 data into ArrayBuffers
Stars: ✭ 200 (-18.03%)
Mutual labels:  base64
Datauri
Generate Data-URI scheme via terminal or node.js
Stars: ✭ 212 (-13.11%)
Mutual labels:  base64
React Native Emoji Selector
⚛️😎 Simple, customizable and theme-able Emoji selector for React Native
Stars: ✭ 217 (-11.07%)
Mutual labels:  emoji
Emoji Selector For Gnome
This extension provide a popup menu with some emojis ; clicking on an emoji copies it to the clipboard.
Stars: ✭ 239 (-2.05%)
Mutual labels:  emoji
V Emoji Picker
🌟 A Lightweight and customizable package of Emoji Picker in Vue using emojis natives (unicode).
Stars: ✭ 231 (-5.33%)
Mutual labels:  emoji

crates.io Build Status

Base💯

Encode things into Emoji.

Base💯 can represent any byte with a unique emoji symbol, therefore it can represent binary data with zero printable overhead (see caveats for more info).

Usage

$ echo "the quick brown fox jumped over the lazy dog" | base100
👫👟👜🐗👨👬👠👚👢🐗👙👩👦👮👥🐗👝👦👯🐗👡👬👤👧👜👛🐗👦👭👜👩🐗👫👟👜🐗👣👘👱👰🐗👛👦👞🐁

Base💯 will read from stdin unless a file is specified, will write UTF-8 to stdout, and has a similar API to GNU's base64. Data is encoded by default, unless --decode is specified; the --encode flag does nothing and exists solely to accommodate lazy people who don't want to read the docs (like me).

USAGE:
    base100 [FLAGS] [input]

FLAGS:
    -d, --decode     Tells base💯 to decode this data
    -e, --encode     Tells base💯 to encode this data
    -h, --help       Prints help information
    -V, --version    Prints version information

ARGS:
    <input>    The input file to use

Installation

To install base💯, use cargo:

$ cargo install base100

base💯 also has an AVX-accelerated implementation, delivering up to 4x faster performance. If you have a capable CPU and nightly rust, install it as such:

$ RUSTFLAGS="-C target-cpu=native" cargo install base100 --features simd

Performance

base💯's performance is very competitive with other encoding algorithms.

Scalar Performance

$ base100 --version
base💯 0.4.1

$ base64 --version
base64 (GNU coreutils) 8.28

$ cat /dev/urandom | pv | base100 > /dev/null
 [ 247MiB/s]

$ cat /dev/urandom | pv | base64 > /dev/null
 [ 232MiB/s]

$ cat /dev/urandom | pv | base100 | base100 -d > /dev/null
 [ 233MiB/s]

$ cat /dev/urandom | pv | base64 | base64 -d > /dev/null
 [ 176MiB/s]

In both scenarios, base💯 compares favorably to GNU base64.

SIMD Performance

On a machine supporting AVX2, base💯 gains a 4x performance boost via some hand-tuned x86-64 assembly. Support for SSE2 will come soon, and I will happily support AVX-512 if some compatible hardware finds its way into my hands.

To receive this speedup: you must use:

  • An AVX2-capable processor (Newer than Broadwell, or Zen)
  • Nightly Rust

To build the SIMD-accelerated version, simply go to your project directory and type

$ RUSTFLAGS="-C target-cpu=native" cargo +nightly build --release --features simd

Please note that the below benchmarks were taken on a significantly weaker machine than the above benchmarks, and cannot be directly compared.

$ base100 --version
base💯 0.4.1

$ base64 --version
base64 (GNU coreutils) 8.28

$ cat /dev/zero | pv | ./base100 > /dev/null
 [1.14GiB/s]

$ cat /dev/zero | pv | base64 > /dev/null
 [ 479MiB/s]

$ cat /dev/zero | pv | ./base100 | ./base100 -d > /dev/null
 [ 412MiB/s]

$ cat /dev/zero | pv | base64 | base64 -d > /dev/null
 [ 110MiB/s]

In this scenario, base💯 compares very favorably to GNU base64.

Caveats

Base💯 is very space inefficient. It bloats the size of your data by around 3x, and should only be used if you have to display encoded binary data in as few printable characters as possible. It is, however, very suitable for human interaction. Encoded hashes and checksums become very easy to verify at a glance, and take up much less space on a terminal.

Future plans

  • Allow data to be encoded with the full 1024-element emoji set
  • Add further optimizations and ensure we're abusing SIMD as much as possible
  • Add multiprocessor support
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].