hirax.net::Keywords::「rails」のブログ



2009-03-14[n年前へ]

"inside out"トップページの仕様を変えました 

 『記事URLを「わける」ことについて』では、(inside out/Tech-logs/Logos)のトップ表示URLを分けるか・分けないか、についての悩みを書きました。

 もしかしたら関係ある話題を、ひとつにまとめたりしたくない、そんな気持ちがあったりするのかもしれません。

 どうしたものかと思い、何度も迷いながら、今は「わかりにくい」方を選んでいます。

 ある自分なりの程度の内容を含むものか、それともコメント・メモ程度のものか、あるいは、引用かといった「内容/書き方」が異なっているとはしても、やはり同一の時に、同一の人間が書いているわけで、その根っこは本来一つなのだろうと思います。ですから、複数(のURL)に分けておくのも何だか少しわかりにくいようにも思います。

 今日、ふと少しコードを変えました。inside outのトップページ(/diaryweb/)は、"inside out""Tech-logs""Logos"をすべて表示するようにしました。どちらの方が良さそうか、少しようすを見てみようと思います。

2009-03-21[n年前へ]

ノートPC用電子ペンを使ってみたい!? 

 「タブレットPCとデータ処理ソフトウェアの相性は最高」ですが、もちろん絵をかく作業との相性はさらに良いわけです。というわけで、以前、(Railsの腕試し用に)作った「ラクガキ→類似画像検索→画像合成」のWEBサービスをタブレットPCで操作してみたのが、下に張り付けた動画です。やはり、絵を描くようなイメージ的な作業には、マウスよりペン(タブレット)が似合うような気がします。

 そういえば、ノートPCに手軽に取り付けて使用する電子ペン(何と9980円の!)なんていうのもありました。

 ノートPCのディスプレイにUSB接続の専用受信機を取り付けると、専用ペンを使って液晶画面に書いた文字を認識し、ペンタブレットとして使用できる電子ペン。液晶ディスプレイは15.4型以下のサイズに対応する。専用ペンの解像度は600dpi。
 タブレットPCは敷居が高いと感じる人、あまりタブレットPCの必要は感じず、今すでにあるノートPCで十分という人たちも多いと思います。けれど、このノートPCに装着できる「電子ペン」くらいであれば、(何しろ9980円ですから)トライしてみるのも面白いかもしれません。




2009-04-27[n年前へ]

素人がRails入門書を買ってWEBサーバを立ち上げた後の苦難の道 その1 

 これは、あくまで”素人”が、自分で作った「自分のWEB LOG(というより、やはりWEB日記)」を運用するまでの(これからもまだまだ続くだろう)苦難の道の記録です。

 書店に並んでいるRailsプログラミング本を買い、小さなプログラムを書いて、自宅サーバを(手書きHTMLとハイパーニッキシステムから移行し)動かし始めて1年と少し経ちます。今は、趣味サーバとしては普通に動いているようですが、プログラミング素人が書店で入門書を買って、Railsサーバを立ち上げた後は結構大変でした。大変だったといっても、何しろいちばん最初は入門書のステップ1に書いてあるようにInstantRailsをインストールしただけで動かしてみたのです(逆にいえば、一番最初に買った入門書 がそれだけわかりやすく、本を読むだけで簡単にアプリケーションを作ってみることができた、ということでもあります)。当然、キャッシュも使わず、プロセスも1つだけで動かしたわけです。何しろ、知識は書店で買った入門書だけなので、そんな感じで動かしてみたのです。

 すると、たいしたアクセスもないにも関わらず、数分も立たない内にWebrickは反応をしなくなり、サーバはすぐに黙ってウンともスンとも言わなくなってしまいました。今考えてみれば、それは当たり前の話で、画像もファイルも何から何まですべての配信・処理をひとつのプロセスが行おうとしていたのですから、ちょっと無理があり過ぎ、です。そんなわけで、素人が「Rails入門書」のステップ1を読んだだけでサーバを立ち上げた結果は、趣味・個人サーバですら、1時間も安定した稼働をさせることができない状態になりました。

 そこで、次のステップとして、その次に買った本で運用の仕方を学びつつ 、1台のPCでmongrelサーバをクラスタリングさせることにしてみました。次のような感じの(こんな感じというだけで実際に使っているものとは違いますが)スクリプトを書き、10個くらいのmongrelサーバを起動させ、再起動をたまにさせることでメモリーリークや、いろんな問題に目をつぶって動かしてみることにしたのです。

# gem install win32-process
# gem install windows-pr

require 'win32/process'
require 'windows/handle'
include Windows::Process
include Windows::Handle

class ProcessController
 def initialize(command)
  @pi=nil
  start(command)
 end
 def start(command)
  @pi=Process.create(
   :app_name=>command[:cmd], 
   :cwd=>command[:cwd])
 end
 def stop
  Process.kill(9, @pi.process_id)
  CloseHandle(@pi.process_handle)
 end
end

@comands=[
  {:path=>"Z:\\blog",
   :cmd=>'mongrel_rails start -p 8080 -e production'},                                        
  {:path=>"Z:\\blog",
   :cmd=>'mongrel_rails start -p 8081 -e production'}]

while true
 @proccesses=[]
 @comands.each{|comand|
  @proccesses << ProcessController.new(comand)
 }
 sleep 60*60*24
 @proccesses.each{|process|
  process.stop
 }
end

 しかし、素人がRails入門書を買ってWEBサーバを立ち上げた後の苦難の道は、まだまだその先も長かったのです。今もたくさん問題を抱えているのですが、とりあえず、二番目に生じた課題は、プログラミングに時間を使うのが嫌だったので、負荷分散をPCの数で解決しようとした時に起きた色んなトラブルでした。

2009-05-23[n年前へ]

Railsでの「名前指定無し引数」の渡され方 

hirax.netは、現状、Railsを使ったシステムで動いています。「hns(ハイパー日記システム)時代のURLを蘇らせる」のに、Railsのコントローラで対応しました。 hnsを使い始めた頃のURL、Apache mod rewriteでhnsをPermaLink化する前には、
  http://www.hirax.net/diaryweb/?200203c&to=200203290
といった具合で年月日指定が引数渡しでした。そういったアクセスをしても、適切なページが表示されるようにしてみました。

 たとえば、上のURL例の場合には、コントローラが受け取るparamsは{"200203c"=>nil,"to"=>"200203290",・・・}といったものになるので、valがnilのkeyをパースして現在のURL(Apache mod rewriteでhnsをPermaLink化したURLに互換の)にリダイレクトする、というようにしました(to=200203290といった部分は、まだ対応していないのですが、来週にでも対応するようにしておこうと思います)。

 ?200203cといった「名前無し」引数渡しの場合には、keyに引数が入っている(値はnil)ということに、「なるほど」と思わされました。

2009-07-17[n年前へ]

WEBサーバ・アプリを「少し」改造しました 

 hirax.netが動いているWEBサーバのアプリを少し改造しました。改造した点は、「少し」はキャッシュを使うようにしたというところです。改造した理由はサーバの負荷を軽くし・読む側の待ち時間を短くするため、です。

 といっても、大幅な作り直しは面倒だったので、結局、「少し」の手直しだけで済ませてしまいました。その結果、残念ながら、「少し」の効果しか出ていないようにも思われます。今さらながらに、「Railsで開発するときにはキャッシュを予め想定に入れておく」ということの重要さを感じさせられました。

 現状、hirax.net内のページでは、最新記事一覧や、関連記事一覧などを表示するために、RJSを多く使っています。そうした、RJSを吐くActionを(改造が面倒だったので、そのまま)ファイル・キャッシュさせようとして、少しはまってしまいました。RJSを吐くActionのキャッシュ・ファイルをApacheで送出する場合、そのままではContent typeが"text/plain"になってしまいます。そこで、mod_rewiteで、Content typeを"text/javascript"に書き換えてやらないと、RJSを送出するActionをファイルキャッシュで置き換えることができなかった、というのが(ハマりの)「大雑把なあらすじ」になります。他にも、Urlエンコードされた日本語がURLに入っていると、キャッシュファイルが文字化けしたり…といったあたりにも、はまりました(そして、対策をすることをあきらめてしまいました)。

 やはり、コントローラから作り直した方が良いのだろうと思います。しかし、10年前からあるURL構造をそのまま使いまわすことを念頭に置くと、キャッシュがきちんと働くように作り直すのはなかなか面倒そうで、時折「少し」の手直しをする程度になってしまいそうです。とはいえ、トータルの作業量は、(少しの手直しを繰り返すより)作り直した方がずっと少なかったりすることもよくある、ようにも感じるのですが…。



■Powered by yagm.net