iriya-ufo's blog

Curiosity was simply the first derivative of knowledge.

Mac に AUCTeX をインストールした

昔書いてた TeX を Mac 環境で快適に使う設定を始めたのが運のつき・・・めちゃ時間かかりました。 TeX はもうバッドノウハウの固まりって感じがして好きじゃなくなってきたけど、数学するなら TeX 必須なんですよねぇ。

ということで全部入りで簡単にインストールできる方法を紹介します。

MacTeX

ここから全部入りでインストールできます。全部入りなのでファイル容量がすごいことになってます。

Emacs に AUCTeX をインストール

Emacs のパッケージシステムを使って AUCTeX をインストールします。

M-x package-list-packages

インストールできたら .emacs に設定を書きます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
;;
;;====================================
;; AUCTeX
;;====================================
(setq TeX-default-mode 'japanese-latex-mode)
(setq japanese-LaTeX-command-default "pLaTeX")
(setq japanese-LaTeX-default-style "jsarticle")
(setq TeX-output-view-style '(("^dvi$" "." "xdvi '%d'")))
(setq preview-image-type 'dvipng)
(setq TeX-file-extensions '("tex" "sty" "cls" "ltx" "texi" "texinfo" "dtx"))
(setq LaTeX-clean-intermediate-suffixes '("\\.aux" "\\.log" "\\.out" "\\.toc" "\\.brf" "\\.nav" "\\.snm"))
(setq TeX-view-program-list '(("TeXShop" "open -a TeXShop.app %o")
                              ("open" "open %o")
                              ))
(setq TeX-view-program-selection '((output-pdf "TeXShop")
                                   (output-html "open")
                                   ))
(add-hook 'LaTeX-mode-hook (function (lambda ()
  (add-to-list 'TeX-command-list
    '("pLaTeX" "%(PDF)platex %`%S%(PDFout)%(mode)%' %t"
     TeX-run-TeX nil (latex-mode) :help "Run ASCII pLaTeX"))
  (add-to-list 'TeX-command-list
    '("dvi" "dvipdfmx -V 4 '%s' " TeX-run-command t nil))
  (add-to-list 'TeX-command-list
    '("pdf" "open -a TeXShop.app '%s.pdf' " TeX-run-command t nil))
)))
(setq kinsoku-limit 10)
(setq LaTeX-indent-level 4)
(add-hook 'LaTeX-mode-hook 'turn-on-reftex)
(setq reftex-plug-into-AUCTeX t)
(add-hook 'LaTeX-mode-hook 'visual-line-mode)
(add-hook 'LaTeX-mode-hook 'LaTeX-math-mode)

C-c C-c で platex でコンパイルします。あとは同じコマンドを叩いて、dvi と pdf をすれば TeXShop.app が起動して見られます。

Mac の Gauche で SLIB を使う

Gauche は brew でインストールしていますが SLIB をインストールしていなかったためエラーがでました。

ここからダウンロードしてくれば使えるようになります。

The SLIB Portable Scheme Library

インストール方法

Gauche デフォルトのライブラリパスにコピーしてあげるだけです。

$ cd ~/Downloads
$ curl -O http://groups.csail.mit.edu/mac/ftpdir/scm/slib-3b4.zip
$ unzip slib-3b4.zip
$ cp -r slib /usr/local

これで、例えば以下のようにして Gauche で trace のデバッグができるようになりました。

1
2
(use slib)
(require 'trace)

SICP 読書会始めました

もうすでに2回ほど挫折してるけど今回こそは読破する勢いで読んでいきます。そのための心強い仲間もできました。興味のある方は歓迎しておりますのでご参加ください。

こちらで議事録を記録していきます。

sicp - github

開催日時は Google Calendar からご覧いただけます。

sicp - calendar

Mac の Emacs に Cmigemo をインストール

cmigemo はすごく便利です。Mac の Emacs にインストールするのに若干はまったので備忘録として記載します。

まずはインストールから

$ brew install cmigemo

ここから migemo.el をとってきてロードパスの通ったところに置きます。

$ git clone https://github.com/emacs-jp/migemo.git

.emacs の設定をします。exec-path の問題はいくつか解決方法がありましたが、exec-path-from-shell のパッケージはうまくいきませんでした。また elisp も動くものと動かないものがありました。以下のように書くと私の環境下では動作しました。

1
2
3
4
5
6
;; exec-path が GUI で正しく引き継がれない問題を解決
(let ((path-str
       (replace-regexp-in-string
       "\n+$" "" (shell-command-to-string "echo $PATH"))))
  (setenv "PATH" path-str)
  (setq exec-path (nconc (split-string path-str ":") exec-path)))

cmigemo の設定です。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
;; cmigemo
;; 日本語のインクリメンタル検索
(require 'migemo)
(setq migemo-command "cmigemo")
(setq migemo-options '("-q" "--emacs"))
(setq migemo-dictionary "/usr/local/share/migemo/utf-8/migemo-dict")
(setq migemo-user-dictionary nil)
(setq migemo-regex-dictionary nil)
(setq migemo-coding-system 'utf-8-unix)
(load-library "migemo")
(migemo-init)
;; IME の制御  
;; emacs 起動時は英数モードから始める
(add-hook 'after-init-hook 'mac-change-language-to-us)
;; minibuffer 内は英数モードにする
(add-hook 'minibuffer-setup-hook 'mac-change-language-to-us)
;; [migemo]isearch のとき IME を英数モードにする
(add-hook 'isearch-mode-hook 'mac-change-language-to-us)

Gem を管理しよう

Ruby でプログラミングしていると gem という便利なパッケージ管理ツールを使うことになるでしょう。最初のうちは $ gem install hoge とかやってるかと思います。そんなこんなでいろいろインストールするとぐちゃぐちゃになってきて Rails を動かし始めたらもう訳が分からなくなるでしょう。一つの環境でしか使わないならいいでしょうが、複数で同じ環境を構築したいなどとなると少し大変です。 そこで bundler の出番です。bundler は gem パッケージの管理を依存関係の問題も含めて解決してくれます。

まずは gem をアップデートしましょう。

$ gem update --system

既存の gem が入ってぐちゃぐちゃになってる場合、全部綺麗に削除してしまいましょう。デフォルトではいる gem は削除できませんとメッセージが出るのでそれ以外を削除します。

$ gem uni $(gem li --no-versions)

bundler をインストールしましょう。他にも、これはシステム全体にインストールしてもいいかなと思うものは入れちゃってOKです。私は pry だけ入れました。

$ gem i bundler
$ gem i pry

あとはプロジェクト毎に入れたい gem を Gemfile というファイルに記述していけば大丈夫です。$ bundle init コマンドで Gemfile のひな形ができます。

例えば Rails プロジェクトなどでは以下のようにして gem を管理するとよいでしょう。

$ bundle install --path vendor/bundle --without production

実行時は $ bundle exec をつけて実行してください。

Rails 製アプリの Shapado をインストールしようとしたらとんでもないことになった

プログラミング上達のコツはソースを読むことだ、とよく言われます。最近 Ruby on Rails の勉強を始めたので学習のためにオープンソースな Rails アプリを読んでみようと思いました。Shapado というQ&Aアプリが面白そうだったので Mac にインストールして動かしてみました。これが時間を食いつぶすきっかけになるとは思ってもいなかった・・・

最初に結論だけ書きますと起動しませんでした。なのでエラーメッセージとかでググってこのサイトに来て頂いた方には申し訳ないですが解決策はありません。Ruby 1.9 と古い gem を使えば動くかもしれませんが、勉強のためにインストールするアプリでわざわざ古いものを使いたくないので諦めました。

それを念頭にいれた上で私の行った作業の備忘録を以下に記します。

mongodb のインストール

Shapado は mongodb を使用していますのでその環境を整えましょう。brew を使って管理します。

$ brew update
$ brew install mongodb

以下のメッセージが出ます、余計なプロセスは立ち上げたくないので自動起動の設定はしません!

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 --config /usr/local/etc/mongod.conf

とりあえず言われた通りに起動します。

$ mongod --config /usr/local/etc/mongod.conf

起動させた状態で接続を確認します。

$ mongo
MongoDB shell version: 2.4.9
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
> 

大丈夫ですね。

help とか打てば使い方が表示されます。MySQL などと違って簡単ですね :) データは /usr/local/var/mongodb 配下に入ります。変更したいときは config ファイルを編集してください。

Shapado を始める

bundler をいれる

git とか当たり前のように使ってるでしょう? ruby は rbenv とか使ってますか? YES ですね。はい OK 次に進みます。

$ gem install bundler

ダウンロード

Shapado を Fork して git clone で手元に持ってきます。ま、別に Fork しなくてもいいですが。

$ git clone git@github.com:yourname/shapado.git
$ cd shpado/

アプリケーションの設定

設定ファイルをコピーして編集します。とりあえずローカルで動かしたいので設定ファイルの編集はすっとばす。

$ cp config/shapado.yml.sample config/shapado.yml
$ cp config/mongoid.yml.sample config/mongoid.yml
$ cp config/auth_providers.yml.sample config/auth_providers.yml

パフォーマンス監視してます(ドヤァ。とかいうとかっこいいので NewRelic いれましょう。 ここでアカウント作ります。

https://rpm.newrelic.com/

アカウント作ったら License Key を取得して newrelic.yml に設定します。

$ cp config/newrelic.yml.sample config/newrelic.yml
$ vim config/newrelic.yml # License Key をペースト
$ vim .gitignore # config/newrelic.yml を追加

依存関係をインストール

$ bundle install

以下のエラーがでます。めちゃ古い Twitter の gem なので怒られました。

Could not find twitter-1.7.2 in any of the sources

Gemfile から twitter 関連を外して再度 $ bundle install を。

以下のエラーがでます。ZenTest を利用するには gem が 1.8 でないといけないそうですが、私は 2.1 を使っています。古い gem なんて使いたくないので ZenTest はいれない方向にしました。Gemfile から autotest を外して再度 $ bundle install を。

Gem::InstallError: ZenTest requires RubyGems version ~> 1.8. Try 'gem update --system' to update RubyGems itself.

以下のエラーがでます。Qt をビルドするための qmake が無いせいです。Qt とか大嫌いなんで、Gemfile から capybara-webkit を外します。

An error occurred while installing capybara-webkit (0.11.0), and Bundler cannot continue.

以下のエラーがでます。Gemfile から ruby-prof を外します。ruby-prof はプロファイリングによりプログラムの高速化を計るものですが今はいりません。

An error occurred while installing ruby-prof (0.10.8), and Bundler cannot continue.

以下のエラーがでます。Gemfile から ruby-stemmer を外します。ruby-stemmer は語の表層形から活用語尾などを取り除くためのものです。

An error occurred while installing ruby-stemmer (0.8.5), and Bundler cannot continue.

ここまでしてやっと $ bundle install できた・・・

さて次は rake bootstrap です。以下のコマンドを実施します。

$ bundle exec rake bootstrap RAILS_ENV=development

画像を扱うためのライブラリが無いぞ!と言われ rake bootstrap ができないので libmagic をいれます。

$ brew install libmagic

次のエラーです。Ruby 2.0 を使ってるので iconv 関連で起動しませんでした。Gemfile に gem 'iconv' を足して $ bundle install します。mongodb が起動していなかったせいでエラーが出たので起動してから rake bootstrap しました。

Created /Users/iriya/.bughunterrc with username=admin password=admin
Loaded
syck has been removed, psych is used instead
DEPRECATION WARNING: You have Rails 2.3-style plugins in vendor/plugins! Support for these plugins will be removed in Rails 4.0. Move them out and bundle them in your Gemfile, or fold them in to your app as lib/myplugin/* and config/initializers/myplugin.rb. See the release notes for more on this: http://weblog.rubyonrails.org/2012/1/4/rails-3-2-0-rc2-has-been-released. (called from <top (required)> at /Users/iriya/project/shapado/Rakefile:7)
DEPRECATION WARNING: You have Rails 2.3-style plugins in vendor/plugins! Support for these plugins will be removed in Rails 4.0. Move them out and bundle them in your Gemfile, or fold them in to your app as lib/myplugin/* and config/initializers/myplugin.rb. See the release notes for more on this: http://weblog.rubyonrails.org/2012/1/4/rails-3-2-0-rc2-has-been-released. (called from <top (required)> at /Users/iriya/project/shapado/Rakefile:7)
rake aborted!

rake bootstrap が出来ないのでここで諦めます。まずは rails s での起動を目指す。

/etc/hosts に以下を追記して rails s で起動しました。

"0.0.0.0 localhost.lan group1.localhost.lan group2.localhost.lan"

ここでうまくいったと思ったのですが、リダイレクトループになってしまったので諦めました。

以下 rake bootstrap の trace です。

iriya@mba> bundle exec rake bootstrap RAILS_ENV=development --trace                                   (git)-[master]-
Loaded
syck has been removed, psych is used instead
DEPRECATION WARNING: You have Rails 2.3-style plugins in vendor/plugins! Support for these plugins will be removed in Rails 4.0. Move them out and bundle them in your Gemfile, or fold them in to your app as lib/myplugin/* and config/initializers/myplugin.rb. See the release notes for more on this: http://weblog.rubyonrails.org/2012/1/4/rails-3-2-0-rc2-has-been-released. (called from <top (required)> at /Users/iriya/project/shapado/Rakefile:7)
DEPRECATION WARNING: You have Rails 2.3-style plugins in vendor/plugins! Support for these plugins will be removed in Rails 4.0. Move them out and bundle them in your Gemfile, or fold them in to your app as lib/myplugin/* and config/initializers/myplugin.rb. See the release notes for more on this: http://weblog.rubyonrails.org/2012/1/4/rails-3-2-0-rc2-has-been-released. (called from <top (required)> at /Users/iriya/project/shapado/Rakefile:7)
** Invoke bootstrap (first_time)
** Invoke environment (first_time)
** Execute environment
Missing GeoIP data. Please run '/Users/iriya/project/shapado/script/update_geoip'
install ruby-stemmer `gem install ruby-stemmer` to activate the full text search support
install ruby-stemmer `gem install ruby-stemmer` to activate the full text search support
install ruby-stemmer `gem install ruby-stemmer` to activate the full text search support
install ruby-stemmer `gem install ruby-stemmer` to activate the full text search support
>> Setting up Twitter provider
>> Setting up Facebook provider
>> Setting up Identica provider
>> Setting up Github provider
>> Setting up LinkedIn provider
** Invoke db:drop (first_time)
** Invoke db:mongoid:drop (first_time)
** Invoke environment 
** Execute db:mongoid:drop
** Execute db:drop
** Invoke setup:versions (first_time)
** Invoke environment 
** Execute setup:versions
** Invoke setup:create_admin (first_time)
** Invoke environment 
** Execute setup:create_admin
** Invoke setup:default_theme (first_time)
** Invoke environment 
** Execute setup:default_theme
Error processing 531f1f5e3407653ee4000013: undefined method `empty?' for nil:NilClass
Error processing 531f1f5e3407653ee4000013: undefined method `empty?' for nil:NilClass
** Invoke setup:default_group (first_time)
** Invoke environment 
** Execute setup:default_group
rake aborted!
Called id for nil, which would mistakenly be 8 -- if you really wanted the id of nil, use object_id
/Users/iriya/project/shapado/app/models/group.rb:641:in `set_shapado_version'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/activesupport-3.2.6/lib/active_support/callbacks.rb:451:in `_run__4383945358378565518__create__3161521134659722749__callbacks'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/activesupport-3.2.6/lib/active_support/callbacks.rb:405:in `__run_callback'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/activesupport-3.2.6/lib/active_support/callbacks.rb:385:in `_run_create_callbacks'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/activesupport-3.2.6/lib/active_support/callbacks.rb:81:in `run_callbacks'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/bundler/gems/mongoid-39f32f964378/lib/mongoid/callbacks.rb:43:in `run_callbacks'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/bundler/gems/mongoid-39f32f964378/lib/mongoid/persistence/insertion.rb:25:in `block (2 levels) in prepare'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/activesupport-3.2.6/lib/active_support/callbacks.rb:447:in `_run__4383945358378565518__save__3161521134659722749__callbacks'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/activesupport-3.2.6/lib/active_support/callbacks.rb:405:in `__run_callback'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/activesupport-3.2.6/lib/active_support/callbacks.rb:385:in `_run_save_callbacks'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/activesupport-3.2.6/lib/active_support/callbacks.rb:81:in `run_callbacks'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/bundler/gems/mongoid-39f32f964378/lib/mongoid/callbacks.rb:43:in `run_callbacks'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/bundler/gems/mongoid-39f32f964378/lib/mongoid/persistence/insertion.rb:24:in `block in prepare'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/bundler/gems/mongoid-39f32f964378/lib/mongoid/persistence/insertion.rb:22:in `tap'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/bundler/gems/mongoid-39f32f964378/lib/mongoid/persistence/insertion.rb:22:in `prepare'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/bundler/gems/mongoid-39f32f964378/lib/mongoid/persistence/operations/insert.rb:26:in `persist'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/bundler/gems/mongoid-39f32f964378/lib/mongoid/persistence.rb:49:in `insert'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/bundler/gems/mongoid-39f32f964378/lib/mongoid/persistence.rb:154:in `upsert'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/bundler/gems/mongoid-39f32f964378/lib/mongoid/persistence.rb:75:in `save!'
/Users/iriya/project/shapado/lib/tasks/setup.rake:48:in `block (2 levels) in <top (required)>'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/rake-0.9.2.2/lib/rake/task.rb:205:in `call'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/rake-0.9.2.2/lib/rake/task.rb:205:in `block in execute'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `each'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `execute'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/rake-0.9.2.2/lib/rake/task.rb:158:in `block in invoke_with_call_chain'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/2.0.0/monitor.rb:211:in `mon_synchronize'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/rake-0.9.2.2/lib/rake/task.rb:151:in `invoke_with_call_chain'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/rake-0.9.2.2/lib/rake/task.rb:176:in `block in invoke_prerequisites'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/rake-0.9.2.2/lib/rake/task.rb:174:in `each'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/rake-0.9.2.2/lib/rake/task.rb:174:in `invoke_prerequisites'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/rake-0.9.2.2/lib/rake/task.rb:157:in `block in invoke_with_call_chain'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/2.0.0/monitor.rb:211:in `mon_synchronize'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/rake-0.9.2.2/lib/rake/task.rb:151:in `invoke_with_call_chain'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/rake-0.9.2.2/lib/rake/task.rb:144:in `invoke'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/rake-0.9.2.2/lib/rake/application.rb:116:in `invoke_task'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `block (2 levels) in top_level'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `each'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `block in top_level'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/rake-0.9.2.2/lib/rake/application.rb:88:in `top_level'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/rake-0.9.2.2/lib/rake/application.rb:66:in `block in run'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/rake-0.9.2.2/lib/rake/application.rb:63:in `run'
/Users/iriya/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/rake-0.9.2.2/bin/rake:33:in `<top (required)>'
/Users/iriya/.rbenv/versions/2.0.0-p353/bin/rake:23:in `load'
/Users/iriya/.rbenv/versions/2.0.0-p353/bin/rake:23:in `<main>'
Tasks: TOP => bootstrap => setup:default_group

また Shapado のインストール過程で以下の場所にファイルが作成されています。

  • Created /Users/iriya/.magent_webrc with username=admin password=admin
  • Created /Users/iriya/.bughunterrc with username=admin password=admin

以下のファイルを編集しています。

  • config/locales/invitations/en.yml
  • config/locales/searches/en.yml

土日で出来る Node.js 入門

そろそろ流行りの Node.js 勉強しようと思いたち土日にあそんでみました。Ubuntu 12.04 にインストールしてみたよ。

インストール方法

Node.js はまだまだ開発まっしぐらなのですぐにバージョンが古くなります。調べたところバージョン管理してくれる nvm (Node Version Manager) というのがあるらしいのでそれを使いましょう。

準備

もう入ってるなら必要ないです。

$ sudo apt-get install build-essential libssl-dev curl

nvm のインストール

nvm をインストールします。

$ git clone git://github.com/creationix/nvm.git ~/.nvm
$ source ~/.nvm/nvm.sh

node のインストール

node.js をインストールします。

$ nvm ls-remote # インストールできるバージョンを確認  
$ nvm install 0.11 # 好きなものをインストール(最新がいい)
$ nvm use 0.11
$ nvm ls # 使っているバージョンの確認
$ node -v # 確認
$ npm -v # npm も確認

シェルの設定

ログアウトなどすると nvm が使えないのでシェルの設定ファイルに以下を追記します。

source ~/.nvm/nvm.sh
nvm use 0.11 >/dev/null

インストールが終わったら

以下のリンク先を参考に遊んでみましょう。Heroku のデプロイまですごく簡単に行えました。Ruby on Rails より簡単だったなぁ。

参考サイト

Ubuntu の Git を最新にする

Ubuntu への git インストールは apt-get で出来ますがバージョンが古いので最新バージョンをインストールする方法です。ソースコンパイルは行わずパッケージマネジャーで管理します。

$ sudo apt-add-repository ppa:git-core/ppa
$ sudo apt-get update
$ sudo sudo apt-get upgrade

Rbenv で入れた Ruby で Flymake がちゃんと動作しなかったので直した

Emacs ユーザーの皆さんこんにちは。Ruby 書いてますか?rbenv 入れてますか?flymake 使ってますか? flymake はデフォルトだとシステムの ruby を読みにいきます。rbenv で ruby をインストールしていた場合、パスを設定してやらないとシステムの ruby1.8 を使います。なので 1.9以降の文法を書くとエラーになります。具体的には以下のハッシュ記法などで Syntax Error がでます。

1
2
h = { :h => 1 } # ruby1.8 or ruby1.9 以降で動作
h = { h: 1 } # ruby1.8 だとエラーになる

rbenv でインストールした ruby を読ませるため .emacs に以下を追記します。

1
2
3
;; Setting rbenv path
(setenv "PATH" (concat (getenv "HOME") "/.rbenv/shims:" (getenv "HOME") "/.rbenv/bin:" (getenv "PATH")))
(setq exec-path (cons (concat (getenv "HOME") "/.rbenv/shims") (cons (concat (getenv "HOME") "/.rbenv/bin") exec-path)))

Emacs を再起動して M-x run-ruby で確認してみましょう。

PATH 設定前

irb(main):001:0> RUBY_VERSION
=> "1.8.7"

PATH 設定後

irb(main):001:0> RUBY_VERSION
=> "2.0.0"

これで flymake でも新しい文法でチェックできるようになります。

オンラインコースを成功させる6つのポイント

オンラインで授業を行うときに大切な6つのTipsを見つけたので紹介します。

6 Tips to Make Sure Your Online Courses Serve Students Well

オンラインでの授業が生徒にとって有益なものとなるようにしたい、そのためにできる6つのポイントを紹介する。

  • 生徒が相互に影響し合えるような分かりやすくきちんとしたコミュニケーションがあることが何より重要。コースを受けることによってどんなことが分かるのかを明瞭な言葉で完結させておくこと。生徒がどんな問題を抱えているかについて考え続け、その努力を怠らないこと。
  • 生徒同士のコミュニティを大切にすること。生徒が互いに質問でき情報を共有しさらに議論できるようにすること。
  • 生徒のなかからリーダー格の人を決めること。オンラインでの学びを経験した生徒は他の生徒を勇気づけること対して有効に機能する。
  • 課題を進めていくためにはブログを使う。例えば他の生徒のアイデアについて、そのトピックと興味を惹かれた点についてブログを書くと、それが引き金となり次から次へと他の生徒へ伝染していく。オンラインであるほどそれはうまくいく。
  • 単一の情報を与えないこと。読書という方法だけでなく、動画であったり画像であったりあるいはそれに関係のある他のメディアを使うことができるように、ネットでも同じで一つの方法に固執しないようにする。多様性があるなかで人は効率的に学ぶことができる。
  • あなたと連絡がとれる手段を用意しておくこと。テクノロジーはオンラインで会議をすることを可能にした。これをもっと有効に使うべきである。