githubでフォークしたレポジトリを更新
githubでフォークしたレポジトリってそのままにしていましたが、更新する必要があったので本家の変更を取り込む方法をメモ。
手順
1. フォークしたレポジトリの作成
git clone xxx
2. 本家のレポジトリをリモートに登録
git remote add honke https://git://github.com/xxx.git
3. リモートの確認
git remote honke <--- remoteに追加された本家 origin <--- 自分のgithub上のorigin
4. 本家の更新をローカルに反映(ローカルレポジトリはmaster)
git pull --rebase honke master
5. 自分のmasterを更新
git push origin master
MemoryAnalyzerの使い方
久しぶりの投稿ですが、最近はAndroidのアプリを作ってました。
ちょっと落ち着いたのでMemoryAnalyzerの使い方をまとめておきます。
AndroidはiPhoneと違ってGCがあるのでメモリを特に意識しなくてもいいって思ってましたが、変な作り方をするとOutOfMemoryが出てすぐにアプリケーションが落ちます。
そうなる前に、MemoryAnalyzerでメモリをチェックしましょう。
インストール
ここから該当OSのファイルをダウンロードして展開します。
http://www.eclipse.org/mat/downloads.php
Dumpファイルの取得
EclipseでDumpファイルを作成します。
最初にメモリを調査したいアプリケーションをデバックモードで起動します。
次に、DDMS画面のDevicesの中に調査したいアプリケーションが存在するので、選択した状態にします。
「Update Heap」という緑色のタンクアイコンをクリックします。
「Cause GC」ボタンを押すと、今のメモリ状況が表示されます。
アプリケーションの動作チェックとDumpファイルの保存
アプリケーションを動かしてみます。
今回は、ActivityAとActivityBをチェックしてみます。
ActivityAは、メニュー画面。ActivityBは、画像を扱うActivityです。
ActivityAからActivityBへ画面遷移し、ActivityBを終了させた後、ActivityAが表示されます。
ここで、先ほど押した「Cause GC」ボタンを数回押します。(3回程度)
「Dump HPROF file」という緑色のタンクに赤い矢印がついたアイコンをクリックします。
Dumpファイルを任意の場所に保存します。
Dumpファイルの変換
先ほど保存したDumpファイルを下記のコマンドで変換します。
hprof-conv com.android.sample.hprof sample.hprof
Dumpファイルの調査
MemoryAnalyzerを起動します。
File -> Open Heap Dump... から、変換したDumpファイルを読み込みます。
読み込んだら、ダイアログが表示されるので、「Leak Suspects Report」を選択します。
すると、グラフが表示されます。
rdoc 生成時に js と images が含まれない
対策
参考サイトに書かれている通り、
vim ~/.rvm/rubies/default/lib/ruby/1.9.1/rdoc/generator/darkfish.rb # 154行目 next if path =~ /#{File::SEPARATOR}\./
を以下に修正
next if path =~ /#{File::SEPARATOR}\.[^#{File::SEPARATOR}]+$/
再度、rake doc:appをすると js と image がありました。
rhodesを試す
rubyでiOSやandroidのアプリ開発ができる rhodes(ローズ)を試してみたので、その覚え書き。
rhodesでアプリ開発する前に
ruby1.9系 を使用している人は、rvm とかをいれて ruby のバージョンを切り替えられるようにしておくと良いです。
iphone のアプリを作成したい場合は、iOSのSDKとかを入れておく必要があります。
android のアプリを作成したい場合は、JDK(JavaDevelopmentKit)、SDK(SoftwareDevelopmentKit)、NDK(NativeDevelopmentKit)を入手しておく必要があります。
rhodesのインストール
まずは、gemでrhodesをインストールします。
※ ruby のバージョンは、1.8.7 を使用。
# gem install rhodes
あっという間にインストールされます。
rhodes は、3.3.1 をインストールしました。
rhodesのセットアップ
JDKとかSDKのパスを登録します。(iPhoneのSDKは自動で認識するようです)
androidを開発しない場合は、JDKとかのパスはブランクのままEnterでOK。
$ rhodes-setup > JDK path (required) (/Library/Java/Home): ブランクのままEnter > Android SDK path (blank to skip) (): /Users/xxxx/android-sdk-mac_x86 ・・・パスを入力してEnter > Android NDK path (blank to skip) (): /Users/xxxx/android-ndk-r7 ・・・パスを入力してEnter > Windows Mobile 6 SDK CabWiz (blank to skip) (): ブランクのままEnter > BlackBerry JDE 4.6 (blank to skip) (): ブランクのままEnter > BlackBerry JDE 4.6 MDS (blank to skip) (): ブランクのままEnter > BlackBerry JDE 4.2 (blank to skip) (): ブランクのままEnter > BlackBerry JDE 4.2 MDS (blank to skip) (): ブランクのままEnter
アプリケーションの作成
rhogen コマンドでアプリケーションを作成します。
railsみたいですね。
$ rhogen app sample > Generating with app generator: > [ADDED] sample/app/loading.png > [ADDED] sample/rhoconfig.txt > [ADDED] sample/build.yml > [ADDED] sample/.gitignore > [ADDED] sample/app/application.rb > [ADDED] sample/app/index.erb > [ADDED] sample/app/index.bb.erb > [ADDED] sample/app/layout.erb > [ADDED] sample/app/loading.html > [ADDED] sample/Rakefile > [ADDED] sample/app/helpers > [ADDED] sample/icon > [ADDED] sample/app/Settings > [ADDED] sample/public
次にモデルを作成してみましょう。
$ rhogen model user name,tel,email > Generating with model generator: > [ADDED] app/User/index.erb > [ADDED] app/User/edit.erb > [ADDED] app/User/new.erb > [ADDED] app/User/show.erb > [ADDED] app/User/index.bb.erb > [ADDED] app/User/edit.bb.erb > [ADDED] app/User/new.bb.erb > [ADDED] app/User/show.bb.erb > [ADDED] app/User/user_controller.rb > [ADDED] app/User/user.rb > [ADDED] app/test/user_spec.rb
index.erbの最下部のリンクを編集して保存。
$ vi app/index.erb --------------------------------------------- <li><a href="#">Add link here...</a></li> ↓ <li><a href="/app/User/index">UserList</a></li> ---------------------------------------------
環境に合わせてbuild.ymlを編集します。
$ vi build.yml --------------------------------------------- android: version: 2.1 ↓ android: version: 2.2 ---------------------------------------------
以上で準備完了です。
rails3のroutes
rails3 で pathprefix を指定する場合は、namespace を使用します。
$ vi config/routes.rb ------------------------------------------------ namespace :admin do resources :users end ------------------------------------------------
この場合、パスは、/admin/users、コントローラーは、app/controllers/admin/users_controller.rb に置かれたAdmin::UsersControllerとなります。
もしパスだけに名前空間をつけたい場合は、scope を使用します。
$ vi config/routes.rb ------------------------------------------------ scope "/admin" do resources :users end ------------------------------------------------
この場合、パスは、/admin/users、コントローラーは、app/controllers/users_controller.rb に置かれたUsersControllerとなります。
反対にコントローラーだけに名前空間をつけたい場合は、scope :moduleを使用します。
$ vi config/routes.rb ------------------------------------------------ scope :module => "admin" do resources :users end ------------------------------------------------
xen環境構築
xenの環境構築手順
環境
OS : Debian(squeeze)
xenのインストール
必要なものをaptでインストールします。
# aptitude update # aptitude install bridge-utils debootstra # aptitude install xen-linux-system-2.6.32-5-xen-amd64 # aptitude install xen-tools # aptitude install linux-headers-2.6.32-5-common-xen
xend-config.sxpの編集
# cp -p /etc/xen/xend-config.sxp /etc/xen/xend-config.sxp.orig # vi /etc/xen/xend-config.sxp ------------------------------------------------ # (network-script network-bridge) ↓ (network-script network-bridge) ------------------------------------------------
grubの修正
起動順番を変更します。
まずは現状をチェック。
$ grep menuentry /boot/grub/grub.cfg ------------------------------------------------ menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-xen-amd64' --class debian --class gnu-linux --class gnu --class os { menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-xen-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os { menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-amd64' --class debian --class gnu-linux --class gnu --class os { menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os { menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-xen-amd64 and XEN 4.0-amd64' --class debian --class gnu-linux --class gnu --class os --class xen { menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-xen-amd64 and XEN 4.0-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os --class xen { ------------------------------------------------
何もしないとDebian GNU/Linux, with Linux 2.6.32-5-xen-amd64が起動します。
Debian GNU/Linux, with Linux 2.6.32-5-xen-amd64 and XEN 4.0-amd64が通常起動するように修正します。
# mv -i /etc/grub.d/10_linux /etc/grub.d/21_linux # update-grub ------------------------------------------------ Generating grub.cfg ... Found linux image: /boot/vmlinuz-2.6.32-5-xen-amd64 Found initrd image: /boot/initrd.img-2.6.32-5-xen-amd64 Found linux image: /boot/vmlinuz-2.6.32-5-xen-amd64 Found initrd image: /boot/initrd.img-2.6.32-5-xen-amd64 Found linux image: /boot/vmlinuz-2.6.32-5-amd64 Found initrd image: /boot/initrd.img-2.6.32-5-amd64 done ------------------------------------------------
起動順番を確認。
$ grep menuentry /boot/grub/grub.cfg ------------------------------------------------ menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-xen-amd64 and XEN 4.0-amd64' --class debian --class gnu-linux --class gnu --class os --class xen { menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-xen-amd64 and XEN 4.0-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os --class xen { menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-xen-amd64' --class debian --class gnu-linux --class gnu --class os { menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-xen-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os { menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-amd64' --class debian --class gnu-linux --class gnu --class os { menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os { ------------------------------------------------
Debian GNU/Linux, with Linux 2.6.32-5-xen-amd64 and XEN 4.0-amd64が最初に起動されるようになりました。
save/restore動作の変更
xenの終了時にログを残さないようにします
# vi /etc/default/xendomains ------------------------------------------------ #XENDOMAINS_RESTORE=true XENDOMAINS_RESTORE=false #XENDOMAINS_SAVE=/var/lib/xen/save XENDOMAINS_SAVE="" ------------------------------------------------
再起動
# reboot
再起動後にxm listを実行してみます
# xm list ------------------------------------------------ Name ID Mem VCPUs State Time(s) Domain-0 0 7192 8 r----- 9.1 ------------------------------------------------
これでDomain-0が完了しました。
Domain-U (guests)作成ファイルの修正
# vi /etc/xen-tools/xen-tools.conf 環境に合わせて変更します。 ------------------------------------------------ size = 50Gb # Disk image size. memory = 512Mb # Memory size swap = 2Gb # Swap size # Default gateway and netmask for new VMs gateway = x.x.x.x netmask = 255.255.255.0 # When creating an image, interactively setup root password passwd = 1 # Let xen-create-image use pygrub, so that the grub from the VM is used, which means you no longer need to store kernels outside the VMs. Keeps things very flexible. pygrub=1 ------------------------------------------------
Domain-Uの作成
ipアドレスとホスト名を指定して実行します。
# xen-create-image --ip xxx.xxx.xxx.xxx --hostname hoge --passwd
これでDomain-Uが作成できました。
Domain-Uの自動起動
Domain-0が起動した際に自動で起動するように設定します。
Domain-0での作業します。
起動ファイルをxen-ryutekiとします。
xendが起動した後に起動するようにして、xendが終了するよりも前に終了するようにします。
# vi /etc/init.d/xen-ryuteki ------------------------------------------------ #!/bin/sh ### BEGIN INIT INFO # Provides: xen-ryuteki # Required-Start: $network xend # Required-Stop: xend # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: xen-ryuteki start/stop script # Description: Start and stop xen-ryuteki # placed in /etc/init.d. ### END INIT INFO domain=ryuteki case "$1" in start) xm create ${domain}.cfg ;; stop) xm shutdown $domain ;; *) echo "Usage: $0 start|stop" >&2 exit 3 ;; esac ------------------------------------------------
自動起動の設定
# update-rc.d xen-ryuteki defaults
参考URL
こちらを参考にしました。
http://wiki.debian.org/Xen
ruby1.9.2 で opensslがインストールできない
久しぶりにサーバーを構築していたらこんな問題に遭遇。
opensslのインストール
rubyのopensslフォルダに移動
$ cd src/ruby-1.9.2-p290/ext/openssl/ $ ruby extconf.rb
すると、こんなエラーが。
=== OpenSSL for Ruby configurator === === Checking for system dependent stuff... === checking for t_open() in -lnsl... no checking for socket() in -lsocket... no checking for assert.h... yes === Checking for required stuff... === checking for openssl/ssl.h... no === Checking for required stuff failed. === Makefile wasn't created. Fix the errors above.
ググったらこんな情報を発見。
http://www.kano4.com/259
libssl-dev というものが必要のよう。
やってみる。
# aptitude install libssl-dev
その後は、順調にインストールが完了しました。
$ cd src/ruby-1.9.2-p290/ext/openssl/ $ ruby extconf.rb $ make # make install
貴重な情報ありがとうございました。