Promptを使ってiPadからsshを試す
最近iPadを購入したので技術者らしくsshクライアントを探してみた。
Google先生に聞いてみたら、Prompt(\600)がなかなかよさそうとのことだったので、さっそくインストール。
試しにさくらVPSを登録してみた。
公開鍵認証を使っている場合は少し手間がかかる。
以下手順
1. 普段iPadを同期しているPCでssh鍵を生成(設定を行った環境はmacbook)
ターミナルを開いて
ssh-keygen -t rsa
パスフレーズが聞かれるので任意のパスフレーズを入力
2.PCからさくらVPSにログインして作成した公開鍵を登録
ログインしたユーザのホームディレクトリの.sshディレクトリ以下にあるauthorized_keysを開く
vi ~/.ssh/authorized_keys
作成した公開鍵をauthorized_keysに追記
追記が完了したらVPSからログアウト
3.作成した秘密鍵をiTunes経由でiPadに転送
デフォルトだとホームディレクトリの.sshディレクトリの下にある
~./.ssh/id_rsa
iPadを接続してiTunesを起動し、iPadに入っているアプリ一覧を表示するタブに移動
下の方にPromptの項目があるので、「追加」をクリックして秘密鍵をiPadに転送
4.iPadでPromptを起動し、サーバ情報を入力
ログイン画面に表示される鍵マークをクリックすると秘密鍵が表示されるので選択
後は登録したパスフレーズを入力すればサーバにログインできる
これでiPadでの開発が可能に。
今回はiPadでログインできるところまでしか確認していないので開発環境として有用かどうかは不明。
とりあえずソフトウェアキーボードの場合、キーボードの表示だけで画面が半分埋れてしまうのでかなり見づらいのが正直なところ。
Bluetoothキーボードが欲しくなった。
Vimプラグインのインストールいろいろ
最新版のvimをインストール
まずは古いのをアンインストール
yum -y remove vim vim-enhanced
ダウンロード
cd /tmp wget ftp://ftp.vim.org/pub/vim/unix/vim-7.3.tar.bz2 && wget ftp://ftp.jp.vim.org/pub/vim/extra/vim-7.2-extra.tar.gz && wget ftp://ftp.vim.org/pub/vim/extra/vim-7.2-lang.tar.gz
ncursesが必要なのであらかじめインストール
yum -y install ncurses-devel
コンパイル&インストール
tar jxvf vim-7.3.tar.bz2 && tar zxvf vim-7.2-extra.tar.gz &&tar zxvf vim-7.2-lang.tar.gz mv vim72 vim73/ cd vim73 cd src ./configure --enable-multibyte \ --with-features=huge \ --disable-selinux \ --prefix='/usr/local/vim-7.3' make && make install
実行ファイルは/usr/local/vim-7.3/bin/vimにあるのでaliasを設定する
vim ~/.zshrc alias vi=/usr/local/vim-7.3/bin/vim
参考サイト:
vim-pathogenのインストール
インストール
cd ~ ls -1A > .gitignore vi .gitignore .vimは削除 git init git submodule add git://github.com/tpope/vim-pathogen.git .vim/ mkdir .vim/bundle vimrcに以下を記述 vim .vimrc " .vim/bundle/plugin_nameを読み込むようにする call pathogen#runtime_append_all_bundles() " .vim/bunle/plugin_nameのヘルプを読み込めるようにする call pathogen#helptags()
参考サイト:
vim-refのインストール
vインストール
git clone http://github.com/thinca/vim-ref.git mv vim-ref .vim/bundle
phpマニュアルのダウンロード(Many HTML files)
wget http://jp2.php.net/get/php_manual_ja.tar.gz/from/jp.php.net/mirror tar vfzx php_manual_ja.tar.gz mv php-chunked-xhtml phpmanual
vimrcにマニュアルのパスを追加
vim .vimrc let g:ref_phpmanual_path = $HOME . '/phpmanual'
マニュアルを見るにはw3mが必要らしいのでインストール
yum install w3m yum install w3m-img
使い方
:Ref phpmanual echo でechoのリファレンス :Ref alc word で英辞朗の検索ができる php関数の上でShift+kを押すとその場で調べられる
参考サイト:
unite.vimのインストール
インストール
git clone git://github.com/Shougo/unite.vim.git mv unite.vim .vim/bundle
使い方
現在のディレクトリのファイルの一覧を表示 Unite file -buffer-name=files 最近開いたファイルを表示 Unite file_mru カレントディレクトリで絞り込んだ最近開いたファイルを表示 UniteWithCurrentDir file_mru
neocomplcache.vimのインストール
インストール
git clone git://github.com/Shougo/neocomplcache.git mv neocomplcache .vim/bundle
.vimrcに以下を記述
vmi .vimrc let g:neocomplcache_enable_at_startup = 1
補完機能がつく
入れるだけで動くので便利
参考サイト:
vim-quickrunのインストール
インストール
git clone https://github.com/ujihisa/quickrun.git mv uickrun/ .vim/bundle/
プログラムを作成中に「\r」とすると、その場で実行してくれる
はずが…
「許可がありません」と表示されうまく動かなかった
とりあえずインストール方法だけ載せておく
参考サイト:
sudo.vim
インストール
wget http://www.vim.org/scripts/download_script.php?src_id=3477 -O sudo.vim mkdir -p ~/.vim/bundle/yanktmp/plugin mv sudo.vim .vim/bundle/sudo.vim/plugin/
参考サイト:
neco-lookのインストール
wget 'http://www.vim.org/scripts/download_script.php?src_id=14993' -O neco-look.zip unzip neco-look.zip rm neco-look.zip mv neco-look-1.1/ .vim/bundle/
参考サイト:
VMWareToolsのインストール
仮想マシンにVMWareToolsをインストール(CentOS5.5)
導入によるメリット
・グラフィックパフォーマンス向上
・マウス操作のパフォーマンス向上
メニューバーから「VMWareToolsのインストール」を選択後
mount /dev/cdrom /media cd /tmp tar zxf /media VMwareTools-7.7.6-203138.tar.gz cd vmware-tools-distrib ./vmware-install.pl
参考にさせていただいたサイト:VMware Server による仮想化(8) − VMware tools のインストール
キーボード配列の変更方法
仮想マシンとしてCentOSをインストールしたらキーボード配列が違ったので修正(CentOS 5.5)
vi /etc/sysconfig/keyboard
日本語キーボードの場合
KEYBOARDTYPE="pc" KEYTABLE="jp106"
英字キーボードの場合
KEYBOARDTYPE="pc" KEYTABLE="us-acentos"
参考にさせていただいたサイト:CentOSでキーボード配列の変更
symfonyからTwitter Streaming APIを使ってつぶやきを保存してみる
TwitterのStreaming APIを利用する機会があったのでメモしておきます。
(symfonyのバージョンは1.4.8、ORMはPropelを用いました)
参考URL:Twtter Streaming API(filter)を使ったサンプルプログラム
上記ブログに記載されていたサンプルプログラムを参考にさせていただいて、symfonyでつぶやきを保存する機能を作ってみました。
Streaming APIについて
Twitter API 仕様書 日本語訳 第五十版 (2010年8月12日版)によると、現在のところ、誰でも使えるStreamingAPIとしては
①public_timelineを取得し続けるsample
http://stream.twitter.com/1/statuses/sample.format
(format = json or xml)
②フィルターを使って絞り込んだつぶやきを取得できるfilter
http://stream.twitter.com/1/statuses/filter.json
(こちらはjsonのみ)
の2種類が利用できます。
つぶやきを保存するためのTweetモデル作成
まずはschema.ymlにDBのテーブル構造を記述します。
今回はステータスID、本文、ユーザ名、つぶやき時刻を保存してみます。
vi config/schema.yml propel: tweet: id: ~ id_str: { type: varchar(64), index: unique } #ステータスID text: { type: varchar(140) } #本文 screen_name: { type: varchar(15) } #ユーザ名 created_at: { type: TIMESTAMP } #つぶやき時刻
DB構築&モデルの作成
symfony propel:build --all --no-confirmation
これでつぶやき保存用のモデルが作成されました。
Streaming APIを利用するタスクを作成
つぶやき取得用のタスクを作成
symfony generate:task tweet:get
lib/task/tweetGetTask.class.phpが作成されます。
参考URL:symfonyからmailを送る
sf_root_dir/configディレクトリにapp.ymlを作成し、twitterに関する設定項目を記述しておきます。
vi config/app.yml all: twitter_id: "TwitterID" twitter_pw: "Password" twitter_stream_url: "http://stream.twitter.com/1/statuses/filter.json" twitter_keyword: "twitter"
作成されたタスクを編集します。
vi lib/task/terrtGetTask.class.php <?php class tweetGetTask extends sfBaseTask { protected function configure() { // // add your own arguments here // $this->addArguments(array( // new sfCommandArgument('my_arg', sfCommandArgument::REQUIRED, 'My argument'), // )); $this->addOptions(array( new sfCommandOption('application', null, sfCommandOption::PARAMETER_REQUIRED, 'The application name', 'frontend'), new sfCommandOption('env', null, sfCommandOption::PARAMETER_REQUIRED, 'The environment', 'dev'), new sfCommandOption('connection', null, sfCommandOption::PARAMETER_REQUIRED, 'The connection name', 'propel'), // add your own options here )); $this->namespace = 'tweet'; $this->name = 'get'; $this->briefDescription = ''; $this->detailedDescription = <<<EOF The [tweet:get|INFO] task does things. Call it with: [php symfony tweet:get|INFO] EOF; } protected function execute($arguments = array(), $options = array()) { // initialize the database connection $databaseManager = new sfDatabaseManager($this->configuration); $connection = $databaseManager->getDatabase($options['connection'])->getConnection(); // add your code here $ctx = stream_context_create( array( 'http' => array( 'method' => 'POST', 'header' => "Authorization: Basic " . base64_encode(sfConfig::get("app_twitter_id").':'.sfConfig::get("app_twitter_pw")) . "\r\n" . "Content-type: application/x-www-form-urlencoded\r\n", 'content' => http_build_query(array('track' => sfConfig::get("app_twitter_keyword"))) ) ) ); $stream = fopen(sfConfig::get("app_twitter_stream_url"), 'r', false, $ctx); while ($json = fgets($stream)) { $tweet = json_decode($json, true); if(!isset($tweet['entities']['hashtags'][0])) continue; //ハッシュタグがない場合は次のつぶやきへ //ハッシュタグがtwitterかチェック if(strcmp($tweet['entities']['hashtags'][0]['text'], sfConfig::get("app_twitter_keyword")) == 0) { //テーブルに登録済みかチェック if(TweetPeer::getTweetByStatusId($tweet['id_str'])) continue; //つぶやきを保存 $tw = new Tweet(); $tw->setIdStr($tweet['id_str']); $tw->setText($tweet['text']); $tw->setScreenName($tweet['user']['screen_name']); $tw->setCreatedAt(date("Y-m-d H:i:s", strtotime($tweet['created_ at']))); $tw->save(); } } fclose($stream); } }
モデルにstatusIdが登録済みかをチェックするメソッドを作成
vi lib/model/TweetPeer.php <?php class TweetPeer extends BaseTweetPeer { public static function getTweetByStatusId($statusId) { $c = new Criteria(); $c->add(self::ID_STR, $statusId); return self::doSelectOne($c); } }
タスクを実行
symfony tweet:get
タスクを実行すると、Streaming APIを用いて「#twitter」に関するつぶやきをリアルタイムに保存し続けます。
つまづいた点など
タスクからsfConfig::get()を利用する方法
最初、twitterの設定をapp.ymlに記述して、タスクからsfConfig::get()で読み込ませようとしたところ、うまく読み込みができませんでした。
タスクの初期設定の際に、application名を指定する必要があるようです。
new sfCommandOption('application'〜)の第5引数でapplication名を指定
$this->addOptions(array(
new sfCommandOption('application', null, sfCommandOption::PARAMETER_REQUIRED, 'The application name', 'frontend'),
new sfCommandOption('env', null, sfCommandOption::PARAMETER_REQUIRED, 'The environment', 'dev'),
new sfCommandOption('connection', null, sfCommandOption::PARAMETER_REQUIRED, 'The connection name', 'propel'),
// add your own options here
));
created_atの保存方法
created_atをそのまま保存する場合、日本時間になっていないため9時間ずれた値が保存されてしまいます。
strtotimeで時刻変換をすることで正しく登録されます。
$tw->setCreatedAt(date("Y-m-d H:i:s", strtotime($tweet['created_ at'])));
参考URL:
日時表示を日本時間(JST)に変更
filterに関して
今回、filterの引数として利用したtrackに関する注意事項(仕様書から引用)
track=キーワードのリスト
指定したキーワードを含む public な情報を取得する
この API を使うことで、(契約なしで)最大 200 キーワードを追いかけることができる
[最大 10000 キーワードを追いかけ可能な "restricted track" 契約、最大 200000 キーワードを追いかけ可能な "partner track" 契約も用意されている]
(キーワードの大文字、小文字は区別しない。複数のキーワードを指定した場合は、指定したキーワードがどれか1つでも含まれていれば、取得対象になる)例えば、キーワードに twitter を指定した場合、前後が空白文字で区切られた
"Twitter"
twitter.
といった「語(token)」を含む発言を取得することができる。ただし、
TwitterTracker
http://www.twitter.com
のようにキーワードの前後に別の文字が存在する「語」に関しては、取得対象(キーワードマッチング対象)にはならない追跡対象のキーワードをコンマ区切りで指定する。指定するキーワードは1バイト以上30バイト以内とする
(訳者注: キーワードに指定可能な文字は英数字のみ。記号やマルチバイト文字には未対応)
ハッシュタグ検索の場合、#をキーワードに含める必要はありません。
MAMPを使ってsymfonyの開発環境を作ろう
macでsymfonyを用いたローカル開発環境を用意する際の手順メモです。
MAMPにsymfonyをインストール
まずはMAMPをダウンロード
sudo mv /usr/bin/php /usr/bin/php-old
MAMPのphpのシンボリックリンクを作成(今回はphp5.2を使用)
sudo ln -s /Applications/MAMP/bin/php5.2/bin/php /usr/bin/php
PHP5.3を用いる場合は、
sudo ln -s /Applications/MAMP/bin/php5.3/bin/php /usr/bin/php
sudo mv /usr/bin/pear /usr/bin/pear-old sudo ln -s /Applications/MAMP/bin/php5.2/bin/pear /usr/bin/pear
PHP5.3を用いる場合は
sudo ln -s /Applications/MAMP/bin/php5.3/bin/pear /usr/bin/pear
pear channel-discover pear.symfony-project.com
pear: command not found
php: Permission deniedこのようなエラーが出た場合は、pearとphpの権限を変更する必要がある
sudo chmod 774 /Applications/MAMP/bin/php5.2/bin/pear sudo chmod 774 /Applications/MAMP/bin/php5.2/bin/php参考URL:PEAR Not Found
symfonyインストール
pear install symfony/symfony
symfonyコマンドを利用可能にするため、シンボリックリンクを作成
sudo ln -s /Applications/MAMP/bin/php5/bin/symfony /usr/bin/symfony
インストール確認
symfony -V
symfony version 1.4.8
これでphp5.2環境にsymfonyのインストールができました。
symfonyサンプルプロジェクトの作成
次に、サンプルとしてsymfonyプロジェクトを作成してみましょう。
macのSiteディレクトリにtestディレクトリを作成します。
cd Sites mkdir test cd test
プロジェクトの作成
symfony generate:project test --orm=Propel
ormをPropelに設定する場合、symfony1.4ではormオプションを付けます。
フロントエンドの作成
symfony generate:app frontend
ブラウザからアクセスできるようにhttpd.confを編集します。
sfフォルダへのパスを通さないと正しくデフォルトの画面が表示されません。
vi /Applications/MAMP/conf/apache/httpd.conf <VirtualHost *:8888> DocumentRoot "/Users/apple/Sites/test/web" DirectoryIndex index.php <Directory "/Users/apple/Sites/test/web"> AllowOverride All Allow from All </Directory> Alias /sf /Applications/MAMP/bin/php5/lib/php/data/symfony/web/sf <Directory "/Applications/MAMP/bin/php5/lib/php/data/symfony/web"> AllowOverride All Allow from All </Directory> </VirtualHost>
MAMPでサーバを再起動
これでブラウザからアクセスすればデフォルトの画面が表示されます。
Subversionでリポジトリ管理をする場合の初期設定
rm -rf cache/* log/* svn add * svn propedit svn:ignore cache
cacheとlog内のファイルを無視するように設定します
svn propeditを実行しようとしたところ以下のようなエラーが発生する場合は環境変数を追加する
svn: None of the environment variables SVN_EDITOR, VISUAL or EDITOR are set, and no 'editor-cmd' run-time configuration option was found
vi ~/.profile export SVN_EDITOR=vim.profileを再読み込み
source .profile
svn propedit svn:ignore cache * svn propedit svn:ignore log *
参考URL:Jobeet
mysqlの設定
MAMPのphpMyAdmin設定
ターミナルからmysqlコマンドを使えるようにシンボリックリンクを貼る
ln -s /Applications/MAMP/Library/bin/mysql /usr/bin/mysql ln -s /Applications/MAMP/Library/bin/mysqladmin /usr/bin/mysqladmin
MAMPのmysqlにアクセス(デフォルトでのrootのパスワードはroot)
mysql -u root -p
パスワードをなしにする場合
SET PASSWORD FOR root@localhost=PASSWORD('');
参考URL:MAMPのMySQLサーバに接続したいよ(Terminalで
mysqlのパスワードを変更した後に、MAMPのスタートページにアクセスしようとしたところ、
Error: Could not connect to MySQL server!
というエラーが
MAMPの設定ファイルを変更してみたものの、パスワードなしのrootの場合、ページが正しく表示されませんでした。
rootとは別に管理ユーザを追加する
GRANT ALL PRIVILEGES ON *.* TO 管理ユーザ名@localhost IDENTIFIED BY 'パスワード' WITH GRANT OPTION;
MAMPの設定ファイルを変更する
vi /Applications/MAMP/bin/mamp/index.php $link = @mysql_connect(':/Applications/MAMP/tmp/mysql/mysql.sock', '管理ユーザ名', 'パスワード'); vi /Applications/MAMP/bin/phpMyAdmin/config.inc.php $cfg['Servers'][$i]['user'] = '管理ユーザ名'; $cfg['Servers'][$i]['password'] = 'パスワー ド';
MAMPの再起動
これでMAMPのphpmyadminにアクセスできました。
参考URL:LeopardにMAMPを入れた時のメモ
mysqlデフォルト文字コード設定
mysqladmin -uroot create test
というように、mysqladminを用いてDBを作成しようとしたところ、文字コードがデフォルトのlatin1となってしまい、日本語が文字化けしてしまうという事態に
MAMPに用意されているmy.cnfのサンプルファイルをリネームしてコピー
cp /Applications/MAMP/Library/share/mysql/my-small.cnf /Application/MAMP/db/mysql/my.cnf
文字コードの指定を追加
vi /Application/MAMP/db/mysql/my.cnf [mysqld] default-character-set=utf8 skip-character-set-client-handshake [mysql] default-character-set=utf8
MAMPを再起動
これでデフォルトの文字コードがutf8になりました。
参考URL:
MAMPのmy.cnf
以上で、MAMPを使ったsymfonyの開発環境が用意できました。
他にも必要な設定が見つかった場合は、適宜ブログに追加していこうと思います。