via kwout
月曜日, 12月 01, 2008
日曜日, 11月 30, 2008
[PgSQL] セッションの切断方法
PostgreSQLは、DBサーバとしてクライアントのセッションについてタイムアウトをかけない。このため、さすがにちょっとセッションが多すぎるな、とDBAが思ったとして、今度はセッションを切断する方法がよくわからない。。
と思ったら、管理者向け関数の中にあるpg_cancel_backend(pid int)というやつが役に立つようだ。これをpsqlからざくっと発行すれば、セッションは殺せるらしい(PostgisのMLより)。
なるほどね。
と思ったら、管理者向け関数の中にあるpg_cancel_backend(pid int)というやつが役に立つようだ。これをpsqlからざくっと発行すれば、セッションは殺せるらしい(PostgisのMLより)。
SELECT pg_cancel_backend(5220);
なるほどね。
水曜日, 11月 26, 2008
月曜日, 11月 24, 2008
[Java] 性能試験のときなどに
Javaアプリは、性能に関係するパラメータが多すぎてよくわからない。なので試験時に如何にうまく、多くの情報を得て分析できるかが肝要だと思います。
これまで、JVMの情報をSNMPで取れることは知っていて、これを細々とZABBIXでグラフ化したり、少し前からzapcatを知ったのでそれを用いてTomcatのスレッド挙動を見たりしていました。
そして今日、今更ながらzapcatのzipファイルの中に「Javaテンプレート」が入っていることを発見しました。これは偶然、ファイルディスクリプタの消費って取れないのかな?と調べていた中で見つけました。
早速入れてみたのですが、なんかいっぱい取れすぎて、、でもこういう、先人の知恵(?)から学ぶことは大きいので、ちょっとづつ内容を確認してゆこうと思います。
でも、、灯台元暗しというか。。
これまで、JVMの情報をSNMPで取れることは知っていて、これを細々とZABBIXでグラフ化したり、少し前からzapcatを知ったのでそれを用いてTomcatのスレッド挙動を見たりしていました。
そして今日、今更ながらzapcatのzipファイルの中に「Javaテンプレート」が入っていることを発見しました。これは偶然、ファイルディスクリプタの消費って取れないのかな?と調べていた中で見つけました。
早速入れてみたのですが、なんかいっぱい取れすぎて、、でもこういう、先人の知恵(?)から学ぶことは大きいので、ちょっとづつ内容を確認してゆこうと思います。
でも、、灯台元暗しというか。。
木曜日, 11月 20, 2008
[Life] userChrome
httpヘッダに入ってくるデバッグ用の拡張httpヘッダを探すのに疲れたので、、LiveHeadersなんかを使わず画面上にそれとなく、そのデバック情報を表示してくれるような機能を、(今更ながら)Firefoxの拡張として、userChromeを使って書いてみた。画面上はで想定する動きになったので、次はステータスバーかメニューにoff/onスイッチを付けたい。
そもそもJavascriptが苦手ですが、意外に書けるもので、調子にのってこの苦手も克服できるよう、Javascriptの開発環境を整備してみようか、と考えています。
今回はuserChromeを使ってみたのですが、それより前からある(?)JavascriptActionsというやつと、どっちがどう(良い)のか。知りたいです。
そもそもJavascriptが苦手ですが、意外に書けるもので、調子にのってこの苦手も克服できるよう、Javascriptの開発環境を整備してみようか、と考えています。
今回はuserChromeを使ってみたのですが、それより前からある(?)JavascriptActionsというやつと、どっちがどう(良い)のか。知りたいです。
火曜日, 11月 18, 2008
[Life] MS-Accessの調査で
MS-Accessから、クエリ名とSQLの一覧を取得するVBAスクリプト(Cドライブ直下にlog.txtという名前でファイルアウトします)。
Option Compare Database
Public Sub MyQueryName()
On Error GoTo エラー
Dim Cat As ADOX.Catalog
Dim viw As ADOX.View
Dim pcd As ADOX.Procedure
Dim strmsg As String
' ファイルハンドルオープン
Open "C:\log.txt" For Output As #1
Set Cat = New ADOX.Catalog
Cat.ActiveConnection = CurrentProject.Connection 'カレントデータベースに接続
For Each viw In Cat.Views ' --- A
strmsg = strmsg & vbNewLine & "[v] " & viw.Name & "^" & viw.Command.CommandText
Next viw
For Each pcd In Cat.Procedures ' --- B
If Left(pcd.Name, 1) <> "~" Then ' --- C
strmsg = strmsg & vbNewLine & "[p] " & pcd.Name & "^" & pcd.Command.CommandText
End If
Next pcd
Print #1, strmsg
' ファイルハンドルクローズ
Close #1
MsgBox "end."
Set Cat = Nothing
Exit Sub
エラー:
MsgBox Err.Number & vbNewLine & Err.Description, vbCritical
Exit Sub
End Sub
Option Compare Database
Public Sub MyQueryName()
On Error GoTo エラー
Dim Cat As ADOX.Catalog
Dim viw As ADOX.View
Dim pcd As ADOX.Procedure
Dim strmsg As String
' ファイルハンドルオープン
Open "C:\log.txt" For Output As #1
Set Cat = New ADOX.Catalog
Cat.ActiveConnection = CurrentProject.Connection 'カレントデータベースに接続
For Each viw In Cat.Views ' --- A
strmsg = strmsg & vbNewLine & "[v] " & viw.Name & "^" & viw.Command.CommandText
Next viw
For Each pcd In Cat.Procedures ' --- B
If Left(pcd.Name, 1) <> "~" Then ' --- C
strmsg = strmsg & vbNewLine & "[p] " & pcd.Name & "^" & pcd.Command.CommandText
End If
Next pcd
Print #1, strmsg
' ファイルハンドルクローズ
Close #1
MsgBox "end."
Set Cat = Nothing
Exit Sub
エラー:
MsgBox Err.Number & vbNewLine & Err.Description, vbCritical
Exit Sub
End Sub
土曜日, 11月 15, 2008
[Solr] Normとは
Normとはノルムと読み、(Luceneや)Solrでは、検索対象文章の重要度(例/一覧表示するときなど)を決める要素のこと。
たとえばLength-Nornとは「各単語が含まれている文章が長い場合と、短い文章である場合は、後者のほうが(その単語が)、当該文章において重要である(≒その文章の特徴をあらわすものである可能性が高い)」ということを表現する情報のこと。
これ以外に、各文書や(その中の)フィールドがそれぞれ指定されうるブースト値も、この中に含まれます。
なお、よく混同される単語にNormalize(ノーマライズ/Normってこの略かと思いがち)があり、これは広くは正規化処理のことで、こと検索エンジンの世界(?)では、文章を格納するとき(後で使いやすいよう)、半角カナ→全角カナ、だったり、全角アルファベットを半角のそれに統一する処理をいいます。
。。。と調べようと思っていたら、Luceneのスコアリング解析というドンピシャなまとまったpdfが公開されていた。
たとえばLength-Nornとは「各単語が含まれている文章が長い場合と、短い文章である場合は、後者のほうが(その単語が)、当該文章において重要である(≒その文章の特徴をあらわすものである可能性が高い)」ということを表現する情報のこと。
これ以外に、各文書や(その中の)フィールドがそれぞれ指定されうるブースト値も、この中に含まれます。
なお、よく混同される単語にNormalize(ノーマライズ/Normってこの略かと思いがち)があり、これは広くは正規化処理のことで、こと検索エンジンの世界(?)では、文章を格納するとき(後で使いやすいよう)、半角カナ→全角カナ、だったり、全角アルファベットを半角のそれに統一する処理をいいます。
。。。と調べようと思っていたら、Luceneのスコアリング解析というドンピシャなまとまったpdfが公開されていた。
木曜日, 11月 13, 2008
日曜日, 11月 02, 2008
木曜日, 10月 30, 2008
[Linux] ReriteRule
いまさらですが、apacheでRewriteしたい+ネームバーチャルを使っている場合、各<VirtualHost>ディレクティブの中で、"ReriteEngine On"ってやらないといけないんですね。。
知りませんでした!
知りませんでした!
日曜日, 10月 26, 2008
[Linux] lshell
木曜日, 10月 23, 2008
金曜日, 10月 10, 2008
[Scala] jarファイルで実行
Scalaで作ったclassを、OfficeTakeoさんの記事を参考にしながら、なんとなくjarファイルにして、なんとなく実行するところまでやってみた。
でも"-jar"とかなんで要らないんだろう?Javaは本当に良く分からないことばかりです。
D:\work\Scala>jar cvf webProxy.jar webProxy.*
マニフェストが追加されました。
webProxy.class を追加中です。(入 = 596) (出 = 445)(25% 収縮されました)
D:\work\Scala>java -classpath ..\..\scala-2.7.2.RC2\lib\scala-library.jar;jakarta-oro-2.0.8.jar;.;libhttpd.jar webProxy
2008-11-03 11:36:17 thread0 [127.0.0.1] : /pacServer => (200) class : "pacServer"
2008-11-03 (月) 23:36:17.281 127.0.0.1 192.168.10.193
~snip~
でも"-jar"とかなんで要らないんだろう?Javaは本当に良く分からないことばかりです。
月曜日, 10月 06, 2008
土曜日, 9月 06, 2008
[Solr] DataImportHandler
Solrのv1.3がそろそろ公開されるか、という段階。で、そのお試しをしている中で、注目なのがDataImportHandler。
データベースからSolrへのデータフィードを簡単にしようというところから始まったようだが、例題にあるようにHTTP経由でのデータ取込みがサポートされており、、、これをうまく拡張利用すれば簡単なロボット機能が作れそう(HTMLタグの削除は簡単そうだし)。
RSSの例題を試すまでの手順をメモ。
仕組みの絵もWikiにありますがかなり考えられたつくりで、

transformerというのを指定すると、例えばDBなりWebから取り込んだデータを、よしなに加工してからSolrにフィードすることができ、そしてこのtransformerに指定する関数は、、1.6系のJavaであればJavascriptなど、別な言語が使えるそうです。至れり尽くせり。
データベースからSolrへのデータフィードを簡単にしようというところから始まったようだが、例題にあるようにHTTP経由でのデータ取込みがサポートされており、、、これをうまく拡張利用すれば簡単なロボット機能が作れそう(HTMLタグの削除は簡単そうだし)。
RSSの例題を試すまでの手順をメモ。
・Solr本体をダウンロードして展開(今はRC2)
・例題用のSchema.xmlなどが入ったexample/example-DIHがあることを確認
・Solr本体のexample/conf以下に、example-DIHディレクトリ内のrss/以下をコピー(上書き)
・exampleのところで"java -jar start.jar"
・(稼動確認)ブラウザから"http://xxx:8983/solr/dataimport"にアクセス
・(取込指示)ブラウザから"http://xxx:8983/solr/dataimport?command=full-import"にアクセス
・(動作確認)ブラウザから"http://xxx:8983/solr/dataimport"にアクセス(statusMessagesが追加されてるハズ)
・(結果確認)ブラウザから"http://xxx:8983/solr/select/?q=NASA&version=2.2&start=0&rows=10&indent=on&hl=on&hl.fl=description"にアクセス(このときNASAで検索した)
・ちなみにdelta-importとすると差分更新ができるみたい
仕組みの絵もWikiにありますがかなり考えられたつくりで、
transformerというのを指定すると、例えばDBなりWebから取り込んだデータを、よしなに加工してからSolrにフィードすることができ、そしてこのtransformerに指定する関数は、、1.6系のJavaであればJavascriptなど、別な言語が使えるそうです。至れり尽くせり。
月曜日, 9月 01, 2008
[Scala] CJKでも十分?(SpanScorer)
SpanScorerというので、確かにCJK利用時のハイライタが改善された。
◆SpanScorerの実行例(○)
D:\scala-2.7.0-final\bin\test>..\scala -classpath .;lucene3\lucene-core-2.4-dev.jar;lucene3\lucene-highlighter-2.4-dev.jar;lucene3\lucene-analyzers-2.4-dev.jar HighlightCJKSpan
このプログラムは酒造で合資の会社である、<B>酒造合資</B>会社の事業所で作成されました
◆QueryScorerの実行例(×)
D:\scala-2.7.0-final\bin\test>..\scala -classpath .;lucene3\lucene-core-2.4-dev.jar;lucene3\lucene-highlighter-2.4-dev.jar;lucene3\lucene-analyzers-2.4-dev.jar HighlightCJKQuery
このプログラムは<B>酒造で合資</B>の会社である、<B>酒造合資</B>会社の事業所で作成されました
Javaが書けないのでScalaで(ソースは以下)。
import org.apache.lucene.analysis._;
import org.apache.lucene.analysis.cjk._;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.highlight._;
import java.io._;
object HighlightCJKSpan {
val CONTENT = "このプログラムは酒造で合資の会社である、酒造合資会社の事業所で作成されました";
val QUERY_STRING = "酒造合資";
val F = "f";
//var analyzer: Analyzer = new NGramAnalyzer(1,3);
var analyzer: Analyzer = new CJKAnalyzer();
def main(args: Array[String]) {
try{
var qp :QueryParser = new QueryParser( F, analyzer );
var query :Query = qp.parse( QUERY_STRING );
//var scorer :Scorer = new QueryScorer( query, F );
var tokenStream :TokenStream = analyzer.tokenStream(F, new StringReader(CONTENT));
var scorer :SpanScorer = new SpanScorer( query, F, new CachingTokenFilter(tokenStream));
// println(tokenStream);
/*
var token :Token = tokenStream.next();
while(token != null){
println(token.termText());
token = tokenStream.next();
}
*/
var h :Highlighter = new Highlighter( scorer );
println( h.getBestFragment( analyzer, F, CONTENT ) );
} catch {
case e:StringIndexOutOfBoundsException => ()
case e:Exception => {
e.printStackTrace
}
} finally {
// println("FINALLY");
}
}
}
nagaShimaさんのページを参考にさせて頂きました。
◆SpanScorerの実行例(○)
D:\scala-2.7.0-final\bin\test>..\scala -classpath .;lucene3\lucene-core-2.4-dev.jar;lucene3\lucene-highlighter-2.4-dev.jar;lucene3\lucene-analyzers-2.4-dev.jar HighlightCJKSpan
このプログラムは酒造で合資の会社である、<B>酒造合資</B>会社の事業所で作成されました
◆QueryScorerの実行例(×)
D:\scala-2.7.0-final\bin\test>..\scala -classpath .;lucene3\lucene-core-2.4-dev.jar;lucene3\lucene-highlighter-2.4-dev.jar;lucene3\lucene-analyzers-2.4-dev.jar HighlightCJKQuery
このプログラムは<B>酒造で合資</B>の会社である、<B>酒造合資</B>会社の事業所で作成されました
Javaが書けないのでScalaで(ソースは以下)。
import org.apache.lucene.analysis._;
import org.apache.lucene.analysis.cjk._;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.highlight._;
import java.io._;
object HighlightCJKSpan {
val CONTENT = "このプログラムは酒造で合資の会社である、酒造合資会社の事業所で作成されました";
val QUERY_STRING = "酒造合資";
val F = "f";
//var analyzer: Analyzer = new NGramAnalyzer(1,3);
var analyzer: Analyzer = new CJKAnalyzer();
def main(args: Array[String]) {
try{
var qp :QueryParser = new QueryParser( F, analyzer );
var query :Query = qp.parse( QUERY_STRING );
//var scorer :Scorer = new QueryScorer( query, F );
var tokenStream :TokenStream = analyzer.tokenStream(F, new StringReader(CONTENT));
var scorer :SpanScorer = new SpanScorer( query, F, new CachingTokenFilter(tokenStream));
// println(tokenStream);
/*
var token :Token = tokenStream.next();
while(token != null){
println(token.termText());
token = tokenStream.next();
}
*/
var h :Highlighter = new Highlighter( scorer );
println( h.getBestFragment( analyzer, F, CONTENT ) );
} catch {
case e:StringIndexOutOfBoundsException => ()
case e:Exception => {
e.printStackTrace
}
} finally {
// println("FINALLY");
}
}
}
nagaShimaさんのページを参考にさせて頂きました。
金曜日, 8月 29, 2008
[Scala] Luceneのハイライタ(NGramTokenizer)
NGramTokenizerをScalaでやってみました。
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.ngram.NGramTokenizer;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.highlight.Highlighter;
import org.apache.lucene.search.highlight.Scorer;
import org.apache.lucene.search.highlight.QueryScorer;
import org.apache.lucene.search.highlight.TextFragment;
import java.io.Reader;
object HighlightRunner {
val CONTENT = "東京特許許可局";
val QUERY_STRING = "許可";
val F = "f";
var analyzer: Analyzer = new NGramAnalyzer(1,3);
def main(args: Array[String]) {
try{
var qp :QueryParser = new QueryParser( F, analyzer );
var query :Query = qp.parse( QUERY_STRING );
var scorer :Scorer = new QueryScorer( query, F );
var h :Highlighter = new Highlighter( scorer );
println( h.getBestFragment( analyzer, F, CONTENT ) );
} catch {
case e:StringIndexOutOfBoundsException => ()
case e:Exception => {
e.printStackTrace
}
} finally {
// println("FINALLY");
}
}
}
// http://blog.goo.ne.jp/13th-floor/e/f694fdb1319134b40e4dee5ed8c15a92
class NGramAnalyzer(minGram:Int, maxGram:Int) extends Analyzer {
def tokenStream(fieldName:java.lang.String, reader:java.io.Reader): org.apache.lucene.analysis.TokenStream =
new NGramTokenizer(reader, minGram, maxGram);
}
木曜日, 8月 28, 2008
[Scala] Luceneのハイライタ(N-gram×)
全文検索エンジンLuceneの実験。
公開されていた例(≒N-gramでHighlighterがうまく動かない)をScalaでリライトしてみた。
- - - -
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.cjk.CJKAnalyzer;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.highlight.Highlighter;
import org.apache.lucene.search.highlight.Scorer;
import org.apache.lucene.search.highlight.QueryScorer;
import org.apache.lucene.search.highlight.TextFragment;
object HighlightRunner {
val CONTENT = "ひふみひふみひふみひふみひひふひふみろひふみろ";
val QUERY_STRING = "ひふみひふみ";
val F = "f";
var analyzer : Analyzer = new CJKAnalyzer();
def main(args: Array[String]) {
try{
var qp :QueryParser = new QueryParser( F, analyzer );
var query :Query = qp.parse( QUERY_STRING );
var scorer :Scorer = new QueryScorer( query, F );
var h :Highlighter = new Highlighter( scorer );
println( h.getBestFragment( analyzer, F, CONTENT ) );
} catch {
case e:StringIndexOutOfBoundsException => ()
case e:Exception => {
e.printStackTrace
}
} finally {
}
}
}
公開されていた例(≒N-gramでHighlighterがうまく動かない)をScalaでリライトしてみた。
- - - -
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.cjk.CJKAnalyzer;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.highlight.Highlighter;
import org.apache.lucene.search.highlight.Scorer;
import org.apache.lucene.search.highlight.QueryScorer;
import org.apache.lucene.search.highlight.TextFragment;
object HighlightRunner {
val CONTENT = "ひふみひふみひふみひふみひひふひふみろひふみろ";
val QUERY_STRING = "ひふみひふみ";
val F = "f";
var analyzer : Analyzer = new CJKAnalyzer();
def main(args: Array[String]) {
try{
var qp :QueryParser = new QueryParser( F, analyzer );
var query :Query = qp.parse( QUERY_STRING );
var scorer :Scorer = new QueryScorer( query, F );
var h :Highlighter = new Highlighter( scorer );
println( h.getBestFragment( analyzer, F, CONTENT ) );
} catch {
case e:StringIndexOutOfBoundsException => ()
case e:Exception => {
e.printStackTrace
}
} finally {
}
}
}
木曜日, 8月 21, 2008
[linux] memcachedをsnmpで
AgentXというプロトコルを使うと、既存のsnmpdにアドオンで監視/モニタ対象を増やすことが出来ます。
この方向で、memcachedもAgentXをしゃべられるようにしよう、というpatchがありました。
運用観点でも進歩してくると、ありがたいです。
この方向で、memcachedもAgentXをしゃべられるようにしよう、というpatchがありました。
運用観点でも進歩してくると、ありがたいです。
火曜日, 8月 12, 2008
[linux] DTrace
OpenSolarisで話題のDTrace(PostgreSQLでもサポート)は、いまやLinuxでも使えるんですね(DTrace for Linux)。memcachedもv1.2.6からサポートと書いてあることですし、ぜひ使ってみたいものです。
土曜日, 8月 09, 2008
水曜日, 7月 16, 2008
火曜日, 7月 08, 2008
[Linux] loadが真夜中に急上昇?
木曜日, 7月 03, 2008
[Linux] pg_osmem.py
以前fincoreを使うと、特定のファイルデータがOSキャッシュ上にどれくらい載っているかが調べられることをメモしたが、以下pg_osmem.pyというコマンドが投稿されていた。
出力例などが見られないのでなんともですが(ちなみに、これで使われているpsycopg2というDBコネクタも性能がよいものであるとのことです)。
via kwout
月曜日, 6月 30, 2008
木曜日, 6月 26, 2008
月曜日, 6月 16, 2008
[Linux] unfuffle
unfuddleという無料のSVNリポジトリを初めて使ってみた。ただリポジトリを無料でインターネットに公開しただけじゃなく、UIとしてとても優れいていて使いやすそう。
普通のSVNなんだけど、以下コマンドラインでの使い方。
[f0054@divers-high ~]$ svn checkout http://tf0054.unfuddle.com/svn/tf0054_mm/
認証領域: <http://tf0054.unfuddle.com:80> Unfuddle Subversion Repository
'tf0054' のパスワード:
リビジョン 0 をチェックアウトしました。
[tf0054@divers-high ~]$ cd tf0054_mm/
[tf0054@divers-high tf0054_mm]$ ls -la
合計 24
drwxrwxr-x 3 tf0054 tf0054 4096 6月 16 01:50 .
drwxr-xr-x 28 tf0054 tf0054 16384 6月 16 01:50 ..
drwxrwxr-x 6 tf0054 tf0054 4096 6月 16 01:50 .svn
[tf0054@divers-high tf0054_mm]$ cp -pir ~/btmail/post_bgnote.pl ./
[tf0054@divers-high tf0054_mm]$ ls -la
合計 28
drwxrwxr-x 3 tf0054 tf0054 4096 6月 16 01:50 .
drwxr-xr-x 28 tf0054 tf0054 16384 6月 16 01:50 ..
drwxrwxr-x 6 tf0054 tf0054 4096 6月 16 01:50 .svn
-rwxr-xr-x 1 tf0054 tf0054 3237 6月 16 01:23 post_bgnote.pl
[tf0054@divers-high tf0054_mm]$ svn add post_bgnote.pl
A post_bgnote.pl
[tf0054@divers-high tf0054_mm]$ svn commit -m 'First Add'
[tf0054@divers-high tf0054_mm]$
ちなみに、UTF8で入れるときちんと日本語のコメントも入りました。
via kwout
[f0054@divers-high ~]$ svn checkout http://tf0054.unfuddle.com/svn/tf0054_mm/
認証領域: <http://tf0054.unfuddle.com:80> Unfuddle Subversion Repository
'tf0054' のパスワード:
リビジョン 0 をチェックアウトしました。
[tf0054@divers-high ~]$ cd tf0054_mm/
[tf0054@divers-high tf0054_mm]$ ls -la
合計 24
drwxrwxr-x 3 tf0054 tf0054 4096 6月 16 01:50 .
drwxr-xr-x 28 tf0054 tf0054 16384 6月 16 01:50 ..
drwxrwxr-x 6 tf0054 tf0054 4096 6月 16 01:50 .svn
[tf0054@divers-high tf0054_mm]$ cp -pir ~/btmail/post_bgnote.pl ./
[tf0054@divers-high tf0054_mm]$ ls -la
合計 28
drwxrwxr-x 3 tf0054 tf0054 4096 6月 16 01:50 .
drwxr-xr-x 28 tf0054 tf0054 16384 6月 16 01:50 ..
drwxrwxr-x 6 tf0054 tf0054 4096 6月 16 01:50 .svn
-rwxr-xr-x 1 tf0054 tf0054 3237 6月 16 01:23 post_bgnote.pl
[tf0054@divers-high tf0054_mm]$ svn add post_bgnote.pl
A post_bgnote.pl
[tf0054@divers-high tf0054_mm]$ svn commit -m 'First Add'
[tf0054@divers-high tf0054_mm]$
ちなみに、UTF8で入れるときちんと日本語のコメントも入りました。
土曜日, 6月 14, 2008
[Linux] 添付可能なメール送信"コマンド"
木曜日, 6月 05, 2008
[Linux] PostgreSQL+LVM
月曜日, 5月 26, 2008
[Linux] Selenium GRID example
Selenium GRIDのexampleを動かしてみた。
これでexamples\java\src\com\thoughtworks\selenium\grid\examples\java以下のファイルをいぢれば、やりたいテストができる、、のかな。
あと、、Proxyを通してテストをさせる(RCさんの上位にProxyを置く)にはどうするのだろう。setproxyタスク(?)でもうまく行かないし。。
D:\selenium-grid-1.0\examples\java>ant run-in-sequence
これでexamples\java\src\com\thoughtworks\selenium\grid\examples\java以下のファイルをいぢれば、やりたいテストができる、、のかな。
あと、、Proxyを通してテストをさせる(RCさんの上位にProxyを置く)にはどうするのだろう。setproxyタスク(?)でもうまく行かないし。。
<target ... >
<setproxy proxyhost="xxx.digipepper.com" proxyport="8080"/>
日曜日, 5月 25, 2008
[Linux] Selenium HTMLSuite
テスト自体はテストケースと呼ばれ、作ったいくつかのテストケースをまとめて実行させるため、それらのリンクを書いたやつのことをテストスイートというらしい。
その後者、スイートを自動生成したり、ブラウザを使い分けて実行したりすることができるJavaライブラリとしてのエクステンションがあったのでメモ。
その後者、スイートを自動生成したり、ブラウザを使い分けて実行したりすることができるJavaライブラリとしてのエクステンションがあったのでメモ。
|
[Linux] Selenium GRID
自動運転のピアノなごとく、ブラウザを操作して各種テストを行うSeluniumですが、複数のブラウザを同時に操作してテスト、するにはこのミドルでやるそうです。
で、ちょっとやってみたとき、先に入れていたFirefox3(RC1)をうまく操作してくれなかった。。でIEを使うようにしたら無事動いた(と思う)。変更はbuild.xmlに以下。
D:\selenium-grid-1.0>diff build.xml.f build.xml昨今AJAXなサイトが増えてきており、、、JMeterでは少しつらくなってきた気がしています。無論がんばってシナリオを作ればよいのですが。
10c10
< <property name="browser" value="*chrome" />
---
> <property name="browser" value="*iehta" />
75c75
< <property name="environment" value="*chrome"/>
---
> <property name="environment" value="*iehta"/>
D:\selenium-grid-1.0>
土曜日, 5月 24, 2008
[Flash] APE
Flashの物理エンジンというものがあるらしい。Flashコンテンツって自然界の動きをシミュレートしてみせることでかっこよくなるのだと思うので、その意味ではこんなのが大事なのだろうと思う。
月曜日, 5月 19, 2008
水曜日, 5月 14, 2008
[Life] wgetをproxy経由で
Windowsでwgetを使うとき、PROXY指定をしたかったら以下のように。
意外にすぐわからなくなるのでメモ。
set http_proxy=squid.xxx.com:8080
意外にすぐわからなくなるのでメモ。
土曜日, 5月 10, 2008
[Life] DISQUS
ブログのコメント管理だけを切り出したサービス。コメントされたらメールがきて、それに返信したらスレッドに追記されるとか。。。
日本語コメントはきちんと見えることを確認!
が、(やはりといえばそうだが)返信は日本語が通りませんでした。。
プロジェクト管理で使っているMantisもそうなのですが、メールでコメントを返信できるととっても便利なので、、とても惜しい!です。
が、(やはりといえばそうだが)返信は日本語が通りませんでした。。
プロジェクト管理で使っているMantisもそうなのですが、メールでコメントを返信できるととっても便利なので、、とても惜しい!です。
金曜日, 5月 02, 2008
水曜日, 4月 30, 2008
[Linux] bdbのダンプ
以外に忘れるのでメモベースで。
[tf0054@divers-high bird]$ db_dump -p tiedbfile
VERSION=3
format=print
type=hash
db_pagesize=4096
HEADER=END
/r/r/r.png
204,222
DATA=END
[tf0054@divers-high bird]$
月曜日, 4月 28, 2008
[PostgreSQL] PgQ続き(PerlでConsumer)
キューに入ったジョブを処理するプログラムを作りたいのだが、Pythonのフレームワークが提供されているのみでなかなか(Python以外で)書くことが難しい。何をどう呼んだら登録されるのか分からないし。。。
なので、大枠を例のままPythonを使って動かし、肝心の処理関数(通常はProcess_batch())だけをPerlで記述するためのTIPS。
(Inline::Pythonのおかげで)上のプログラムでは各イベントを処理する部分だけ、procEvent()関数に切り出せていると思うので、これを書き換えればよい(=Perlで処理が書ける)です。
一部設定ファイルの指定は配列で渡さないとだめなのですが、Perlから渡すとなぜか上手くいかないので内部で宣言してしまっていますが、、、また調べます。
初めて使いますが、Inline::Pythonって便利ですね。これだあればアドオンモジュールをPythonで書かなくてはならない某商用アプリなんかも倒せそう。
なので、大枠を例のままPythonを使って動かし、肝心の処理関数(通常はProcess_batch())だけをPerlで記述するためのTIPS。
#!/usr/bin/perl
use Data::Dumper;
use Sys::Syslog;
use Inline Python => <<'END_OF_PYTHON_CODE';
import sys, os, pgq, skytools
import syslog ,time
class zConsumer(pgq.Consumer):
def __init__(self, service_name, db_name):
self.procEvent = perl.procEvent;
pgq.Consumer.__init__(self, service_name, db_name, ["/tmp/var/mqueue/consumer.ini"])
def process_batch(self, src_db, batch_id, ev_list):
for ev in ev_list:
d = ev.data
self.log.debug ("event: %s | type: %s | extra1: %s" % (d, ev.type, ev.extra1))
if not self.procEvent(ev):
ev.tag_retry()
else:
ev.tag_done()
END_OF_PYTHON_CODE
my $objPgq = zConsumer->new("mqueue_consumer","src_db");
#print Dumper($objPgq);
$objPgq->start();
# イベント処理関数は、この関数を差し替えることでPerlで書けます
sub procEvent{
openlog(__FILE__, 'cons,pid', 'local4');
syslog('debug', 'this is Inline test');
closelog();
print Dumper(shift);
}
(Inline::Pythonのおかげで)上のプログラムでは各イベントを処理する部分だけ、procEvent()関数に切り出せていると思うので、これを書き換えればよい(=Perlで処理が書ける)です。
一部設定ファイルの指定は配列で渡さないとだめなのですが、Perlから渡すとなぜか上手くいかないので内部で宣言してしまっていますが、、、また調べます。
初めて使いますが、Inline::Pythonって便利ですね。これだあればアドオンモジュールをPythonで書かなくてはならない某商用アプリなんかも倒せそう。
日曜日, 4月 27, 2008
[PostgreSQL] PgQ続き(メンテナンス)
PgQでは、各キューそれぞれに3つのイベント格納用テーブルが用意してあり、それらを順繰りに使うことでバキューム対象となるデッドタプルが増えたテーブルをキュー処理に使わないようにし、ディスクIOを減らしている(らしい)。
tickerって5分に一度メンテナンスをしているが、上記のようなことをやっていたのですね。関数(PostgreSQLのPgQを仕込んだデータベースに格納された関数)が、下記が順に呼ばれています。
・maint_rotate_tables_step1(実際のローテートを行う)
・maint_rotate_tables_step2(その際にTXを付け替える)
・maint_tables_to_vacuum(バキューム対象テーブルをリストする)
ちなみに、ソース的には実際のバキューム処理はskytools-2.1.6/python/pgq/maint.pyに含まれています(あとTXってのはPgQ独自のトランザクションNo?のことだと思います)。
tickerって5分に一度メンテナンスをしているが、上記のようなことをやっていたのですね。関数(PostgreSQLのPgQを仕込んだデータベースに格納された関数)が、下記が順に呼ばれています。
・maint_rotate_tables_step1(実際のローテートを行う)
・maint_rotate_tables_step2(その際にTXを付け替える)
・maint_tables_to_vacuum(バキューム対象テーブルをリストする)
ちなみに、ソース的には実際のバキューム処理はskytools-2.1.6/python/pgq/maint.pyに含まれています(あとTXってのはPgQ独自のトランザクションNo?のことだと思います)。
土曜日, 4月 26, 2008
[PostgreSQL] PgQ続き(リトライ他)
ジョブの戻し方おいて、リトライキューやフェイルキューにちゃんと入るかの実験、、をしていたらSkyTools(v2.1.6)にバグ発見(但しもうCVSでは修正されていました)。
こけさせるconsumer.pyは以下のようなやつで。
これによりリトライキューに入ることを確認。
ちなみに、consumerが稼動した最終時刻をみるためには以下。
というか日本語でも英語でも、Skytools全体がそうですが、特にconsumerのサンプルがまったくなくて困惑です(tag_retryなんてものクラス説明から見つけた)。
こけさせるconsumer.pyは以下のようなやつで。
#!/usr/bin/python
import sys, os, pgq, skytools
import syslog
class Mailer(pgq.Consumer):
def sendWelcomeMail(self, params):
syslog.openlog("skycon")
syslog.syslog(params)
syslog.closelog()
return False
def process_batch(self, src_db, batch_id, ev_list):
for ev in ev_list:
d = ev.data
self.log.debug ("event: %s | type: %s | extra1: %s" % (d, ev.type, ev.extra1))
if not self.sendWelcomeMail(d):
ev.tag_retry()
else:
ev.tag_done()
if __name__ == '__main__':
script = Mailer("mailer_daemon","src_db",sys.argv[1:])
script.start()
これによりリトライキューに入ることを確認。
tf0054=# select * from pgq.retry_queue;
-[ RECORD 1 ]--+------------------------------
ev_retry_after | 2008-04-26 01:30:40.307409+09
ev_id | 15
ev_time | 2008-04-26 01:15:17.024847+09
ev_txid |
ev_owner | 1
ev_retry | 1
ev_type | welcome_email
ev_data | root@gmail.com
ev_extra1 |
ev_extra2 |
ev_extra3 |
ev_extra4 |
tf0054=#
ちなみに、consumerが稼動した最終時刻をみるためには以下。
tf0054=# select * from pgq.subscription;
-[ RECORD 1 ]-+------------------------------
sub_id | 1
sub_queue | 1
sub_consumer | 1
sub_last_tick | 2118
sub_active | 2008-04-26 06:38:03.550572+09
sub_batch |
sub_next_tick |
tf0054=#
というか日本語でも英語でも、Skytools全体がそうですが、特にconsumerのサンプルがまったくなくて困惑です(tag_retryなんてものクラス説明から見つけた)。
金曜日, 4月 25, 2008
[PostgreSQL] PgQ続き(設定ファイル)
それぞれpgqadm.py用と、consumer.py(キュー処理用の準備すべきプログラム)用の設定ファイルは以下のとおりでやってみます(昨日の続き)。
pgqadm.ini
consumer.ini
pgqadm.ini
[pgqadm]
job_name = ticker_test
db = dbname=tf0054 port=5432 host=127.0.0.1
# how often to run maintenance [minutes]
maint_delay_min = 5
# how often to check for activity [secs]
loop_delay = 0.1
logfile = /tmp/var/log/%(job_name)s.log
pidfile = /tmp/var/pid/%(job_name)s.pid
use_skylog = 0
consumer.ini
[mailer_daemon]
job_name = mailer_daemon
src_db = dbname=tf0054
pgq_queue_name = mailer
logfile = /tmp/var/log/%(job_name)s.log
pidfile = /tmp/var/pid/%(job_name)s.pid
木曜日, 4月 24, 2008
[PostgreSQL] PgQ
いまいち使い方が分からなかったPgQ(SkyToolsの一部であるジョブキューの仕組み)のお試しが出来たのでメモ.やることとしては,
と言った感じ.こちらのサイトを参考にしたが,トリガを作ってイベント登録をさせる仕組みが面倒だったので直接インサートして実験.
また,サンプルのconsumerデーモンのPythonソースが一部実装されてないので,以下な感じで補完することが必要。
これを以下のとおり実行して、
syslogにデータでるところまで確認できました.また,使える関数などはこちらで見られます.あれ?でも,,,
- pgqadm.pyを使うためにPYTHONPATH環境変数をexport(skytools/lib/ython2.4/site-packages)
- 適用するデータベースを作る(ここでは"XXX"とする)
- pgplsqlがそのデータベースで使えるか確認(pg_languageカタログ/無いならcreatelang)
- share/skytools以下のsqlスクリプトを流す(txid.sql>pgq_ext.sql>pgq.sqlの順?)
- キューを"select * from pgq.create_queue(’mailer’)"で作成
- psqlで接続し"select * from pgq.queue"で確認
- tickerデーモンを起動する(例えば"../bin/pgqadm.py ./pgqadm.ini ticker -d")
- consumerデーモンをpythonで作る(※下にサンプルソースを掲示)
- consumerデーモンを起動する(例えば"../var/consumer.py consumer.ini -v")
- キューに入れてみる(入れるものをイベントと言う.例えば"select pgq.insert_event('mailer','welcome_email','tf0054@gmail.com')")
と言った感じ.こちらのサイトを参考にしたが,トリガを作ってイベント登録をさせる仕組みが面倒だったので直接インサートして実験.
また,サンプルのconsumerデーモンのPythonソースが一部実装されてないので,以下な感じで補完することが必要。
#!/usr/bin/python
import sys, os, pgq, skytools
import syslog
class Mailer(pgq.Consumer):
def sendWelcomeMail(self, params):
syslog.openlog("skycon")
syslog.syslog(params)
syslog.closelog()
return True
def process_batch(self, src_db, batch_id, ev_list):
for ev in ev_list:
d = ev.data
self.log.debug ("event : %s | type : %s | inserted by : %s" % (d, ev.type, ev.extra1))
if not self.sendWelcomeMail(d):
sys.exit(1)
ev.tag_done()
if __name__ == '__main__':
script = Mailer("mailer_daemon","src_db",sys.argv[1:])
script.start()
これを以下のとおり実行して、
./consumer.py ../etc/consumer.ini &
syslogにデータでるところまで確認できました.また,使える関数などはこちらで見られます.あれ?でも,,,
- tickerは何をしてくれるんだっけ?
- pgqadmのinstallってしてなかったけどいいの?
土曜日, 4月 12, 2008
木曜日, 4月 10, 2008
[Linux] unexpected zero page
レンタルサーバにZABBIXを入れてリソースを検証こめて見ているのですが、障害によるリブートがあったらしく、ZABBIX_SERVERが起動しなくなった。ログを見ていると、
PosrgreSQLを使っているので以下コマンドを実行して解消。
22439:20080410:024033 Query::select min(clock) from history_uint where itemid=18450
22439:20080410:024033 Query failed:PGRES_FATAL_ERROR:ERROR: index "history_uint_1" contains unexpected zero page at block 13758
HINT: Please REINDEX it.
PosrgreSQLを使っているので以下コマンドを実行して解消。
zabbix=> reindex index history_uint_1;
REINDEX
zabbix=> \q
火曜日, 4月 08, 2008
[Linux] amebloもですね
アメブロでもリファラでの画像閲覧禁止がなされているんですね。
確かに直リンクなどは論外ですが、しかしgoogleリーダなどから写真が見られないのはちょっと。。ということでY!同様にリファラプロキシで対応。
Y!とちがって普通に組むとgzip圧縮応答されたり、HOSTヘッダによるリダイレクトが入ったりと、いくつかはまりました。。
確かに直リンクなどは論外ですが、しかしgoogleリーダなどから写真が見られないのはちょっと。。ということでY!同様にリファラプロキシで対応。
Y!とちがって普通に組むとgzip圧縮応答されたり、HOSTヘッダによるリダイレクトが入ったりと、いくつかはまりました。。
土曜日, 4月 05, 2008
[Linux] ebb
libevを使った高速httpd。Rubyな香りがしていますが、これ単体で使うことができそうです。
nginxやlighttpdと比較してどうなのでしょう。
nginxやlighttpdと比較してどうなのでしょう。
金曜日, 4月 04, 2008
月曜日, 3月 31, 2008
[Linux] ブラウザの挙動
サイトの閲覧快適度(ユーザがさくさく感を感じる)を上げるには、amazonなどでもやられているように、主に画像部品は複数のドメインに分割するのがよい。
こうすることで、ブラウザはドメイン単位(これが同じIPのホストにアクセスしてもよい)に2本は並列でファイルをとりに行ってくれるため。ただし3ドメイン以上はやっても無駄(セッションは同時に6本まで、という制限もあるため)。
さらに注意としては、Javascriptファイルはシーケンシャルに取る仕様である(IEは確認)ので、".js"を分けるときはほどほどに。
こうすることで、ブラウザはドメイン単位(これが同じIPのホストにアクセスしてもよい)に2本は並列でファイルをとりに行ってくれるため。ただし3ドメイン以上はやっても無駄(セッションは同時に6本まで、という制限もあるため)。
さらに注意としては、Javascriptファイルはシーケンシャルに取る仕様である(IEは確認)ので、".js"を分けるときはほどほどに。
日曜日, 3月 30, 2008
[Linux] サイト設定をProxyでテスト
mod_proxyを用いて、apacheにプロキシ機能を組み込んでおく。
このあとで、(例えば)以下のようなLocationディレクティブを読み込ませておき、ブラウザでこのプロキシを通してr25.jpを見ると、
オリジナルのレスポンスに追加する形で、Expireヘッダが返されることが確認できる。
Location便利。
このあとで、(例えば)以下のようなLocationディレクティブを読み込ませておき、ブラウザでこのプロキシを通してr25.jpを見ると、
<LocationMatch "(.*)css.r25.jp/common/(.*)">
ExpiresActive on
ExpiresDefault "access plus 4 weeks"
</LocationMatch>
オリジナルのレスポンスに追加する形で、Expireヘッダが返されることが確認できる。
Location便利。
金曜日, 3月 28, 2008
[Linux] AOL Pagetest
ブラウザでのサイトアクセスを可視化してくれるツール。"IBM Page Detailer"というほうが有名だけど、"AOL Pagetest"のほうが扱いやすい(GIF画像としてエクスポートできること、ブラウザでのページレンダリング開始のタイミングも表示してくれる(緑の縦棒)こと等)。
月曜日, 3月 24, 2008
[Linux] nginxのServerヘッダとか
nginxのデフォルトなHTTPレスポンスヘッダには、"Server"ヘッダがバージョン付きで表示されているので、セキュリティホールになりかねない。
これはしかし、ソースを変えなくともngx_http_headers_moduleのディレクティブ指定で消すことができる(正確には"nginix"とだけ出してバージョンを消す)。
ちなみに、404ページでもデフォルト(404ページの指定無し)だとバージョンが表示されてしまうのでキチンと自分用のページを指定して置くことが必要。
HTTP/1.1 200 OK
Server: nginx/0.5.35
・・以下略・・
これはしかし、ソースを変えなくともngx_http_headers_moduleのディレクティブ指定で消すことができる(正確には"nginix"とだけ出してバージョンを消す)。
server {
listen 8090;
server_tokens off;
server_name divershigh;
#charset koi8-r;
charset utf-8;
・・以下略・・
ちなみに、404ページでもデフォルト(404ページの指定無し)だとバージョンが表示されてしまうのでキチンと自分用のページを指定して置くことが必要。
日曜日, 3月 23, 2008
[Linux] SlideShare
SlideShareというパワポ共有サイト(?)では、そのバックヤードにAWS(というかS3)が使われている。
同サイトではブラウザ上でのスライド表示にFlashを使っているが、こいつは裏でS3に対し一枚づつデータを取得しているようだ(LiveHeadersで確認)。
同サイトでは、PPT自体のダウンロードもS3から行われるようになっている、、が、ここにはスライドの公開非公開をユーザ側で操作できるよう、一段の制御が掛かっている(ユーザ側でPublic指定していれば、SlideShareのサイトで正しくS3へのリダイレクトを行ってくれる、Private指定ならこのリダイレクトが行われずダウンロード不可(ファイル名と認証キーを混ぜ込んだSHA1キーを正しく持ってゆかないとS3的に通してくれない≒他のPPTでURL作ってファイル名を変えてもダメ))。
上手く使ってますな(丸ごとダウンロードは出来なくても上記みたいに1枚づつならswfで取れるけどね)。
同サイトではブラウザ上でのスライド表示にFlashを使っているが、こいつは裏でS3に対し一枚づつデータを取得しているようだ(LiveHeadersで確認)。
http://s3.amazonaws.com/slideshare/high-performance-web-pages-20-new-best-practices-120577522992998-3-slide-1.swf
http://s3.amazonaws.com/slideshare/high-performance-web-pages-20-new-best-practices-120577522992998-3-slide-2.swf
・・・
http://s3.amazonaws.com/slideshare/high-performance-web-pages-20-new-best-practices-120577522992998-3-slide-76.swf
同サイトでは、PPT自体のダウンロードもS3から行われるようになっている、、が、ここにはスライドの公開非公開をユーザ側で操作できるよう、一段の制御が掛かっている(ユーザ側でPublic指定していれば、SlideShareのサイトで正しくS3へのリダイレクトを行ってくれる、Private指定ならこのリダイレクトが行われずダウンロード不可(ファイル名と認証キーを混ぜ込んだSHA1キーを正しく持ってゆかないとS3的に通してくれない≒他のPPTでURL作ってファイル名を変えてもダメ))。
上手く使ってますな(丸ごとダウンロードは出来なくても上記みたいに1枚づつならswfで取れるけどね)。
木曜日, 3月 20, 2008
月曜日, 3月 17, 2008
[Linux] Tomcatを本番で使うには
Tomcatは、かなり素人なので、チューニングの情報が少なくて困ります。
でも、その中でも当然やるべきなものがいくつかありました。
$TOMCAT_HOME/conf/web.xml
・JspServletの"development "は"false"にするべし(Trueにしちゃうと毎回更新確認する)
・checkIntervalはまぁ"5"程度に(5秒に一度更新確認)
元ネタはこちら.
でも、その中でも当然やるべきなものがいくつかありました。
$TOMCAT_HOME/conf/web.xml
・JspServletの"development "は"false"にするべし(Trueにしちゃうと毎回更新確認する)
・checkIntervalはまぁ"5"程度に(5秒に一度更新確認)
元ネタはこちら.
金曜日, 3月 14, 2008
[Linux] sharedance
memcachedは結構汎用的な使われた方を意図しているようですが、ウェブサイトのセッション管理用メモリDBでsharedanceというのがあるそうです。名前のセンスがよいです。
PHPのAPIを標準搭載していますが、、今みたら2006年が最終更新なのですね。。。解説ページはこちらを参照。
libevent回りを調べていて見つけました。
PHPのAPIを標準搭載していますが、、今みたら2006年が最終更新なのですね。。。解説ページはこちらを参照。
libevent回りを調べていて見つけました。
月曜日, 3月 10, 2008
[Linux] tethereal
tetherealというパケットキャプチャ解析ミドルのCUIがあり、これを使うことで実はPV分析なんかも上手くすると出来るハズです(今更ですが"I, newbie"さんのブログを見てこんなことを考えていたのを思い出しました。RTメトリクス高いですし)。
[Amazon] images-amazon.com
アマゾンで買い物をしていて、ブラウザのステータスバーに出ているドメイン名が気になった(ec2.images-amazon.com)。ec2はクラウドをバックに使ったシステムであると公にしている(それはそれですごいけど)のだろうが、それより驚くべきはここに当てられるURL。
aaugh.comによると、このURLをいろいろいじることで特価マークを出したり消したり、画像サイズを変更したり出来るらしい。さすが。
まぁ単発で見るとたいしたRESTではないけれど、あれだけの商品数を捌いていることを考えると・・・。
aaugh.comによると、このURLをいろいろいじることで特価マークを出したり消したり、画像サイズを変更したり出来るらしい。さすが。
まぁ単発で見るとたいしたRESTではないけれど、あれだけの商品数を捌いていることを考えると・・・。
日曜日, 3月 09, 2008
[Linux] Y!で書かれたblogは
金曜日, 3月 07, 2008
[Linux] LDAPの認証エラー
以下が出て、原因がいまいち検索しても見当たらなかったが、解決したのでメモ。
pam_check_host_attrを使っているのに、当該ユーザのhostアトリビュートに記述が無かったことが原因。
Invalid credentials
pam_check_host_attrを使っているのに、当該ユーザのhostアトリビュートに記述が無かったことが原因。
木曜日, 3月 06, 2008
[Linux] SquidGuard
Squidで、配下の人に対して禁止URLを設定する場合、SquidGuardというのを使うのが一般的なんですね。。知りませんでした(設定で無理にやったことはあります)。
月曜日, 2月 25, 2008
[Linux] mod_rewrite
supercacheという、普通にCGIの結果をユーザに返すだけでなく静的HTMLにもしておき、後続の(いくつかの)同じ情報へのアクセスをそれで返してしまおう、というのがあります。
これはmod_rewriteでやるので良いのですが、更新日時を見てエクスパイヤさせたい(HTMLはあるけどあえてCGIに回して更新させたい)場合、やはりRwriteMapのprgを使うが良いのだろうか。。思案中。
ちなみに、RewriteMapで外部プログラムを使用する場合はRewriteLockでロックファイルを指定する必要があるらしいので注意。
これはmod_rewriteでやるので良いのですが、更新日時を見てエクスパイヤさせたい(HTMLはあるけどあえてCGIに回して更新させたい)場合、やはりRwriteMapのprgを使うが良いのだろうか。。思案中。
ちなみに、RewriteMapで外部プログラムを使用する場合はRewriteLockでロックファイルを指定する必要があるらしいので注意。
日曜日, 2月 24, 2008
[Linux] mMesure
mMesureとは、チューニングポイントをアドバイスしてくれる機能が付いたMySQLのモニタリングツール(WebGUI)。有効性はともかくとして、PostgreSQLでもこの手のツールがそろそろ(市場として)必要になってくると思います。
土曜日, 2月 23, 2008
[Linux] Workflowエンジン
金曜日, 2月 22, 2008
[Linux] scpだけ許すには
scpの実体はsshらしく、制限するにはバイナリとして入れ替えるしかなさそう。これをする場合はscponlyというのや、rsshというのが候補。
別の方法としてOpenSSHとして当該ユーザの実行可能コマンドを制限してしまえば、まぁ良いといえばよいような。Matchという全体オプションでやるか、個人のAuthorized_keys内でもcommandオプションで制限できるのでこれを使うか(でもこれはユーザが自発的に書き換え可能だからセキュリティ的には微妙)。
別の方法としてOpenSSHとして当該ユーザの実行可能コマンドを制限してしまえば、まぁ良いといえばよいような。Matchという全体オプションでやるか、個人のAuthorized_keys内でもcommandオプションで制限できるのでこれを使うか(でもこれはユーザが自発的に書き換え可能だからセキュリティ的には微妙)。
木曜日, 2月 21, 2008
[Linux] ngnixの処理指定
ぜんぜん良く分かっていないが、RTSIGというのはlibrtを使った非同期IO機構であり、これとEPOLLは並列な様子(ngnixのソース内の分岐がそうなっているように見えるので)。
というか、事実実験している環境ではobjs/Makefileの中でもrtsig、epoll、sendfileをリンクする指定になっていた。
librtを使った非同期処理であればコンテキストスイッチが少なくなり(IO多重であるepollよりも)速い、とKLabさんの資料で読んだのだけど、どういう関係で実際のところどうなんだろう。
ngx_event_init_conf(ngx_cycle_t *cycle, void *conf)
{
ngx_event_conf_t *ecf = conf;
#if (NGX_HAVE_EPOLL) && !(NGX_TEST_BUILD_EPOLL)
int fd;
#endif
#if (NGX_HAVE_RTSIG)
ngx_uint_t rtsig;
ngx_core_conf_t *ccf;
#endif
ngx_int_t i, connections;
ngx_module_t *module;
ngx_event_module_t *event_module;
~snip~
というか、事実実験している環境ではobjs/Makefileの中でもrtsig、epoll、sendfileをリンクする指定になっていた。
~snip~
objs/src/event/modules/ngx_rtsig_module.o \
objs/src/event/modules/ngx_epoll_module.o \
objs/src/os/unix/ngx_linux_sendfile_chain.o \
~snip~
librtを使った非同期処理であればコンテキストスイッチが少なくなり(IO多重であるepollよりも)速い、とKLabさんの資料で読んだのだけど、どういう関係で実際のところどうなんだろう。
水曜日, 2月 20, 2008
[Linux] ldap-stats.pl
ファイル名でなんとなく想像がつくとおり、LDAPの統計情報を取るスクリプト。v2.3にも対応しているとのこと。以外にインフラ基盤の中でも「動いていてアタリマエ」になりがちなopenLDAPも、きっちり監視したいですね。
月曜日, 2月 18, 2008
[Linux] nginxとapache
ちまたで話題のNginxとapacheのパフォーマンスレポートを見つけました。面白いのはレスポンスタイム。

ブラウザ体感的にこんな効果があるなら、これだけで使ってみたいです。さらに、変わったところではmod_perlみたいにPerlを組み込みで使うことも出来るそうです。
ちなみに、lighttpdとの比較ではCPU負荷観点でnginxのほうが優れているとのことでした。
ブラウザ体感的にこんな効果があるなら、これだけで使ってみたいです。さらに、変わったところではmod_perlみたいにPerlを組み込みで使うことも出来るそうです。
ちなみに、lighttpdとの比較ではCPU負荷観点でnginxのほうが優れているとのことでした。
日曜日, 2月 17, 2008
[Linux] nginxのstatus
Nginxは運用者にとってちょっと制御してる感が持ちづらい(ワーカプロセス1つで1024コネクションって言われても。。)。コレを少しでも改善するためには./configure時に"--with-http_stub_status_module"をつけると良い。

あと、これを見られるようにlocationを指定すれば、apacheのmod_statusっぽい情報が得られるようになり少し安心できる気がする。
via kwout
あと、これを見られるようにlocationを指定すれば、apacheのmod_statusっぽい情報が得られるようになり少し安心できる気がする。
土曜日, 2月 16, 2008
[Linux] colinux-0.7.2
colinuxは、手軽に新しいアプリケーションを試すことができたり重宝している割に、バージョンアップに気が付いていませんでした。2.6.22ベースになったようです。
金曜日, 2月 15, 2008
[Linux] nginxの感想
この手のスレッドモデルなhttpdはどうも動作を掌握できている感が無くて困る。apacheのpreforkなんかだとプロセスがセッションに張り付いているのね、ふんふん、みたいに分かり易いが、スレッドモデルの場合はどう理解するのか。
まぁたとえば、なんとなくマニュアルには以下のようにある。
ので、唯一、同時接続数が上限に来ちゃうときのロジックはなんとなくわかった。
まぁたとえば、なんとなくマニュアルには以下のようにある。
max_clients = worker_processes * worker_connections
ので、唯一、同時接続数が上限に来ちゃうときのロジックはなんとなくわかった。
木曜日, 2月 14, 2008
水曜日, 2月 13, 2008
[Linux] nginx
nginxの実験をするためにコンパイル。
よくわからないエラーが出たら、それはpcre-develが入っていないからかもしれません。
バイナリが642kbって、、apacheとは比較にならないほど小さくてよいです。
よくわからないエラーが出たら、それはpcre-develが入っていないからかもしれません。
[tf0054@divers-high nginx-0.5.35]$ ./configure --prefix=/mnt/nginx-0.5.35 \
--with-http_stub_status_module \
--without-http_proxy_module \
--without-http_geo_module
~省略~
[tf0054@divers-high nginx-0.5.35]$ make
make -f objs/Makefile
make[1]: ディレクトリ `/home/tf0054/nginx-0.5.35' に入ります
cd /lib64 \
&& if [ -f Makefile ]; then make distclean; fi \
&& CC="gcc" CFLAGS="" \
./configure --disable-shared
/bin/sh: line 2: ./configure: そのようなファイルやディレクトリはありません
make[1]: *** [/lib64/Makefile] エラー 127
make[1]: ディレクトリ `/home/tf0054/nginx-0.5.35' から出ます
make: *** [build] エラー 2
[tf0054@divers-high nginx-0.5.35]$
バイナリが642kbって、、apacheとは比較にならないほど小さくてよいです。
月曜日, 2月 11, 2008
[Linux] supercache?
ウェブサイトのパフォーマンスを上げるために、アクセスされたときCGIからの出力結果を(ブラウザに返すだけではなく)静的ファイルにも吐いておき、次回以降はこの静的ファイルをapacheで読み込ませて返させよう、というのがよく行われます。
この方式、以外に呼び名に困るのですが、PHPのsymphonyというフレームワーク内ではsupercacheと呼ばれているそうです。。。名前としては微妙ですが、総称としてこれで呼び習わすことにしようと思います。
この方式、以外に呼び名に困るのですが、PHPのsymphonyというフレームワーク内ではsupercacheと呼ばれているそうです。。。名前としては微妙ですが、総称としてこれで呼び習わすことにしようと思います。
木曜日, 2月 07, 2008
[apache] Roller
movabletypeのような、ブログ生成ツール(というか彼らはCMSといっていますが)として、apacheファンデーションではRollerというのがあるそうです。
今現在v4.0として公開されており、ちょうどこのバージョンから(同団体の中での位置づけが)インキュベーションレベルから昇格したそうです。
意外に有名なわりにはMTはソースコードが微妙な気がするので、こっちの利用も検討しようと思います。
今現在v4.0として公開されており、ちょうどこのバージョンから(同団体の中での位置づけが)インキュベーションレベルから昇格したそうです。
意外に有名なわりにはMTはソースコードが微妙な気がするので、こっちの利用も検討しようと思います。
火曜日, 2月 05, 2008
[Linux] プロセス監視
水曜日, 1月 30, 2008
火曜日, 1月 29, 2008
[Life] アイテムの遅延ロード
lazy_writerが分かりやすいが、サイトページの画像など部品(アイテム)を後から差し込むことでユーザの体感速度≒サイトのさくさく感を向上することが出来ます。
これはウノウさんやclouderさんのところでも紹介されています。
これはウノウさんやclouderさんのところでも紹介されています。
土曜日, 1月 26, 2008
[MT] MTSetVarBlock?
MovableTypeはv4からMTSetVarBlockというタグが出来て、更にCMSとしての機能を拡充したという話です。
よく分からなかったのですが、これは例えば、カテゴリごとに異なるcssを適用したい、などとき、ココに紹介されているような書き方で対応することが出来ます。
この例のようなカテゴリ別、は、今はMTIfCategoryというタグがあるのでしたりすることが出来ますが、何かMTIf...が準備されていない要素別に変更をかけたい場合に使うのだと思われます。
なるほど。。MTって便利ですね。
よく分からなかったのですが、これは例えば、カテゴリごとに異なるcssを適用したい、などとき、ココに紹介されているような書き方で対応することが出来ます。
この例のようなカテゴリ別、は、今はMTIfCategoryというタグがあるのでしたりすることが出来ますが、何かMTIf...が準備されていない要素別に変更をかけたい場合に使うのだと思われます。
なるほど。。MTって便利ですね。
金曜日, 1月 25, 2008
[Linux] iptrk
iptrkとは、自分宛のパケットは全部飲み込んじゃうプロミスキャスモード(promiscuous mode)を使って、流れるトラフィックを視覚化してくれるツール。
何かの折には便利かも。
何かの折には便利かも。
木曜日, 1月 24, 2008
[Linux] CookieMonster
ブラウザは、上手くしてやらないと画像のリクエストでもCookieをもって行ってしまう。これを回避するためにはドメイン名を変えるのがよさそうだが、しかしサブドメインを切るだけじゃあまり意味ない?(CookieMonsterと呼ばれる脆弱性(?)があるんだから)。
水曜日, 1月 23, 2008
[Life] JSActionかJSActionsか
月曜日, 1月 21, 2008
[Linux] BASIC認証のログアウト
BASIC認証は毎回認証判定をしているという意味では、ログアウトという概念は当てはまらない。
が、ユーザ的にはそんなことはどうでもいいので、見た目ログアウト(ブラウザが認証情報を送って来なくする方法)をする方法は認証エリア内で401を返しちゃうことで実現できる(こちら)。
が、ユーザ的にはそんなことはどうでもいいので、見た目ログアウト(ブラウザが認証情報を送って来なくする方法)をする方法は認証エリア内で401を返しちゃうことで実現できる(こちら)。
日曜日, 1月 20, 2008
土曜日, 1月 19, 2008
木曜日, 1月 17, 2008
土曜日, 1月 12, 2008
[Linux] ファイルの更新日時を変える
やってはいけないことですが。ファイルの更新・最終参照日時を変更するには以下のコマンド
これでmtimeが"2002年2月2日の午前10時"になります(元ネタ)
touch -d "2 February 2002 10:00am" file1.txt
これでmtimeが"2002年2月2日の午前10時"になります(元ネタ)
木曜日, 1月 10, 2008
水曜日, 1月 09, 2008
[Life] TonyGraphs
Excelで、セルの中に小さなグラフを書くaddonがありました。
とてもかわいいので定期報告資料などで使うと場が和むかもしれません。
TinyGraphs via kwout
月曜日, 1月 07, 2008
[Lige] Gainer
本屋で見たが、本まで出ているのですね。ハードウェアまで含めて遊び始めると、いろいろ出来て面白そう。というわけで、とりあえずトリガーデバイスさんでキットだけ購入。ただ、、覚えることが多くなりすぎるかもしれませんが。
日曜日, 1月 06, 2008
[erlang] Process-one
以前見ていたejabberdやTsungという秀逸(と噂される)ミドルを作っているフランスの会社。この会社はCEANというerlangのライブラリ群を提供しており、昨今はこれを使うのが流行か。
火曜日, 1月 01, 2008
[erlang] 入門を読みました
少し話題になっていたので、一応日本語ですし"Erlang入門"を読みました。確かにHaskellに比べると、関数型とはいえ遅延評価が無く、実行順序保障もあるため、かなり扱い易いのでしょう(このため関数型の面白さが半減しているような気も)。
話題になっている理由のサーバ間を跨いだ分散処理などは、性能面のこのともありそれほどのことは無いようですが、純粋に関数型でのプログラミングを覚える意味であったり、また、忘却型プログラミングという話もずいぶん前に聞いていたのですが、これを実践できそうなerlangは面白そうで、もう少し追っかけようと思います。
erlangで。。。
・httpリクエスト
・ab(ベンチ)
・Wiki
・telnet(コマンド)
erlangコンサルティングというページによいチュートリアルがあったのでリンク。その他日本語の情報としてはここがまとまってる。
話題になっている理由のサーバ間を跨いだ分散処理などは、性能面のこのともありそれほどのことは無いようですが、純粋に関数型でのプログラミングを覚える意味であったり、また、忘却型プログラミングという話もずいぶん前に聞いていたのですが、これを実践できそうなerlangは面白そうで、もう少し追っかけようと思います。
erlangで。。。
・httpリクエスト
・ab(ベンチ)
・Wiki
・telnet(コマンド)
erlangコンサルティングというページによいチュートリアルがあったのでリンク。その他日本語の情報としてはここがまとまってる。
日曜日, 12月 30, 2007
月曜日, 12月 24, 2007
月曜日, 12月 17, 2007
土曜日, 12月 15, 2007
[Flash] swfmill+FlashDevelop
swfmillで画像だけ入れたswfを読み込み、表示するプログラムの例を以下に見つけたので、FlashDevelop(v2)のプロジェクトに焼き直してみた。
|
火曜日, 12月 11, 2007
[Flash] mtascとmxコンポーネント
mtascでFDViewをコンパイルしたいと思って試行錯誤中。
このページのようにするとmx.*というクラスが無くて、と言う問題は逃げられた。
このページのようにするとmx.*というクラスが無くて、と言う問題は逃げられた。
|
水曜日, 12月 05, 2007
[ETC] ブラウザキャッシュ
CGIは動的データを返す為に使うが、そうそうデータが変化しておらず(ブラウザに)304を返す場合もありえる。これをキチンと制御すればパフォーマンスは良くなろう。ということで以下がその調査に使ったURL一覧。
・概要
・ヘッダとブラウザキャッシュの関係
・まとめ(.)
・有効期限問題(近い)。
・php
session_cache_limiter関数(.)
parse_http_date関数
・ETagのapache実装
・apache頼らずphpで直接304
とこれらを元に作った、データファイルが変更になるまで304が返るサンプルPHPを置いておきます。
・概要
・ヘッダとブラウザキャッシュの関係
・まとめ(.)
・有効期限問題(近い)。
・php
session_cache_limiter関数(.)
parse_http_date関数
・ETagのapache実装
・apache頼らずphpで直接304
とこれらを元に作った、データファイルが変更になるまで304が返るサンプルPHPを置いておきます。
[ETC] FlashPaperその後
FDViewについて使い方が分かってきた。PDF2SWFでPDFをペーパーに変換して、それにビュワーを引っ付けて作るみたい。
日本語も(フォント埋め込みPDFなら?)使えるし、たぶんFlashプログラムができる人にはFDViewをカスタムして独自Viewerとすることも出来るし、十分ですね。
C:\swftools>pdf2swf.exe -B fdview\build\fdviewer.swf R25kikaku.pdf -o test.swf
C:\swftools>swfcombine.exe -X 766 -Y 600 .\fdview\build\fdviewer.swf #1="test.swf" -z -o testpaper.swf
日本語も(フォント埋め込みPDFなら?)使えるし、たぶんFlashプログラムができる人にはFDViewをカスタムして独自Viewerとすることも出来るし、十分ですね。
土曜日, 12月 01, 2007
[ETC] FlashPaperがんばり中
PDF2SWFの情報を集めてます。
・文字化け情報
・Memotone(FlashPaperのドキュメント共有サイト)
・Scribd(FlashPaperのドキュメント共有サイト)
・FlashPaperAPI
・文字化け情報
・Memotone(FlashPaperのドキュメント共有サイト)
・Scribd(FlashPaperのドキュメント共有サイト)
・FlashPaperAPI
登録:
投稿 (Atom)
