2011年8月31日水曜日

tramp



参考


http://www.gnu.org/software/tramp/
http://blog.livedoor.jp/k1LoW/archives/64957553.html
http://d.hatena.ne.jp/hideden/20090108/1231395529


取得



ftp://ftp.gnu.org/gnu/tramp/tramp-2.2.2.tar.gz
ftp://ftp.gnu.org/gnu/tramp/tramp-2.2.2.tar.gz.sig



正当性チェック



gpg --verify tramp-2.2.2.tar.gz.sig tramp-2.2.2.tar.gz



公開鍵がないよ、と言われるので取得後、再実行。



gpg --keyserver pgp.nic.ad.jp --recv-keys ↑で表示されたkyeID
gpg --verify tramp-2.2.2.tar.gz.sig tramp-2.2.2.tar.gz


不正といわれなければOK


インストール



cd ~/.emacs/elisp
tar zxvf tramp-2.2.2.tar.gz
ln -s tramp tramp-2.2.2
./configure --with-contrib
make
sudo paco -D make install



設定



;; tramp
(require 'tramp)
(setq tramp-default-method "ssh")



あれ、、


これは便利、と思ったら変更するたびになんか走ってる、、、、
auto-saveはしてないし、、、重ひ、、、





日付をパース



MovableTypeの日付でソートしたい


こんな形式 => 02/03/2008 01:31:21 PM



use Time::Piece;
use Memoize;
memoize('time_piece');

my @sorted_DATE = sort { $self->time_piece($a) <=> $self->time_piece($b) } @DATE;

sub time_piece {
return Time::Piece->strptime( $_[1], '%m/%d/%Y %H:%M:%S %p' );
}



しまった、%Hでなくて、%Iだった。
そしてTime::Piece1.15では00時はパースエラーになるので、置換してやる必要がある。
もしくはTime::Piece1.20にアップデート。





2011年8月9日火曜日

MySQL Casual Talks vol.2のメモ



興味のある範囲だけでも、自分なりにまとめるのは絶対意味があると思うので、ちゃんと書いておく。
(下の参加してきたよ、のメモを読んだらちょっとやる気なくしかけたので。)


参考


「MySQL Casual Talks vol.2」に参加してきたよ、のメモ
oak-online-alter-table
MySQL4.0の運用


※発表者の横に書いてるのは発表タイトルじゃなくて、あくまで自分のまとめ用タイトルです。


MySQLをKVSとして使う (@さん)



  • KVSがオンメモリだとバグがあった場合、再起動が必要。前に7時間かかった。 -> MySQLに一本化



チューニング


  • スロークエリチェック

  • クライアント側でもスロークエリ出力

  • JAVAのスタックトレース出力

  • MySQLのコンテキストスイッチが激しいので、in句などで、クエリ数を減らす。



MySQLをKVSにしたメリット・デメリット


  • メリット


joinできない。インデックスの聞かないクエリは投げれない。
他のものに移行しやすい。



  • デメリット


キー以外での絞り込み。
アプリでソートロジック必須。
カラムの型変換GDB


超カジュアルに使うMySQL (@さん)


ぐにゃら君による本当のカジュアルとはこういうものだ講座。
発表資料


カジュアル

idはBIGINT
JSON/XMLをそのまま保存


カジュアルといえど限度はある

natural_key、created、updatedはカラムを分ける。


frendfeed方式でインデックスを別テーブルに分ける。

インデックス用に別テーブルを用意する。こういう呼び名だったのか。
blobがあるテーブルだと分けてます。


あとで変更する必要に迫られる

カラムを追加すればいいじゃない(by マリーアントワネット)
ALTER TABLEは遅い。
ツールがあるので使ってみるのも手(ほとんど非検証)



  • openarkkit

    • MySQL便利グッズ詰め合わせ。下のoak-online-alter-tableもその1つ。

    • oak-online-alter-tableMySQLを停止させないALTER TABLE





1.メンテナンス対象の元テーブルをコピーして、作業用の仮テーブルを作ります
2.仮テーブルに対して、カラム追加などの変更を加えます
3.その間、元テーブルに対して行われる更新処理について差分を記録しておきます
4.仮テーブルの変更が終わったら、記録しておいた差分データを仮テーブルに反映します
5.差分データの反映が終わったら、元テーブルと仮テーブルを入れ替えます
[リンク先より]




  • OnlineSchemaChange.php(facebook製)

    • facebook製のopenarkkitといったところ。





データ圧縮


  • MessagePack+Snappy


データを6割ほど圧縮できるので、I/Oも減る。
まぁカジュアルに使うならJSON突っ込むだけでいんじゃね、って言ってかも。


MySQL5.5からのperformance schema(@さん)


いろいろ統計とか情報が取れる。現状、以下の方法があるが、まだ足りなかった。



  • プロセス監視

    • pgrep -x mysqld



  • status

  • show

  • Information shema(MySQL5.5~) showより使いやすい

  • show profile

  • ログ

  • GDB いろいろ見れるが時間が止まっている。天敵はOptimized away。

  • dtrace -p `pgrep -x mysqld` -s script_name

  • GBUGトレース MySQLデバック版で使用可能。


デメリット

CPUパワーを使う。毎秒あたりのトランザクション数が数割落ちるので、web系で使うのはしんどいか。


MySQL5.07 -> MySQL5.5 へのアップデート (@さん)


発表資料
CentOS5標準のMySQL5.07から、一度MySQL5.1にアップデートしてからMySQL5.5に。
このときMySQL5.1、MySQL5.5は別マシンを用意して組み込みのMySQLを使ったほうが安全かも。


よくあるエラー

なくなっている設定がエラーが原因で起こる。
代表的なのは、default-charcter-set=utf8


MySQL MHA (@さん)


MySQLが止まったときに、マスターやスレーブの差分を見つけて同期。PurePerl
発表資料


マスターN対スレーブ1の構成(@さん)


マスターを分けるとjoinできないので、横断的にクエリ投げれない。
うっかりカジュアルに参加してしまった僕には基本的な内部の話がとても勉強になった。
発表資料


MySQLでNoSQL(@さん)


オラクルの中の人?作った理由は流行ってるから。実装が2つあって、理由は社内の人が2人、同時期にこんなの作りましたって持ってきたから。
ひとつは、MySQL5.6のmemchachedインタフェース用プラグイン。もうひとつは、MySQL Cluster 7.2。ClusterはもともとKVSで、なんかよくわかりません。下記に説明がありました。 *後で読む
スライド





2011年8月8日月曜日

JavaScriptパターン 1章 JavaScriptの概念



5つのプリミティブを除いてすべてオブジェクト



  • 数値

  • 文字列

  • ブール値

  • null

  • undefined



プリミティブ?

具体的な値(データ)の型


上3つのプリミティブはメソッドが使える

"hoge".lengthといった具合に文字列から直接使用できるが、これはオブジェクトが自動的にラップされているだけで、プリミティブ型がメソッドを持っているわけではない。


変数はオブジェクト


アクティベーションオブジェクトと言う内部オブジェクトのプロパティ。
(※アクティベーションオブジェクトは概念?ES5では表現が変わるとか)
varを付けないとグローバルオブジェクトのプロパティ。
(var宣言された「真の」変数はdeleteでは消せない。)


ECMAScript5(のstrictモード)


strictモードの説明
抜粋メモ



  • "use strict"と書くと理解できないブラウザではただの文字列なのでエラーにはならない。

  • with文が使えない

  • caller、calleeもダメ。

  • 関数内thisはグローバルをささず、undefinedを返す。



デバック


JSLint

コードチェッカー。デフォルトはstrictモード


console.dir

オブジェクトの中身列挙。console.logしか使ってなかった、、、、。


余談

本とは関係ないけど。ブラウザコンソールでJSを書くと、実行結果(変数や関数の定義)が残るので、そのまま知らずに続きを書くと結果がめちゃくちゃに見えて混乱する。
あとブラウザ特有のメソッドもある。