WindowsでRails3+sqlite3の環境作成時にハマったこと

sqlite3 というライブラリのmswin版はVC6でビルドされたものしかないようなので、VS2005でビルドされたruby1.9系では使えないようだ。
ということで、

ということになるのかも。
と書きつつ、私はruby1.8.7で即妥協したので、sqlite3の野良ビルドも、cygwinも試していません。
つまり、1つめ以外は予想です。


以下は、ruby1.9.2+Rails3+sqlite3の環境を作ってハマった時の様子。
インストールは正常に終了するが、実際に使おうとするとエラーが起きる。

うーん。。。rails3をwindowsに導入しているのだが、sqlite3のパスを通しているのに、 Could not find sqlite3-1.3.3-x86-mswin32 in any of the sources というエラーが出る。。。less than a minute ago via web Favorite Retweet Reply

http://rubygems.org/gems/sqlite3/versions を見たらx86-mswin32-60はあるがx86-mswin32はなかった。-60というはVC6のことかと予想すると、winのruby1.9ではsqlite3の導入はできないのかもしれない。less than a minute ago via web Favorite Retweet Reply

ちなみに、実際にruby1.8.7でrails3 + sqlite3 を導入したら先ほどのエラーは起きなかった。うーん、x86-mingw32は公開されているようだしcygwinで使うか、ruby1.8.7で使うかしないといけないのか。。。less than a minute ago via web Favorite Retweet Reply

自転車@伊豆高原

つぶやいて記録していたものをまとめておく。

合計: 202分, 57.1km

こやってみると、結構疲れている割に余り走っていないな。
むしろ疲れているのは坂のせい、というのは間違いないだろうが。

しかし、自転車のこぎがいがあって楽しかった。


ちなみに、お土産は松川湖の帰りに「伊豆のうさぎ」で購入。→ http://www.mapple.net/spots/G02201260204.htm
店の看板が可愛いし、店員さんは親切だし、お菓子も美味しかった。

ルービックキューブ記録1

記録を付けていくことにしよう。

1つ目の目標は12回平均を1分切ること。次は30秒を切ること。

まだまだだが頑張ろう。

ただいまの揃え方

  • 一面十字
  • F2Lでは2段まとめて揃える(今回初トライ)
  • OLLのエッジキューブを揃える
  • OLLのコーナーキューブを揃える(7パターン)
  • PLLのコーナーキューブを揃える(2パターン)
  • PLLのエッジキューブを揃える(3パターン)

困難なこと

  • F2Lが遅い(見るのに時間がかかる)
  • 指の動きがイマイチ(よく引っかかる)

ルービックキューブの滑りを良くした

最近ルービックキューブに少しだけハマっています。
以前も1回だけやったことがあったのですが、そのときは自力で2回ほど6面揃えただけで満足してやめてしまったのです。

しかし最近、会社の席の近くになぜかルービックキューブが置かれるようになり、触り始めるとやっぱり面白いので再開したという経緯なのです。
(ちなみに知恵の輪とかも置かれているが、こちらはあまりハマりませんでした。)


流石に自力で揃えるのは面倒なので、ネットで調べたのですが、スピードキューブというものがあることに気づきました。
世の中には素早く6面揃える人たちがいますが、だいたい方法は似ていて、パターンをたくさん覚えこんでいるというだけのようです。
ということで、一般人である私も練習すれば1分以内には揃えられるようになりそうなので、まずはそれを目標に始めました。
練習方法: http://www.pori2.net/LBL/practice.html

そして、反復練習を開始したのですが、ちょくちょくひっかかるのが大変煩わしく、そしてこのように煩わしいままに練習を続けるのは効率悪いし、ストレスも溜まりそうだと思い、今回滑りを良くよくすることを思い立ったのでした。


ターゲットにしたのは昔使っていたルービックキューブです。
色あせて赤色が白色になっていたり、シールが剥がれていたりして、どうせ使えないので失敗してもいいと思ったためです。


滑りを良くする方法は2つあるそうです。(組み合わせてもOK)

  • 研磨剤を使う方法
  • 潤滑材を使う方法

参考:http://www.planet-puzzle.com/faq/lub_sand.html


今回組み合わせて最高に滑りの良いものを作ろうと思って、以下の2つを購入しました。

ただし、結局潤滑材は使いませんでした。研磨剤だけで十分満足するほど滑りがよくなったのです。


また、ついでに色も張替えようと思い、以下のシートも購入しました。

サイズが2つあるのですが、15.5mmの少し小さいものを選ぶのがコツのようです。(貼るとき、少し中心がずれても致命的になりにくい)


ということで、前座が長くなってしまいましたが、以下が作業の流れです。


まず、古いルービックキューブの色をはぎ、ルービックキューブのエッジキューブを取り外し、研磨剤をたっぷり挿入。
ここで、一度にたくさんは挿入できないので、「エッジキューブを取り外して、研磨剤を挿入」→「はめて回す」を繰り返しました。
そのうちキューブの隙間から研磨剤が漏れ始めるので、そうすると挿入終了。

研磨剤を入れてからは、1週間くらいアニメをみたり暇なときにぐるぐる回していました。
これにより、ルービックキューブを使っていて引っ掛かりのあるところが削られ滑らかになるそうです。
(今回、恐らく全部で5時間くらいはぐるぐるしていたような気がします。)

そして解体して洗って、干す。

組み立てる。
そして滑りが凄く良いことに感動><

最後にカラーステッカーを貼って完成!

ステッカーは、結構慎重に貼らないとずれてしまいます。
今回、一番最初に貼った白色の中心が少しずれてしまったのが心残りでした。


先ほど早速6面揃えてみましたが、すごく使いやすくて感動しました。
ということで、また楽しいルービックキューブの反復練習が始まります。


(追記)
潤滑材を付けると回転させるにに必要な力が減ってスムーズに回転できるようになりました。

  • 研磨剤:引っ掛かりをなくす
  • 潤滑材:滑りを良くする

ということなのかと思います。

Classの特異クラス

疑問:クラスメソッドのメソッド探索では、最終地点はClassだというが、Classの特異メソッドはどういう位置づけか?
メタプログラミングRuby」では直接書かれていたわけではないので確かめてみた。

メタプログラミングRuby

メタプログラミングRuby


メタプログラミングRubyに書かれていた図は以下のような感じだった。

調べた結果このようになっていた。

  • 緑の矢印は、以下のサンプルコードでのメソッド探索経路
  • Classの特異メソッドを作っても、経路の最終地点はClassに収束するというのが面白い。
class Class
  def hoge
    puts "Class:hoge"
  end

  def hoge_not_eigen
    puts "Class:hoge_not_eigen"
  end

  class << self
    def hoge
      puts "EigenClass:hoge"
    end

    def hoge_eigen_only
      puts "EigenClass:hoge_eigen_only"
    end
  end
end

class MyClass
end

class << MyClass
  def hoge_my
    puts "ClassA:hoge_my"
  end
end

# (1)の経路を試すメソッド呼び出し
MyClass.hoge
MyClass.hoge_not_eigen
puts MyClass.method_defined?(:hoge_eigen_only)
MyClass.hoge_my

puts ""

# (2)の経路を試すメソッド呼び出し
class << MyClass
  hoge
  hoge_not_eigen
  hoge_eigen_only
end

標準出力は以下。

Class:hoge
Class:hoge_not_eigen
false
ClassA:hoge_my

EigenClass:hoge
Class:hoge_not_eigen
EigenClass:hoge_eigen_only


しかし、本当のところ、#Classのスーパークラスは図のように単純ではなくて、
#Class → #Module → #Object → #BasicObject → Class
となっている。(ruby 1.9.1p378 で確認)
ただし、通常#Object, #BasicObjectはすでに探索済みなので気にする必要はないので図からは省略した。
(恐らく「メタプログラミングRuby」の図もClassの上階層は省略しているのだと思われる)

class Class
  p superclass
  p superclass.superclass
  p superclass.superclass.superclass
  p superclass.superclass.superclass.superclass

  puts ""

  class << self
    p superclass
    p superclass.superclass
    p superclass.superclass.superclass
    p superclass.superclass.superclass.superclass
  end
end

puts ""

class MyClass
  class << self
    p superclass
    p superclass.superclass
    p superclass.superclass.superclass
  end
end
Module
Object
BasicObject
nil

#<Class:Module>
#<Class:Object>
#<Class:BasicObject>
Class

#<Class:Object>
#<Class:BasicObject>
Class