RVM のアンインストールコマンド名で笑った

なんか iMac 上の RVM の動作が変。もう、開き直ってクリーンインストールすることにした。
RVM のアンインストールコマンドを探してみたら "implode" と一緒に "seppuku(切腹)"があったのには笑った。

3509:        implode | seppuku)
3536-            source "$rvm_scripts_path/functions/implode";
3594-            __rvm_implode


さっそく切腹。:-)

$ rvm seppuku
Are you SURE you wish for rvm to implode?
This will recursively remove /Users/watanata/.rvm and other rvm traces?
(anything other than 'yes' will cancel) > yes
Removing rvm-shipped binaries (rvm-prompt, rvm, rvm-sudo rvm-shell and rvm-auto-ruby)
Removing rvm wrappers in /Users/watanata/.rvm/bin
Hai! Removing /Users/watanata/.rvm
/Users/watanata/.rvm has been removed.

Note you may need to manually remove /etc/rvmrc and ~/.rvmrc if they exist still.
Please check all .bashrc .bash_profile .profile and .zshrc for RVM source lines and delete or comment out if this was a Per-User installation.
Also make sure to remove `rvm` group if this was a system installation.
Finally it might help to relogin / restart if you want to have fresh environment (like for installing RVM again).

動作環境

  • Mac OSX 10.7.5
  • RVM 1.18.21

今更ながら Ruby 1.9.3 インストール

Ruby 2.0 が出てる今日このごろ。ちょい前に会社で作ったアプリの動作環境を作るのに、Ruby 1.9.3 を入れることにした。rvm は既にあるから install を実行。

$ rvm install 1.9.3
Installing Ruby from source to: /Users/watanata/.rvm/rubies/ruby-1.9.3-p392, this may take a while depending on your cpu(s)...

エラーが出たので ~/.rvm/log/ruby-1.9.3-p392/make.log を見てみると、こんな感じ。

[2013-04-02 14:05:32] make
        CC = clang
        LD = ld
        LDSHARED = clang -dynamic -bundle
        CFLAGS = -O3 -ggdb -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Werror=pointer-arith -Werror=write-strings -Werror=declaration-after-statement -Werror=shorten-64-to-32 -Werror=implicit-function-declaration  -pipe
        XCFLAGS = -include ruby/config.h -include ruby/missing.h -fvisibility=hidden -DRUBY_EXPORT
        CPPFLAGS = -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE   -I/Users/watanata/.rvm/usr/include -I. -I.ext/include/x86_64-darwin11.4.2 -I./include -I.
        DLDFLAGS = -Wl,-undefined,dynamic_lookup -Wl,-multiply_defined,suppress -Wl,-flat_namespace
        SOLIBS =
...
compiling bignum.c
bignum.c:2732:26: warning: while loop has empty body [-Wempty-body]
        while (--ny && !zds[ny]); ++ny;
                                ^
bignum.c:2732:26: note: put the semicolon on a separate line to silence this warning
1 warning generated.
...
compiling st.c
st.c:520:35: error: implicit conversion loses integer precision: 'st_index_t' (aka 'unsigned long') to 'int' [-Werror,-Wshorten-64-to-32]
            i = table->num_entries++;
              ~ ~~~~~~~~~~~~~~~~~~^~
1 error generated.
make: *** [st.o] Error 1


検索してみたら Ruby Forum に投稿があって、Ruby 1.9.3-p385 以降 + clang 4.2 で出るエラーだとか。clang が 4.1 だと出ないらしいけど、自分の環境は 4.2 でビンゴ。そーですか。

対処方法は?と思ってたら、トリビアル・イシューズ さんに対処方法が紹介されてた。

このエラーは -Wshorten-64-to-32 の警告と警告レベルをエラーとして扱う -Werror により発生する。対応策は単純にビルド時に警告を無視するように指定するのみ。具体的に言うと以下のコマンドを実行してからビルドする。
 
$ export CFLAGS=-Wno-error=shorten-64-to-32

ruby-1.9.3-p385以降のインストールでバグあり - トリビアル・イシューズ


openssl と readline が古いとダメっぽいとのとなので、ついでに最新版に更新して rvm install 1.9.3 を実行。無事インストールできたよ。:-)

$ export CFLAGS=-Wno-error=shorten-64-to-32
$ brew install readline openssl
$ rvm install 1.9.3
$ rvm list 
rvm rubies
...
=> ruby-1.9.3-p392 [ x86_64 ]
動作環境
  • Mac OSX 10.7.5
  • rvm 1.18.21
  • homebrew 0.9.4
  • clang 4.2
  • openssl 1.0.1e
  • readline 6.2.4

find でファイル削除

find コマンドで見つけたファイルを削除したい場合、 -exec オプションで rm を実行するのがお約束。でも書式をいつも忘れて検索する。

$ find . -name ".php" -type f -exec rm -rf {} ";"


もっと簡単にできれば良いのにと思ってたら xargs を使うともっとシンプルに書けると今日知った。パイプ(|) で前処理(find)の実行結果を、xargs の引数に指定した内容で実行できるそうな。例えば、php を含むファイルを削除したいと思ったら、こんな感じに書ける。

find . -type f | grep php | xargs rm


勉強不足。無知はあかんね。^^;)>

Android SDK Manager で Fetch エラー、まさか cache が原因だったとは。。。

PhoneGap を試すなら Android の実機でも試せるようにしたい。ちなみに PhoneGap 2.4.0 の場合 r21.0.0.rc9 以降じゃないと動かないらしい。


前に入れた ADT は r20.0.1 だし、それじゃバージョンアップと思ったら Failed to fetch なるエラーが出て Android SDK Tools を更新できない。ええーーΣ(゚Д゚)

Failed to fetch URL https://dl-ssl.google.com/android/repository/addons_list-2.xml.xml, reason: File not found
...
Failed to fetch URL https://dl-ssl.google.com/android/repository/repository-7.xml, reason: File not found


パスが変わったのかなと思ったけど addons_list-2.xmlrepository-7.xml はネット上にある。同じネットワークにつながってる別 Mac だと Fetch に成功する。試しに Android Developers から最新の android-sdk-r21.1-maxosx.zip を取得して、tools/android を実行してみたけど、やっぱり Fetch できないエラーが出る。どー考えても自分の Mac の環境問題。原因なんだろ?:-(

とりあえず「Failed to fetch ... repository.xml」で検索すると、いくつも対処方法が見つかる。結構、Failed to Fetch はあるみたい。手当たり次第に試してみた。結果はこんな感じ。

1. 設定で Force https:// を適用する

ほとんどのケースはこれ。理由は良くわからないけど https:// だとコケて http:// だと成功するらしい。メニュー [Android SDK Manager > 環境設定]を開いて、Force://https ... にチェックを入れて再起動。→ 失敗。あれ? (T^T)

2. androidtools.cfg にプロパティを定義する

1.の操作をすると ~/.android/androidtools.cfg が生成されて、sdkman.force.http=true として保存される。Talk Android に "(just one line)" とあったので、この1行だけ残して Android SDK Manager を再起動。→ 失敗。1.がダメなんだから動く方が変だよね。 ^^;)>

Make a androidtool.cfg file in ~/.android/ directory, with the following content:
sdkman.force.http=true
(just one line).

Failed to fetch URL https://dl-ssl.google.com/android/repository/repository.xml

3. Android SDK の各バージョンを手動でインストールする

fukushimaのソフト屋さんDo Design Space さん曰く、ダウンロードできない addons_list.xml や repository.xml に書かれてる内容を読み取って android-sdk-mac/platforms に展開する方法があるらしい。試しに android-sdk-macosx_r20/platforms/* を android-sdk-macosx_r21/platforms 以下にコピーして Android SDK Manager を再起動したら認識された。最終手段はこれだな、と思いつつ保留 ^^;)

4. ADT を zip でインストールする

Android DevelopersTroubleshooting に zip ダウンロードした ADT をインストールする手順が紹介してあった。r20→r21 にアップデートできるかなーと思い、Eclipse メニュー [Help > Install New Software] から実行してみたけど r20 のままだった。これも失敗。そもそもインストールした ADT.zip はどこ行った?(T^T)

  1. Download the ADT Plugin zip file (do not unpack it):
  2. Start Eclipse, then select Help > Install New Software.
  3. Click Add, in the top-right corner.
  4. In the Add Repository dialog, click Archive.
  5. Select the downloaded ADT-21.1.0.zip file and click OK.
  6. Enter "ADT Plugin" for the name and click OK.
  7. In the Available Software dialog, select the checkbox next to Developer Tools and click Next.
  8. In the next window, you'll see a list of the tools to be downloaded. Click Next.
  9. Read and accept the license agreements, then click Finish. If you get a security warning saying that the authenticity or validity of the software can't be established, click OK.
  10. When the installation completes, restart Eclipse.

5. cache/* のオーナー権限を変更する(成功)

~/.andorid/androidtools.cfg を見たときに cache/ があるのを思い出し、中を見てみたら sdkbin-xxx-repository_xml とかどっかで見たような名前のファイルがたくさんある。addons_list.xml や repository.xml は ~/.android/cache に一度保存されるんだね。まさか、と思って ls -l したらオーナーが root になってる。chown でオーナー変更して、Android SDK Manager を再起動したら、、、成功!Σ( ̄▽ ̄) キターーーー!

そーいや、はじめて ADT をインストールしたときに参考にしたサイトでは Android SDK Manager を root で実行しましょ、となってたような記憶が、、、。しばらくしてから android-sdk-macosx 以下はオーナー変更してたけど、まさか ~/.android に悪影響が出てるとは思ってなかった。解決できて良かったよ。 :-)

動作環境

Sublime Text 2 使ってみよ

PhoneGap の UI が HTML+CSS+JavaScript で書けるのはいいけど、タグをいちいち書くのはめんどい。
後輩くんから Sublime Text で ZenCoding すると楽ちんだよーと教えてもらったので Sublime Text を試してみることにした。:-)

環境構築

こちらさんを参考にさせてもらっています。


まずはこちらから Sublime Text の最新版(2.0.1)をダウンロードする。自動補完機能とか便利な拡張機能を使うには Package をインストールする。

  1. メニュー[View > Show Console] を選択する。
  2. 画面下部にコンソールエリアが表示されるので、以下を入力して Sublime Text 2 を再起動する。

import urllib2,os;pf='Package Control.sublime-package';ipp=sublime.installed_packages_path();os.makedirs(ipp) if not os.path.exists(ipp) else None;open(os.path.join(ipp,pf),'wb').write(urllib2.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read())


Zen-Coding するには、Emmet という名前のパッケージを追加する。

  1. Command + Shift + p でコマンドパレットを開き、install と入力する。候補に「Package Control: install Package」が出てくるので、それを選択する。
  2. コマンドパレットに「Emmet」と入力すると候補に「Emmet」が出てくるので、それを選択する。画面下部のインストール実行中の表示が消えたら完了。

お試し

最初に Syntax を html にする。コマンドパレット(command + shift + p)を開いて、html と入力し、候補から「Set Syntax html」を選択する。エディタに「html:5」と入力し、TAB を押す。そうすると、、、


○入力


○TAB押下後


すげーーーー楽ちん :-)

Zen-Coding の記法を覚える必要があるけど、この効率の良さは感激もんだね!こちらに記法が分かりやすくまとまってるので、この際、覚えてしまおっと :-)

カスタマイズ

Sublime Text は表示形式をいろいろカスタマイズできる。JSON で記述する。設定できる項目はこちら(↓)を参照。


メニュー [Sublime Text 2 > Preferences > Settings - User] を開いて、表示形式とかをカスタマイズする。Sublime Text 2ってエディタがすごくイイ… から引用させてもらいました。^^;)
行間とか保存すると即反映されるので、微調整しやすくて良いね。:-)

//フォントサイズ
"font_size": 13,
//行間
"line_padding_top": 5,
//タブサイズ
"tab_size": 4,
//空白の削除
"trim_trailing_white_space_on_save": true,
//タブやスペースなどの不過視文字を表示(お好みで)
"draw_white_space": "all",
//現在の選択行をハイライト表示(お好みで)
"highlight_line":true,
//自動改行
"word_wrap": true

Sublime Text 2ってエディタがすごくイイ…

Weinre でリモートデバッグ


技術評論社記事いわく PhoneGap のリモートデバッグ用に Weinre を使うと良いとのこと。ワイナリーと読むらしい。まずは入れてみよ。:-)

環境構築

まずは nodejs.org から最新版(0.8.20)をダウンロードする。pkg を実行すると Node.js が /usr/local/bin/nodeに、npm が /usr/local/bin/npm にインストールされる。

ターミナルで npm を実行して weinre をインストールする。

npm install weinre


npm コマンドの実行した場所に node_modules が作成される。その中にある weinre を実行すると、サイトが起動される。

./node_modules/weinre/weinre
2013-02-19T10:20:09.273Z weinre: starting server at http://localhost:8080


http://localhost:8080 にアクセスしてみて、こんな画面(↓)が表示されれば weinre のインストールは完了。:-)



Xcode 側に戻って weinre でデバッグするプロジェクトの www/index.html に次の1文を埋め込む。# 以降は weinre サーバ接続時の識別子になるので、その都度、適当に変更する必要がある、とのこと。


最後にアプリを起動して、Safari から接続する。こんな(↓)の画面が出たらOKっぽい。:-)

http://localhost:8080/client/#HelloCordova


タブを切り替えると Firebug っぽいページでHTML要素とかCSSとかを確認できる。


カーソル位置に合わせて 画面の色が変わるところも Firebug っぽい。

URL を間違った場合

URLの #以下のスペルを間違えてたときの画面がこれ。あれ?って悩んでしまった自分がはずかしー。target not connected になったならURLの入力ミスとかを疑いましょ。^^;)>

weinre の安定性?

ログを見たかんじ events.js のバグ?それとも weinre が不安定?もちっと調べなきゃだね。^^;

ともかく weinre が落ちたときはアプリ側も再起動しないと接続できないっぽい。素直にアプリを再接続しましょ。:-)

./weinre
2013-02-21T06:41:19.563Z weinre: starting server at http://localhost:8080

events.js:71
        throw arguments[1]; // Unhandled 'error' event
                       ^
---------------------------------------------------------
error: Error: socket hang up
---------------------------------------------------------
stack: 
                     http.js:1360 - createHangUpError()
                     http.js:507  - OutgoingMessage._writeRaw()
                     http.js:476  - OutgoingMessage._send()
                     http.js:749  - OutgoingMessage.write()
                     http.js:882  - OutgoingMessage.end()
                 response.js:108  - res.send()
   HttpChannelHandler.coffee:91   - handleGet()
         MessageQueue.coffee:78   - MessageQueue._updated()
                     node.js:244  - startup.processNextTick.process._tickCallback()

おまけ

2.3.0 から Cordova.plist が config.xml に変更されてた

技術評論社記事は2.0.0?での執筆らしく Cordova.plist にパラメータを追加してね!と書いてあるけど、2.3.0 から plist が config.xml に変更になったので plist はない。ちょいと探してしまった。^^;)>

外部リソースをロードするため,PhoneGapプロジェクトのデフォルトの設定ではwhitelist rejectionが発生して動作しません。Xcodeで該当のプロジェクトを開き,ResourcesのCordova.plistの,ExternalHostsに追記を行う必要があります。

第3回 weinreを使ったiOS/Androidアプリの動作検証


さらに 2.3.0 以前だと ExternalHosts に localhost とかエントリを追加する必要があったらしいけど、2.3.0 以降はデフォルトがワイルドカード(全部OK)になったらしく、まんま接続されるようになったらしい。

By default the external hosts are wild-carded so you should be able to connect to any host. There are further configuration options via the config.xml.

ExternalHosts in Dreamweaver App
Weinre で使えるブラウザ

FireFox (18.0.2) で接続したらダメーって言われた。Webkit ベースのブラウザでしか動作しないらしい。:-p

確認環境

  • Mac OSX 10.7.5
  • Xcode 4.6
  • PhoneGap 2.4.0
  • node.js 0.8.20
  • Weinre 2.0.0-pre-HA5N9T49
  • Safari 6.0.2
  • FireFox 18.0.2

PhoneGap セットアップ

まずは環境構築から。iOSでいってみよ。PhoneGap サイトにある通り進めるだけで良さげ。:-)


iOSの場合、PhoneGap2.0.0 からいくつか環境制約があるらしい。詳しくは技術評論社こちらを見てね。抜粋部分だけ引用させてもらいます。^^;

  • Xcodeテンプレートを使用しないように(iOS
  • 専用のコマンドラインツールを使用してXcodeプロジェクトを作成するように(iOS
  • コマンドラインからプロジェクトのビルド,エミュレータ起動,各種ロギングがおこなえるように(iOS, Android, BlackBerry
  • サポートするiOSバージョンが4.2以上に。iOS 3はサポート対象外となる(iOS
  • 必要動作環境のOSがLion (10.7)およびMountain Lion (10.8)のみに。Snow Leopard(10.6)はサポート対象外となる(iOS
  • Cordova WebViewサポート(iOS
  • Cordovajs導入,プラットフォーム間で統一したJavaScriptをサポート
  • WeinreをNode Package Managerに移行
  • Windows Phone正式対応
第1回 PhoneGap/Cordovaとは - PhoneGap 2.0.0の変更点

環境構築

まずは Xcode に Command Line Tools を入れる。

  1. メニューで Xcode から "Preference" を開き、Download を選択する。
  2. Components タブになる Command Line Tools 行の Install ボタンを押す。


次に Apache CORDVA の最新版(2.4.0)をダウンロードする。cordova-2.4.0.zip を解凍した中にプラットフォーム別アーカイブがあるので cordova-ios.zip を解凍する。

続いてプロジェクトを生成する。cordova-ios/bin に移動して、create コマンドを実行する。

./create [project location] [package name] [projectname]
 project location : プロジェクト生成先ディレクト
 package name : パッケージ名(バンドル名)
 project name : プロジェクト名


こんな感じ。

./create ~/work/PhoneGap/iOS/HellowCordova com.sample.ios.HelloCordova HelloCordova


指定したディレクトリ内に .xcodeproj ができるので Xcode を起動する。

open ~/work/PhoneGap/iOS/HellowCordova/HelloCordova.xcodeproj


そのまま実行。こんな画面が表示されれば、最低限の環境構築は OK。iPad の実機で試そうと思ったら iOS Developer Program の期限が切れてた。ちょいと後回し。^^;)

不具合?

iPhone Simulator で動作はしてるんだけど、libCordova.a が赤になってる。あと同じ理由かもしれないけど Validate Project Settings で警告が出てる。Validate Project Settings の方は勝手に修正してくれる見たいなので適用。libCordova.a の方は Stack Overflow とかでいくつか対処方法が出てるみたいだけど、なんか直らない。しばらく放置してみる。キモい。 :-(

○ libCordova.a

○ Validate Project Settings

環境

  • Mac OSX 10.7.5
  • Xcode 4.6
  • Cordova 2.4.0