smarty install のメモやらログやらっぽいもの
安定版の最新ファイル探してくる
Smarty - Downloads
ここから落としてきましょう。
今回は、
http://www.smarty.net/do_download.php?download_file=Smarty-2.6.26.tar.gz
これ使った。
stableだったので。
install
参考にしたのはここ、
PHP Evo Smartyのインストール
お世話になりましたm(_ _)m
cd /tmp/ wget http://www.smarty.net/do_download.php?download_file=Smarty-2.6.26.tar.gz tar zxvf Smarty-2.6.26.tar.gz cd Smarty mv libs /usr/local/lib/php/Smarty
ま、解凍するだけです。
Smartyをphpが認識するようにpath通す
方法は何個かあるらしい。
Smarty
こちらで4つの方法が書いてある
- 手動で SMARTY_DIR 定数を定義する
- ライブラリファイルの絶対パスを指定する
- php.ini ファイルにライブラリへのパスを追加する
- PHP スクリプト内での ini_set() によるインクルードパスの追加
今回は、
- php.ini ファイルにライブラリへのパスを追加する
で対応しました
vi /usr/local/lib/php.ini
include_path = ".:/usr/local/lib/php:/usr/local/lib/php/Smarty"
apache restart
test
<?php require_once('Smarty.class.php'); $smarty = new Smarty(); ?>
こんなファイル作って、適当にみてみる。
エラーでなければ、path通ってる
エラーになったら、【Smartyをphpが認識するようにpath通す】をもう一度見直す。
他の方法も試してみたり。
smarty を使ってみる
・Smarty は、デフォルトで templates/、 templates_c/、configs/ および cache/ と名づけられた4つのディレクトリが必要です。
・これらの名前は、それぞれ Smarty クラスのプロパティ $template_dir、 $compile_dir、 $config_dir および $cache_dir で定義することができます。
・Smarty を使用する各アプリケーションにおいて、 これらのディレクトリを個別に設置する事を強く推奨します。
らしい
ここは素直に従う。
mkdir smarty_test cd smarty_test
一個、テスト用のDir掘って
mkdir templates mkdir templates_c mkdir configs mkdir cache mkdir htdocs
※注意
Smarty は $compile_dir と $cache_dir (templates_c/ と cache/) に 書き込み権限 でアクセスする必要があるので、 web サーバのユーザがこれらに書き込める必要があります
らしい。
なので、templates_c/ と cache/ は chmod 770 と、ユーザ名とグループ名の変更をしておく。
ユーザ名とグループ名は apache を利用する場合は、httpd.conf に書いてあるので、それをみて chownする。
smarty作成ユーザと apache のユーザが一緒なら(自分だけのテスト環境とか?)、変える必要はないかな。
できた階層構造はこんな感じ
/var/www/smarty_test/ templates/ index.tpl templates_c/ configs/ cache/ htdocs/ index.php
htdocsというDirを掘ったのは、下記のような理由があるらしい。
あなたは web サーバのドキュメントルートの位置を知っている必要があります。 例ではドキュメントルートは /web/www.example.com/guestbook/htdocs/ とします。Smarty ディレクトリは Smarty ライブラリによってのみアクセスされ、 web ブラウザから直接アクセスされる事はありません。 したがってセキュリティの心配を避けるために、 これらのディレクトリをドキュメントルートの 外部 に配置する事を推奨します (ただし必須ではありません)。
とのこと。
つまり、webブラウザでURL直打って、index.tplファイルとか見られちゃまずいから、rootDirの外におきましょう、って事らしい。
なるほど。
templates/index.tpl
中身はとりあえず簡単に、
{* Smarty *} こんにちは、{$name}。ようこそ Smarty へ!
こんな感じ。
{* *}
はsmartyのコメントアウト記法らしい。
こう書けば、smartyファイルって分かりやすいから、習慣つけとけよー、って書いてあったので書いてみる。
htdocs/index.php
実際にwebブラウザから叩くであろうファイルは、こんな感じ
<?php require_once('Smarty.class.php'); $smarty = new Smarty(); #まぁ、絶対パスで書いた方がいいかも $smarty->template_dir = '../templates/'; $smarty->compile_dir = '../templates_c/'; $smarty->config_dir = '../configs/'; $smarty->cache_dir = '../cache/'; $smarty->assign('name','Ryoff');#nameという名前でRyoffという値を送る $smarty->display('index.tpl');#テンプレ指定 ?>
viでctrl+s押してスクロール停止・・・。いい加減自分用メモ
なぜかたまにやる。
んで毎回復帰方法をぐぐるので、自分とこに書く。
ctrl + s
ctrl + s を押すと、スクロール停止になり、ぱっとみフリーズしたっぽくなります。
謎のフリーズ(´・ω・`)
復帰には、
ctrl + q
です。
CentOS でキーボードがusになった場合の対処
困ったことが起きた。
ある日突然、キーボードがusとして認識されてしまった。
具体的な症状としては以下のようなもの
- ダブルクォートを打とうとして、Shift+2 = @
- vi閉じようとして、:を打とうとするが、見つからず・・
- キーボード設定だろうと思い、キーボードレイアウト【日本語】を選択すると、すべてが全角カタカナしか入力できず
しばらく我慢しようかとも思ったが、イライラが止まらないので調べることに。
pearのproxy設定(自分用メモ)
HTTP通信用Proxyの設定
- 現在の設定の確認
pear config-show
設定
pear config-set http_proxy [proxyアドレス:ポート] pear config-set http_proxy http://example.com:8080/
がんばろ
mysqld_multiを使い、MySQLを複数起動して、Master-Slave構成でReplicationを取るまで
経緯
一つの開発用サーバでmysqlのreplicationを利用したscriptを作成しなくてはならなくなり、戦友:id:maroekunから教えてもらった mysqld_multiを利用してみることにした。
mysqld_multiとは
MySQL MySQL 4.1 リファレンスマニュアル 4.8.3 mysqld_multi(複数の MySQL サーバを管理するプログラム)
mysqld_multi は、さまざまな Unix ソケットおよび TCP/IP ポートをリッスンする複数の mysqld プロセスを管理するためのプログラムです。
ようは、一つのmysqld で複数プロセスを立ち上げることができます。
もちろん、複数プロセス間でreplicationを取ることも可能です。
設定
/etc/my.cnf
の設定はこんな感じです
[mysqld_multi] mysqld = /usr/bin/mysqld_safe mysqladmin = /usr/bin/mysqladmin [mysqld] default-character-set = utf8 user=mysql [mysqld1] server-id = 1 port = 3306 datadir = /data/var/lib/mysql socket = /var/lib/mysql/mysql.sock pid-file = /var/run/mysqld/mysqld.pid [mysqld2] server-id = 2 port = 3307 <= netstat で使われていないportであることを確認しましょう datadir = /var/db_multi/db <= 自分で理解しやすい名前なら、どこに作ってもいいです socket = /var/db_multi/mysql.sock pid-file = /var/db_multi/mysqld.pid
同時起動したい数だけ、[mysqld*]を追加しましょう。
共通の設定項目は、[mysqld]にかけばおk。
[mysqld_multi]には、mysqld_safeとmysqladminを記載。
※[mysqld1]は既に設定済みで稼動していたので、[mysqld2]の設定をします
dir作っておきましょう。
mkdir -P /var/db_multi/db
mysqlユーザにして
chown mysql:mysql /var/db_multi/
datadirの初期化ー
mysql_install_db --datadir=/var/db_multi/db --user=mysql
起動
mysqld_multi start 1,2 もしくは mysqld_multi start 1-2
で起動します
mysqld_multi report
叩けば
Reporting MySQL servers MySQL server from group: mysqld1 is running MySQL server from group: mysqld2 is running
こんな風に複数起動が確認できるはず。
ps aux | grep mysql
でも確認できるかな
Replication
ここから、Replication設定。
とはいっても、普通のReplication設定と同じです。
mysqld_multiだからといって、特別な意識はいらないです。
1./etc/my.cnfに追加
/etc/my.cnf
[mysqld1] server-id = 1 port = 3306 datadir = /data/var/lib/mysql socket = /var/lib/mysql/mysql.sock pid-file = /var/run/mysqld/mysqld.pid sync_binlog=1 log-bin=mysql-bin log-bin-index=mysql-bin relay-log=relay-bin relay-log-index=relay-bin [mysqld2] server-id = 2 port = 3307 datadir = /var/db_multi/db/ socket = /var/db_multi/mysql.sock pid-file = /var/db_multi/mysqld.pid read_only log-slave-updates log-bin=mysql-bin log-bin-index=mysql-bin relay-log=relay-bin relay-log-index=relay-bin
このように、binlogの設定など、Replicationの準備をします。
2.Replication用Userの作成
Master側に、Replication用のUserを作っておきましょう
mysql> GRANT REPLICATION SLAVE ON *.* TO repl@10.0.0.0 IDENTIFIED BY 'password';
ユーザ名は、【repl】である必要はありません。
接続元IPは、MasterとSlaveは同じなので、普通にサーバIPをかけば問題ありません。
3.Masterデータの更新lock
データをslaveに移すので、masterの更新をlockします
mysql> FLUSH TABLES WITH READ LOCK;
4.logのposiの確認
Masterで【show master status】を実行します
mysql> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000003 | 2283327 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.10 sec)
[File]と[Position]をメモしましょう。
あとで使います。
5.データのコピー
では、lockしたまま、MasterデータをSlaveに移しましょう
cp -aR /data/var/lib/mysql/* /var/db_multi/db/
6.masterのunlock
ここまできたら、Masterの更新Lockを戻してあげましょう
mysql> UNLOCK TABLES;
7.Slave側でReplicationのためのパラメータ設定
mysql> CHANGE MASTER TO MASTER_HOST='10.0.0.0', <=今回はMasterもSlaveも同一サーバなので自分のIP MASTER_USER='repl', <=2で作ったUser名 MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000003', <=4で記録した[File]名 MASTER_LOG_POS=2283327 ; <=4で記録した[Position]
何番煎じだ。iPhone での位置情報取得javascriptのメモ
iPhoneの位置情報取得について調べる機会があったので、メモしておく。
W3C準拠のAPIを使用する
世界標準で用意されているといいですね。
W3C の Geolocation API の仕様に準拠してます。
navigator.geolocation.watchPosition() を使う
※サンプル
function getLocation(pos) { console.log("lat : " + pos.coords.latitude + "long : " + pos.coords.longitude + "accuracy : " + pos.coords.accuracy); } function catchErr(a) { console.log(" error: " + a.code); } var init = function(){ navigator.geolocation.watchPosition(getLocation, catchErr) }; init();
navigator.geolocation.watchPosition(getLocation, catchErr)
この一行で位置情報とってこれます。
watchPosition は現在の位置情報を連続取得し続けるメソッドですね。
このメソッドの callback 関数の引数(今回の場合は、"pos")に、位置情報が入ってきます。
ちなみにこのメソッドは連続して呼ばれるので、もし地図などを表示したい場合は、
初回呼び出しのみ地図表示
のような処理を書かないと、地図が永遠に生成され続けます。
数回位置情報を取得して、不正対策や位置補正なんかもできるかな。
経路探索やその他色々な使い道がありそう。
初めてのruby 基本〜配列
初めてのrubyです。
自分用メモ
前提
全てオブジェクト
p "test".class #=>Stringクラス p 1.class #=>Fixnumクラス p 1.class.class #=>Classクラス
p関数は開発時に変数内部見るのに便利
代入演算子は毎回オブジェクトを作る。
1: a = 1 2: a = 1
- 1と2のaは別のオブジェクト。
1: a = "test" 2: p a.object_id #=>-604044008 3: a = "test" 4: p a.object_id #=>-604044028
こうすれば分かる。
object_idは別。
実行時に評価される
def hoge p "hoge" end hoge
これはOK
fuga def fuga p "fuga" end
これはエラー
1.8系と1.9系は相当違うらしい
RubyGemsを RubyGames に空目していたのはいい思い出
配列
リテラルは、[]
a = ["a",1,3]
添え字でも入力可能
- 範囲外の添え字も自動生成される
a = [1,2] a[2] = 3 a[4] = 5 p a #=>[1, 2, 3, nil, 5]
- 添え字の範囲指定もできる
a = [1,2] a[0] = 3 a[4] = "4" a[0,3] = 'a', 'b', 'c' p a #=>["a", "b", "c", nil, "4"]
マイナスの添え字も可能
a = [0,1,2,3,4,5] p a[-1] #=>5 p a[-3] #=>3
添え字の範囲指定
- [n..n]は末尾を含む
- [n...n]は末尾を含まない
c = [0,1,2,3,4,5,6,7,8,9] p c[0..3] #=>[0, 1, 2, 3] p c[0...3] #=>[0, 1, 2] p c[1...7] #=>[1, 2, 3, 4, 5, 6] p c[-2...2] #=>[] p c[-7...7] #=>[3, 4, 5, 6]
配列のメソッド
- length
- size
- *=
- sort
- include
- uniq
a = [1,2,3,4] p a.length #=>4 p a.size #=>4 p a *= 2 #=>[1, 2, 3, 4, 1, 2, 3, 4] p a.sort #=>[1, 1, 2, 2, 3, 3, 4, 4] p a.include?(1) #=>true p a.uniq #=>[1, 2, 3, 4] p a #=>[1, 2, 3, 4, 1, 2, 3, 4] a.uniq! #元の配列を更新 p a #=>[1, 2, 3, 4]
配列のイテレータ
- eachの使い方
do から end までが繰り返し。
hoge | パイプに囲まれた文字列に配列要素が一つずつ入ってくる |
a = ["Aaaa", "Bbbb", "Cccc"] a.each do |item| print item + "\n" end
- 結果
Aaaa Bbbb Cccc
- 配列の位置も利用したい場合
- each_with_index
a.each_with_index do |item, index| p [item, index] end
- 結果
["Aaaa", 0] ["Bbbb", 1] ["Cccc", 2]
数字のsort
- rubyのsort関数のデフォルトは文字によるソート
b = [1,2,3,99,20.9,"a","10"] p b #=>[1, 2, 3, 99, 20.9, "a", "10"] p b.sort{|x,y|x.to_i <=> y.to_i} #=>["a", 1, 2, 3, "10", 20.9, 99]
selectメソッド
- 要素内から真のものだけ取得する
c = [1,2,3,4,5,6,7,8,9,10] p c.select{|cc|cc % 2 == 0} #=>[2, 4, 6, 8, 10]