hrkt0115311の、迷えるプログラミング教室  RSSを登録する

プログラミングに興味はありますか? 素人が入門書片手にソースコード書いたりcgi作ったり、迷子になったりするメルマガです。広大なプログラミングの森で、一緒に迷子を楽しんでみませんか?

最新号をメルマガでお届けします    
登録 解除

規約に同意して

登録した方には、まぐまぐの公式メルマガ(無料)をお届けします。
2008/09/19

「hrkt0115311の、教えて習うRuby教室。」Vol.79 ~J?の巻~

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

              〜 Ruby始めました 〜
                                             
                 「hrkt0115311の、教えて習うRuby教室。」Vol.79

━━━━━━━━━━━━━━━━━━━━━━━━━━━━J?の巻

おはようございます。一週間のご無沙汰です。hrkt0115311です。毎回メルマガを
読んでいただきありがとうございます! LDRでRSSを登録して下さっている方も
ありがとうございます。
http://reader.livedoor.com/about/http://archive.mag2.com/0000267290/rss10.xml
バックナンバーをご覧下さっている方にも感謝します。励みになります!
皆様お元気ですか? それから、新たにご登録下さった方々、ありがとうございます。
どうぞよろしくお願いいたします。

それでは、今週のメルマガスタートします。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

○目次
・ J?
・ CGIに向かないスクリプト〜悪魔の証明編〜
・ CGIにしたスクリプトと部分解説
・ 編集後記

━━━━━━━━━━━━━━━━━━━━━━━━━━━免責事項

 ソースコードは、発行者が実際に動かし、構文チェックなどもしていますが
 ご利用になられて万一損害が生じた場合、保証することができません。
 ご利用になられる際は、ご自身でご確認になられた上で、お試し下さい。

━━━━━━━━━━━━━━━━━━━━Rubyの導入方法について

 OSは何をお使いですか? LinuxでもMacOSでもWindowsでも、Rubyの
 公式ページでインストール方法が説明されています。

 ○Ruby Install Guide
 http://preview.tinyurl.com/4ghc3o

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

○ J?

 ・『Jythonプログラミング』
  http://www.amazon.co.jp/dp/4839922829/ref=nosim/?tag=ermg-22

 ・『JRuby 徹底入門』
  http://www.amazon.co.jp/dp/4881666452/ref=nosim/?tag=ermg-22

Rubyも片言なのにお恥ずかしいのですが、『Jythonプログラミング』を読んで
言語同士の長所を組み合わせて面白いことができると知りました。eclipseも
一応ちょっとだけ動かしてみました。初、統合開発環境!!

ええと、途中までうまくいったのですが、JAVAだけ走らせる分には
綺麗に動くのですけれども、Pythonと組み合わせて使おうとすると、なんか
mainなんとかがないってエラーになります。Jythonが使いたいです……
安西先生。

というわけで、ちょっとまて自分と、Pythonも面白そうだけど、その前に
JAVAと連携するならJRubyがあるだろうと小一時間自分を問い詰めまして、
読みました。『JRuby 徹底入門』。えーと。JAVAをもう理解されている方向けの
書籍で、いきなりRailsの話が飛び出してきたりして、たまげました。

RubyでJAVAアプレット動かしてみたいのに><
JRubyはちょっと敷居が高いぞと思いまして、自重しました。

Perlの読み方忘れちゃったし、Pythonもschemeも分からないし、
CもC++もJAVAも分かんないけど、柔らかい言語と固い言語を組み合わせて、
再利用するパーツは固い言語で書き、柔らかい言語を糊みたいに使うと
いいらしいことは学んだので、すっごい遠い目標ですか、いつかその境地に
たどり着きたいのであります。


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

○ CGIに向かないスクリプト〜悪魔の証明編〜

「王様の耳はロバの耳?」というスクリプトを思いつきました。

=begin
1.言われたことを必ず忘れるスクリプト
=end

str = ARGV[0]
str = "●●●●●×△"
puts <<E
 はい、#{str}【伏せ字】ということですね。
 確かに聞きました。そして、もう忘れました。
 変数上書きしてありますので。詳しくはスクリプトをご覧下さひ。
 またのご利用お待ちしています。
E

たったこれだけのスクリプトです。出力結果は下記です。


$ ruby donkey_ears.rb うちの社長しんじらんないんですよー
 はい、●●●●●×△【伏せ字】ということですね。
 確かに聞きました。そして、もう忘れました。
 変数上書きしてありますので。詳しくはスクリプトをご覧下さひ。
 またのご利用お待ちしています。


$ ruby donkey_ears.rb 猫にかまれた全指が痛いのです。
 はい、●●●●●×△【伏せ字】ということですね。
 確かに聞きました。そして、もう忘れました。
 変数上書きしてありますので。詳しくはスクリプトをご覧下さひ。
 またのご利用お待ちしています。


$ ruby donkey_ears.rb 新宿副都心猫まっしぐら
 はい、●●●●●×△【伏せ字】ということですね。
 確かに聞きました。そして、もう忘れました。
 変数上書きしてありますので。詳しくはスクリプトをご覧下さひ。
 またのご利用お待ちしています。


引数として「新宿副都心猫まっしぐら」などと言葉を与えると、ARGV[0]が
これを受け取り、変数strに渡します。次の瞬間、strは別の言葉で上書きされます。
putsを使って、「入力された文章は確かに受け取ったけど、上書きして忘れて
しまったよ」と伝えるだけの仕組みです。

これ、CGIに向かないスクリプトって何かなと考えていて浮かびました。
上記はCGIにするのはもちろん簡単です。数行のスクリプトですし、フォームから
入力された文字を受け取っても、出力は毎回同じものを返せばいいのですから。

しかし、こうしてスクリプトを公開して、Rubyの処理系をお持ちの方が試しに
遊んで下さる分には、「変数が上書きされている」ことをご理解いただけますが、
いったんCGIにしてしまうと、DBに保存したりメールで飛ばすなど、何か他の
処理をしていないことを証明しにくいだろうなと考えました。
いわゆる悪魔の証明です。

他には、どんなスクリプトがCGIに向かないでしょうか?
あるいは、この問題もとっくに解決策が出来ていて、CGIの中身もガラス張りに
する方法などがあるのかもしれませんね。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

○ CGIにしたスクリプトと部分解説

 ・つくったもののキーワード一覧
 http://hrkt0115311-s-toy-box.g.hatena.ne.jp/keywordlist

上記に二つ、CGIを追加しました。

 ・素数とひまわりの種とネズミ
  http://hrkt0115311.so.land.to/ruby/re/prime.html

 ・140色を、お気に召すまま散りばめます
  http://hrkt0115311.so.land.to/ruby/re/140.html

「素数〜」は入力文字が4桁後半になると計算量が膨大になるので、ローカル環境では
計算する数字に制限はありませんでしたが、3桁までの数字で素数を入力する遊びに
仕様変更しました。

「140色〜」は、ボタンを押すと、小さなドットがだーっと表示されます。●を様々な
色名で着色しているのですが、title要素に色名が出るように工夫しておきましたので、
「この色は、なんて名前だろう」などと遊んでいただけたら嬉しいです。


 ・今回のワンポイント

require "mathn"
require "generator"

  c = 0

  b = []
  q = Prime.new
  i = 0
  q.each do|x|
    break if i > a
    b << x
    i += 1
  end

#変数aの中に、入力された「3桁」までの整数が格納されています。
#上記は、この数字に達するまで素数を作り続けます。

  b.each do |x|
    c = c + 1 if a == x #素数に該当すれば+1 該当なければ0のまま
  end

#配列bに格納された約a個の素数を一つずつ取り出し、aと比較します。
#一致した場合はcが1になり、一致しなければcは0のままになります。

  y = []

  if c == 0
    y << "残念ながら、#{a}は素数ではありませんでした。<br>ネズミは、あなたを見上げて首をかしげています。"
  else
    y << "あなたが入力した#{a}は素数ですので、ネズミは大好物の<br>ひまわりの種をもらうことができました。おめでとうございます。"
  end

#変数cが0かそれ以外かによって、どちらの文章が配列yに格納されるか決まります。

#以上のような仕組みでこのCGIは動いています。
#入力した数字が大きくなると、それだけ配列の中に用意される素数の数も
#多くなってしまうので、今回は3桁までとさせていただいたのでしたー。


■ 編集後記
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

「hrkt0115311の、教えて習うRuby教室。」を最後までお読みいただき
ありがとうございます。いかがでしたか?

DBを使えるようになる。Rubyにもっと詳しくなる。他の言語の考え方を
学んでみる。挑戦したいことはたくさんあります。CGIにしても、MySQLと
連携できるようになると、できることが広がるので、ちょっとずつ学んで
みようかと思いますー。

何かお気づきの点がありましたら、お気軽にご意見・ご感想をお寄せ下さい。
メールアドレスは enjoy.ruby@gmail.com をご利用下さい。
また、Twitter( https://twitter.com/hrkt0115311 )や
Wassr( http://wassr.jp/user/hrkt0115311 )でのコンタクトも
大歓迎です。フィードバック、お待ちしております。

それではまた、次号でお会いしましょう。

■ いただいた反響について
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

「こんな仕組み作れないかな」とか「説明不足で分からないよ」といった
ご指摘をお寄せいただけると嬉しいです。みなさまの声で、メルマガを
育てていただければ嬉しいです。また、メルマガで、頂戴したメールの
一部を紹介させていただく可能性があります。差し支えがある場合は
「発行者のhtkt0115311に読んで欲しいだけで、メルマガには掲載しないで」
とお書きいただければ幸いです。

■ 転送や再配布について
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

 blogなどでご紹介いただく際は、 http://www.mag2.com/m/0000267290.html
 などを並記していただき、私の書いた文章であることが分かる形に
 していただけると幸いです。またメルマガの転送については、転送者さんと
 転送したメルマガを受け取られた方が迷惑でない範囲であれば歓迎します。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 メールマガジン「hrkt0115311の、教えて習うRuby教室。」

 ○発行者     htkt0115311
 ○発行システム  『まぐまぐ!』 http://www.mag2.com/
 ○配信中止はこちら http://www.mag2.com/m/0000267290.html
 ○公式サイト    http://enjoy-programming.g.hatena.ne.jp/hrkt0115311/
 ○日記       http://d.hatena.ne.jp/hrkt0115311/
 ○Twitter     https://twitter.com/hrkt0115311
 ○Wassr      http://wassr.jp/user/hrkt0115311
 ○お問い合わせ   enjoy.ruby@gmail.com

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
最新号をメルマガでお届け
登録 解除

規約に同意して

登録した方には、まぐまぐの公式メルマガ(無料)をお届けします。

最近の記事

上へ戻る