2011-01-01から1年間の記事一覧

forkとexecのお話

Perl Hackers Hub: UNIXプログラミングの勘所を読もうと思ったが、 「複製」と言っても,全部の情報が複製されるわけではありません。プロセスのメモリイメージが複製される(注2)一方で,プロセスが開いている「オープンファイル記述」(open file descrip…

CentOSにMySQLとHandler Socketを入れてみる

MySQL Casual Advent Calendar 2011の13日目を担当するkotaroitoです。どうぞよろしくお願いします。普段は、Opsの方々が用意してくれたMySQLを使うのみ、Explainの読み方はわかるけどサーバの設定無理、というまさにCasualユーザです。勢いに任せてMySQL Ca…

Ukigumoを使う

Ukigumo::Serverは準備できたので、いよいよ「ゆるふわCI」を試してみる!Ukigumo::Clientというライブラリが用意されているので、とりあえずインストールする。 cpanm Ukigumo::Client でOK。調べてみるとどうやらCPAN形式でリポジトリ管理されているなら便…

Ukigumo-Serverのセットアップ

テストを継続的に回したいが、Jenkinsはtoo muchっぽい。なんか手軽にできる方法ないかなと思っていたタイミングでYAPCでのトークを聞いてUkigumoがあった、と思い出す。http://d.hatena.ne.jp/tokuhirom/20110909/1315566798 http://d.hatena.ne.jp/tokuhir…

Mac OS XでPlackインストール時に出るエラーの回避

Mac OS X(SnowLeopard)でcpanm Task::Plackすると、EVのインストールで止まってしまう、という状況に陥りました。調べてみると、「Lion で Plack をインストールすると EV のテストでエラーがでる。 」この記事まんまの状況で、たしかにXcode4を入れる前は問…

perlbrewとcpanmのセットアップ

perlbrew、cpanmそのものについては既に語りつくされてると思うので、自分のために手順だけ書いておく! 2011-10-22時点 curl -kL http://xrl.us/perlbrewinstall | bash echo 'source /home/kotaro/perl5/perlbrew/etc/bashrc' >> ~/.bashrc source ~/.bash…

YAPC::Asia2011にいってきた

去年に引き続きYAPC::Asiaにいってきました。今回で2回目。 おもしろかったなと思ったセッション ma.laさんの「Webアプリケーション高速化」 http://ma.la/files/yapcasia2011/高速化の手段は「努力、Hack、金」という3分類がすごくしっくりきた。 キホンは…

ヘッダファイル

C

自作関数をmainとは別のファイルに分割する方法を調べた。あまりに基礎すぎてググってもなかなか見つからんかった(涙)。やることはすごい単純で、intの加算と減算をするaddとsubtractをつくるだけ。 コード calc.h int add (int a, int b); int subtract (…

ブラウザキャッシュ

web

ブラウザキャッシュを有効にするにあたり、調べたことをメモ。 基本概念 http://www.studyinghttp.net/caching#explicit_expiration_time は必読。特に以下4つ。 明示的有効期限 {explicit expiration time} オリジンサーバが、エンティティの有効性の再確認…

Perl Unixプログラミング - その1

Kazuhoさんの記事(http://gihyo.jp/dev/serial/01/perl-hackers-hub/000601)を読みながら調べたことをまとめてみる。 コード これはほとんど元記事そのまま。 use strict; use warnings; use Errno qw(:POSIX); my$dir='/tmp/kotaro/1'; unless (mkdir $dir …

MySQL+Senna/Tritonnについて調べた

検索関連の技術に疎かった&MySQL+Sennaのアーキテクチャをあまり理解してなかったので調べてみた。 Tritonnとは TritonnはMySQLから全文検索エンジンSennaを利用可能にするためのプロジェクト http://qwik.jp/tritonn/about.html MySQLにおける全文検索 htt…

ポインタ

C

K&Rのプログラミング言語Cを読み進めて、第5章のポインタまできた。ポインタ昔は全然わかんなかったけど、Perlでリファレンス多用するので慣れたと言えばいいのか。(Perlのリファレンスがポインタ使って実装されてるんだろうから、本来逆なんだけども) ポ…

navigator.cookieEnabled

クッキーが使えるかどうかを判定するにはnavigator.cookieEnabledの真偽をチェックすればOK。実に簡単な話なんだけど、こういうのは存在を知っている or 存在しそうだなという勘を働かせるというのが大事だなと思った。

フォームに複数ボタン並べる

テーブル内に複数のボタンを並べて、押された項目に対してのみ更新処理をしたいのだけど、やりかた忘れた..。ということで色々調べてみた。 を並べるのが一番簡単なんだけど、value属性にボタン名入れるので、name属性が固定できなくなって、サーバ側でパラ…

fork/wait/exec

"Operating System Concepts"でこのあたり読んでたので、perlであれこれやってみる。 超基本 子プロセスをwaitし、exit statusを表示するという単純なことをやってみる。 my $pid = fork; die $! unless defined $pid; if ( $pid == 0 ) { sleep 1; exit 1; …

git入門

git

もはやsvnじゃなくてgitな時代であることをひしひし感じたので、使い方を学び始める。 svnとgitの違い http://www.tempus.org/n-miyo/git-course-trans-ja/svn.ja.html リポジトリ svn: 中央で集中管理される単一のリポジトリがある git: ワーキングコピーと…

はじめてのC

C

K&Rの「プログラミング言語C」を読み始めた! いろいろ書きながら覚える。 標準入力から一文字ずつ出力 #include <stdio.h> main() { int c; while ( ( c = getchar() ) != EOF ) { if ( c != '\n' ) printf("%c\n", c); } } 華氏から摂氏変換 #include <stdio.h> #define LOWE</stdio.h></stdio.h>…

JSON-RPCを試す

"Operating System Concepts"でRPCのセッションを読んでたのだけど、イマイチ実感つかめないのでいい機会だからJSON-RPCを触ってみようと思った次第。なお、JSON-PRCの仕様はこちら。 http://json-rpc.org/wiki/specification Zigorouさんのエントリー見つけ…

audio要素

HTML5をそろそろモノにしなきゃなと思うので、広く浅くいろいろなことを試してみる。 で、audio要素から。 <html lang="ja"> <meta charset="utf-8"> <body> <audio id="audio" src="uguisu.mp3" autoplay></audio> </body> </html> SafariやChromeで開くと、これだけでaudio再生できる。 以下のようにjavascriptから操作もできる。 <script type="text/javascript"> var audio = documen…

__FILE__, File::Specなど

あるモジュールファイルのパスを取得したかったのだけど、最初やり方わからなくて苦労したのでメモ。 __FILE__ これを使えば、ファイル名を取得することができる File::Basename これを使うと、ディレクトリ名とファイル名を取り出すことが可能 use File::Ba…

Time::Pieceを活用せよ

これまでは perl -MTime::Piece -le '$t=localtime(); print $t' Fri May 20 10:50:18 2011| みたいに、UnixtimeからTime::Pieceオブジェクトつくる方法しか知らなかったけど、perldoc調べたらstrptimeで文字列パースできるじゃん! と思ったら、timezoneで…

オブジェクト生成コスト

オブジェクトをいっぱいつくると重いよーみたいなこと聞いたことあるけど、実際のところどれくらいコスト違うんだろう、と気になったので調べてみた。 引数を2倍にして返すという単純な関数でベンチマーク。 use Benchmark qw(:all); sub new { bless +{} =>…

sudo: sudores/visudo

sudoという実に基本的なところだけど、すぐに忘れてしまうのでメモる。 /etc/sudoresが設定ファイルで、visudoが編集コマンド。直接/etc/sudoresを編集するのは望ましくない。 /etc/sudoresの書き方 ユーザ ホスト = (権限) コマンド という書式になっている…

PDTからJSTへの変換

ワンライナーで書いてみた。 perl -MDateTime -le '$hash=+{year=>2011,month=>3,day=>22,hour=>19}; $pdt=DateTime->new(%$hash, time_zone=>"America/Los_Angeles"); $tokyo=DateTime->from_epoch(epoch=>$pdt->epoch, time_zone=>"Asia/Tokyo"); print($t…

warnの挙動を変更する

不要なwarnがダラダラと出力されてしまうので、スコープ内に限ってoffにできないかと探したところ、dankogaiさんのBlog発見! http://blog.livedoor.jp/dankogai/archives/50807680.html こんな感じでスコープに限って、offにできる。 do { local $SIG{__WAR…

Cache::Memcached::Fastでexpireせず

setメソッドの第3引数(expiration time)にReadonlyな変数をセットすると、なぜかexpireしないというbugに当たって、えらく苦労したのでそのまとめ。 再現方法 試したバージョンは以下の通り。 memcached 1.2.6 Cache::Memcached::Fast 0.14 ローカルの11211…

memcached再入門

memcachedを本格的に使う必要に迫られたので、ここでちゃんと理解しておくべく色々調べた。 memcachedとは? 本家サイトのイントロダクションから抜粋 Free & open source, high-performance, distributed memory object caching system, generic in nature,…

フッタ追加をワンライナーで

相当数のhtmlに一撃でフッタを追加したかったので、ワンライナーでやってみた。 find . -name '*.html' | xargs perl -pi -e 's#(\s*)</body>#\%include:footer\%$/$1</body>#g;' 【訂正】 $/は標準入力の区切り文字でUNIX環境だとLFになるらしい。なんかものすごい勘違い…

Operating System Concepts: semaphore and mutex

os

"Operating System Concepts"を読んで理解したことをまとめてみる コンセプト 複数プロセスがリソースに同時アクセスしうる環境では、データに不整合おこさないための仕組みが必要。semaphoreやmutexは整合性保つための仕組みである。 セマフォ wait()とsign…

Test::mysqld

DBを使ったテストがちゃんとできてないよねー、という自覚あったので遅ればせながらTest::mysqldを使いだしてみる。 で、インストールでものすごくハマってしまい、Test::mysqldからmysqldが起動しない事態に陥り延々悩む。起動スクリプト(/etc/init.d/mysql…