だめな子

だめな子ですが頑張って成長してゆくのです。

テーブルつくるのめんどくさい

PLAIN TEXT
RUBY:

begin

    db.execute(sql.toutf8)

rescue SQLite3::SQLException => e

    puts "SQLエラー".tosjis

    puts e.message.tosjis

end

いちおうSQLのエラーはすげーおーざっぱに拾えることがわかったので我慢することにしました
最近はテーブル作ったりHpricotつつき回してたり面白くない作業をずっとやってたので全然作業はかどりませんでした。
で、ぷらぷらしてて気がついた。
戦争情報ページの情報量、ページ毎に結構差があるわ。
戦争があった事実のみ
↑+ベーシックな情報 職構成と所属国構成
↑+国別スコア
↑+自分戦績+参加者詳細(自分が参加した戦争のみ)
の4種類かなぁ?
取得したページがどこまで情報持ってるか、取得する関数作ろうかな。
柔軟性とか全然なく力技コーディングしてるから判定方法も力技でいいや。
で、無事DBにデータ集積できるようになっても、どうやって遊べばいいか思いつかない…w

Read the rest of テーブルつくるのめんどくさい

テーブル作ります

SQLiteで
PLAIN TEXT
SQL:

CREATE TABLE test (

    id  integer PRIMARY KEY,

    name    text

)

とかして
PLAIN TEXT
SQL:

INSERT INTO test (id, name) VALUES('ID1', 'パスワード1')

こんなんしても大丈夫だった(つまり昨日のエントリは間違った使い方してたわけだ)んだけど、
PLAIN TEXT
SQL:

CREATE TABLE test (

    id  integer PRIMARY KEY,

    name    text

)

主キー設定したら型チェックちゃんとやるようになったらしくてエラー吐くんだけど原因がわかんなくて詰まった
SQLiteのフロントエンドもちゃんと別途用意するべきだなぁ
…色々試したけどいいのなかった
sqliteのCUIツールでいぢくるのがいちばん楽でよかです
コマンドプロンプトのフォントをMSゴシックにしたうえで、chcp 65001で文字コードをUTF-8にして使う、と
つい分かりやすいから日本語名のテーブルとかカラムにしちゃうけど英語名でつけてったほうがいいから
消費税やら区分やら仕向支店名やら英語にすると何になるかわからんよーなのばっかってわけじゃないし
Rubyの側からエラーメッセージを細かく拾えればいいか。
e.messageでいいですよネ

Read the rest of テーブル作ります

sqlite3-ruby

昔のおいらだったら1ファイル1レコードでデータをとっといたりしてたわけですがDBの使い方を覚えてからはそんなめんどくさいことやってられなくなりました
でも、人に配るプログラムでMySQLとか使っちゃうと、明らかに使ってもらえないコースなので、なんかいい方法ねーかなと思案に暮れていたらSQLiteの存在を思い出しました
で、ちゃんと調べてみるとファイルベースのDBで、DLLさえあればいい!!らしい
すごい! パブリックドメインなんだって! すごい!
で、使ってみた
公式からDLL貰ってきてrubyのbinにDLL置いてgemで適当にライブラリ引っ張ってきて
PLAIN TEXT
RUBY:

require 'rubygems'

require 'sqlite3'

 

begin

    # DB開く .newでも.openでもどっちでも

    db = SQLite3::Database.new("test.db")

    # SQLite3::Database.new(":memory:") # オンメモリ

   

    # testテーブルが存在しなければ作成する

    sql = <<-SQL

    create table test (

        id  integer,

        name    text

    )

    SQL

   

    db.execute(sql) unless db.execute("select tbl_name [...]

Read the rest of sqlite3-ruby

Hpricot

Mechanizeリファレンスみっけたけど、微妙ね
WWW::Mechanize::PageのrootメソッドでHpricot::Docが取れるらしいので、本日はHpricotの使い方をお勉強することにする
Hpricot
日本語解説
昨日のんから続いて今日は戦争ログから自分の戦績を引っこ抜いてみることにする
http://fesns.com/?m=fe&a=page_war_record&target_unit_id=2&target_seq=34847から、自分の戦績を切りだしてみる
PLAIN TEXT
RUBY:

#切りだし

doc = page.root

 

doc.search("td.border_01 bg_02 padding_s nb_t nb_r").each{|td|

    pp td

    puts "-" * 30

}

こーしてみると、おおよそ目的の場所が拾える予定
…拾えない なんで?
解説を見るに、
PLAIN TEXT
RUBY:

doc/"div.entryPermalink a"

# ↑↓同一

doc/"div.entryPermalink"/"a"

らしいので、つまり
PLAIN TEXT
RUBY:

doc.search("td.border_01 bg_02 padding_s nb_t nb_r")

# ↑↓こう解釈されてる?

doc.serach("td.border_01"/"bg_02 padding_s"/"nb_t nb_r")

…どないせーというのだろーか
ていうかクラスにスペース使うなよガメポ
PLAIN TEXT
RUBY:

#切りだし

doc = page.root

 

(doc/"td[@class='border_01 bg_02 padding_s nb_t nb_r']").each{|td|

    puts td.to_plain_text.tosjis

    puts "-" * 30

}

出来てる CSSセレクタの形式じゃなくて、XPath形式とやらで投げればいいようだ
やってる途中、submitしてるところでTimeout::Errorが発生したりした。
ちゃんとrescueした方がいいんだろうけどとりあえずいいや
PLAIN TEXT
RUBY:

#切りだし

doc = page.root

 

(doc/"td[@class*='border_01 bg_02 padding_s ']").each{|td|

    puts td.to_plain_text.tosjis

    puts [...]

Read the rest of Hpricot

WWW::Mechanize

mixiとか、OpenPNE的なアレにRubyからアクセスできんのかなぁ?と思ったのがきっかけ
ぐぐると案外みつかる
クッキーとかセッションとかどーすんのかなぁ、と思ってたんだけど、WWW::Mechanizeとやらでアクセスすればいいらしい
要するにLLから便利にお話できるWebブラウザ的な物体なんじゃろー
まずはうちがやってるゲームのSNSのページを取ってこれるか見てみる
PLAIN TEXT
RUBY:

require 'rubygems'

require 'mechanize' # gem install mechanize

require 'kconv'

require 'logger'

 

agent = WWW::Mechanize.new {|a|

    a.log = Logger.new('access.log')

    a.log.level = Logger::DEBUG

}

 

page = agent.get('http://fesns.com/')

puts page.root.to_s.tosjis

あー取れてる取れてる
PLAIN TEXT
RUBY:

form = page.forms[0]

form.fields.find {|f| f.name == 'username'}.value = id

form.fields.find {|f| f.name == 'password'}.value = pass

page = agent.submit(form, form.buttons.first)

 

puts page.root.to_s.tosjis

スゴいやん1発やん idにはID、passにはパスワードいれとくだけ
PLAIN TEXT
RUBY:

agent = WWW::Mechanize.new {|a|

    a.log = Logger.new('access.log')

    a.log.level = Logger::DEBUG

}

 

page [...]

Read the rest of WWW::Mechanize

Ruby研修受けてきた

Ruby研修2日間受けてきました。
細かく細かぁく解説してくれたので、豆知識が結構身につきました。
でもダックタイピングの「ダ」の字も出なかったので全然がんばってないっちゃがんばってないナ
半日ブロックの説明して半日クラスやらの話して1日誰かが書いたソース読んでたりするほうがタメになるんじゃないの?
あとお土産で128MBのUSBメモリーもらった!今までロクなのもってなかったからちょっとうれしい!

Read the rest of Ruby研修受けてきた

湯沢中里行ってきた

というわけで湯沢中里行ってきた。
念願の今シーズン初スキーですよ!!
シーハイル上越は新幹線じゃありませんでした。
 
場所的に難しいコースや長いコースとかなくて、ちっちゃい子供がいる家族向け的な場所。
日帰りだったからまぁよかったけど、泊まりで行く場所じゃねーな。
駅=レンタとかの場所。スパもあって安く入れたのはよかったけどネ。
メンツは俺カグにんあまヤキロクイ。
ロクイは初スキーらしくてスゲーノリノリでした。
とりあえずロクイ以外全員滑れるメンツでした。
ロクイは俺のファンスキーを貸してやったら5秒で滑れるようになりました。某第2回委員長様みたいなショボさは微塵もありませんでした。
あまりに簡単に滑れちゃったもんだからブーイングの嵐。
今回はファンスキーで使いやすいようなブーツを買って、前使ってた99センチの板から新調した90センチの板に換装してのスキー。
すげー小回り利くし、遊びやすいのでGood!だったけど、速度出すと途端に不安定になって縦方向に3回転くらいしたので、速度派の人と一緒に滑るときは長いほうがいいかも。
ゆっくり滑ってていいなら短いスキーで色々練習するのがGood?
改善点&メモ

左足が使えてない。常に右足頼りで滑ってるので左足を使う練習をする。
ブーツ周りに工夫しないと足が痛くて練習どころじゃない。ジャンプもできない。
手袋みたいに指で割れてる靴下を使うといいかも
スキーウェアのズボンの下に何かをはいたりしなくていいかも。足が動かしにくい。
柔軟性が足りないので柔軟する。足腰も少し鍛えたほうがいいかも。
上半身重要。上半身を上手く使えば色々できる。
リポDと酒のチャンポンは危険。
大宮着発は帰りがすげーキツい。

コツ

左に曲がるときのカービングが下手。
右手でのハンドスライドはいちおー出来る。左手は地面に触れる程度。
フェイキーは前からできた。傾斜がキツいとボーゲンで滑ってしまう。まぁ回りに人いると危ないしね。
逆時計回りのグランドスピンはまぁできる。時計回りのグランドスピンはあぶなっかしい。
フェイキー→レギュラーのジャンプスイッチはいちおうできた。レギュラー→フェイキーは怖いからやってない。上半身で回る
ウィリーは出来るけどノーズマニュアルはできない。ブーツに遊びがありすぎた気がする。

今シーズン中にあと1〜2回はスキー行きたいなー

Read the rest of 湯沢中里行ってきた

MyMiniCityのアクセスバランスを適当に調整してみる

→元ネタ←
Rubyのお勉強もしてみたいので、試しに作ってみましょう。
以下のことを達成するべし。

Rubyに慣れる。
ライブラリの調べ方を覚える。
なるべくRuby色に染まって書く。

まぁ最初っから上手くできるはずもないけどやってみるべい。
元ネタのサイトのPerlコードを見た感じ…
以下の条件をクリアできるブツを書くべし。

http://thrudr.myminicity.com/xml にアクセスすると、現在の町の状況をXMLで取得できるので、パースして使う
http://hogehoge.com/XXX/ ←アクセスでこっちにリダイレクト→ http://XXX.myminicity.com/
町の状況に合わせて、/と/indと/traと/secと/envのうち、適切なものを選択する

で多分OK。2番目のヤツはやり方は知りたいけどなんか好みじゃないからどうしましょうかしら。
まずは、HTTPでアクセスして文章を引っ張ってくるコード書けばいいのかしら。
まぁぐぐれば一発よね
PLAIN TEXT
RUBY:

require 'net/http'

Net::HTTP.version_1_2 #おまじない

Net::HTTP.start('thrudr.myminicity.com', 80) {|http|

  response = http.get('/xml')

  puts response.body

}

うん、普通にXML取ってこれるわ。
次、XMLをいい感じにする。
REXMLとかいうのがデフォでついてるらしいので使う。
このへん? 分かりにくくてちょっと泣きそう。XMLなんてしらねーよ。
PLAIN TEXT
RUBY:

require 'net/http'

require "rexml/document"

 

Net::HTTP.version_1_2

response = nil

Net::HTTP.start('thrudr.myminicity.com', 80) {|http| response = http.get('/xml')}

doc = REXML::Document.new response.body

doc.write

root = doc.root

# puts root.elements.each{|elem| puts elem.name, elem.text}

簡単だー… response.bodyを直接Documentのコンストラクタに投げたいけど富豪的プログラミングの名の元にとりあえず気にしない。

http://hogehoge.com/XXX/ ←アクセスでこっちにリダイレクト→ http://XXX.myminicity.com/

調べてみたら、こんなんらしい。ホンマかいな。
裏を取ってみたら割とホントらしい。まじか!世の中は工夫がいっぱいです。
このやり方はやめて普通にGETで投げることとしよう。
CGIを便利に暮らすクラスもちゃんとあるらしい
PLAIN TEXT
RUBY:

require "cgi"

 

name = CGI.new.params["name"]

name = name.empty? ? "thrudr" : name

puts name

非常に簡単。http://www.hogehoge.com/cgi.rb?name=fooみたいな感じ。
方針転換しつつ
PLAIN TEXT
RUBY:

#!/usr/local/bin/ruby

 

require "cgi"

require 'net/http'

require "rexml/document"

 

print "Content-type: text/html\n\n"

 

#都市名拾う

cgi [...]

Read the rest of MyMiniCityのアクセスバランスを適当に調整してみる

新年明けましておめでとうございます。

もう2日ですがネ。
今年は勉学にダイエットにと頑張りたいところです。
で、先月末体重67キロぐらいだったんすけど、28日からここまで1日1食生活をしてたら体重が62.5キロとかになってました。
…どんだけ毎日食ってたんだか。
まぁ腹腔内の余計なもんが無くなったのでだいぶスリムっぽくなりましたが贅肉だるんだるんのままなのでやはりなんとかせなならん。ぷは。
あとは勉強か…
なんか明確な目標をもってなんやかややらんとならんのですが、その目標がない。
ゲームばっかやってちゃダメですよ、なんだけどなぁ。
あとは過度の人見知りを抑えるように頑張ろー。
んじゃ、今年「も」頑張っていきましょか!

Read the rest of 新年明けましておめでとうございます。