コード

テキストの外形をsvgにする、text2svgをRubyで作った

テキストとフォントファイルを与えると、テキストの形をsvgで表現した出力が出てくる夢を見たことがありますよね? 作りました。 github.com $ text2svg "Hello, World\!" --font="/Library/Fonts/Times New Roman.ttf" > test.svg $ open test.svg -a /Appl…

mruby-stringioぼんやりつくったよ

ksss/mruby-stringiogithub.com ご活用ください。

ngx_mrubyでつくる簡単な動的サムネイル生成サーバー

動的サムネイル生成 サムネイルは、ユーザアップロード画像を扱うアプリではほぼ間違いなく使われると思う。 サムネイルの生成には、先に作っとくか、後で作るかの2つの方式があるように思う。(気が向いた時とかナシとすると) 先に作っとく サムネイルを先に…

jpegファイルフォーマットについてちょっと調べた

jpegファイルの構造がどうなってるのかなと思ってちょっと調べたのでまとめ。 jpegファイルは大まかに[ヘッダ+画像データ+フッタ]でできている。 jpegファイルは必ずFFD8ではじまる。 FFD8以降はヘッダの部分でJFIF形式になっている。 JFIF形式はこんな感じ…

Pure Ruby Queue

Pure Ruby Queue sample Threadを使ってQueueを書いてみた。 Queueってもっとmutexとか条件変数とかで難しい作りになってそうとおもってコード読んでみたら、ただのStructを継承したオブジェクトでコードも短かった。 これならRubyだけで書けるのでは〜と思…

なるほどUnixプロセス ― Rubyで学ぶUnixの基礎 / Jesse Storimer

なるほどUnixプロセス ― Rubyで学ぶUnixの基礎 #naruhounix を読んだ。 正直「プロセス?あれでしょ、なんか動くやつ。」というレベルだったので非常に勉強になった。 Rubyで書かれているのも、余計なこと(Cの文法とか例外処理とか)がついてこなくて理解しや…

mruby-ostructリリース

https://github.com/ksss/mruby-ostruct CRubyのOpenStructをmrubyに移植しました。 前からあったにはあったけど、mruby側で動的にsingleton methodを作るKernel#define_singleton_methodがなかったのでただのHashのラッパーになっていました。 自力でKernel…

mrubyを小さくしたり大きくしたりした話

最近mrubyにコミットしているので自分の活動をまとめます。 mrubyを小さくした話 mrubyでは、文字列の扱いはシンプルにchar*を構造体でラップしていました。 struct RString { MRB_OBJECT_HEADER; mrb_int len; union { mrb_int capa; struct mrb_shared_str…

Arrayより1000倍遅く192倍速いGem、List v0.0.1リリース

Listというgemを書きました。 といってもインターフェースがArrayとの完全互換を目標にしているのでまだ未完成です。 なんせメソッドが多い。。。 でも待ちきれないので公開しちゃいます。 拡張ライブラリで書いているのですが、MRIの1.9.3、2.0.0、2.1.0に…

Digest::MurmurHash v0.3.0リリース

https://github.com/ksss/digest-murmurhash https://rubygems.org/gems/digest-murmurhash 最近はじめてピタゴラスイッチを見て、見ているうちに脳がオーバーヒートしそうになりました。 v0.3.0 Digest::MurmurHashというgemをアップデートしました。 アル…

mruby用のgem、mgemを3つ追加しました

追加したmgem https://github.com/ksss/mruby-limits https://github.com/ksss/mruby-murmurhash1 https://github.com/ksss/mruby-murmurhash2 mgem https://github.com/bovi/mgem https://github.com/ksss/mgem-list mrubyとmgem rubyでのrubygemsにあたる…

Digest::SipHash v0.0.1リリース

ksss/digest-siphash · GitHub digest-siphash | RubyGems.org | your community gem host 作る SipHash(https://131002.net/siphash/)のRuby実装がpureRuby版はあったのですが(https://github.com/emboss/siphash-ruby)、C拡張版かつDigest系のAPIを使用し…

Overflow v0.1.0リリース

https://github.com/ksss/overflow 勢いで作ったライブラリをちょちょっと整理してNumericクラスを継承させました。 だからどうということはあまりないのですが、Numericのメソッドが全て使えます。 http://docs.ruby-lang.org/ja/2.0.0/class/Numeric.html …

limits v1.0.0リリース

https://github.com/ksss/limits gem作成練習お題並に簡単なものなのですが、C言語の #include <limits.h> で宣言される定数をRubyで呼べるようにしただけのものです。 require 'limits' p Limits::CHAR_MAX みたいな感じで呼べます。</limits.h>

Overflow v0.0.1リリース

https://github.com/ksss/overflow とは言え作り途中なのに見切り発車的に出しちゃいました……! Rubyでは桁あふれは通常有り得ません。Fixnumを超える数値(0x4000_0000_0000_0000以上?)になるとBignumに自動的に切り替わります。 しかしbit操作をしてわざと…

Digest::MurmurHash v0.2.1リリース

というわけでDigest::MurmurHashの内部にあった、ただ文字列を溜めておくだけのクラスを切り出して別GemのDigest::StringBufferとして、これを継承するようにした版を作りました。 またMurmurHash2Aアルゴリズムを追加。ハッシュ値を数字として取り出すrawdi…

Digest::StringBuffer v0.0.2リリース

Digest::StringBufferというgemをリリースしました。 経緯 Digest::MurmurHashを書いていて、これがCRuybでbuilt-inのDigest::Baseを継承するように書いていたのですが、殆どのメソッドを上書きしているため「継承する意味ねぇ……」と思ったのでこれをやめま…

Digest::MurmurHash v0.1.0リリース

https://github.com/ksss/digest-murmurhash 昨日出したv0.0.1に引き続き改良を加え、v0.1.0をリリースしました。 変更点は以下 bench用スクリプト添付 メモリ管理を自前で実装 to_iメソッドの追加 bench用スクリプト添付 前回で5%しか速度が上昇しないとい…

Digest::MurmurHashリリース

現在「とりあえずDBMを作ってみようプロジェクト」をやっていて、効率はとりあえず無視してDBMの根本的な機能(get,set,delete)だけを実装するならすぐに出来てしまうので時間効率・空間効率をどれだけ高められるかの勝負になってきます。 そこで時間効率・空…

RubyのC拡張書くときのメモ

AsciiPack を書いている時にやりながら理解していった概念メモ 前提として読めるだけのドキュメント(README.EXT.ja,『Rubyソースコード完全解説』サポートページ,リファレンスなど)は読む。 C言語を書くときに考えなければいけないのがメモリ空間。 特にRuby…

ジョークで書いたrubyのMessagePackもどきgemをcで書いたら匹敵するぐらい早くなった

前回のあらすじ http://ksss9.hatenablog.com/entry/2013/10/19/131215 以前書いたAsciiPackというgemをrubyのコードからc拡張へと書き換えてみました。 AsciiPack https://github.com/ksss/AsciiPack 差分 https://github.com/ksss/AsciiPack/commit/d8a53d…

文字だけのMessagePack風シリアライザ「AsciiPack」を書いた

きっかけは@miyagawaさんのpodcastだった。 それまでMessagePackのことは知らなくて、その時に調べた段階ではJSONをバイナリでどうこうするというフワフワした情報だけしかわかってなかった。 それからアンテナ効果なのかMessagePackの情報が次々と入ってく…