よく打つunixコマンド

参考:http://rider.withgod.jp/blog/2010/04/06_165925/

5548 git
4731 ls
3181 sudo
2444 cd
1204 ssh
1203 ruby
952 aptituden
920 cat
804 less
724 man
676 vi
602 mplayer
567 gem
559 rm
424 find
417 emacs
391 xmms2
370 ps
369 rsync
356 irb

macなのにaptitudeが上位にいるのは過去の遺産を引き継いでいるから。
僕はgit statusをlsのようにうってしまうので、この結果には納得かな。
lvよりlessをつかってしまうのは癖みたいなものです。
emacsMacでもLinuxでもキーに割り当ててるのでviより少ないのだと思います。

auto-complete.elを使ってphpキーワードと関数を補完

auto-compele v1.2より辞書ファイルを作成することで補完候補を追加できるようなっています。

phpのコードを書く機会があり、php-modeを補完が遅くて使い物にならなかったので、キーワードのリストを用意して使っていました。
今回、せっかくなので辞書ファイルにおとしてみたので gist においています。phpを普段つかわないので、もっとよいものがあるかもしれません。(よいのがあれば教えてください。)

http://gist.github.com/336392

dictの設定をしていれば、php-modeのファイルを書き換えるだけで特に何もしなくても使えると思います。

参考というかこれをみてついでに公開しておこうと思いました。
auto-complete.elを使ってCocoaキーワードを補完する - Watsonのメモ

バージョン違いのRubyをインストールする方法について整理してみる

現状のRubyは1.9系と1.8系をいれておかないといけないような気がするけどどのように管理するのがよいのだろうか。

僕が知る限りの方法では以下のとおりでしょうか。

  • パッケージマネージャに任せる
  • rvmを使う
  • Zentestのmultirubyを使う。
  • サフィックスをつける
  • インストールする場所を変える

パッケージマネージャにまかせる。

aptやらyumやらmac portsやらはrubyパッケージとは別にruby1.9とかruby19などのパッケージが用意されているのでこれを使う方法。楽なのだけれどもバージョンが少し古かったりする。

Ubuntuだと以下のような感じでインストールします。

$ sudo apt-get install ruby1.9.1

rvmをつかう

今一番モダンな方法なのでしょうか?
http://rvm.beginrescueend.com/

jrubyなんかも使えて良い感じ。。僕が使ってみた限りではなんだか起動が遅くなってしまった(irbrspecを使用していると結構気になる)。OSX付属のrubyが遅いのが原因のような気がしていますが詳しくは調べていません。

$ rvm use 1.9.1

とするだけで切り替えられるのは良い感じです。

ZenTestのmultirubyを使う。

ZenTestについてくるmultirubyを使います。テスト目的なら有用な選択肢で、一つのコマンドでインストール済みのすべてのruby実行してくれます。

サフィックスをつける

パッケージ管理でやっている手法を自分でやる感じです。Rubyを自分でコンパイルすることになります。configure をするときに --program-suffix=1.9.1 のようにします。
個人的にはgemでインストールされる実行スクリプトが上書きされてしまうのが気になりますが、些末な問題かもしれません。(rspecをインストールしたときに作成されるspecとか)

インストール先を変える

rvmがやっているを手法を自分でやるような感じです。configureをするときに --prefix=/opt/ruby/191 のようにします。環境変数PATHを変更することで利用する Rubyを切り替えることになります。

まとめ

どれも長所短所があると重いますが、僕はインストール先を変える手法に落ち着いてます。環境変数の切り替えはスクリプトを書いてごまかしています。その方法は別の機会に。また、おすすめの方法があれば教えて欲しいです。

XcodeでGit

このページの情報は古いです。
最新はこちらに。

.gitignore on Xcode4 - そんなこと覚えてるわけがない。

以下から拝借した。

Using Xcode with Git

Xcodeのテンプレートにしてもいいけど、どうせコマンド操作するのでシェルスクリプトで生成することにした。

#!/bin/sh

cat <<EOF > .gitignore
# xcode noise
build/*
*.pbxuser
*.mode1v3

# old skool
.svn

# osx noise
.DS_Store
profile
EOF

cat <<EOF > .gitattributes
*.pbxproj -crlf -diff -merge
EOF

~/binあたりにおいてPATHを設定して実行権限を付加した。

Android試してみた。

前からAndroidやるやる!っていってたのに放置してたのでいいかげんはじめることにしました。とりあえず、eclipseを使わずにがんばっていきたいと思います。
特に本などで勉強してるわけではないので間違ったことを書いているかもしれませんのでご了承ください。

前準備

antを使用するのでインストールしておきましょう。

今回の内容

  • AndroidSDKのインストール
  • SDK Platform Android2.0のインストール
  • サンプルプロジェクトの作成とビルド
  • AVD(Android Vitual Device)の作成
  • エミュレータの起動
  • ビルドしたアプリケーションを仮想マシンにインストール

AndroidSDKのインストール

http://developer.android.com/intl/ja/sdk/index.html
あたりからダウンロードする。

適当なところに展開して環境変数PATHを設定します。僕は~/local/におきました。
環境変数PATHを設定します。
僕の例では ~/local/android-sdk-mac/tools を追加しました。
ここは環境依存なので省略します。

SDK Platform Android2.0のインストール

よくわからないけど2.0を選びました。全部いれちゃってもいいのかもしれません。

環境変数PATHの設定がうまくいっていれば以下のコマンドでAVD Managerが起動できます。

$ android


Available Packagesから選択するのですが、httpsでは上手く通信できなかったので、Settingsで Force https://...sour (中略) にチェックをいれました。

すでにみえなくなってますが、SDK Platform Androi 2.0 API 5, revision 1にチェックをいれてinstallします。

サンプルプロジェクトの作成とビルド

以下のコマンドで雛形を作ることができます。

android create project \
--target 1 \
--path ./myProject \
--activity MyActivity \
--package com.example.myproject

--targetに指定する値は ID で以下の方法で確認できます。

$ android list targets
Available Android targets:
id: 1 or "android-5"
Name: Android 2.0
Type: Platform
API level: 5
Revision: 1
Skins: HVGA (default), QVGA, WQVGA400, WQVGA432, WVGA800, WVGA854

あとは作成したディレクトリに移動して、ビルドします。

$ cd myProject
$ ant debug

リリースビルド配布する場合は署名の鍵づくりとか必要な気がしますがよくしらべていません。ビルドに成功すると bin ディレクトリに MyActivity-debug.apk というファイルが作成されます。

AVD(Android Vitual Device)の作成

エミュレートとする仮想デバイス(表現がまちがてるかも)を作成します。--targetの指定はプロジェクト作成時と同じです。nameは適当にsimpleにしてみました。

android create avd --name simple --target 1

エミュレータの起動

端末がつかえなくなるのは困るのでバックグラウンドでまわします。

emulator -avd simple &

ビルドしたアプリケーションを仮想マシンにインストール

エミュレータが起動している必要があるみたいなので注意です。

adb install bin/MyActivity-debug.apk

あとは適当に操作してMyActivityがインストールされてるのを確認してみましょう。



PHP on GAEを試してみた。

Google App EnginePHPを動かす。
いろいろ調べて時間はかかったけど最終的にはすごくシンプルになった。
quercus自体がGAEに対応するために修正が入ったんだと思います。

使用したもの

  • appengine-java-SDK 1.2.6
  • quercus 4.0.1
  • jetty 6.1.17

作業内容

appengine-java-SDKをインストール

以下を参照
http://code.google.com/intl/ja/appengine/downloads.html
環境変数 PATH を設定してあるとします。

プロジェクトの作成

プロジェクト用のディレクトリを作ります。
helloにしておきます。

$ mkdir -p hello/WEB-INF/lib

  • quercusとjettyを配置

以下のサイトからダウンロードしてきます。
http://quercus.caucho.com/
http://dist.codehaus.org/jetty/jetty-6.1.17/

libにはいってる.jarファイルをhello/WEB-INF/libに配置します。
mkdirしたディレクトリにダウンロードしているとすると、

$ unzip jetty*.zip
$ unzip quercus-*.war -d querocus
$ cp jetty-*/lib/*.jar hello/WEB-INF/lib/
$ cp querocus/lib/*.jar hello/WEB-INF/lib/

と、いった感じになります。

web.xmlとかappengineとかを作ります。

  • hello/WEB-INF/web.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
  <description>...</description>
  
  <servlet>
    <servlet-name>Quercus Servlet</servlet-name>
    <servlet-class>com.caucho.quercus.servlet.QuercusServlet</servlet-class>
    <init-param>
      <param-name>script-encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
    
    <init-param>
      <param-name>ini-file</param-name>
      <param-value>WEB-INF/php.ini</param-value>
    </init-param>
  </servlet>
  
  <servlet-mapping>
    <servlet-name>Quercus Servlet</servlet-name>
    <url-pattern>*.php</url-pattern>
  </servlet-mapping>
  
  <welcome-file-list>
    <welcome-file>/index.php</welcome-file>
  </welcome-file-list>
</web-app>
  • hello/WEB-INF/appengine-web.xml
<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  <application>...</application>
  <version>1</version>
  <static-files>
    <exclude path="/**.php" />
  </static-files>
  <resource-files>
    <include path="/**.php" />
  </resource-files>
</appengine-web-app>
  • hello/WEB-INF/index.php
<?php
echo("hello, world");
?>

web.xmlやappengine詳細はこのあたりに。
http://code.google.com/intl/ja/appengine/docs/java/config/webxml.html
http://code.google.com/intl/ja/appengine/docs/java/config/appconfig.html

ディレクトリ構成は以下のようになっているはずです。

$ find hello
hello
hello/index.php
hello/WEB-INF
hello/WEB-INF/appengine-web.xml
hello/WEB-INF/index.php
hello/WEB-INF/lib
hello/WEB-INF/lib/inject-16.jar
hello/WEB-INF/lib/javamail-141.jar
hello/WEB-INF/lib/jetty-6.1.17.jar
hello/WEB-INF/lib/jetty-util-6.1.17.jar
hello/WEB-INF/lib/resin.jar
hello/WEB-INF/lib/servlet-api-2.5-20081211.jar
hello/WEB-INF/web.xml

テストサーバの起動

$ dev_appserver.sh hello

あとはブラウザで

http://localhost:8080/index.php

にアクセス


サーバ起動字に文字化けするなら

export _JAVA_OPTIONS=-Duser.language=en

あたりを実行しておきましょう。
サーバーは再起動せずにindex.phpを編集しても、編集内容が反映されるようです。

デプロイはappenigen-web.xmlに取得したID書いて、

$ appcfg.sh update hello

とするだけです。(メアドとパスワードを要求されます。)

PHPはほとんどわからないので、これ以上深入りしませんが、
データベースまわりなどは一筋縄ではいかないかもしれません。
quercusのサイト内を検索すれば少しですが情報があるようです。

Macをgitの共有リポジトリにする。

Macssh可能にして、git cloneしようとすると

bash: command not found: git-upload-pack
fatal: The remote end hung up unexpectedly

のように失敗した。

Mac を git の共有レポジトリにする -- BONNOH FRACTION 14
command not found: git-upload-pack - ひこにっき - tenmonグループ
と、同じ現象みたい。

環境変数PATHの設定がうまくできてないだけみたいなので、

ln -s ~/.profile ~/.bashrc

と、してやったら動くようになった。