monoの開発ブログ

プログラム開発の記録

Ubuntu+Apache+Rack+FastCGIな環境でSinatraを使う

without comments

Sinatraはあっさり動いてくれました。
以下手順のメモです。

sudo gem install sinatra

ファイルの記述

前回テストしたrack-testディレクトリ以下に次の3つのファイルを配置します。

.htaccess

ファイルやディレクトリが存在しない場合にはリクエストをすべてdispatch.fcgiへ投げるようにします。

RewriteEngine On
RewriteBase /

DirectoryIndex dispatch.fcgi

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ dispatch.fcgi/$1 [L]

start.rb

ここにはアプリケーション本体のコードを記述します。

require 'rubygems'
require 'sinatra'
get '/' do
  'Hello, World!'
end

dispatch.fcgi

start.rbを読み込んでFastCGIとして起動させているだけのコードです。

#!/usr/bin/env ruby
require 'rubygems'
require 'rack'
require 'sinatra'

require 'start'
Rack::Handler::FastCGI.run Sinatra::Application

テスト

このコードを動かしてみると、うちではなぜか出力が以下のようになってしまいます。

He

ある程度出力が長ければ(30文字程度)途切れずに表示されるので実害はないのですが、よく分からない感じです。

Written by mono

3月 4th, 2010 at 10:33 pm

Posted in Linux, Ruby, Ubuntu, Web

Tagged with , , , , , ,

Ubuntu+Apache+Rack+FastCGIな環境でRubyを動かしてみる

without comments

情報量が少ないのでメモ。
苦労したのは情報量が少ないというのと、fastcgiとfcgidで情報が混じっていて混乱させられるとう点だけで、実際にやることはそれほど難しくありません。
特にRubyのコードはRackがFastCGIを扱う部分をすべて吸収してくれるので、自分ではなにもする必要がありません。
すてきですね。

必要なモジュールのインストール

sudo aptitude install libapache2-mod-fastcgi libfcgi-dev
sudo gem install fcgi rack

aptitudeで失敗する場合には、/etc/apt/sources.listを編集してsudo aptitude updateを行う必要があるようです。
追加すべきURLは「ubuntu パッケージ名」で検索すれば見つかると思います。

設定ファイルの編集

/etc/apache2/mods-available/fastcgi.confを編集します。

<IfModule mod_fastcgi.c>
  AddHandler fastcgi-script .fcgi
  FastCgiWrapper On
  FastCgiIpcDir /var/lib/apache2/fastcgi
</IfModule>

FastCgiWrapperはsuEXECを利用する場合に、FastCgiIpcDirはtmpwatchが動作している場合にそれぞれ設定が必要らしいです。

Hello World

適当にVirtualHostを設定してルートにhello-world.fcgiを配置

#!/usr/bin/env ruby
require 'rubygems'
require 'rack'
app = Proc.new do |env|
  Rack::Response.new.finish do |res|
    res.write "Hello, Rack!"
  end
end
Rack::Handler::FastCGI.run app

あとはApacheを再起動してURLにアクセスすれば、Hello, Rack!と表示されるかもしれません。

次はこの上でSinatraを動かせたらいいなぁと思ってます。

Written by mono

3月 4th, 2010 at 1:00 pm

Posted in Linux, Ruby, Ubuntu, Web

Tagged with , , , , ,

RubyでGmailを利用したメール送信

without comments

GmailのSMTPを利用してメール送信するためにTLSが必要ですが、Ruby 1.8系列では標準で利用できません。以下にRuby 1.8系列でTLSを利用するための方法をメモしておきます。

tlsmailというライブラリを利用するので、あらかじめインストールしておく必要があります。

sudo gem install tlsmail

ライブラリがインストールされた状態で以下のように記述すればGmailを利用したメール送信が可能です。

require 'rubygems'
require 'net/smtp'
require 'openssl'
require 'tlsmail'

host = 'smtp.gmail.com'
port = 587
helo = 'gmail.com'
user = 'abc@gmail.com'
password = 'password'

Net::SMTP.enable_tls OpenSSL::SSL::VERIFY_NONE
Net::SMTP.start(host, port, helo, user, password, :plain) do |smtp|
  # メール送信
end

ちなみに、Gmailでは拡張子が.exe、.zip、.tar、.tgz、.z、.gzのファイルを添付ファイルとして送信することはできません。
downloaderでは、この問題に対してファイル名の末尾に_(アンダーバー)を付加することで強引に対処しています。

Written by mono

2月 26th, 2010 at 11:20 pm

Posted in Google, Ruby

Tagged with , , ,

Perfume Headlineの現状について

without comments

2chは規制されていて書き込めないのでこちらで。

Perfume Headlineの本体であるまとめ氏の書き込みを配信する部分については、現在も正常に動作しているはずです。
メンバーとスタッフのBlogについては、オフィシャルサイトのリニューアルに対応できていないため動作を停止しています。PTOさんはすでに対応されているようなので、そちらを利用されることをお勧めします。

【PTO】Perfume Thread Outliner【チキプン】

Written by mono

2月 15th, 2010 at 11:17 pm

Posted in Perfume, Ramaze, Ruby

Google Chromeのtextareaを外部エディタで編集する (Ruby版)

without comments

Google Chrome のテキストエリアを外部エディタで編集する Edit with Emacs

自分のPCにはPerlがインストールされていないので、Rubyで書いてみました。Perlは分からないので勘で移植しましたが、一応動作しているようです。

#!/usr/bin/ruby -Ku
require 'webrick'
require 'tempfile'
require 'kconv'

$EDITOR = 'C:\vim\gvim.exe'
$PORT = 9292

server = WEBrick::HTTPServer.new(:Port => $PORT)

trap('INT') { server.shutdown }

server.mount_proc('/status') do |req, res|
  res.status = 200
end

server.mount_proc('/edit') do |req, res|
  temp = Tempfile.new('editwith_')
  temp << req.body
  temp.close false
  system $EDITOR, temp.path
  temp.open
  res.body = temp.read.toutf8
  temp.close
  res.status = 200
  res['Content-Type'] = 'text/plain'
  res['Content-Length'] = res.body.size
end

server.start

$EDITORと$PORTを適切に設定すれば動作するんじゃないかと思います。

Written by mono

1月 30th, 2010 at 7:26 pm

Posted in Chrome, Google, Ruby

Tagged with ,

Mobile Safariのコピー禁止を解除するBookmarklet

without comments

iPhone向けにデザインされたWebサイトでは、誤操作を防止するためかテキストのコピーが禁止されている場合があります。
確かに微妙な操作性なので禁止したくなる気持ちも分からなくもないのですが、さすがにブログなどテキストが中心のサイトでコピーを禁止されていると不便ですよね。
そこで、Webサイトのコピー禁止を一時的に解除することができるBookmarkletを作成しました。

コピー禁止を解除

上のリンクをPCのブラウザでブックマークに追加して同期するか、iPhone上のSafariで適当なページをブックマークに追加したあとURLを以下のものに置き換えると導入できます。
コピーが禁止されているWebページで導入したBookmarkletを実行すると、一時的にコピー禁止が解除されます。

javascript:(function(){document.body.style['-webkit-user-select']='auto%20!important';})();

Written by mono

1月 29th, 2010 at 5:41 pm

Posted in JavaScript, iPhone

Tagged with , ,

セキュリティ&プログラミングキャンプ・キャラバン2009 -名古屋-に参加

without comments

セキュリティ&プログラミングキャンプ・キャラバン2009 -名古屋-に参加してきました。
この手のイベントに参加するのは初めてでしたが、とてもよい経験になりました。というわけで簡単に感想を並べておきます。

情報セキュリティ基礎 – 園田道夫先生

そもそも「個人情報」は守るべきなのか?という視点がとても面白かったです。
重要なのは各個人が「個人情報」をどこまで公開するのかをコントロールすることのようですね。

プログラミング基礎 – 吉岡弘隆先生

オープンソースと勉強会ともに私は関わったことのない世界だったのでとても新鮮でした。
これからは興味のあるコミュニティを見つけて積極的に参加したいところです。

プログラミング言語組 – ささだこういち先生

ネット上でYARVについてのプレゼンを見たことがあったので後半の技術的なさわりについては既知だったのですが、キャンプでの言語組の内容についてはとても楽しそうで関心が持てました。

OSを作ろう組 – 河合秀実先生

話がとても楽しくて引き込まれてしまいました。
途中省略があるとはいえ、ブートからグラフィック表示までを30分で解説しつつ作成されたのには驚きです。

マルウェア解析 – 村上純一先生

登場するキーワード自体は聞いたことのあるものも多かったのですが、把握できていない内容が多かったのでぜひ勉強したいと感じました。
低いレベルの知識はCPUやOSの理解にも繋がりますしね。

脆弱性、指摘する人される人 – 竹迫良範先生

脆弱性が発見されたというニュースを見聞きすることはあっても、実際にその脆弱性がどのように報告、対応、公開されるかという流れについて考えることはほとんどないので新鮮でした。
脆弱性に「対処しない」という選択肢も、考えてみれば当然のことなのですがこれまで思い至りませんでした。

まとめ

これらの講演もとても素晴らしかったのですが、今回最も刺激を受けたのは参加者がとても若かったことです。
自分と同年代(大学生)程度が中心だろうと勝手に想像していたのですが、実際には高校生が非常に多く、中学生までいるのですから驚きです。
自分が中学生だったころのことを思うと若干凹みますね。
そんなわけで、何とか負けないように頑張りたいです。

あと、名刺は重要ですね。あらかじめ用意しておかなかったために交流の幅をかなり狭めてしまった感じです。
次回以降は必ず用意しておこうと思いました。

最後になりましたが、このような大変貴重な機会を設けてくださった主催者およびスタッフのみなさんに感謝します。
ありがとうございました!

Written by mono

1月 24th, 2010 at 1:27 am

Posted in 未分類

ニコニコ大百科「面白げなページ・動画」のRSSを作ってみた

without comments

ニコニコ大百科の右サイドバーにある「面白げなページ・動画」をご存じでしょうか?
個人的には比較的面白い確率が高いので気に入っています。

実はここに載っている動画はフロッグ!というサービスでピックアップされているものと同一であり、フロッグ!のサイトにあるRSSを購読すればひとまず同じ情報を手に入れることが可能です。
しかし、このRSSに含まれているリンクはフロッグ!上のクッションページを挟んでおり、直接動画が再生できないため微妙に不便です。
そこで、クッションページを経由せず、直接動画を開くことができるフィードを作ってみました。

Pipes: 面白げなページ・動画

生成にはYahoo! Pipesを使い、ニコニコ大百科のHTMLをスクレイピングして実現しています。
また、これは想定外だったのですが、HTMLをそのまま持ってきたことで動画のサムネイルを見ることができるというメリットもあります。

Written by mono

1月 16th, 2010 at 9:45 pm

Posted in Web

Tagged with , ,

Dropboxでdotfilesを同期するメモ

without comments

最近VirtualBox上でUbuntuを使うようになったので、Dropboxを使ってWindows 7とUbuntuでdotfilesを同期するようにしてみました。
以下にVimの設定を例とした手順のメモをまとめておきます。

完成形のイメージ

  • 「My Dropbox/dotfiles」(Linux側では「~/Dropbox/dotfiles」)以下にdotfilesの実体が配置される。
  • シンボリックリンクを利用してホームディレクトリ直下にdotfilesへのリンクを作成する。

Dropboxアカウントの作成

アカウント作成ページからアカウントを作成し、WindowsとUbuntuにそれぞれクライアントをインストールしておきます。

Windows側の設定

Windows Vista以降ではシンボリックリンクを作成するコマンドmklinkが存在するため、これを利用します。
コマンドプロンプトをコンテキストメニューから管理者として実行し、以下のように入力すると、シンボリックリンクが作成されます。
なお、環境変数HOMEにホームディレクトリが入っていることを前提とします。

mklink "%HOME%\_vimrc" "%HOME\Documents\My Dropbox\dotfiles\.vimrc"
mklink "%HOME%\_gvimrc" "%HOME\Documents\My Dropbox\dotfiles\.gvimrc"
mklink /D "%HOME%\vimfiles" "%HOME\Documents\My Dropbox\dotfiles\.vim"

Ubuntu側の設定

Linuxではリンクを作成するコマンドlnに-sオプションを指定してシンボリックリンクを作成します。
ターミナル上で以下のように入力すると、シンボリックリンクが作成されます。
なお、引数の順番がWindowsと逆なので注意が必要です。

ln -s ~/Dropbox/dotfiles/.vimrc ~/.vimrc
ln -s ~/Dropbox/dotfiles/.gvimrc ~/.gvimrc
ln -s ~/Dropbox/dotfiles/.vim ~/.vim

Windows上のVimでの注意点

Windows上のVim(Kaoriyaで公開されているバージョン)では、シンボリックリンクを開いて保存すると通常のファイルに置き換えられてしまう問題が存在します。
そのため、Windows上でdotfilesを編集する場合にはMy Dropbox\dotfiles以下にある実体を開く必要があります。

Written by mono

1月 12th, 2010 at 9:00 pm

Posted in Linux, Ubuntu, Windows

Tagged with , , , ,

Vimのテキストオブジェクトもどきを実現するEmEditorのマクロ

without comments

Vimのテキストオブジェクトもどきを実現するEmEditorのマクロを公開しました。

ダウンロード

EmEditorは基本的にモードレス(もちろん挿入モード、上書きモードは除外。また、一応viっぽくするプラグインもあるようです)なので、マクロを起動するために1ステップ操作が増えてしまうという難点はありますが、そこそこ便利に使えています。
まあこんなことする暇があったらVimを使えって話なんでしょうけどね。

Written by mono

1月 5th, 2010 at 4:20 pm