railsのダウングレード4系→3系

★ブログ移行のお知らせ
サイトを移行しました。以下をクリックください。
きよしの倶楽部 – 生活を潤わす情報を発信中。GTDを得意としてます。


ーーー
色々やってみたが、どうにもrails4系で

activeadmin-mongoid

のgemが通らない。一応、サポートはされている模様だが、いろいおソースをgitやgithubから引っ張らないと行けないようで、かつrails4が必要としているライブラリとdependencyで矛盾し、エラーが出てしまう。

おっかけるか、ダウングレードするかで、ダウングレードを選びました。
ここ2、3ヶ月使ってみて、やはりまだ多少早すぎる感じがしました。ruby自体は2.0系のままでもよいかもしれないですが、やはり相性と、今まで使い慣れたセットに戻した方が便利という結論です。
ruby1.9系も、rails3系もまだ枯れているとまではいってないかなとか・・・
(アップグレードするしたときには逆の事を言っていたきもしますがw)

さて、以前の残りがあれば不要ですが、愛機MBAの方には1.9系はインストールされてません。
パッチレベルは最新の方がいいはいいですが、今回は他の端末とあわせるために392にしておきました。

rbenv install 1.9.3-p392
rbenv rehash
rbenv global 1.9.3-p392
ruby -v
=> ruby 1.9.3p392 (2013-02-22 revision 39386) [x86_64-darwin13.0.0]

OKです。簡単。

railsの方はちょっとトラップがあります。まずきれいするためにgemで入っているrailsは全部削除。
で、4.0系はブートに使うライブラリ(railties)も削除しないと、消えてくれません。

gem uninstall rails ←場合によってはsudoで実行。delete all versions
gem uninstall railties -v '4.0.x'

で、rails3系のインストール。3.2.17を選択

gem update --system
gem install rails -v '3.2.17' --no-ri --no-rdoc
rails -v
=>Rails 3.2.17

以上です。

プログラムをべんきょうしよう!(1)

★ブログ移行のお知らせ
サイトを移行しました。以下をクリックください。
きよしの倶楽部 – 生活を潤わす情報を発信中。GTDを得意としてます。


ーーー
小学生むけに、とてもかんたんに、楽しくプログラムをべんきょうしようというのが、このページのテーマです。

だい一回は
①「プログラムって何だろう?」
②「かんきょう」をととのえよう!

という二つをやってみます。

ではさっそく、
「プログラムって何?」からはじめましょう。

もうプログラムっていう言葉、聞いた事、ないですか?

そう! 運動会でくばられるあれです。

f:id:kyt555:20140128182101p:plain
プログラム(運動会) - 無料テンプレート公開中 - Microsoft Office - 楽しもう Office ライフ

ここには運動会で行う競技が順番に書かれています。

そう、プログラムってじゅんばんどおりに、なにがおこるのか、書いてあるもののことなんです。

運動会だと

1、はじめのことば:校長先生
2、ラジオたいそう:全校
3、かけっこ:1年生
    ・
    ・
    ・

となっているものが、たとえば「スーパーマリオブラザーズ任天堂)」であれば、

1、スタートひょうじ
f:id:kyt555:20140128182902p:plain
2、「ででって、ででってっ、どん!」ひょうじ
f:id:kyt555:20140128183146p:plain
    ・
    ・
    ・

となっているわけです。

もちろん、じっさいのゲームのプログラムはもっとふくざつで、たくさんの文が書かれていますけど、けっきょくはものごとをじゅんばんどおりに書いてあげているだけです。

運動会とゲームのプログラムのちがいは

運動会:プログラムにそって、先生や子供たちが動く
ゲーム:プログラムにそって、●●が動く

さあ、●●には何が入るでしょう?

プログラムってPCを動かすためのメッセージなのです。
(もっとたくさん勉強すると、「めいれい」なんていったりもします。プログラムはPCを動かすためのめいれいなんですね)


じゃ、ちょっとめいれいしてみましょう。
プログラムの世界では、いつでもはじめてのプログラムは

"Hello! world!!" (世界のみんな!こんにちは!)

とパソコンにしゃべらせます。パソコンがしゃべるっていうのはがめんにひょうじする事です。

そのために、ここではRubyという言葉を使います。
パソコンはほかにも色んな言葉がわかりますので、そのうち、別の言葉でもめいれいしてみましょう。

ここではwindowsパソコンを使います。
ウィンドウズキーf:id:kyt555:20140128185936p:plainと”R”を同時に押してください。
↓こんな感じのがめんが出てくるはずなので
f:id:kyt555:20140128190132p:plain
そこに

cmd

とうってみましょう。

↓こんな感じの画面がでてきます。
f:id:kyt555:20140128190347p:plain
これを「コマンドプロンプト」とよびます。

ここに下の文字をうってみてください。

> irb

とすると↓みたいになると思います。

c:¥ > irb
irb(main):001:0> 

ここに

puts "Hello, World!!"

とうってみてください。どうなりましたか?
パソコンはちゃんということを聞いたでしょうか?

もしかしたら

=> nil

こんなものがひょうじされたかもしれません。これはパソコンがめいれいにしたがったあとで、へんじをしてくれたのです。

「どう? ちゃんとできたでしょ!」

みたいなかんじです。

今日はここまで。
パソコンはちゃんとプログラムを書いてあげると、ちゃんということを聞いてくれるきかいなのです。

ruby-buildのupgrade(brew編)

★ブログ移行のお知らせ
サイトを移行しました。以下をクリックください。
きよしの倶楽部 – 生活を潤わす情報を発信中。GTDを得意としてます。


ーーー
前回の記事にも書きましたが、モバイル用のMac Book Airの方は新規にbrewからrbenvをインストールした感じですが、もう一つの愛機、Mac Miniの方は放置のままでした。

MBAの方のrubyを2.0系にしたので、デスクトップも同じくアップグレード、と行きたいとこですが、うまくいきませんでした。

kytmacmini:~ kyt$ rbenv versions
  system
  1.9.3-p0
* 1.9.3-p392 (set by /Users/kyt/.rbenv/version)
  2.0.0-p0

あらー。結構、バージョンインストールされてるな。ということで必要な物意外は削除しました。
一応1.9系は、万が一、過去のお客さんからの突っ込みがあった際に検証しないと行けないのでp392は残します。

kytmacmini:~ kyt$ sudo rbenv uninstall -f 1.9.3-p0
kytmacmini:~ kyt$ sudo rbenv uninstall -f 2.0.0-p0

sudoでインストールしたモジュールがあったようで、パーミッションの関係でsudo実行です。
MBAとあわせる2.0.0-p353を突っ込もうとした所、

kytmacmini:~ kyt$ rbenv install 2.0.0-p353
ruby-build: definition not found: 2.0.0-p353

You can list all available versions with `rbenv install --list'.

If the version you're looking for is not present, first try upgrading
ruby-build. If it's still missing, open a request on the ruby-build
issue tracker: https://github.com/sstephenson/ruby-build/issues

ん? rbenv install -l してみると確かにないです。2系のp353。

ruby-buildのバージョン確認。

kytmacmini:~ kyt$ ruby-build --version
ruby-build 20130408

ありゃ、古いわ。で、upgradeということで、

kytmacmini:~ kyt$ brew upgrade ruby-build
Error: ruby-build-HEAD already installed

えーと、どうしましょ。どうしようもないので、削除、再インストールです。

kytmacmini:~ kyt$ brew uninstall ruby-build
kytmacmini:~ kyt$ brew install ruby-build
==> Installing ruby-build dependency: openssl
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/openssl-1.0
######################################################################## 100.0%
==> Pouring openssl-1.0.1f.mavericks.bottle.tar.gz
==> Caveats
This formula is keg-only, so it was not symlinked into /usr/local.

Mac OS X already provides this software and installing another version in
parallel can cause all kinds of trouble.

The OpenSSL provided by OS X is too old for some software.

Generally there are no consequences of this for you. If you build your
own software and it requires this formula, you'll need to add to your
build variables:

    LDFLAGS:  -L/usr/local/opt/openssl/lib
    CPPFLAGS: -I/usr/local/opt/openssl/include
==> security find-certificate -a -p /Library/Keychains/System.keychain > '/usr/l
==> security find-certificate -a -p /System/Library/Keychains/SystemRootCertific
==> mv -f /usr/local/etc/openssl/osx_cert.pem.tmp /usr/local/etc/openssl/osx_cer
==> Summary
🍺  /usr/local/Cellar/openssl/1.0.1f: 429 files, 15M
==> Installing ruby-build
==> Downloading https://github.com/sstephenson/ruby-build/archive/v20140110.1.ta
######################################################################## 100.0%
==> ./install.sh
🍺  /usr/local/Cellar/ruby-build/20140110.1: 105 files, 460K, built in 3 seconds

opensslですか。確かにMBAは別件があって、ちゃんとupgrade済みでした。
折角なので

kytmacmini:~ kyt$ openssl version
OpenSSL 1.0.1f 6 Jan 2014

たしかに。必要に応じてbrew link openssl --forceですかね。

kytmacmini:~ kyt$ ruby-build --version
ruby-build 20140110.1
kytmacmini:~ kyt$ rbenv install -l
Available versions:
  2.0.0-p353

確かにでてきた。

あとはこちらを参考に、globalに反映させればOKです。

mongoDBでRuby on Rails!(1)

★ブログ移行のお知らせ
サイトを移行しました。以下をクリックください。
きよしの倶楽部 – 生活を潤わす情報を発信中。GTDを得意としてます。


ーーー
こちらで書いたようにローカルにmongoを入れたまではよいですが、その後、結局AWS Record HashModelを使って開発を進めたので、ローカルのmongoがちょっと寂しくなってます。

そこで、こいつを使ってちょっと遊んでみようと思いつきました。

続きを読む

AWS Record HashModel

★ブログ移行のお知らせ
サイトを移行しました。以下をクリックください。
きよしの倶楽部 – 生活を潤わす情報を発信中。GTDを得意としてます。


ーーー
AWS::Record::HashModel。便利ですね。
ただ、保存する時に一部、UTCでつっこまれることがあります。
ひとつひとつ、きっちり対応しても良いのですが、面倒なのでtimezoneがUTCの時はattributeで強制的にJSTにして、DBはいつでもJSTで保存できるようにしました。


以下、aws-sdk-XXX/lib/aws/record/attributes.rb

class DateTimeAttr < BaseAttr

 def self.type_cast raw_value, options = {}
          case raw_value
          when nil      then nil
          when ''       then nil
          ##ここをコメントアウト
          #when DateTime then raw_value

   ##以下のようにカスタマイズ
          when DateTime then
           if raw_value.zone == "+00:00"
             raw_value = raw_value - Rational(9, 24)
             raw_value.new_offset(Rational(9,24))
           else
             raw_value
           end

          when Integer  then
            begin
              DateTime.parse(Time.at(raw_value).to_s) # timestamp
            rescue
              nil
            end
          else
            begin
              DateTime.parse(raw_value.to_s) # Time, Date or String
            rescue
              nil
            end
          end
        end

ま、そのうち本家の方がきっちり対応してくれるでしょう。
それまでのつなぎということで。

 ビックデータは悪夢をみるか?

★ブログ移行のお知らせ
サイトを移行しました。以下をクリックください。
きよしの倶楽部 – 生活を潤わす情報を発信中。GTDを得意としてます。


ーーー

「Japan IT Week 春 2013」
「第7回Web&モバイルマーケティングEXPO」
マーケティングビッグデータの夢を見るか?」
ヤフー株式会社代表取締役社長 宮坂学

http://internet.watch.impress.co.jp/docs/event/20130510_598880.html


この講演、拝聴していて感じたのは東野圭吾さんの「プラチナデータ」。DNA処理ってビックデータ計算そのものなのかと。小説の中では髪の毛一本から顔の写真を抽出していました。

一方、Yahooの例を参照すると、実際にビックデータは「社会」抽出は既に実現できていて、いずれ「個人」までを映し出す、すなわち把握しきってしまう姿が示唆されてと思います。宮坂さん自身も自ら指摘してましたが、いち企業が数多くの個人を傘下に収めている姿は良い面と悪い面があって、とても深い問題です。

Yahooは決して悪さをしないとCEO自ら保証してましたが、個人的には大抵この手のテーマは、どんなにトップやリーダーがきっちりやります!と宣言しても一人、もしくは少数の悪魔によって「悪夢」がもたらされるのがパターンかと思ってます。

きしくもこの講演の直後が夏野さんの「日本はIT技術の進歩に制度や社会が追いついていない」という演者十八番テーマの講演でしたが、加えてそもそも人間そのものの思考が技術の進歩に追いついてないともいえるのではないでしょうか。普通に某G社を始めとするインターネットサービスを使っているだけで、自分のほぼ全てがその会社に掌握されている現実をまじめに考えている人がどのくらいいるのでしょうか。少なくとも自分は現時点で危険性を殆ど考えることなしに、インターネットサービスを利用してます。
(職業柄、提供サービスの裏の仕組みまで想像できるので「そんなことまで知っているのか!」と感心する事は多々ありますw)


技術の進歩はエンジニアやその筋の学者を始め、ほったらかしておいても市場自体がリードしていくものです。その一方でそれがもたらす影響は、社会学や行動学からきっちりと分析し、必要な思考や不足しているリソースを指摘する、いわば文系的なIT(IT社会学?)エバンジェリストがいないとなかなか考える機会がないのが実情ではないでしょうか。こんな時代だからこそ哲学をどうどうと語れるユニークな人材の登場を期待します。

 ゴールデンウィークはMongoDBインストール

★ブログ移行のお知らせ
サイトを移行しました。以下をクリックください。
きよしの倶楽部 – 生活を潤わす情報を発信中。GTDを得意としてます。


ーーー
今週のお題「2013年のゴールデンウィーク

今まではちょっとした遊びとして使っていたMongoDB。ここにきて本業の方でとあるツール用に必要になったため、まじめにセットアップ。まずはMACローカル環境構築。

[このーき、何の木、きになる木♪・・・]

HOMEBREWはインストール済みなので、インストールは至って簡単。

XXX-Mac-mini:~ XXX$ brew install mongodb
==> Downloading http://fastdl.mongodb.org/osx/mongodb-osx-x86_64-2.4.1.tgz
######################################################################## 100.0%
==> Caveats
To have launchd start mongodb at login:
    ln -sfv /usr/local/opt/mongodb/*.plist ~/Library/LaunchAgents
Then to load mongodb now:
    launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist
Or, if you don't want/need launchctl, you can just run:
    mongod
==> Summary
&#127866;  /usr/local/Cellar/mongodb/2.4.1-x86_64: 20 files, 314M, built in 21 seconds

難なく完了。ちなみに'brew update'と'brew upgrade mongodb'でversion2.4.3までアップデートされます。

自動起動はいらんのでシンボリックリンクやlaunchctlは無視して、シェルとしてコマンド実行。

XXX-Mac-mini:~ XXX$ mongod &
[1] 10500
all output going to: /usr/local/var/log/mongodb/mongo.log

んー、ちょいログの場所がよろしくない。/usr/local/etc/mongod.confで都合の良い場所に。自分は/var/logに集めてconsole.appで見るタイプなので、そうなるように修正。で、いよいよmongoコマンドでDBにつないでみましょう!

XXX-Mac-mini:~ XXX$ mongo
MongoDB shell version: 2.4.3
connecting to: test
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
	http://docs.mongodb.org/
Questions? Try the support group
	http://groups.google.com/group/mongodb-user
Server has startup warnings: 
Thu May  2 21:06:12.926 [initandlisten] 
Thu May  2 21:06:12.926 [initandlisten] ** WARNING: soft rlimits too low. Number of files is 256, should be at least 1000
>

最後にソフトリソースリミットが低いと言われてますが、Deamon起動ではないので、ひとまず無視。デフォルトのplistにはちゃんと記載されているのでLaunchctlで立ち上げればよいのでしょうか。やはり、気になるので方向転換。Deamon化します。インストール時に指示されたコマンドを実行するだけです。

XXX-Mac-mini:~ XXX$ ln -sfv /usr/local/opt/mongodb/*.plist ~/Library/LaunchAgents
/Users/XXX/Library/LaunchAgents/homebrew.mxcl.mongodb.plist -> /usr/local/opt/mongodb/homebrew.mxcl.mongodb.plist
XXX-Mac-mini:~ XXX$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist

psで起動確認

XXX-Mac-mini:~ XXX$ ps -ef|grep mongod
  501 11948  3421   0 10:30PM ??         0:01.47 /usr/local/opt/mongodb/mongod run --config /usr/local/etc/mongod.conf

OK。unloadで終了確認。

XXX-Mac-mini:~ XXX$ launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist
XXX-Mac-mini:~ XXX$ ps -ef|grep mongod
  501 12034 10392   0 10:34PM ttys000    0:00.00 grep mongod

みごとにプロセスは消えてなくなりました。もう一度起動して今度は起動ログ確認。

***** SERVER RESTARTED *****


Thu May  2 22:37:24.402 [initandlisten] MongoDB starting : pid=12091 port=27017 dbpath=/usr/local/var/mongodb 64-bit host=XXX-Mac-mini.local
Thu May  2 22:37:24.403 [initandlisten] db version v2.4.3
Thu May  2 22:37:24.403 [initandlisten] git version: fe1743177a5ea03e91e0052fb5e2cb2945f6d95f
Thu May  2 22:37:24.403 [initandlisten] build info: Darwin bs-osx-106-x86-64-1.local 10.8.0 Darwin Kernel Version 10.8.0: Tue Jun  7 16:33:36 PDT 2011; root:xnu-1504.15.3~1/RELEASE_I386 i386 BOOST_LIB_VERSION=1_49
Thu May  2 22:37:24.403 [initandlisten] allocator: system
Thu May  2 22:37:24.403 [initandlisten] options: { bind_ip: "127.0.0.1", command: [ "run" ], config: "/usr/local/etc/mongod.conf", dbpath: "/usr/local/var/mongodb", logappend: "true", logpath: "/var/log/mongodb/mongo.log" }
Thu May  2 22:37:24.404 [initandlisten] journal dir=/usr/local/var/mongodb/journal
Thu May  2 22:37:24.404 [initandlisten] recover : no journal files present, no recovery needed
Thu May  2 22:37:24.503 [websvr] admin web console waiting for connections on port 28017
Thu May  2 22:37:24.503 [initandlisten] waiting for connections on port 27017

変なとこはなさそうです。

ではDB操作してみましょう。公式サイトに記載の通りtestデータベース(デフォルトのDB)にテストコレクション(実験レコード)をinsertしてリトリーブしてみましょう。(しかし、分かりにくい説明ですよね、公式サイト。。。)

> db.test.save( { a: 1 } )
> db.test.find()
{ "_id" : ObjectId("51825b041d163ec8fdce664c"), "a" : 1 }
> 

ちゃんとidが振られて挿入できているみたいです。