Coder Social home page Coder Social logo

ecc-clj's Introduction

ecc-clj

A clojure implementation of Reed-Solomon and BCH codes, for educational purposes.

It also come with a QR code generator!

The associated blogpost is here: https://meiji163.github.io/post/ecc/

Usage

(require '[ecc-clj.poly :as p])
(require '[ecc-clj.core :as ecc])
    
;; encode a message with (255,233) Reed-Solomon code
(def my-encoded-msg
  (let [message
        (str
         "Hello world! This is meiji163 transmitting from Neptune. "
         "It's cold here, Please send hot chocolate. Thanks. "
         "Now that I think of it, ramen would be good too if you have some.")

        data (vec (map int message))
        padded (p/shift-right
                data
                (- 223 (count data)))]
    (ecc/encode padded ecc/RS-255-223 ecc/GF256)))

;; correct message with errors
(let [err [0 42 1 0 0 163 0 0 66 0 0 0 0 0 101 100]
      max-errs 8
      decode-me (p/+ my-encoded-msg err ecc/GF256)]
  (ecc/decode decode-me max-errs ecc/GF256))
;; => {:locations [1 2 5 8 14 15], 
;;     :sizes [42 1 163 66 101 100]}


;; create a QR code
(import java.io.File)
(import java.imageio.ImageIO)
(require '[ecc-clj.qr :as qr])

(let [mask-code 1
      databits (->> "github.com/github"
                  (map int)
                  (qr/encode-bytes)
                  (qr/mask-bits mask-code))
      fmtbits (qr/fmt-bits mask-code)
      myimg (qr/qr-image fmtbits databits)]
(ImageIO/write myimg "PNG" (File. "test.png")))

Test

Run tests with lein test

License

Copyright © 2023 FIXME

This program and the accompanying materials are made available under the terms of the Eclipse Public License 2.0 which is available at http://www.eclipse.org/legal/epl-2.0.

This Source Code may also be made available under the following Secondary Licenses when the conditions for such availability set forth in the Eclipse Public License, v. 2.0 are satisfied: GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version, with the GNU Classpath Exception which is available at https://www.gnu.org/software/classpath/license.html.

ecc-clj's People

Contributors

meiji163 avatar

Watchers

 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.