スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Ruby覚書その2(net/httpとかNokogiriの使い方メモなど)

さて、Rubyの覚書その1の続きです。
ちょっとさっきので結構力を使い果たしたのでその2はさくっと行こうかと思います。

irbで画面のクリアをしたい時はsystem('cls')と打てばクリアできる。

自分がすでに宣言したりした変数一覧を調べたい時は、
ローカル変数はlocal_variables、
グローバル変数はglobal_variables、
その他instance_variables, Module.constants, constants, class_variablesなどで変数一覧が見れる。
http://www.ruby-lang.org/ja/old-man/html/_B5A1C7BDCACCBAF7B0FA.html#a.ca.d1.bf.f4.a4.ce.b0.ec.cd.f7.a4.f2.c6.c0.a4.eb

公式リファレンスなどを見たい時は特異メソッド、インスタンスメソッド以外にも継承元を見ておく必要がある。

クラスの型を調べたい時は[インスタンス].class

Nokogiriの使い方覚書
http://d.hatena.ne.jp/otn/20090509/p1
#以下例
require 'nokogiri'
f=open("index.html","r")
doc=Nokogiri::HTML(f)

#CSSセレクタ式もあり
#nodeset = doc.css("div.about div")
nodeset = doc.xpath("//div[@class='about']/div")
nodeset.size
nodeset2 = nodeset[0].xpath("./img")
#テキスト取得(String)
str = nodeset2[0].text();
#属性名srcに代入されているデータを取得(String)
src=nodeset2[0]["src"]
#書き込み
fw = open("hoge.txt","w")
fw.write(str)
fw.close()



HTTP通信
require 'net/http'
require 'open-uri'
#またはrequire 'uri'
url=URI.parse("http://www.google.co.jp")
res = Net::HTTP.get(url)
#または
#sta = Net::HTTP.start(url.host, url.port)
#res = sta.get(url.path)
#sta.finish()
fw=open("hogehoge.html","w")
fw.write(res.body)


うん、今日の所はこんなところかな。
Nokogiri使いこなせるようになると夢がひろがりんぐ(*´ω`*)
スポンサーサイト

Rubyの覚書その1(特異メソッド、クラスメソッド、インスタンスメソッドの違い)

えーと、前回更新したのいつだっけ。
かなり昔過ぎてもう覚えてないや。
でも、今日はかなり有用な知識を携えて更新しますよ。

以前windows版wget(http://gnuwin32.sourceforge.net/packages/wget.htm)
を、C言語のsystem関数から呼び出して無理矢理画像ダウンローダを作ったのですが、
いかんせん、スピードが出ない。wget重いですねん。
しかしC/C++でHTTP通信できるものを作ろうとしてもそのようなライブラリは見つからなかった。
winsockなどのソケット通信ならあるんですがね、さすがにそこからHTTP通信まで組み立てる気にはならなかった。

ということで、手軽なスクリプト言語でさくっと作ってしまおうじゃないか!
ということでRubyで画像ダウンローダを作ったわけです。
ということで、画像ダウンローダを作っている最中に学んだ覚書。

Rubyにはただのクラス定義の他に特異クラスなるものがある。
参考文献:http://doc.okkez.net/static/192/doc/spec=2fdef.html
ただのクラス定義と特異クラス定義は何が違うのかというと、
ただのクラス定義は、まあ普通にクラスを定義することであるとして・・・
特異クラス定義は、「すでにインスタンス化したオブジェクトにインスタンス変数やインスタンスメソッドを追加するような定義」を言うのだろうという結論に私の中では落ち着きました。
例えば、すでにHogeというクラスを

class Hoge
  def func1()
    print("you called func1")
  end
  def setNum(num)
    @i_num=num
  end
end

というように定義したとします。ここまでは普通に定義しただけです。
そして、定義した後に

piyo = Hoge.new()

のようにインスタンスを作成したら、もうそのインスタンスに新たにメソッドや変数を加えることはできないと思うのが普通だろう。C++とかにしか触れたことがない人ならそれが当たり前である。
定義してもいない
def func2()
なるメソッドを新たに追加することなんてもはやできないし、
piyo.func2()
みたいに呼び出すこともできない。はずである。

ところがRubyではそれができてしまう。それが特異クラス定義。
例えば、すでにインスタンス化してしまった変数piyoを用いて、

piyo = Hoge.new()
class << piyo
  def func2()
    print("you called func2")
  end
end

とすると、これを書いた後なら

piyo.func2()

と書くことができるんですねぇ。
もちろん、このメソッドfunc2は「すでにインスタンス化した変数piyo」に追加したのであって、
「クラスHoge」に追加したわけではないから、新たに
piyo2 = Hoge.new()
とかやってHogeクラスをインスタンス化してもpiyo2ではfunc2は使えないですよん。
メソッドだけじゃなく変数も追加できるので是非ともお試しあれ。

この続きは長いので折りたたむことにします。

...続きを読む

インターネットの仕組みについて考える

約2ヶ月ぶりの更新となりました。
細々とブログを続けております。
もうすぐいろいろとかたがついて一段落つくのでプログラミングを始めたいなぁ。

さて、3DCGだけでなくプログラミングもある程度習得していると言うことで、
以前より情報工学について興味があったのですが、
理転しようとしてあえなく失敗。文系にいながら情報学を学んでいるわけなのですが、
このまえネットワークについて少し学びまして、
ルーターやらスイッチやらの扱い方を少し学びました。

現在IPv4のアドレスは枯渇しつつあると言うことで、
今まで少しでも長持ちするようにいろいろ工夫がされてきました。
その一つにNATという技術があるのですが、
あれ、P2Pソフト作るときに弊害にならないかしら。
プライベートアドレスしか持っていないエンドデバイス同士をどうやってつなげるのかしら。
winnyやらshareやらといったP2Pソフトはいろいろ考えられて作られているのですなぁ。
今度私もP2Pソフト作ってみたいものです。
サーバーを必要としないというところに将来性を感じます。
これから将来、サーバーが必要なくなってエンドデバイス同士網の目状に通信し合うことことが
一般的な情報やりとりの方法となれば、結構おもしろいことになるんじゃないですかね。

うーん、やはり中身のわからない技術というのはおもしろいものです。
知識欲をくすぐられます。

と、結構どうでもいい記事にてお茶を濁させていただきました。

絶対に自然消滅はしたくない

久しぶりの更新です。2ヶ月ぶりくらいかな。
とりあえず更新を止めることによる自然消滅だけは絶対に避ける。

現在大学のゲーム制作系サークルに属しながら基本情報技術者試験の勉強中。
小説も書きたい、プログラミングもしたい、CGの勉強もしたい、色んな作品を見たい、大学の勉強もしたい、と
どう考えても器用貧乏フラグが立っています。
得意分野は絞って磨いていかないとなぁ。でもやりたいものはしょうがない。
とりあえずは10月に行われる基本情報技術者試験を確実に通ることを目指しつつ、

目指しつつ・・・

どうしようかしら。
とりあえず、こういう雑多な自己満足に終わる文章がブログに書かれるようになるとちょっと危ないですな。
DirectX特集とか3DCGのTipsを集めるとか、欲しい人は欲しい情報が満載なブログのほうが
受けはいいんですよね。

俺だって書きたくてこんな日記みたいな文章書いてるんじゃないやいっ(´;ω;`)ブワッ
そろそろまたスキルを磨いて知識を提供する必要がある。

うわーい、CGやる時間がないぞぉ

久しぶりの更新です。
最近CGをやる時間がないです。
どちらかといえば再びプログラミングのほうに比重が偏ってきました。
大学とサークルが本格的に始まって本当に時間がない。

授業は楽勝なんですがね、
サークルの催しごとにいろいろ紛れ込んでいると一日が早く過ぎてしまうのです。
主に飲み会とか、飲み会とか・・・あとは飲み会ですかね。
体壊しそうだわぁ。

とにかく、現在はプログラミングのほうに重点が偏っています。
今のところDxLibを使った2Dのゲームを作ることになってしまっていますが、
いずれ再びDirectX使って3Dゲームのプログラミングを始めたいなぁ、と思います。

次は必ず攻略してみせる。
待ってろDirectX。
・・・(でももしかしたらOpenGLの方を使うかもしれない)。
プロフィール

あさのひ

Author:あさのひ
ゲーム制作含めて色んなプログラムを作ってみたりしている、暇な東京の大学生です。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
FC2カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。