Ruby

SinatraでFlashをつかう

Flashっていうのは、次以降のリクエストで一回だけ使えるメッセージ的なやつです。 これもSinatraっていうかRackのミドルウェアです。 ってかRackがすげー。まだまだ使えるミドルウェアが多そうですね # github sudo gem install nakajima-rack-flashrequire…

SinatraでCSRFのチェック

SinatraっていうかRackのミドルウェアでありました。 sudo gem install rack_csrf# app.rb require 'rubygems' require 'sinatra' require 'rack/csrf' get '/' do @msg = 'Hello World' erb :index end post '/' do @msg = 'Hello CSRF' erb :index end con…

Sinatraのパフォーマンスアップ作戦

自サービスを続々とSinatraってます。 その際、パフォーマンスアップを狙い、Memcached(+memcache-client)を利用した、Railsのフラグメントキャッシュライクに使えるExtensionを書きました。 使い方やコードはコチラにあります http://github.com/gioext/sin…

Atomフィードの出力方法

Sinatraでbuilderを使ってAtomフィードを出力する方法です。 何故かドキュメントに記述されてないので、メモ代わりに。 # ./app.rb require 'builder' get '/feed' do @entries = DB[:entries].reverse_order(:id).limit(10) content_type "application/atom…

2ch画像まとめ on Sinatra

自サービスをSinatraに置き換え始めた。とりあえず2ch画像まとめを置き換え。 ついでに見た目もちょっと変更http://pic2ch.giox.org/Sinatra素敵です。 フロントWebサーバーをNginxにしたいなー

サーバー周りが罠すぎる

Sinatra+WEBrickが動かない。Shotgun+Mongrelも動かない。 なんて罠なんだろう。 開発にはShotgun+WEBrickを使えってことですね。

開発時のコードリロード

Sinatraの最新版からDevelopment時のコードリロードがなくなったようです。 リリースノートによるとhttp://rtomayko.github.com/shotgun/これ使えと。 gem install shotgunshotgun hello.rb あとRackの1.0でも動くようなったようで。嬉

SinatraのSessionには注意

SinatraでSessionはこんな風に使えます enable :sessions get '/foo' do session[:message] = 'Hello World!' redirect '/bar' end get '/bar' do session[:message] end SinatraではRackのCookieSessionをつかってるのですが、secretキーを指定していないた…

Lanczos拡縮アルゴリズムの実装

原理 画像の拡大縮小アルゴリズムはいくつか存在します ・ニアレストネイバー ・バイリニア ・バイキュービック ・Lanczos-2 ・Lanczos-3この中で理論上最も美しいとされているのはLanczos-3であり、漢はだまってこの方法を選ぶべきなのですが、いくつかの実…

2ちゃんねるBOTの作り方 実装編2

2ちゃんねるBOTの作り方 準備編 - GIOの日記 2ちゃんねるBOTの作り方 設計編 - GIOの日記 2ちゃんねるBOTの作り方 実装編1 - GIOの日記 同じファイルをダウンロードしないようにしよう この機能は実装方法に悩む 1.DATを前回読み込んだ分だけシークさせて、…

2ちゃんねるBOTの作り方 実装編1

2ちゃんねるBOTの作り方 準備編 - GIOの日記 2ちゃんねるBOTの作り方 設計編 - GIOの日記 必要な機能を思いだそう 1.掲示板一覧からニュー速VIPのURLを取得 2.ニュー速VIPの全てのスレッド情報を取得 3.全てのスレッドから全ての画像URLを取得 4.全ての画像…

2ちゃんねるBOTの作り方 設計編

2ちゃんねるBOTの作り方 準備編 - GIOの日記 要件を固めよう 1.ニュー速VIPの全てのスレッドから画像を取得 2.シンプルに! 3.テストコードは書かない! プログラム言語を決めよう 何でもいいです。 パフォーマンスを求めるならC、C++やJavaで。 今回は読み…

2ちゃんねるBOTの作り方 準備編

アホな話 2ch画像まとめというウェブサービスをご存知でしょうか。 クロール?スパイダリング?スクレイピング?いわゆるBOTが2chに書き込まれた画像を取得し、 まとめて見れるようにしたサイトなのですが、今日、次の記事を見つけた。 http://www.oshiete-k…

Threadの話

最近Rubyでクローラを書いた。 なかなか気合いの入った動きをみせ、一晩で3Gバイトものデータをダウンロードしてくる。 また、それに比例して処理も遅くなる為、Threadを使うことにした。RubyでのThreadはグリーンスレッド、つまり1つのカーネルスレッドに対…

Passengerを試してみた

sudo gem install passenger passenger-install-apache2-moduleおもむろにEnter。たりないものは教えてくれるのでインストール 最後に設定も教えてくれる testユーザーのHOMEにtestというrailsアプリを作成 cd ~/ rails test cd test ruby script/generate s…

Rails勉強会東京第30回

初rails勉強会でさらに勉強会自体初でしたが、皆おもしろくてめっちゃ楽しかった! 一人で趣味的に勉強するより、こういった会に参加する方が良いですね。 セッションの詳細は他の方に任せて感想だけ書きまs 前半はAWDwR 3rdを読むセッションに参加 ちょっと…

RCV

Ruby-Gnome2で、PixbufLoader#writeが異常に重いときがある。 1枚の画像を読み込むのに1秒以上かかる。なんだろうこれ・・ またもやUbuntuのバグ?これじゃあ使えないなぁ。うーむ

zipフォーマット

仕様書 を読みながらunpackしたりして遊んでみた。 io = File.open("test.zip", "rb") #header header = io.read(30) headers = header.unpack("VvvvvvVVVvv") # file name puts io.read(headers[9]) # extra field io.read(headers[10]) # data data = io.r…

ziprubyを試してみた。

2008-04-24 - lambda {|diary| lambda { diary.succ! } }.call(hatena)現在RCVではzipファイルの読み込みにrubyzipを使用しています。 同様の処理でziprubyを使った場合と比較してみます。 対象は4000個のjpg画像をzipにしたファイルです。 ファイル名のみの…

RCV 0.0.5

リリースしました。変更点 ・Ubuntu8.04にアップデートしたことでPixbufLoaderバグが修正された。 (Ubuntu7.10では動きません) ・上記によりTempfileを止め、メモリ内データを使用するようにしました。 ・ブックマーク機能を若干強化しました。 ・色々バグ修…

RCV

RCVというシンプルなViewerを作ったのでrubyforgeに登録しました! http://rubyforge.org/projects/rcv/ インストール gem install rcv 実行 $ rcv or $ rcv zipfilename 特徴 ・Ruby + Ruby/Gnome2環境で動作。 ・RubyZipを使いZipファイルを読み込み、画像…

Interpreter 2

デザインパターンでもインタプリタでもないのですが、前回の内容を DSLっぽくしてみました。 class Command def self.eval &block c = new c.instance_eval &block end def go puts "Go!" end def left puts "Left!" end def right puts "Right!" end end Co…

Interpreter

デザインパターン入門を読んだ後、思いだしながら 実装してみました。何か違うな。 class Itpr def self.eval str p = Program.new(Lexer.new(str), CommandExecuter.new) p.parse end end class Parser def initialize lexer, exec @lexer = lexer @execute…

WEBrick+Rack

WEBrickとRackのリクエスト処理周りを読んだ。 この様に、サーバーに依存するHandler部分 (WEBrickならservice()、Mongrelならprocess()) を吸収し、ユーザーが定義したcall()を動作させる。 require "rubygems" require "rack" class Hello def call env …

Ramaze+Rack

Ramazeを読んでいたらRackで躓いた。 そしてRackを読む。Rack楽しいっ。パズルみたいです。 Christian Neukirchen is Code artist の異名は伊達じゃないですね。http://d.hatena.ne.jp/authorNari/20080228/1204165723

興味

興味のあるキーワードを並べておきます。Thin Ramaze

Singleton

require "singleton" module Singleton1 class Card include Singleton def use print "hello\n" end end end s1 = Singleton1::Card.instance s2 = Singleton1::Card.instance p s1 p s2 s1.use => #<Singleton1::Card:0xb7c74540> #<Singleton1::Card:0xb7c74540> hello 洗練された標準ライブラリを使いましょう。</singleton1::card:0xb7c74540></singleton1::card:0xb7c74540>

はてなブックマーク

今さらですけど、 「このエントリーを含むはてなブックマーク」ボタンを 追加しました。 Rankomic

FactoryMethod その4

今回は動的にFactoryを生成しています。 るびまの添削記事からパクりました。 module FactoryMethod class IDCard def initialize(str) @owner = str end def use "#{@owner}のカードを使います" end end class Factory def create(str) create_product(str)…

FactoryMethod その3

IDCardとIDCardFactoryは強い依存関係にある。 しかも型が無いため抽象クラスのようなものは必要ない。 それらを考慮するとこうしてもいいかも。 module FactoryMethod module Factory def create(*arg) product = new(*arg) puts product.owner product end…