Ruby
rubyを書くときはmethod chainでつなげていくことが多いと思いますが、途中でnilが出てきたとき困ってしまいます。例えば str.split("/").last.split(".").last のようなコードがあったときにstrに空文字が入ると途中でnilが出てきて死にます。clojureだとni…
Rubyistなら知ってて当然みたいな内容かもしれませんが、自分で作るのはたぶん初めてのように思うのでメモ。本当はC++で同様のことがやりたいのだが、Rubyのほうがぱっとやるには早いのでとりあえずRubyにて。状況、モチベーションRubyにしろ、C++にしろコン…
ホテルのネットが絶望的に遅くて、はてな(グループ)にLogを書くときに非常にストレスフルなわけなのでして、どうにかしないと死ぬ。前も似たような感じで、ローカルはてなダイアリーっぽいことをやってた。 が、検索とかいらないので、とにかくプレビューだ…
メタプログラミングのメモ。 # -*- coding: utf-8 -*- class MyClass; end hash = {:test => "テストだよ"} MyClass.class_eval do hash.each_pair do |k, v| define_method(k) { v } end end my_class = MyClass.new puts my_class.test メタプログラミング…
さらっと、というよりは一発では分かりそうになかったので、というほうが正しいw。ちなみに本書を読む前の自分が持ってた知識レベルは動的ディスパッチ*1とevalの初歩ってくらいです。メタプログラミングRuby作者: Paolo Perrotta,角征典出版社/メーカー: KA…
年次大会の優秀発表賞を受賞したのを自分のホームページに書くかーと思ってさくらの自分のホームページを更新したりしていて、あれこれしていたら動かなくなったorz。先週末潰しても解決できず、今日やっと解決したのでメモ的に残しておく。明らかに対処法と…
自分用メモ。単語のポジネガをぱっと見で確認するのに結果を色付きで見れると便利。Rubyでそういうgemを作っている人がいたので使わせてもらう。 GitHub - defunkt/colored: Colors in your terminal. Unmaintained. require "colored" puts "this is red".r…
Rubyベストプラクティス -プロフェッショナルによるコードとテクニック作者: Gregory Brown,高橋征義,笹井崇司出版社/メーカー: オライリージャパン発売日: 2010/03/26メディア: 大型本購入: 9人 クリック: 307回この商品を含むブログ (48件) を見る知らんこ…
pdfのtitleを適切に付けさせないと何のファイルか分けが分からなくなるのがkindleの欠点なので。 # -*- coding: utf-8 -*- require 'mechanize' require 'rss' require 'pp' agent = Mechanize.new rss = RSS::Parser.parse(ARGV.shift) prefix = "" prefix …
現実逃避。mecab-ipadic-2.7.0-20070801/char.defとかを見つつ。16進数とかで漢字の範囲がどこからどこまでというような内容のが入っている。この辺詳しくないので、Rubyで確認。 (0x2E80..0x2EF3).each{|c|puts [c].pack("U")} この辺を頑張れば、文字種を…
Trieちゃんと使ったので、それなりの速度になりました。100MBくらいのテキストが40MBくらいまで縮んだかと思えば、2.8MBのテキストが2.6MBにしかならなかったりと圧縮したいテキストの性質によって圧縮率が全然違う感じでした。WEB+DB PRESS Vol.54によると…
してみたはいいけど、激しく遅い。なんでかなーと思って調べているとWEB+DB PRESS Vol.54にid:naoyaさんのPerlでの実装が載ってた。位置どこどこに何があったかを記録しておくような辞書を容易しておくようだ。そりゃ遅くなるな。。。なお、辞書はTrieでやる…
TokyoTyrantをMacで使ってて、以下のコードを実行するとinsertもlook upもうまくいかなかった。 # -*- coding: utf-8 -*- require 'tokyotyrant' db = TokyoTyrant::RDB::new # データベースオブジェクトを生成 db.open("localhost", 1979) # データベースサ…
Ruby1.9でTokyoCabinetを使っていて、UTF-8な文字列をTokyoCabinetのHDB(ハッシュデータベース)につっこんでいって、getするとASCII-8BITで返ってくるということで大分はまっていた(Ruby1.9だと文字コード(String#encoding)まで一致しないと同じ文字列だと見…
Local Hatena Searchはローカルにあるファイルを読み込んでブログ風に表示するソフトウェアだ。記法ははてな記法を使い、Sinatraを使ってWebブラウザ用に表示する。検索機能があるので過去のメモを掘り起こしたりするのも容易だ。 ローカルでもはてな記法で…
Ruby1.8からRuby1.9に変えてからGitHub - iwadon/text-hatena: A Ruby library for Hatena notationが動かなくなったので原因を調べてた。Ruby1.9だと下のようなコードはsyntax errorで死ぬんだけど、1.8だと通る。 l.scan(/([^\|]+)\|/) do |$_, *| if sub!…
Ruby1.9に乗り変えようとしたら、案の定マルチバイト文字列の付近ではまっているのでメモ。初めてのRubyとか見つつ。 Ruby1.8 文字列は単なるバイト列 $KCODE対応しているメソッドは$KCODEの値によって振舞いを変えることがある String#inspectとか 正規表現…
DBとかに保存するために配列(数値が入ってる)をスカラーに圧縮したい。"joinしてsplit"するのと"packしてunpack"だと後者が絶対早いよなーとか思ったけど、どれくらい早いのか気になったので調べてみた。配列はランダムに作ったほうがいいのかな、、、と思い…
というのはぐぐればいくらでも出てきそうな感じですが、それでもはまる僕はなんなんですかね。ということで設定とか。基本的にはSinatraをCGIでもThin等のアプリサーバでも使えるようにする書き方 - 思っているよりもずっとずっと人生は短い。と同じなんだけ…
Rubyならeach_charでいいんでしょうが、C++でそれと同じようなことをしようと思ったらよく分からなかったので。WEB+DB PRESS Vol.53のp108付近(検索エンジンのところ)のことをやりたかった。キモは (byte & 0xC0) == 0x80 の部分で まずUTF-8の符号方式では…
「ollはテキストファイル食わせれば、すぐ実行できるし必要ないかなー」とか思いながらも気がついたらなんか作ってました。 GitHub - syou6162/oll-ruby: wrapper for oll(http://code.google.com/p/oll/) READMEにも書いたけど oll = Oll.new("CW") oll.add…
DBを閉じるetcがきちんとされることを保証したいが、RubyにはC++っぽいデストラクタがあるのかよく分からなかったので調べてみた。こんな感じで、できるっぽい。 class Bar attr_accessor :hoge def Bar.callback(file) proc { puts "bar" puts file } end d…
ここで書いてたやつです。自分で使ってて使い勝手がよかったので、リリースしてみることにしました。githubからダウンロードしてください。 GitHub - syou6162/local_hatena_search: ローカルにあるはてな記法のテキストファイルをBlog風に表示&検索ができる…
なんか最近やたらと遅くないですか、、、ということでどうにかしないと日常生活に支障をきたす恐れがあるので、どうにかする*1。自分ははてダラを使って日記を書いているので、ローカルに全部テキストは持っている。ということで、このテキストを使ってロー…
オーディオ(ICレコーダー/リニアPCMレコーダー/ラジオサーバー) | オリンパスというICレコーダーを使っていて、結構音拾えるし、専用のケーブルなくても充電できたりで便利に使っている。しかしながら、保存されるファイル形式がwmaなので、macでは再生…
某懇親会の画像をDropboxにおいてもらったのはいいのですが、クリックしながら収集とか死にそうだったので、ちょめちょめと書きました。 # -*- coding: utf-8 -*- require 'rubygems' require 'mechanize' require 'hpricot' agent = WWW::Mechanize.new (0.…
ネットに繋がらないところでゼミの準備とかをしていて、「あ、PRMLのこの図を今の資料に入れたい!でも、ネットつながらねー」ということが時々あるので、じわじわと落としてくるスクリプトを書いた。寝る前にでも走らせておいてください。くれぐれもゆーっく…
完全一致はしないけど、部分文字列で見ると専門用語があるという感じなので、分類したいデータは取りうる部分文字列の組み合わせの要素、ということになる。 def comb_of_substr(a) (1..a.length).map{|b| a.enum_cons(b).map{|c| c } }.inject([]) {|z, x| …
6月の間は出現頻度と連接頻度に基づく専門用語抽出にある論文の考え方にそって、C++とかRubyで実装していた。しかし、どうも精度や再現率が低い。id:theclaさんに結果を見せてみたところ「おしいのは結構あるんだけどねえ」という感じで、(精度とかを測る時…
グラフに対する基本的な問題として 最小全域木 最短路問題 最大フロー の3つがあると思う。で、最小全域木は離散最適の課題としてPrim法を使って解いてみたし、最短路問題はベルマンフォードのアルゴリズムをRubyとC++で解いてみた。となったら、最大フロー…