Ruby

Mrtable: 機械可読なテキストテーブルフォーマット

概要 機械可読でプレーンテキストなテーブルのフォーマット mr = machine readable machine readable かつ human readable(というのが欲しくて考えました) 簡単な説明 ベースは GFM(github flavored markdown)のテーブル 各セルの内容は JSON の文字列と…

Sinatra + WEBrick + Comet で簡単なチャット

サンプルチャット 試しにということで最低限の骨組みだけのものを書いてみました。チャット初めて書きました。Thread::Queue も初めて使いました。 sonota88/sinatra-webrick-samplechat https://github.com/sonota88/sinatra-webrick-samplechat 現時点( …

(Ruby) PTY.spawn("bash -i")でコマンド実行してプロンプトをexpectしつつ途中の出力も随時表示する

expectで素朴にプロンプトを待つだけだとコマンドの実行が完了するまで途中の出力が表示できなくていまいちだったのであれこれ試して下記のようにしてみた。 プロンプトのパターンに改行が含まれる場合はもうちょい工夫(途中の出力をバッファリングしておく…

WEBrick::HTTPServer + 標準ライブラリのLogger + ローテーション

「WEBrick」「Logger」「標準ライブラリ」「ローテーション/ローテート」とかのワードでググってもそれっぽいのがサッと出てこなかったのでメモ。 第 2 引数に 'daily' などの文字列を指定すると、 期間を基準にしてログをローテーションしてくれます。 (略…

Rubyで素朴なSA-IS(suffix array induced sorting)を書いてみた

FM-indexと同様に、ほぼ最適化をしていない素朴な実装を作ってみました。元の論文の実装は空間効率まで考慮して書かれていてすごい! ……のですが、まずはそれ以外の部分の仕組みを理解したかったので、以下のコードではそこらへんも無視しています。 コード …

Rubyで素朴なFM-indexを書いてみた

BWT、検索処理の最適化・高速化は行なっていません(SA-IS、ウェーブレット行列などは使っていません)。 BWT から検索まで全体の流れが見渡せる最小限の実装にしました。 せっかくなので Ruby に馴染みのない方が見ても読みやすいと思われる書き方にしてい…

WEBrickでファイル公開+IPアドレスでアクセス制限

ローカルファイルシステムのファイルをHTTPで取得できるようにする(Ruby/WEBrick) | anobota ↑これにアクセス制限を付けたい。 #!/usr/bin/env ruby # -*- coding: utf-8 -*- require "webrick" def hostname_white? hostname /^white_hostname_pattern$/ …

Ruby: systemで終了ステータスをチェックして例外を投げる

よく使うのでスニペット的にメモ。 def _system(cmd) $stderr.puts "command=#{cmd}" system cmd status = $? # Process::Status unless status.success? raise "abnormal exit status (status=#{status.exitstatus} pid=#{status.pid})" end end (2019-03-…

(solved) WEBrick+CGI encoding error / WEBrick+CGIでエンコーディングのエラー

webrick で CGI を動かすとこういうのが出る: Encoding::CompatibilityError: incompatible character encodings: ASCII-8BIT and US-ASCII Encoding::InvalidByteSequenceError: "\xE5" on US-ASCII 該当箇所で STDERR.puts Encoding.default_external する…

RubyからGroovyの標準入力に渡して処理させて出力を読む

発端: 一部の処理を Java でやりたい(URLエンコードだかBase64エンコードだかの結果が Java と Ruby で微妙に違うとかで…) ちょろっと使いたいだけなので Groovy でいいんじゃないか? こういうのは JRuby 使った方がいいのかもしれません(使ったことがな…

MySQLの一般ログを見やすく表示するツールを作ってみた(Ruby製)

見にくかったので。http://github.com/sonota/mysql-log-viewer Ruby+WEBrick+CGI とりあえず自分のが手元で見られればよくて、複数人でとかリモートの…とかは考えてない google-code-prettify の prettify.css と prettify.js を置いておくと SQL を構文ハ…

複数のgemに関する情報を表示する

○○がしたい!!!! どんなライブラリがあるか調べよう! gem search ○○ --remote する 名前だけたくさん出てくる… 調べるのめんどくさい………… というわけで適当にやっつけで書いてみました。 require "yaml" require "rubygems/specification" search_word =…

Ruby: 検出フラグをmap+anyで置き換える

# each + 検出フラグ def exclude_by_domain(exclude_url_heads, urls) urls.reject{ |url| match = false exclude_url_heads.each{ |head_re| match = true if head_re =~ url } match } end # map + any def exclude_by_domain_map_and_any(exclude_url_he…

Ruby: クラスはオブジェクト / クラスと普通のオブジェクトを比べてみる

「クラスはオブジェクト」とは言うけれど、そうは言っても、ふだん普通にベタにクラスを使っているときのイメージが邪魔をして???となってしまう。じゃあ普通のオブジェクトと並べてみようか、ということで例 2つ。 Ruby のバージョンは 1.8.7。 new ## 1…

別のインスタンスのprotectedなメソッドの呼び出し

メモ。 class Foo protected def foo puts "foo" end public def bar Foo.new.foo end end # Foo.new.foo #=> protected method `foo' called for #<Foo:0xb77818bc> (NoMethodError) Foo.new.bar #=> foo class Foo protected def foo puts "foo" end end class Bar < Foo d</foo:0xb77818bc>…

Ruby + scrot + cURL + フォト蔵API で Gyazo ごっこ(Linux用)

切実な必要性に駆られたわけではなく、思いついたのでなんとなく脊髄反射的に作って見ました。scrot、cURL、beep、xclip に依存しています(beep は必須ではありません)。エラー処理とかはほとんどやってないです。Windows 向けに修正したいという場合は sc…

日本の国会議員の名前とウェブサイトのURLのリストを得るRubyスクリプト

やっつけです。タブ区切りで標準出力に吐きます。ソースとして政治家WEBリンク集 http://db.kosonippon.org/link/link.phpを使いました。ちなみに 衆議院 480 + 参議院 242 = 722 このスクリプトで得た件数 = 676 です。食い違いの理由については「ウェブサ…

RubyでXPathGraphのようにURLとXPathから数値を取得

XPathGraphだと特定のURL(+XPath)の場合に取得に失敗する でもデータを取って見てみたい というわけで自作したら1行で済んだ require "open-uri" require "rubygems" require "nokogiri" def xpathgraph_modoki(url, xpath) Nokogiri::HTML(open(url)).xpa…

NHK週刊こどもニュース「ニュースまるわかり」のフィード作成用Yapraプラグイン

「ニュースまるわかり」は以前「今週の大ハテナ」だったコーナーです。 RSS::save などに渡して使ってください。 =begin config example: - module: KodomoNews::hatena config: recent: 10 # optional =end require "rubygems" require "yapra/plugin" requ…

dropbox start して同期が終わったら dropbox stop するRubyスクリプト

# dropbox-sync.rb module Dropbox def self.exec(cmd) puts cmd `#{cmd}` end def self.sync self.exec %Q!dropbox start! loop do result = exec( %Q!dropbox status! ) p result break if result == "Idle\n" sleep 5 end self.exec %Q!dropbox stop! end…