Base128を作りました (Golang)

Base128とは 英数字(a-z, A-Z, 0-9)とひらがな(あ-ん)の128文字を使ってバイト列をエンコードするものです. 実用性はともかく,文字数はBase64より少なくなるというメリットがあります. デメリットは,エンコード後のデータ量がものすごく増えることと,あらかじめエンコード後/デコード後のデータ量がわからない点です. https://github.com/dozen/encoding 使い方 import import "github.com/dozen/encoding/base128" encode e := base128.NewEncoding(base128.StdEncoding) e.EncodeToString([]byte("Hello, world!")) //=>kZtけふ8ぢg7どぺmふQお decode e := base128.NewEncoding(base128.StdEncoding) fmt.Printf("%s\n", e.Decode("kZtけふ8ぢg7どぺmふQお")) //=>Hello, world! 実装 Base64を参考にして作り始めたのですがとりあえず動くようにしようとあれこれしている間に全く別物になってしまいました. Base64の場合,64文字を用いるので6bitを表現できます.エンコード時には,元の8bitのバイト列を6bitに区切るために,4byteずつuintに格納してから6bitずつビットシフトしています。 val := uint(src[si+0])<<16 | uint(src[si+1])<<8 | uint(src[si+2]) dst[di+0] = enc.encode[val>>18&0x3F] dst[di+1] = enc.encode[val>>12&0x3F] dst[di+2] = enc.encode[val>>6&0x3F] dst[di+3] = enc.encode[val&0x3F] こんなかんじです.encoding/base64/base64.goの100行目ぐらいのところです. これを参考にして,元の8bitのバイト列を7byteずつ取り出し,7bitずつ区切ることにしました.7byte=56bitなのでuintには収まる範囲です. val := uint(src[si+0])<<48 | uint(src[si+1])<<40 | uint(src[si+2])<<32 | uint(src[si+3])<<24 | uint(src[si+4])<<16 | uint(src[si+5])<<8 | uint(src[si+6]) dst[di+0] = enc.encode[val>>49&0x7F] dst[di+1] = enc....

2016/06/05 · 1 分 · 95 文字 · Me

InkPaperでブログを生成して, Github Pagesで公開する

2024/05/28 追記: 現在はInkPaperを使っていません。また、昔の記事なので正しくない可能性があります。 InkPaperとは? 使い方は? Go言語で書かれた静的ブログジェネレータです。HugoとかJekyllとかの静的サイトジェネレータのブログ特化版みたいな感じです。 InkPaper は最初からブログ用に作ってあるので、面倒な設定とかしないでとりあえずブログを書き始めることができます。 使い方は InkPaperのREADME に書いてあるのでここを参照します. InkPaperをインストール http://www.inkpaper.io/から自分の環境に合ったものをダウンロードします. zipファイルを解凍すればインストールは完了です. 設定ファイルを編集する blog/config.ymlを編集します. site: title: ジェット・ゾウ #ブログのタイトル subtitle: サブタイトル #タイトルの下にチョロンと表示されます # logo: -/images/avatar.jpg #トップページに表示される自分のアイコン limit: 10 theme: theme disqus: somebody lang: en url: http://jetzou.com/ # root: /blog authors: me: name: dozen intro: どぜんと読みます avatar: -/images/avatar.jpg build: port: 8000 # Copied files to public folder when build copy: - theme/bundle - theme/favicon.ico - theme/robots.txt - source/images # Excuted command when use 'ink publish' publish: | git add . -A git commit -m "update" git push origin urlとrootだけ気をつければあとは適当で大丈夫. 今回はhttp://jetzou.com/で公開したいのでurl: http://jetzou.com/"としました. disqusはコメント機能を提供してくれるDISQUSのアカウントを指定するんですが, 今回はスキップ. langは今のところ中国語と英語にしか対応していないみたいなので, enを指定しました. 設定ファイルはこんな感じで大丈夫そうです. 記事を書く 記事を置く場所はblog/sourceです. インストールした状態ではサンプルページのblog/source/ink-blog-tool-en.mdとblog/source/ink-blog-tool.mdがあります. 記事を書くまえにこのファイルをみて, 参考にするといいです. 公開する前にこの2つのファイルは消しておきます. ...

2016/06/05 · 2 分 · 423 文字 · Me