sou's blog

落ち着いた華やかさがあり、上品に明るく陽気なさまを表す。

watirでjavascriptの実行結果として返されるhtmlを取得する

最近、html解析作業にもっぱら心を奪われています。
特にwatirとhpricotは使いやすくていいなと思ってます。

指定したurlのhtmlを取得する。(javascriptでも可)

#! ruby

require 'rubygems'
require 'watir'

class Foo

  attr_reader:html

  def initialize(url)
    browser = Watir::Browser.new
    browser.go(url)
    browser.wait # ブラウザの読込が終わるまで待つ
    @html = browser.html
  end

end

f = Foo.new(ここにurl)
f.html

iphoneから投稿なので、間違ってるかも。

gitコマンドまとめ

gitを覚えるのに二つのサイトを見ればいい。わかりやすかった。

ピックアップ(引用)

リポジトリの作成およびメンテナンスに利用するコマンド:

コマンド 説明
git init リポジトリを作成する
git clone 既存のリポジトリの複製を作る
git fsck リポジトリの正当性チェックを行う
git gc リポジトリ内の不要なオブジェクトを削除し、最適化を行う

作業ツリーやブランチを操作・管理するコマンド:

コマンド 説明
git status 変更が加えられたファイルを表示する
git diff ファイルに加えられた変更点をdiff形式で表示する
git add コミットするファイルを指定する
git commit 変更点をコミットする
git log コミットログを閲覧する
git reset 直前のコミットを取り消す
git revert 作業ツリーを指定したコミット時点の状態にまで戻す
git branch ブランチ情報の表示およびブランチの作成
git checkout ブランチの切り替え
git show-branch ブランチの作成/変更/マージ履歴を表示
git merge ローカルブランチのマージを行う
git tag コミットにタグを付ける
git stash 現在の作業ツリーの状態を一時的に保管する
git rebase ブランチの派生元(上流)を変更する

ほかのリポジトリとの連携を行うコマンド:

コマンド 説明
git pull ほかのリポジトリの変更点をローカルリポジトリにマージする
git push 公開リポジトリに自分のリポジトリの内容を送信する

オンラインIDEのCloud9がすごくいい

Rubyを使い始めて、Webアプリケーションを作りたいと思い、Ruby onRailsというフレームワークがあることを知り使ってみると実際作りたいものはこんな大きなフレームワークにも載せる必要は無いなと感じる。
そして、sinatraというもっと軽量なフレームワークにたどり着き、開発を始めるとオンラインでソース管理してどんな環境でもいじれるようになりたいと思ってgithubに手を出した。
すると、ソースがオンラインなら開発環境もオンラインにできればと思うようになったところでChromeのウェブストアが日本語化されオープンしたのをきっかけにオンラインIDEについて調べてみた。
そうして辿り着いたのがCloud9というIDE。

前置きが長くなったけど、ようはいつでもどこでもブラウザがあれば開発できる環境が整った。

githubアカウントがあれば、インスタントログインでSSHの公開鍵を登録すればgithubのリポジトリにIDE上のコンソールからpushすることまでできる。

ただ、herokuへのpushは出来るともっといいなぁなんて思ってる。

英語のWebページをずるして乗り切る方法見つけた。

Webページの英語の文献を読むことがたまーにあるけど、英語あんまり得意じゃないのでいちいち辞書で調べてとか翻訳ページ行ってとかめんどくさいなぁ、英語できるようになりたいなぁなんて思ってたけど、いい方法見つけた。

ずるっこ!

これはずるいっ!Webページにルビふってくれる。便利。
ちょっと前に人気になって知ってはいたけど、ここ毎回開いていたら翻訳ページ行くのと変わらないしなーって思った。
ただ、もっと良い方法があって、URLのホスト部分の最後に「.zurukko.jp」と追加するだけでページを切り替えてくれる。
大抵のブラウザは多分Ctrl(Command)+LとかAlt+Dとかのショートカットキーでアドレスボックスにフォーカスできると思うのでより楽して(マウスレスで)英語のページのストレスが軽減される。

覚えた単語を消していけるのもイイ。

引用

「ずるっこ!」により快適に Web サイトを読める機能を追加しました。
以下のように、「http://」で始まる URL の 3 個目の「/」文字 (ホスト部の最後の部分) の直前
に「zurukko.jp」と入力してページを再読み込みするだけで、そのページを「ずるっこ!」で読めます。

Duck Typingについて

参考の記事を見て、おっPrototypeパターン*1かってことで興味を引いた。
というのも個人的にすごくタイムリーな内容で、ちょうどまつもとさん*2の「コードの世界」を拝読してたところでおんなじ様にDuck Typingだよねっていう記事があった。
そして、この機会にDuck Typingについて考察してみようと考えた。

Duck Typing

“If it walks like a duck and quacks like a duck, it must be a duck”
(もしもそれがアヒルのように歩き、アヒルのように鳴くのなら、それはアヒルである)

静的型言語と動的型言語

データ型*3で定義された変数のみの範囲で処理をする言語が静的型言語で、変数にデータが割り当てられた時点で初めて型が決まる言語が動的言語という簡単な解釈。
Duck Typingはこのデータ型ではなく、振る舞い*4でそのインスタンスは何者かを判断する。

コンピュータに優しい人間

あくまでも型の宣言というのは、コンピュータにとって都合の良いものであるため出来るだけ現実世界や人間に都合の良いように設計されている言語のほうが本来イイはず。
でも、みんながみんなコンピュータに優しいプログラミングに慣れてしまっているので気付かないし、概念も少し難しいかもしれないから違和感はあんまりない。というか、言語なんてあくまでツールなんだからそんなことはどうでもよくて実装がいかにスムーズに出来るかということのほうが重要かもしれない。とは言っても言語設計とかに興味を持ち出したりするとこちらもほっとけなくなってくる。

*1:Gofの生成に関するパターンのうちのひとつ

*2:rubyのパパ

*3:数字、文字列、配列、連想配列等々

*4:メソッドやプロパティ

TDDについて

テスト駆動開発ってなんで現場で取り入れられないのだろう。ウォーターフォールである意味が見出せなくなってきた。いや、もちろん意味はわかってますが…。
ぼくが変えるしかない!

sinatra + git + heroku で自己紹介サイトの構築

TwitterFacebook、blogなど自分のアカウントが一通りあるので、それらをまとめて自分の自己紹介HPみたいなのを作ってみようと思い立った。
ちょうど勉強中のsinatraを使って、git + herokuで運用というのに挑戦してみることにした。

構想としては、簡単な自分の紹介と各利用WEBサービスへのリンク。あとは、Twitterでのタイムラインくらいを載せられたらいいな。

前提

  • ruby,sinatra,git,herokuなどなど必要なものがインストールされている
  • github,herokuのアカウントを取得済み
  • もっとあるかも?

gitリポジトリの新規作成

githubにログインし、aboutmeというリポジトリを作成し、お決まりの手順をとりあえず実行してgit管理下に置く。

$ mkdir aboutme
$ cd aboutme
$ git init
$ touch README
$ git add README
$ git commit -m 'first commit'
$ git remote add origin git@github.com:[username]/aboutme.git
$ git push -u origin master

sinatraの必要なディレクトリやファイルを新規作成

$ cd aboutme
$ mkdir public
$ mkdir public/css
$ mkdir views
$ touch app.rb
$ touch config.ru
$ touch .gems
$ touch public/css/style.css
$ touch views/tweet.erb
$ touch views/layout.erb

これで中身からっぽやけど、とりあえず必要なファイルを作成しておく。
ちなみにviewsのテンプレートはhamlも考えたけど、覚えることが少なそうなerbにしてみた。
.gemsファイルはherokuで運用するときにライブラリをインストールするときに必要。

.gemsの編集

herokuにデプロイしたときに必要なライブラリを読み込んでもらうため

$ vim .gems

sinatra --version 1.2.6
twitter --version 1.4.1

config.ruの編集

$ vim config.ru

require 'app'

run Sinatra::Application

app.rbの編集

$ vim app.rb

require 'sinatra'
require 'twitter'

get '/' do
  erb :tweet
end

tweet.erbの編集

usernameのところは表示させたいユーザ名を入れる。:countは表示させたいタイムラインの数 + 1(なぜかプラス1が必要)

<%=
	Twitter.user_timeline("[username]", {:count => 4}).map do |tweet|
		"<p><b>#{tweet['user']['screen_name']}</b>: #{tweet['text']}</p>"
	end.join
%>

views関連の編集

これはもうお好みで

ローカルで動作確認

$ ruby app.rb

http://localhost:4567にアクセスして思い通り表示されればOK。

gitに反映

$ git add .
$ git commit -m 'add files needed for the application.'
$ git push origin master

herokuに新規アプリケーションを作成

$ heroku create [application name]
$ git push heroku master

本番環境で動作確認

$ heroku open

これで、動作確認して問題なければOK。
ちなみにこんなのが出来ました。