| @技術/プログラミング

@ningengasinu 様みたいに、自分で作ったボットに「日記書いた」ってしゃべらせようと思って、増田のRSSを使わせてもらおうと思ったんだけど、Rubyの RSS::Parser で読み込もうとすると 500 Internal Server Error が返ってきてしまう。ブラウザから読み込むときはエラーとか出ないんだけど。

しょうがないので open-uri を使って User-Agent を偽装してRSSを読みに行ったところ、正しくレスポンスが返された。しょうがないので RSS::Parser は使わず、 Hpricot を使った。

増田ってbotのアクセス弾いてるわけですね。これがネットの闇ですか……

| @技術/プログラミング

tilyさんのgistgist: 427398を使わせてもらってTwitterのボットを何個か作ってみた。結構楽しいですね。

しかしボットが短時間に何度も同じ発言を繰り返してフバいので、日付が変わるまでは重複発言をしないようにしてみようと思った。Rubyは 配列 - 配列 みたいなエロいことができるみたいなので、

new_tweets = neta_tweets - used_tweets

とかしてみようとした。

gist: 427398自体がTokyo Tyrantを使っているので、これでなんとか出来ないかなと思った。しかし rdb.put しようとすると、 ArgumentError というのが発生してしまう。ひょっとしたらTokyo Tyrantって配列とかを保存するもんじゃないのかな。

| @労働

就職して上京したのが去年(2009年)の7月5日で、6日から働き始めて8日の夜に辞めた。厳密には7月8日の夜10時半頃辞めたのでまだ若干早いけど、とにかく一年が経った。

あの頃に比べて今は以下のことが出来るようになった。

  • フレームワークを使えるようになった。
  • Rubyをほんの少しだけ使えるようになった。
  • JavaScriptをちょっぴり使えるようになった。
  • Google Maps APIを使ってそこそこ凝った地図を書けるようになった。
  • Linux/Unixの操作を一通り覚えた。

8月までにRailsで作ってるサイトを公開して、今後の身の振り方を考えたい。

| @技術/プログラミング

初期データをマイグレーションでRailsアプリケーションにぶっ込んでみた。後からいちいち手入力するのめんどいし、マイグレーションでデータをロードしとけば、本番環境でうごかすときも rake db:migrate で初期データは入るはずだから楽ちんかなと思って。

結果的には無事データをロード出来たんだけど、YAMLの書式が分かってなくて、結局丸一日時間を費やしてしまった。大したデータ量じゃなかったから下手するとちまちま手入力するのと変わらないくらい時間かかったかも。

hoge: #アイテムの名前
  id: 1
  name: "hoge"
  address: "ホゲ県ホゲ村ホゲホゲ"

fuga:
  id: 2
  name: "fuga"
  address: "ホゲ県ホゲ村フガフガ"

とかやんなきゃいけなかったんだけど、YAMLの書き方が分かってなくて、

hoge:
  id: 1
  name: "hoge"
  address: "ホゲ県ホゲ村ホゲホゲ"

  id: 2
  name: "fuga"
  address: "ホゲ県ホゲ村フガフガ"

とか書いてた。どっちも hoge県 に分類されるんでこんなんでいいだろ、みたいなノリ。しかしこれはやっぱり文書の構造がおかしい。これをロードしてみると、 id=2 のものしかロードされなかった。

結局、拾ってきた コードを参考にして

require 'yaml'
require 'pp'

data = YAML.load_file('hoge.yml')
pp data

みたいなやつを書いて、読み込まれる配列の構造を確認しながらYAMLを書いたところうまくいった。

| @技術/プログラミング

「PHPは汚い、Rubyはきれい」とかそういう言説の意味が昔は分からなかったんだけど、昨日今日、久々にCakePHPで作ったサイトのメンテナンスをしてて「PHP、確かにきちゃないわ」と思った。

オブジェクト指向っぽい何がしかのコードをPHPで書いてみる。

<?php
class Hoge {
  var $a; 
  function hoge() {
    return $this->a = "hogehoge";
  }
}

$fuga = new Hoge();
echo $fuga->hoge();
?>

つぎにRubyで同じコードを書いてみる。

class Hoge
  @a  
  def hoge
    @a = "hogehoge"
  end
end

fuga = Hoge.new
puts fuga.hoge

まずPHPは中括弧たくさん書かないといけない。これが面倒くさい。中括弧はキーボードでは shift + [ とか shift + ] とかだから、 shift の分だけキーボードをたたく回数が増える。実にめんどい。最初はRubyのインデントでブロックを表現するところに慣れなかったけど、慣れたらちまちま中括弧をかかないとダメなPHPにいらいらするようになった。中括弧の閉じ忘れでエラーが出ることとかも多いし。

さらにメソッドとか変数へのアクセスもめんどい。Rubyだと . でアクセスできるのに、PHPだと -> だ。入力するときはキーボードに -shift + . と打たなきゃいけない。アホか。Rubyだとキーを一個打つので済むのが、PHPだと三個だ。

他にも予約語が長いとか、変数のスコープがおかしいんじゃねとか、Rubyを触る前は分からなかったPHPの変態的なところが目につくようになってきた。

PHPちゃん、僕もう疲れたよ(特にCakePHPの配列地獄)。

| @技術/プログラミング

RailsアプリケーションでMarkdownを使いたと思った。(Markdown大好きっ子なので)

調べてみたところ、 BlueCloth というライブラリを使うといいらしい。

これはRailsのプラグインではないのでgemでインストール。

$ sudo gem install bluecloth

その後viewで

<%= markdwon(@item.text) %>

とか書けばいい。

しかしなんも設定しない状態だとRailsアプリケーションはBlueClothを読み込まないので、config/environment.rb

config.gem "bluecloth"

と書いてやる。するとめでたくMarkdownが使えるようになる。

| @技術/プログラミング

XREAでRailsを使おうと思っていろいろ調べてみた。Railsは rake rails:freeze:gems してアップロードすればオッケーらしいんだけど、RubyGemsはインストールしないといけないみたい。ところがネットに乗ってる情報を参考にインストールしてみたけど全然うまくいかなかった。指示通りにやってるんだけどパスが通らないのか、インストールしても 'rubygemsをrequireできねーぞゴラ!' みたいなエラーが出る。

.profile で記述した GEM_HOMERUBY_LIB のパスは間違ってないと思うんだけど、何回やっても $HOME/lib/ 直下にRubyGems系のファイルが展開されてしまう。これがエラーの原因っぽい。しょうがないので力業で guantlet_rubygems.rb, rbconfig/ rubygems/ rubygems.rb, ubygems.rb$HOME/lib/ruby/site_ruby/1.8 に移動させた。その後 source ~/.profile して適当な場所で gem -v してみたところ、ちゃんと 1.3.5 と表示された。

蛇足だけど最初、RubyGems 1.3.7をインストールしようとしたら、利用予定地のサーバーのRubyのバージョンが1.8.5なためにインストールできなかった。そういうわけでRubyGemsは1.3.5を入れた。

あとRubyGemsが入ったからといってシェルで gem install rails とかやってもプロセスを kill されるっぽいのでよい子のみなさんは必要な gem は自分のパソコンでインストールしてからアップロードした方がよさげです。