アーカイブ

‘Programming’ カテゴリーのアーカイブ

Mac OS X(10.6.8 Snow Leopard) に Ruby 1.9.3 と Rails 3.1.0 インストールメモ

2011 年 9 月 21 日

急に Ruby On Rails で何か作りたくなったので、Ruby をインストールする。Ruby は初心者。1.8.7 が安定版らしいが、最新は、1.9.3 っぽいので、そちらをインストールすることにした。

Install されている Ruby の確認

% ruby -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]

Mac Port Update

なにやら、RVM(Ruby Version Manager)なるものがあるらしいので、Port を久々にアップデート。

% sudo port -d selfupdate
% sudo port -d sync
% sudo port upgrade outdated
  - ref. MacPortsでステキなUNIXツールをインストール - はこべにっき# はてなブックマーク数

Install RVM

% bash < <(curl -sk https://rvm.beginrescueend.com/install/rvm)

すると、

  You must now complete the install by loading RVM in new shells.

  If you wish to use RVM in an interactive fashion in your shells then
  Place the following line at the end of your shell's loading files
  (.bashrc or .bash_profile for bash and .zshrc for zsh),
  after all PATH/variable settings:

  [[ -s "/Users/suVene/.rvm/scripts/rvm" ]] && source "/Users/suVene/.rvm/scripts/rvm"  # This loads RVM into a shell session.

  You only need to add this line the first time you install RVM.

  If you are choosing to source RVM into your environment to switch current
  shell environments, be sure to close this shell and open a new one so that
  the RVM functions load.

Installation of RVM to /Users/suVene/.rvm/ is complete.

とのことなので、

% echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function' >> ~/.zshrc
% source ~/.zshrc
% rvm --version

rvm 1.8.3 by Wayne E. Seguin (wayneeseguin@gmail.com) [https://rvm.beginrescueend.com/]

もともと、RVM が入っている場合は、RVM をアップデート。

% rvm get latest

Original installed RVM version:

rvm 1.8.3 by Wayne E. Seguin (wayneeseguin@gmail.com) [https://rvm.beginrescueend.com/]

You already have the latest version!

Install Ruby

install 可能な Ruby の確認
% rvm list known
# MRI Rubies
[ruby-]1.8.6[-p420]
[ruby-]1.8.6-head
[ruby-]1.8.7[-p352]
[ruby-]1.8.7-head
[ruby-]1.9.1-p378
[ruby-]1.9.1[-p431]
[ruby-]1.9.1-head
[ruby-]1.9.2-p180
[ruby-]1.9.2[-p290]
[ruby-]1.9.2-head
[ruby-]1.9.3[-preview1]
[ruby-]1.9.3-head
ruby-head

# GoRuby
goruby

# JRuby
jruby-1.2.0
jruby-1.3.1
jruby-1.4.0
jruby-1.6.1
jruby-1.6.2
jruby-1.6.3
jruby[-1.6.4]
jruby-head

# Rubinius
rbx-1.0.1
rbx-1.1.1
rbx-1.2.3
rbx-1.2.4
1.9.3[-preview1]の install
% rvm pkg readline
% rvm install 1.9.3 --with-readline-dir=$HOME/.rvm/usr
% rvm use 1.9.3 --default
% ruby -v
Using /Users/suVene/.rvm/gems/ruby-1.9.3-preview1

pkg で、readline を install しているのは、以下参照。(irb = interactive ruby)

※ rvm pkg で readline をインストールして、それをRubyインストール時に指定しているのは、irbで日本語が入力できなかったから。

最初、普通にrvm install 1.9.2 でインストールしたら、irbで日本語を入力すると、

ruby-1.9.2-p180 :001 > "???"
SyntaxError: (irb):1: invalid multibyte char (UTF-8)
(irb):1: invalid multibyte char (UTF-8)
	from /Users/pistolfly/.rvm/rubies/ruby-1.9.2-p180/bin/irb:16:in `
'

となってしまった。

Ruby 1.9 – Bug #550: irbで日本語を入力できない – Ruby Issue Tracking System
と同じような現象なので、rvm pkgでreadlineをインストールして、Rubyインストール時に指定すると、大丈夫になった。

RVM: Ruby Version Manager – ‘rvm package install readline’

※ Mac OSX Lion ではreadline(の互換ライブラリlibedit)が改善されたらしく、RVMのreadlineを使わなくても大丈夫になっている。

[ruby] Mac OSX Snow Leopard でRVMを使って1.8.7と1.9.2を共存 – Memorandum はてなブックマーク数

必要な gem install

gem は sudo は使っちゃ駄目っぽい。バージョンごとに管理してるから、
RVM: Ruby Version Manager – ‘rvm gemdir’ – RubyGems and RVM はてなブックマーク数

% gem install ruby-debug19
% gem install mongrel -v 1.2.0.pre2 --pre
% gem install rails
% gem install sqlite3

参考



Mac, Programming ,

[G+]GooglePlusCommander(v0.3.1)

2011 年 7 月 18 日

G+ が、いまいち vimperator で扱いにくい(追記 2011/07/18 16:58 .vimperatorrc も plugin も入れてなかったらという前提)ので、Chrome を使ってるのだが、こちらはこちらでショートカットがしょぼすぎて困っていたところ、id:mattn さんが素敵なスクリプトを作成していたので、少し改変させてもらった。(id:anekos さんとか、id:teramako さんは vimperator で頑張ってるようだけど)

改変するにあたって LICENSE が明示されてなかったので、mattn さんにお願いして、LICENSE を追加してもらった。なんか、ローカルで触ってる間に、mattn さんの master が進んでたので、merge して push。

Install:  https://github.com/suvene/GooglePlusCommander/raw/master/googlepluscommander.user.js

改変点は以下のとおり。

’*’ でコメント展開、’e’ で Evernote に SiteMemory で Clip できるようにしてみた。
Clip時イメージ: http://gyazo.com/3db10a12b9a193f5ed55b1751d309e5f
Clipされたノート: http://www.evernote.com/pub/suvene/share
su Vene さんの投稿 はてなブックマーク数

https のスクリプトでないので、なんかちょっと微妙。
ほかには、notification 系のリンクに飛べるようにショートカット追加。
README 貼りつけておく。

This is userscript for Google+. This script provide shortcut keys to do following.

  • c to comment
  • s to share
  • e clip to Evernote
  • m to mute
  • + to +1
  • * expand comments
  • / to find user
  • gg to go to top.
  • G to go to bottom.
  • n to show notification panel.
  • i to focus to a form of new entry.
  • esc to close current active textbox.
  • gh to go to Home.
  • gP to go to Photos.
  • gp to go to Profile.
  • gc to go to Circles.
  • gna to go to Notifications(all).
  • gnc to go to Notifications(circle).
  • gno to go to Notifications(otherposts).
  • gnp to go to Notifications(myposts).
  • gnm to go to Notifications(mentions).
  • gnP to go to Notifications(phototags).

suvene/GooglePlusCommander – GitHub はてなブックマーク数

Github Repository

- suvene/GooglePlusCommander – GitHub はてなブックマーク数

Programming , ,

Publish::Delicious, LivedoorClip で utf-8 フラグを落として post すると何故か文字化け

2009 年 1 月 27 日

Plagger を利用して、Hatena から Delicious, LivedoorClip に同期してるんだが、2ヶ月ほど前からこんな感じで文字化けするようになってた。

文字化け

文字化け

2ヶ月以上も放置してて、otsune さんからも IRC でつっこまれたので、ちょっと調べてみることに。タイミングとしては、XML::Feed::RSS かなにかが XML::Feed::Entry::Format::RSS とかに変わったあたりなんだけど、そのとき cpan モジュール沢山更新したから、あんまり関係ないのかも。

で、とりあえず試行錯誤でかろうじてわかったのは、Publish::Delicious.pm の場合、


    my $params = {
        url         => $args->{entry}->link,
        description => encode('utf-8', $args->{entry}->title),
        tags        => encode('utf-8', $tag_string),
    };

の部分の、encode をはずすと文字化けしなくなるってこと。Publish::LivedoorClip も同じ。

デバッグしてみても、「utf8::is_utf8($args->{entry}->title->data)」は 1 だし、encode した文字列はちゃんとフラグ落ちてたんだけど、なんでだろう。perl の仕組みも文字列の扱いも詳しくないからこれ以上わからない。

というわけで、とりあえず以下のようなパッチを宛てて文字化け回避したのはいいけど、ちょっと場当たり的。LivedoorClip も似たような感じ。


--- a/plagger/lib/Plagger/Plugin/Publish/Delicious.pm
+++ b/plagger/lib/Plagger/Plugin/Publish/Delicious.pm
@@ -32,12 +32,16 @@ sub add_entry {
    my $params = {
        url         => $args->{entry}->link,
#        description => encode('utf-8', $args->{entry}->title),
#        tags        => encode('utf-8', $tag_string),
        description => $args->{entry}->title,
        tags        => $tag_string,
    };

ついでに、Hatenaブックマークのフィードは、何故か entry_body にブクマした記事の概要が入ってて、summary のほうに自分のコメントが入ってるので、

$params->{extended} = $args->{entry}->body_text;

のところは、
$params->{extended} = $args->{entry}->summary;

に変えてしまった。

うーん。謎いです!

環境

  • Perl v5.8.8 built for i386-freebsd-64int
  • Encode 2.27
  • URI::Fetch 0.08
  • WWW::Mechanize 1.54
  • Net::Delicious 1.13

主要なのはこんな感じ?

似たような状況に陥ってる人はおらんのかな。

Programming ,

[vimperator]copy.js の wedata 読み込みセキュリティ強化

2009 年 1 月 26 日

it:teramako(作者)さんから、copy.js の wedata 読込みに関してこんなコメントが。

僕はあまり歓迎していない。

copy.jsにはcustom句(?)があり、この値がfunctionオブジェクトの場合はそれを実行した結果文字列をクリップボードにコピーする機能がある。これがWeData化すると、よく分からないネットワーク上の誰もが更新できるコードChrome特権化で動くことになる。

copy.js のWeData対応について – vimpな日々 – vimperatorグループ はてなブックマーク数

この点は確かに、同じように悩んだ部分である。
なので、とりあえずの対処として default では wedata は読込まず、かつ読込む設定にしても custom 関数はさらにオプション指定しないと登録されないようにと二重の設定をさせるようにしていたのだが(前回の記事参照)、 やはりいつの間にか悪意あるユーザーによって function が書き換えられないとも限らない。
なので、少しセキュリティ強化を入れた。

まず、以下のような template があったとする。

copy.js template

e.g.)wedata vimp copy template

これを初めて実行しようとした時に、以下のようなメッセージが表示される。

確認ダイアログ

確認ダイアログ

キャンセルすると、そのまま終了。OK を押すと、custom 関数が実行され、

実行ダイアログ

実行ダイアログ

と、表示される。ここまでが、1回目のチェック。

ここで、悪意あるユーザーが現れ、wedata のデータを以下のように変更したとする。

変更されたデータ

変更されたデータ

で、このように wedata が書き換えられた状態を読込み、次回実行しようとすると、以前確認した時点から変更があれば、再度確認ダイアログを表示する。

(wedata のデータは 24時間保存しているので、実際には変更されてもすぐに取り込まれる訳ではない)

確認ダイアログ2

確認ダイアログ2

どうだろう。

これなら Greasemonkey などのように、user scripts を確認するタイミングができるし、知らないうちに違う function に置き換えられる危険も少ない。(バグがなければ。ただ、confirm は default で ok に focus がある……)

custom に指定する funciton は大抵小さいだろうから、これくらいで十分かな?と。

Links



Programming

[vimperator]wedata から copy.js の template 読み込み

2009 年 1 月 26 日


これ作ったからwedata SITEINFO からコマンドひっぱってこれるよーっていうcopy.jsの改良は他のエロい御人たちにまかせる。

copy.js 用のテンプレート wedata Database 作った – VoQn.vimp – vimperatorグループ はてなブックマーク数

とのことなので、エロくないけど機能追加しといた。copy.js 自身の対応 version は、すでに completion の関係から、実質 2.0 以上になってたので、2.0 以上のみの対応。
設定できる Option は pluginhelp -v でみてくれればよいけど、簡単に説明しておく。

  1. liberator.globalVariables.copy_use_wedata = false; // false by default
  2. liberator.globalVariables.copy_wedata_include_custom = true; // false by default
  3. liberator.globalVariables.copy_wedata_exclude_labels = [ 'anylabel1', 'anylabel2', …… ];

1. wedata から template 読込みたい人は true に。

2. custom 関係の template を読込みたい人は true に。(window.eval を利用しているので、default は false にしてる)

3. wedata から読込みたくない label のリストを設定。

ネ、簡単でしょ!

おら、とんでもなくすげぇ便利に copy.js 使ってるぜ!

あたい、copy.js でメシ食ってるわ!

ってな人は、是非 wedata に登録を。
あー、あと

wedataでの説明についてが言葉足らずなので、あとでもうちょっとマシな文面にしたい。「こう書けば良いんでないの」という方アドバイスplz.
copy.js 用のテンプレート wedata Database 作った – VoQn.vimp – vimperatorグループ はてなブックマーク数

らしいので、誰か適当におねがい。

いじょ。

追記1

セキュリティに関して少々不安があったので、ちょっと機能追加。

[vimperator]copy.js の wedata 読み込みセキュリティ強化 – suVeneのアレ はてなブックマーク数

Links



Programming