このエントリーをはてなブックマークに追加
スポンサーリンク

2016年3月8日 カウント支援ツールデバッグ

ここ数日、プロ野球の2軍の試合にスマホを持っていってカウント支援ツールのデバッグをしているのだが、まあ出てくる出てくる、バグが出てくる。

今日は、突然初期化される不具合に悩まされていた。なぜ突然初期化されるのか?初期化されると、せっかく入力したスタメンとか全部入れ直しになってしまう。

帰ってからapacheのログを見て納得。「初期化」ボタンを押した時に、

mode=session_clr

という引数をつけて自分自信を呼び出していたのだが、これではこの引数付きの状態をリロードしたらまた初期化されてしまうのだ。

だけでなく、引数なしで自分自信をリロードしたところで、ブラウザの[←戻る]を押されるとまた初期化してしまう。

総じて、PHPでセッション管理をする場合に、ブラウザの[リロード] [←戻る]は誤動作の元だという事だな。

じゃあどうするか、とり急ぎ、初期化する際にクッキーのセッションIDと同じものをhiddenタグで入れておき、クッキーとPOSTされたものが異なれば「不正な画面変遷」というエラーが出るようにした。

これでも[←戻る]で誤動作する事に変わりはないが、まあ、突然初期化されるよりはマシだろう。

それにしても、バグってものは、本気で自分で使ってみないと見つからないものですなあ。ずっと、仮の試合という事で適当に入力してたんだけど、それだと通常では行わない動作(リロードや戻る)はしないからな。

前にいた会社で、私の部下が、

商品名:ああああああああああああ
数量:111111
単価:111111

とかデタラメに入力してデバッグしてたけど、そういうのはデバッグとは言わないよ。ちゃんと、お客さんになったつもりで本気で自分で運用してみないと。じゃないと、再現性の低いバグなんて出ないし、出ていても見逃してしまうだろう。


 △先頭へ  コメント(0)  トラックバック(0)  拍手(0)

2016年2月7日 インクルードパスの追加

Perlでインクルードパスを追加するために、@INCという配列にパスを追加していた。それと同じことをRubyでやりたいのだが、なにせRubyの命令をなに1つ知らないもんだから、都度検索しないといけないという、非常に非効率的な、カタツムリ的な速度で作業が進捗しているわけです。

昨日わかった事は、Perlで@INCに相当するものは、Rubyでは$:であるという事。したがって、この$:という変数にカレントと、カレントの1つ手前の /rubyincというディレクトリをインクルードパスに追加すれば良い。

作ってみた。

-----------------------------------------------------
current=Dir::pwd
current_array = current.split("/")
max=current_array.count-2
inc_path=""
for cnt in 0..max
inc_path+=current_array[cnt]+"/"
end
inc_path+="rubyinc"
$:.unshift(current, inc_path)
-----------------------------------------------------

Rubyで文字列を操作する場合は、

変数.メゾット(引数)

というふうに、VBとかJavaScriptっぽく書くわけだな。PerlをVBっぽくした言語というべきだろうか。しかし、こういうのは自分はちょっと苦手ですな。といいますか、そもそもオブジェクト指向型の言語というのがイマイチ得意じゃなかったりします。

さっそく require "furiwake.inc"としてみると、

./index.rb:21:in `require': no such file to load -- furiwake.inc (LoadError)
from ./index.rb:21

そんなファイルはないとおっしゃる。そんなバカな。ためしに p $:とやってみると、ちゃんと、rubyincが追加されているではないか。これは一体どういう事やねん。

で、他の人のサンプルを見ると、拡張子がみんな.rbになっているわけですよ。

「ま、まさか・・・拡張子が.rbじゃないとダメなのか??」

拡張子を変えてみる。

・・・・できた。なんだそりゃあああ。

じゃあ、requireをやめてincludeにしてみる。すると、

./index.rb:21:in `include': wrong argument type String (expected Module) (TypeError)
from ./index.rb:21

引数が違う??じゃあどうするのさ。

調べたところによると、includeは単なる文字列操作。つまり、PHPのincludeとは全然違うって事で。

じゃあ今度はloadと書いてみる。

・・・できた。つまり、requireはあくまでrubyのライブラリ(.rb)を読むためのものであって、拡張子.incを読むものではないっつー事ですな。なので、PHPのincludeのかわりに使いたいのであれば、loadを使わないといけないって事で。

===============================================
▽ここを参考にしました。ありがとうございました。
http://yiaowang.web.fc2.com/programing/ruby_base/syntax_loop.html


 △先頭へ  コメント(0)  トラックバック(0)  拍手(0)

2016年2月5日 ドルコロンテン

インクルードパスを設定するのにどうすればいいのか。Perlだと@INCという配列に足せばいいんだけど、rubyで@INCに相当するものは何か?

検索したら、
$:.unshift File.dirname(__FILE__)
という文が出てきた。これを足せばいいのか。

・・って、そんな意味もわからずコピペしたんじゃ、いざバグった時にどうしょもなくなるぞ。応用も効かないし。ちゃんと意味がわかって使わないと。

というわけで意味を調べてみる。が、困ったことに、Googleってのは$:みたいな記号を検索するのは苦手。なにせ、$や:がつくページが全部出てしまうのだからな。

しかたがないので、ロードパスで調べて行ったら、$:は、$LOAD_PATHの別名みたいだ。でもって、この$LOAD_PATHってのが、Perlでいうところの@INCに相当するようだ。

それにしても、rubyについて色々調べているが、わからない事だらけでいっこうに作業が捗らんな。進捗度がカタツムリ以下だ。まあ、仕事でやってるわけじゃないのがせめてもの救いか。

ここを参考にしました。ありがとうございました。
http://futurismo.biz/archives/2293
http://abe-log.cocolog-nifty.com/blog/2012/03/rubyload_path-4.html


 △先頭へ  コメント(0)  トラックバック(0)  拍手(0)

2016年1月25日 モバイルだけしかアクセスできなくするテスト

単にRubyの勉強をするといっても、何の目標もなく、何の目的もなく、ただ漠然とやったって覚えられるわけがない。したがって、何か目的を持つ事にした。

目的
廃止したモバイル用ページ(http:aufheben.mobi)をRubyで復活させる。(従来はPHP)

目標
1年以内

という事は、まずはRubyでユーザーエージェントを取得する必要がある。モバイル端末以外はノーサポートページに飛ばしたいからだ。

Rubyでユーザーエージェントを取得するにはどうすれば良いか。Googleで検索したところ、一番上にヒットしたサイトの情報では、request.env["HTTP_USER_AGENT"]とから取得するとあったので、
user_agent = request.env["HTTP_USER_AGENT"]
としたら、
undefined local variable or method `request'
というエラーが出て動かない。

そりゃ、requestなんてどこにも定義されてないのにいきなり使えるわけないわな。じゃあ、どうすれば使えるのかというと、そのページには書いてない。いうまでもないので書かなないって事か。困ったな。っていうか意味もわからずコピペするからだ。

さらに下の方まで調べたらENV["HTTP_USER_AGENT"]という記載があったので、
user_agent = ENV["HTTP_USER_AGENT"]
と書き直したら動いた。

あとは正規表現でスマホ以外はノーサポートページにリダイレクトするように作れば良いわけだ。

・iPhoneという文字がある
・iPodという文字がある
・iPadという文字がある
・Androidという文字がある
・Windows Phone という文字がある

今のところこんなところか。後で例外の機種が出てくるかもしれんが、まあその時はその時で。なお、エミュレーターやユーザーエージェント詐称でPCで見られてしまう場合もあるが、べつにそんなに絶対にPCで見られたらマズいわけでもないし、むしろ自分がデバッグするのにユーザーエージェント詐称が通用した方が都合が良いので、それ以上の判断はしない。

というか、携帯だと個体識別番号とかでもっと厳密に制限できたんでしょうけど、スマホはある意味PCと同じなので、おそらくユーザーエージェントぐらいしか判別する方法はなかろう。

というわけで、今回はここまで。

ここを参考にしました。
http://weback.net/mobile/2114/


 △先頭へ  コメント(0)  トラックバック(0)  拍手(0)

2016年1月24日 ruby-gemを使ってみるテスト

RubyにPostgreSQLのモジュールみたいなもんをインストールしたいのだが、どうもいくら検索してもgemで入れる方法しか書いてない。

これだと、仕事中に向こうのサーバー(gemのサーバー)がダウンしてると作業ができなくなるので、深夜作業してると困るんだけどな。Perlの時さんざんCPANのサーバーダウン(もしくは混雑)でインストール作業が進まずエンドユーザーに無茶苦茶怒られたりして・・・。こっちのせいじゃないのに怒られるのは不本意だが、サーバー管理者にはよくある話さ。

ってことで、Perlに関してはCPANに頼らず自分であらかじめ.tar.gzをダウンしておいてFTPでアップロードして入れるだけど、Rubyに関しては情報が少ないんだからしゃーない。

gem install pg

すると、requireでgemというライブラリはないというエラー。ああ、そうか、2.3から1.8にバージョンダウンしたせいで、2.3のgemコマンドだけ残ってるけど、インクルードファイルは1.8のままなんでエラーなのか・・・。

というわけで、gemだけ再インストール
wgetしたかったんだけどURLがわからなかったので仕方なくWindows機でダウンしてFTPでアップロードした。
tar xvzf rubygems-2.5.1.tar
cd rubygems-2.5.1
ruby setup.rb

gem -v
2.5.1
今度はできた。じゃあpgを入れてみる
gem install pg
--------------------------------------------
ERROR: Error installing pg:
pg requires Ruby version >= 1.9.3.
--------------------------------------------
今度はRubyのバージョンが古いときた。困った。
じゃあ、また2.3に戻す。

cd ruby-2.3.0
make install
gem install pg
/usr/bin/ruby: symbol lookup error: /usr/lib/ruby/2.3.0/x86_64-linux/openssl.so: undefined symbol: SSL_CTX_clear_options

やっぱダメね。opensslのバージョンが古いみたい。じゃあ、また1.8に戻す。しゃーない。
cd ../ruby-1.8.7
make install

まったく。/usr/bin/rubyを何回上書きすりゃいんだか

gem install pg
--------------------------------------------
ERROR: Error installing pg:
pg requires Ruby version >= 1.9.3.
--------------------------------------------

結局、新しいバージョンだと、openssl関係でエラー、古いバージョンだとバージョンが古いと怒られてしまうという無限ループに陥ってしまったわけね。

でも昨日DBIをインストールできたので、しばらくこれでいく。

とりあえずコネクトしてみるテスト。
==========================================================
#!/usr/bin/ruby
# encoding: euc-jp
require 'dbi'

dbh = DBI.connect("dbi:pg:(ナイショ):localhost", "(ナイショ)", "(ナイショ)")
dbh.disconnect
==========================================================
ここで(ナイショ)は公開できないので(ナイショ)とした。本当に(ナイショ)って書いて「動かねーぞゴルア!」とか言うのはナシね。

ここを参考にしました。
http://www.jiubao.org/ruby-dbi/ruby-dbi.html


 △先頭へ  コメント(0)  トラックバック(0)  拍手(0)

1 2 次のページ>>
スポンサーリンク