2010年12月5日日曜日

Typepadから引っ越しました

どうもTypepadになじめず、お引越ししてきました。

引越し条件として

  • Pixelpipeから投稿できる
  • Code SyntaxHilightが使える
  • サービス終了とかなさそう
  • 広告がウザくない
というのがあったんですが、
Pixelpipeの件で日本国内サービス全滅。
SyntaxHilightとか入力の簡単さえでHatenaがいいなーとか思っていただけに残念。
Voxのサービス終了もトラウマです。
Amebaとかその他ポータル系ブログは広告出し過ぎです。

で、いろいろ見て回った挙句Bloggerがよさそうだなーと思いまして。
Google信者ですし。

ころころ引っ越して申し訳ありませんが、
末永く宜しくお願い致します。

Code SyntaxHilight

#!/usr/bin/perl
use strict;
use warnings;
use IO::File;

my $in = new IO::File('filename');

while(<$in>){
    print $_;
}
$in->close;
exit;

2010年12月4日土曜日

お試し利用中

お試し中お試し中。

Bloggerでsyntax hilightとかできるのかな?

Pixelpipeが使えるし、
画像管理とかとうまく連携出来ればいいなー。

下書きの保存機能も優秀っぽいからtypepadよりよさそう。

2010年11月29日月曜日

牡蠣カキ JackPot




オイスターバーなう



新宿三丁目のJackPotというオイスターバーに行ってきました。


話の流れで店を選んだので特に予約しておらず。
16:30の開店と同時に行ったものの既に予約いっぱい。

18:30までに出るという約束のもと入店。


行くときは予約した方がいいよー

おいしいよー


あと、フォカッチャ頼むとアホか!ってくらいでてくるので要注意ですね。 



2010年11月23日火曜日

開発メモ:slim3 + mixi app

makeRequest の検証


servlet filterにて実施する。
具体的には↓のライブラリを利用 


http://code.google.com/p/opensocial-oauth-filter/


 


slim3での共通処理


Navigator Controller#setUp();
をoverrideしたベースクラスを用意


遷移(redirect etc)を伴う共通処理はservlet filterで行いなされ by @higayasuo とのこと。
http://d.hatena.ne.jp/coolstyle/20090810/1249906393


続く。 


 


setUpで何をするか。というとこですが、
PHP + Kohanaで作ってたときはここで



  • opensocial_viewer_id

  • opensocial_app_id

  • userエンティティ


をセットしていました。


同じでいいかなと。


参考
http://d.hatena.ne.jp/aki-rs/20100513/1273726150 



2010年10月21日木曜日

奥多摩BBQ



ちょっと安めに。。意外とうまかった。




中茶屋キャンプ場です。




フリスビーとかいろいろなくしたため捜索活動。





2010年10月19日火曜日

KohanaのORMについて徒然

http://gist.github.com/632600



KohanaオリジナルのORMはとってもシンプル。
シンプルすぎてそのまま使うと危険なほど。



いくつか実運用時に気になった点を修正したORMを上げてみました。



1) Column list


テーブル定義を動的にとるのがデフォルトとされています。
これは、Cakeとかでもそうだしまぁ問題ないですね。
ただ、なぜかコレがキャッシュされません。


SQL異常に多いなーと思って中見たら、
毎回show columns クエリー飛ばしているじゃありませんか。
ということでファイルに1日キャッシュ。


alterしたりしたあとはcacheディレクトリ削除すればよし。


2)Has many


デフォルトは、
$user->child->find_all();
のようにもう一回クエリを飛ばしなさいよ!ってことらしい。


Joinして絞り込みたい時もあるでしょうが。使いようだと思います。


なのでwith()を拡張して$user->with('child')でLeft joinさせます。
あまり負荷を考えるとよろしい作法ではないですが、
使いどころ次第かと思います。


3) 透過キャッシュ


せっかくrowオブジェクトを持っているのだから
レコード更新時にキャッシュ更新したり、
参照時にキャッシュからとったりは透過的にできるでしょう。


findはPKで参照している時しか対応しづらかったのでそこまでですが、
アプリ作る際に意識していればこれであらかたキャッシュは回せるかと思います。


save_with_cacheでselectしなおしているのがちょっとダサいが、
たいていの更新はもとのrow objectがloadedなので問題ないはず。




2010年10月3日日曜日

間違えたーーー!!

誤操作でブログ消してしまいました。。


 


ということで、Googleのキャッシュより復旧。


時系列ごちゃごちゃだけど、あらかた戻しました。


こわやこわや。



MacとFILCOとHome/Endキー

とうとうiMacにもFILCOつないでしまいました。


で、使おうとしたんだけど、

Windows用キーボードですからいくつか障害が。


  1. 英数/かな切り替えがめんどくさい

  2. Windowsキーがコマンドキーとか意味わかんない

  3. Volume変更出来ないの不便

  4. Homeキーおすと行頭じゃなくて文書の頭に飛ぶ



最後のはキーボードかんけいないけどね。

で、いくつかソフトかったりして解消

まず、1,2,3

Wink for osXというソフトを購入


これで一般的と個人的に思うキーバインディングになった。

無変換→英数

かたかな・ひらがな→かな

ということでMacキーボードっぽい位置に。

で、4

これが一番こまった。

コーディングのときよく使う癖があるので生産性にかかわる。

日本語打てなくてもコーディングは出来るから、

コッチのほうが仕事的には致命的。

DoubleCommandっていうソフト入れました。

これは無料


いろいろ設定できるんだけど、

Home/EndキーをWindowsと同じにという設定だけした。

だがしかし、

これだけではEclipseのバインディングは変わらなかった。

なんでかなーと思ったら、Eclipseのバインディング設定が別にあったのね。

ということでググったら説明しているページ発見



  1. open the eclipse preferences pane

  2. general->keys

  3. in the filter type line start and note that there will be existing bindings when editing text.

  4. select line start type home, and ensure that the "when" field stays with Editing Text

  5. apply

  6. follow this process for select line start, line end, and select line end.


とのことで。

これでガシガシ作れます。

キータイプうるさくなりました。

同居人ごめん。


 



CakePHPとCatalyst

日々日々、
なんらかのWeb Application Framework (WAF)つかっているわけですが、
なんとなくCakePHPかCatalyst使うことが一番多いので、
言語すら違うのに比較した所感を。


まず、それぞれの概要から。


■Catalyst  - Perl


PerlのWAF代表格ですね。


http://www.catalystframework.org/


非常に柔軟な特性を持ち、カスタマイズが簡単です。
その名の通り触媒なので、設定というか一緒に使うモジュールの組み合わせで、
ありがちな処理の殆どを吸収してくれます。
専用モジュールがCPANにガスガスあがっているのが素敵


■CakePHP  - PHP


PHP版Ruby on railsですね。


http://cakephp.org/


ActiveRecordパターンという縛りを設けることで、
コーディング量を極端にへらしてくれます。


ドキュメントの豊富さが際立っている気がしますね。


とにかく楽したいときに最高です。


 


で、それぞれ仕事・プライベートで使ってますが、
なんとなく、思うところがあったり。


どちらも似たようなWAFなんですが。


一番大きく違うのは、DB関連というかModelの解釈ですかね。


CatalystはModel用ORマッパーが交換可能です。
好きなORマッパーを当て込めます。
なおかつ、ModelクラスごとにORマッパー変えられたりもします。


これがあるから、アプリレベルでのDBシェーディングなんかも表層で気を使わないですむような実装が簡単にできたり。
コアモジュールをガシガシOverrideとかしないでいいです。


CakePHPはオリジナルのORマッパーしか使えません。
でも、そのかわりにそのORマッパーのルールに従う限りめちゃくちゃ簡単です。
コード量アホかってくらい短くすみます。
なおかつなかなか直感的に使えるAPIを持っているので、
個人的にはソース綺麗になるなーなんて思っています。


Catalyst使ってもごちゃごちゃするのは自分のウデのせいですけどね。


Scaffordとか綺麗だしCakeは手抜き大好きプログラマの味方です。
Catalystはなんでも使える魔法の触媒ですが、柔軟すぎてその分コードが少し増えます。


でもCPANにある無数のモジュールを使えるので、
将来的にめんどくさい(自分で実装したくない)処理が求められそうなときは、こっちがいいかなと思います。


あと、R&D的な何するのかよく分からない自分用アプリ書くときはこれ使ってます。


毎回、アプリ作るときにどのWAF使うか悩みます。
先に言語決めろよという気もしますが。


今更だけどRailsとかも一回ちゃんと使ってみたいですね。


最近はもっぱらKohanaなんですが、
CatalystやCakeなどの歴史あるフレームワークは機能いっぱいで便利ですね。


使いどころと使い方しだいということでしょうか。 



Twibbon的なものを試してハマる

Twibbon - http://twibbon.com/


のような、Twitterアイコンになんか載せるアプリを作ろうとしてハマった。



何にはまったかというと、


update_profile_image


というTwitterAPI様が全然画像を更新しれくれないのです。



数々の先人がPHPというかPEARモジュールでハマっているようで


http://d.hatena.ne.jp/Arko/20090508/1241790310


PEARモジュールで作り始めましたが、


Services_Twitter使っても
HTTP::Request使っても
HTTP::Request2使っても


うまくいかず。


引っかかってる箇所は同じだと思うんですが、
Content-Typeと指摘しているかたも多いのでそこら辺をいじってみたりもしつつ


http://d.hatena.ne.jp/abyssluke/20090615/1245062610
これみてやっぱCurlで素直にやろうと。


PHPリコンパイルですがこれしかないですか。


で、↑のCurlのサンプルにしたがって実装できましたとさ。


TwitterAPI側のバリデーションがなんだかなという感じですが、
とりあえず実装は可能なんですねと。


 


Perl使ってたらはまらかったんだと思います。
ただ、PHPという与件のもとでのフィージビリティー確認でした。


 


Yes we can.


 



Vimをちょっと使ってみました

Vimをちょっと使ってみました




普段はEclipseとKomodoを利用しているんですが、
Perlやっている人たちの集まりに行くとだいたい皆さんVim || Emacsですね。


みんなつかっているということは便利なツールなんだろう


ということでVimを試しました。
Emacsじゃない理由はキーバインディング覚えればお客のサーバーでも使えるから


まずはvimrcに何を書くかを調べてみまして、
とりあえず▽書いてみたらいい感じ。
set autoindent
set tabstop=4
set number
syntax on
set term=builtin_linux
set ttytype=builtin_linux
colorscheme darkblue
set enc=utf-8
set fenc=utf-8
set fencs=iso-2022-jp,euc-jp,cp932


でもってPerlを書いてみたのですが、
Vim7からはコード補完もやってくれるそうですね
便利そうなので入れてみました。
けっこう大変だったけど
http://mig-ration.blogspot.com/2007/05/mac-vim71.html


で試してみました。



 


 




 



胃が痛いのですが



どーにも飲みすぎているようで


胃がシクシクしていますね。

あー無情















うまいんだからしょうがない。

ストレートね

 




 



Helloween

高校のころコピーバンドやってまして、


▼の曲なんか弾いてたんですが











Helloween - Where The Rain Grows (1994)







まだバリバリ現役だったんですね。

キャッチーになっててびっくりしました。

髪型が変わってないところがすごいけど。











Helloween - As Long As I Fall (2007)







あーラブリー

 



デジタルガジェット達


ますます買い足されたスマートフォン達。
ついでにPSP Goも買ったのでディスプレイ上マージ。


Androidについて言えば、
・HT03A
・NexusOne
・HTC Desire
・Xperia


といろいろいじりましたが、個人的にはDesireが一番好きでしたね。
Xperiaも優秀なんですが、私の小さい手には余ります。


ということで、SIMフリーDesireを購入しました。
写真上段真中がHTC直販のDesireで上段左がSoftbankのDesire。
直販の方が箱がゴージャスだった。
Xperiaはなんでか箱がでかかったですね。
Docomoの端末はおしなべて箱がでかい印象あります。
HTC Magicの時も、GoogleDeveloper'sDayで配っていた箱からくらべてずいぶんでかくなっていましたね。



話は変わってPSP Go。
不人気不人気といわれるだけあって、中古が普通のPSPと変わらないくらいの値段まで下がってきていたので衝動買い。


とりあえずバイオハザードとFF7をアーカイブスで買って遊んでます。


PSPもDSも、カセット持ち歩いたりするのが嫌なんですよね。
なくなったりするし。
ということで、PSP Go。
ただ、電池のもちがいまいっちょ。
音楽とかもマージしようかと思ったんですけど、これはiPodのままですね。



DesireにしろPSP Goにしろ、
最近充電ゲーブルがUSBで提供されるの増えてきましたね。
個人的な思いなんですけど、
USBケーブルが短すぎる!!
のですよ。


とくにPSP Goなんてパソコンの前で使うもんじゃないじゃん。
ベッドの上とかでごろごろ使いたいのに、
充電ケーブルが1メートル程度ってそれはないですよ。
いや、もっと短いか。


300円くらい高くなってもいいから考慮してもらいたいものです。


 



ApacheとPHPのコンパイルオプション備忘録

いろいろなプロジェクトやったなかで、
とりあえずこれで困らないだろう程度のコンパイルオプション。
なんか有効じゃないオプションもあるけど、
とりあえず。


突っ込み募集。



■PHP
./configure \
--with-pcre-regex \
--with-pear \
--with-apxs2=/usr/local/apache2/bin/apxs \
--with-openssl \
--with-xml \
--with-dom \
--with-xmlrpc \
--with-layout \
--with-mcrypt \
--with-gd \
--enable-zend-multibyte \
--enable-track-vars \
--enable-calendar \
--enable-mbstring \
--enable-mbstr-enc-trans \
--enable-mbregex \
--enable-bcmath \
--enable-sockets \
--enable-trans-sid \
--enable-ftp \
--enable-exif \
--with-jpeg-dir \
--with-png-dir \
--with-zlib-dir \
--with-xpm-dir \
--with-freetype-dir \
--enable-dbx \
--enable-magic-quotes \
--with-iconv \
--with-gmp \
--with-dom-xslt \
--with-dom-exslt \
--with-pgsql=/usr/local/pgsql \
--enable-soap \
--with-oci8=instantclient,/usr/lib/instantclient_10_2 \
--enable-pcntl


 



■Apache
./configure \
--enable-so \
--enable-rewrite \
--enable-cgi \
--enable-ssl


 



ディズニーシーいってきました



平日から会社休んでディズニーシーいってきました。


心の洗濯ですね。

ハロウィンのせいかずいぶん混んでまして、

春に行ったときとは比べ物にならない並びでございました。

平日で100分待ちとか、さすがですね。















ハロウィン季節ということで、

こまごまとハロウィンの演出がありましたね。















で、最後にマゼランでハロウィンディナーいただいてきました。


またいきます。

 




 



daemontools インストールメモ

ほかブログからの転載なんですが、


備忘録として。。


daemontools

再起動してくれるlinuxのツール

1./package ディレクトリを作成

# mkdir -p /package

# chmod 1755 /package

# cd /package

2.daemontools-0.76.tar.gzをダウンロード

# wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz

# tar zxvf daemontools-0.76.tar.gz

# cd admin/daemontools-0.76

3.インストール

# package/install

......

/usr/bin/ld: errno: TLS definition in /lib/libc.so.6 section .tbss mismatches non-TLS reference in envdir.o

/lib/libc.so.6: could not read symbols: Bad value

collect2: ld はステータス 1 で終了しました

make: *** [envdir] エラー 1

Copying commands into ./command...

cp: cannot stat `compile/svscan': そのようなファイルやディレクトリはありません

4.対処方法

# cd /package/admin/daemontools-0.76

# wget http://qmail.org/moni.csi.hu/pub/glibc-2.3.1/daemontools-0.76.errno.patch

# patch -s -p1 <./daemontools-0.76.errno.patch


 



githubでTinyURLのPlaggerプラグインさらした



http://github.com/taikimen/Plagger-Plugin-Filter-TinyURL


 


mixiにVox記事上げるために作ったんですが、
せっかくなのでりファクトしてさらしてみました。


はじめてgit使ったので今後どうすることやら。


 


はじめてシリーズなので大目に見てください。


 


 


内容はPerlモジュールです。
CPAN形式になっているので、扱いはわかりやすいかと。


やってることもシンプルで、body内のテキストでURLにマッチしたものをすべてtinyURLに変換するだけです。


こんなんどうでしょう?




 



備忘録:Redmineつかってみた

svn export http://redmine.rubyforge.org/svn/branches/0.8-stable redmine


gem install -v=2.1.2 rails


rake config/initializers/session_store.rb


rake db:migrate RAILS_ENV=demo


rake load_default_data RAILS_ENV=demo


 


SQLiteで使う限り甚だ簡単ですね。
スタンドアロンサーバーでの動作もひどくはないですし。


http://redmine.jp/tech_note/install/


ここを参考にしました。


 


OSSっていいですね。


 



備忘録:Oracle テーブルスキーマ確認クエリ

set long 2000
set heading off
set line 120
set pages 2000
set trimspool off
set feedback off
set longchunksize 600
select dbms_metadata.get_ddl('TABLE', 'テーブル名') from dual;



かに鍋たべたー














通販でカニを購入したわけですよ。

2000円弱くらいのお試しセット。


うまいですねー。

でももっと人数いないと、

カニ味噌とかはいったセットは多すぎて買えないですね。

鍋パーティーしましょう。

そうしましょう。

そういえば、昼過ぎにコーヒー飲んでたんだけど、

おやつほしいよねーという話になり、

でもお菓子がないのでケーキ作ってみました。


卵と小麦粉とサラダ油混ぜるだけの簡単蒸しケーキ。

意外においしくてびっくり。

しかも所要時間5分。

お菓子作り楽しい。



Kohanaでのunittest

3系のドキュメントにunittestがないので記録


PHPUnitベースのUnitTest環境構築用モジュールが提供されている。

http://github.com/kohana/unittest

こちらのinstallation参照。

拾ってきたファイルを

modules/unittestとして解凍するだけ

もし入れてなければPHPUnitをPearで入れる。

http://www.phpunit.de/manual/current/en/installation.html

pear channel-discover pear.phpunit.de

pear channel-discover pear.symfony-project.com

pear install phpunit/PHPUnit 
GithubのほうのKohana::unittestのinstallationに従い、 bootstrapのソースを改変すると http://[yourdomain]/unittest/でTOP画面が見える mod_rewriteによるルーティングをカスタマイズしている場合は、 RewriteCond %{REQUEST_URI} ^/unittest RewriteRule ^(.*) index.php/$1 [PT] と、.htaccessにてunittestだけ標準ルーティングに変更 
実際のテストクラスは application/tests/hoge.php というように、testsディレクトリ下にファイルを置いていく TESTサンプルは以下
<?php
/**
* @group somegroup.morespecific.annoyingstuff
* @author shimazu
*
*/
Class ExampleTest extends Kohana_Unittest_TestCase
{

function setUp(){
parent::setUp();
}

function tearDown(){
parent::tearDown();
}

function providerStrLen()
{
return array(
array('One set of testcase data', 24),
array('This is a different one', 23),
);
}

/**
* @dataProvider providerStrLen
*/
function testStrLen($string, $length)
{
$this->assertSame(
$length,
strlen($string)
);
}

/**
* @dataProvider providerStrLen
*/
function testError($string, $length){
$this->assertSame(
$length,
strlen($string) + 1
);

}
}



 javadoc形式でのアノテーションにてグループ指定などが可能。

データプロバイダなんておしゃれなものも同様に指定可能

実行結果は以下



 



Shibuya.pm #12 行ってきました

リリース当日にも関わらず、


中抜けさせていただき、参加いたしました。

職場に感謝。

個人的に非常に注目していた、

KVS or RDBMS

という観点でそれぞれの長所短所を改めて確認することができました。

特に、ビジネス向けサービスを提供するサイボウズラボ:奥さんの

Incline Pacificが目から鱗でした。

今日のスライドは見当たらなかったので古いのを掲載


なぜ自分たちのアプリはRDBMSを使っていたのか

なぜ簡単にKVS導入に踏み切れないのか

この点を改めて考え直し解釈することができました。

備忘録的に書くと、

既存RDBMSのもつ、高い運用性、メンテナンス性を、

我々はそう簡単に捨て去ることができないのだなと。

ということを考えると、

TokyoTyrantにしろ、memcachedにしろ、

運用者がsqlplusなどのようにアクセスできる対話式IFを用意する必要があるのかと。

ということで作ってみましょう。

Perlで。

これは、自分でKVSを運用していくにあたって、

確実に必要なツールになると思います。

エラい人をさがしつつ、

勉強になりそうなので自前でやろうかと。

思います。

 



備忘録:Oracle schema毎の利用セッション数

SELECT 
        A.USERNAME,
        count(*)
FROM    v$session a,
        v$sesstat b,
        v$sess_io c,
        v$statname d
WHERE   a.sid        = b.sid
    AND b.sid        = c.sid
    AND b.statistic# = d.statistic#
    AND d.name like '%CPU%session'
group by A.USERNAME
ORDER BY a.username
;


 



SET LINESIZE 500;
SET PAGESIZE 80;
SET COLSEP |;
SET FEEDBACK OFF;
COLUMN "SID/SERIAL" FORMAT A15;
COLUMN USERNAME FORMAT A10;
COLUMN "SID/SERIAL" FORMAT A15;
COLUMN OSUSER FORMAT A10;
COLUMN MACHINE FORMAT A15;
COLUMN TERMINAL FORMAT A10;
COLUMN PROGRAM FORMAT A35;
COLUMN TYPE FORMAT A10;
COLUMN COMMAND FORMAT A20;
COLUMN COMMANDid ;
COLUMN "経過時間(sec) " FORMAT 9,999,999,990;
COLUMN "CPU使用時間(sec)" FORMAT 9,999,990.000;
COLUMN "CPU占有率(%)" FORMAT 990.000;
COLUMN "ブロック取得回数" FORMAT 9,999,999,990;
COLUMN "物理読み込み回数" FORMAT 9,999,999,990;
TTITLE LEFT '【 セッションの確認 】' SKIP 1 LINE ;
SELECT A.SID || ',' || A.SERIAL# "SID/SERIAL",
A.OSUSER,
A.MACHINE,
A.TERMINAL,
A.PROGRAM,
A.TYPE,
A.USERNAME,
A.STATUS,
DECODE(A.COMMAND ,1,'CREATE TABLE' ,2,'INSERT' ,3,'SELECT' ,
4,'CREATE CLUSTER' ,5,'ALTER CLUSTER' ,6,'UPDATE' ,7,'DELETE' ,
8,'DROP CLUSTER' ,9,'CREATE INDEX' ,10,'DROP INDEX' ,
11,'ALTER INDEX' ,12,'DROP TABLE' ,13,'CREATE SEQUENCE' ,
14,'ALTER SEQUENCE' ,15,'ALTER TABLE' ,16,'DROP SEQUENCE' ,
17,'GRANT' ,18,'REVOKE' ,19,'CREATE SYNONYM' ,20,'DROP SYNONYM' ,
21,'CREATE VIEW' ,22,'DROP VIEW' ,23,'VALIDATE INDEX' ,
24,'CREATE PROCEDURE' ,25,'ALTER PROCEDURE' ,26,'LOCK TABLE' ,
27,'NO OPERATION' ,28,'RENAME' ,29,'COMMENT' ,30,'AUDIT' ,
31,'NOAUDIT' ,32,'CREATE DATABASE LINK' ,33,'DROP DATABASE LINK' ,
34,'CREATE DATABASE' ,35,'ALTER DATABASE' ,36,'CREATE ROLLBACK SEG' ,
37,'ALTER ROLLBACK SEGM' ,38,'DROP ROLLBACK SEGME' ,
39,'CREATE TABLESPACE' ,40,'ALTER TABLESPACE' ,41,'DROP TABLESPACE' ,
42,'ALTER SESSION' ,43,'ALTER USE' ,44,'COMMIT' ,45,'ROLLBACK' ,
46,'SAVEPOINT' ,47,'PL/SQL EXECUTE' ,48,'SET TRANSACTION' ,
49,'ALTER SYSTEM SWITCH' ,50,'EXPLAIN' ,51,'CREATE USER' ,
52,'CREATE ROLE' ,53,
'DROP USER' ,54,'DROP ROLE' ,55,'SET ROLE' ,56,'CREATE SCHEMA' ,
57,'CREATE CONTROL FILE' ,58,'ALTER TRACING' ,59,'CREATE TRIGGER' ,
60,'ALTER TRIGGER' ,61,'DROP TRIGGER' ,62,'ANALYZE TABLE' ,
63,'ANALYZE INDEX' ,64,'ANALYZE CLUSTER' ,65,'CREATE PROFILE' ,
66,'DROP PROFILE' ,67,'ALTER PROFILE' ,68,'DROP PROCEDURE' ,
69,'DROP PROCEDURE' ,70,'ALTER RESOURCE COST' ,
71,'CREATE SNAPSHOT LOG' ,72,'ALTER SNAPSHOT LOG' ,
73,'DROP SNAPSHOT LOG' ,74,'CREATE SNAPSHOT' ,
75,'ALTER SNAPSHOT' ,76,'DROP SNAPSHOT' ,
79,'ALTER SESSION' ,85,'TRUNCATE TABLE' ,86,'TRUNCATE COUSTER' ,
88,'ALTER VIEW' ,91,'CREATE FUNCTION' ,92,'ALTER FUNCTION' ,
93,'DROP FUNCTION' ,94,'CREATE PACKAGE' ,95,'ALTER PACKAGE' ,
96,'DROP PACKAGE' ,97,'CREATE PACKAGE BODY' ,
98,'ALTER PACKAGE BODY' ,99,'DROP PACKAGE BODY' ,'待機中') COMMAND ,
A.COMMAND commandid,
(sysdate - a.logon_time)*86400 "経過時間(sec)",
b.value /100 "CPU使用時間(sec)",
b.value /((sysdate - a.logon_time)*86400+1) "CPU占有率(%)",
c.block_gets "ブロック取得回数",
c.physical_reads "物理読み込み回数"
FROM v$session a,
v$sesstat b,
v$sess_io c,
v$statname d
WHERE a.sid = b.sid
AND b.sid = c.sid
AND b.statistic# = d.statistic#
AND d.name like '%CPU%session'
ORDER BY a.username,
a.sid;

 



TwitTagタグ検出調整

地味ーに自分用Twitter Browserとして利用しているTwitTagsですが、


年始に少しいじってみました。

取得daemon

・URLをTag検出から除外

・@hogehoge といったUserIDを除外

表示App

・Cloud生成時に2文字以内の英字を破棄

・頻出する不要タグの除外機能(手メンテ)

・アイコン表示

Twitter Stream APIを利用している中で特徴的な以下の点があります。

■Friends Time Lineをまねるために

Stream APIではFriends time lineはありません。

Filter指定でトラックする単語ないし、user_idを指定して使うことになります。

ということで、Friends time lineのようにするには、Friends Listを取得して、

そのuser_idでフィルタリングすることになります。

■上記がもたらす影響

単純な話なんですが、

@hogehoge おはー

みたいな、Followしていない人からFollowしている人へのreplyを拾ってしまいます。

これが、友達間でTwitter利用しているだけならいいのですが、

Follow対象者がちょー有名人だったとき、

タイムラインがそのユーザーへのreplyでうまります。

通常の表示はもういっぱいクライアントアプリあるからそっちにお任せしますが、

TwitTagsの場合、Followerの多い人のuser_idがタグとして上位にきてしまってました。

欲しいのはそうじゃなくて、会話にひそんでいる単語なわけです。

ということで今回いじってみました。

アイコンも出したかったのをほったらかしていたんですが、

これを機に取得。

意外と便利なのですよ。

friends time lineには出てこない話題も拾えるので、

たとえば@miyagawaへのPlack関連の質問なんかも追えたりします。

Twitterでの情報収集ってまだまだ未来がある気がします。

たのしー

 



CodeIgniterとKohana

PHPでOpenSocialなアプリを作ろうと思いまして。


ということでどのように作るか。

Web Application Frameworkの選定で新しいWAF調べたので記録

PHP軽量WAF

http://php.tekmemo.net/?p=899

↑とかを見てもらえればわかるように、けっこう出てます。

どれがベストかなんてわからんですよね。

去年の初春に、同様にPHP用WAFを調べたんですが、

バージョンも進化し、ドキュメントも進化し、

はたまた分家したプロジェクトもあり。

なかなか変わったようです。

そんな中で個人的な感想

・ちいたん


名前が。。

昨年見たときはドキュメントがまだ少なかったのもあり、

あまり心揺さぶられなかったのですが、ずいぶん美味しそうなフレームワークになったようです。

ただ、甚だ個人的な趣味であれなんですが、requireを各クラス内で書くのはイヤでして。。

というか名前が。。。

で不採用でした。

ただ、GAE/J版が分家されているようで、


こちらはPHPのソース資源を生かしたクラウド開発が出来そうなので、

トラックしておきたいです。

いいフレームワークなのは間違いないよね。

・CodeIgniter


昨年はこれを採用しました。

公式サイトがかっこいい。というのも理由の一つでした。

それはそれとして、フルスタックのフレームワークなので、

機能は十分です。

機能が多いので重くなるのではないかとか思われつつ、

コアの設計が小さく、ほとんどの機能がオプションモジュールなので、

ロードは早かったです。Cakeとの比較ベンチマークどっかてみたな。。数倍出てた。

昨年こちらを採用した理由は、他のフレームワークに比べてドキュメントが充実していたからです。

ドキュメントが充実しているかどうかは、採用条件として重視しますよね。

これ読んどいて。であらかた説明済むし。

・Kohana


今回これにとっても心奪われました。

CodeIgniterからの分家とのことで。

CodeIgniterは既知の課題として

・デフォルトだとセッションデータをCookieのvalueに持つ

という不安極まりない作りをしています。

さすがにプロダクション環境でそんなことしたら、いくら暗号化していても不安で夜も眠れないので、

カスタマイズしたりとちょくちょくめんどくさい実装をしていました。

この点を、一般的なセッションの構造に直していただいたようでして。

また、CodeIgniterがphp4互換だったのをphp5専用にしています。

後方互換自体は別にいいんだけど、

古いコード体系や、無駄なバリデーションがコアに入ってしまうので、

php4の足切り自体が更なる軽量化につながるかなーと思っています。


という感じで、Kohana使い始めてみました。

 



Wicket試してみたい

ということで、読んどくメモ。


 


http://sourceforge.jp/projects/wicket-ja/wiki/Maven2%E3%81%A7QuickStart


http://true-teck.net/blog/post/2009/07/29/Google-App-Engine-for-Javae381a6Wickete38292e4bdbfe381a3e3819fWebe382a2e38395e383aae38292e585ace9968be38197e381a6e381bfe3828b.aspx


ついでに本買った。


http://www.amazon.co.jp/%E3%82%AA%E3%83%BC%E3%83%97%E3%83%B3%E3%82%BD%E3%83%BC%E3%82%B9%E5%BE%B9%E5%BA%95%E6%B4%BB%E7%94%A8-Wicket%E3%81%AB%E3%82%88%E3%82%8BWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E9%96%8B%E7%99%BA-%E7%9F%A2%E9%87%8E-%E5%8B%89/dp/4798022217/ref=sr_1_1?ie=UTF8&qid=1248866994&sr=8-1


 



Catalyst APIってやつにはまってみる

あとで読んどくリスト。


http://d.hatena.ne.jp/foosin/20090326/1238077646
http://blog.livedoor.jp/sasata299/archives/51210958.html
http://d.hatena.ne.jp/foosin/20090317/1237308976
http://d.hatena.ne.jp/foosin/20090323/1237815364
http://blog.hide-k.net/archives/2007/10/catalystmodelad.php


 



備忘録:Oracle CSV出力

よくわすれるのでメモ。


コピペ用。


 


■固定長でのCSV出力


set echo off
set linesize 1000
set pagesize 0
set trimspool on
set feedback off
set colsep ','
spool c:\temp\emp.csv
select * from emp;
E01,D01,名字1  ,名前1  , 10
E02,D01,名字2  ,名前2  , 50
E03,D02,名字3  ,名前3  , 100
spool off


 


■可変長でのCSV出力


set echo off
set linesize 1000
set pagesize 0
spool c:\temp\emp.csv
select emp_id ||','|| dept_id ||','|| first_name ||','|| last_name ||','||salary from emp;
E01,D01,名字1,名前1,10
E02,D01,名字2,名前2,50
E03,D02,名字3,名前3,100
spool off


めんどくさいですね


 



SAStrutsとDolteng

SAStrutsでアプリを書く機会がございましたので雑感を。



・Seasar2
Dolteng様の効果によりあまり意識することなくアプリがかけましたね。
SAStrursの雛形にマージされているというか。。
HOT Deployはきもちよかったですね。
PHPとかとかわならい感覚で開発できました。


・Dolteng
Seasar2のフレームワーク用Eclipseプラグイン
これのおかげでなーんも気にすることなくアプリ雛形が生成されてきました。
TEST用ソースツリーまで自動生成いただいてしまい、
らくちんきわまりない。


・SAStruts
Strutsの現代版ラッパーということのようですが、
快適すぎてはまりそうです。
綺麗にフルスタックなので、とくに悩むことなくガリガリ作っていけるかと。
Seasar2が各コンポーネントの呼び込みをやってくれるので、
オレオレライブラリとの結合も簡単。
ビジネスロジックをPojoで書きすすめられるので、
フレームワーク依存した脳みそにならないで済みそうです。


・S2JDBC
流れるようなIFのORマッパーということですね。
流れるように検索出来ます。更新できます。
ぐらいしかいいようがないですね。簡単快適。


・S2Dxo
今回、
DBのEntity <-> Dto <-> Json
というフローのAPIアプリだったので、
Entity <-> Dto変換で利用。
これまた何を定義しないでも綺麗に変換してくれるもので。
感謝感激ですね。


・JSONIC
Seasar2とは関係ないですが、素晴らしいライブラリでした。
Dto <-> Json
の変換で利用していたのですが、
変換時に変換先のクラスを指定するだけで、多重のオブジェクトまで、しっかり変換。
プロパティがListであればそれもしっかり詰めてくれます。
2環境のJavaでJsonを橋渡しにやりとりをするアプリだったんですが、
気持ちイイくらいさくさくデータの出し入れができました。
しかもJsonだから中身デバッグしやすい。
感謝。


とまぁ、なかなか最新の構成でJava開発をしてみました。
Javaのめんどくさいイメージはほぼほぼ払拭することができるのではないかなーとか、
Javaってまだまだいけてんじゃね?
という感想を持てましたね。


プロダクション環境へのデプロイはPHPとかよりは手間かかりますが、
これは更新頻度によっては問題にならないですかね。


次はSlim3によるAppEngineが楽しみですね。
遊びたい。


 



SnowLeopard + PHP5.3でのMySQLリモート接続

MacPortでインストールしたPHP5.3では、


mysqlnd(php5.3のmysql native client)が適用される。

しかし、CentOSなどのyumでインストールできるMySQLサーバーとの相性がよろしくない。

PHP Warning:  mysql_connect(): mysqlnd cannot connect to MySQL 4.1+ using old authentication

というエラーが現れ、接続することができません。

mysqlndを利用しないよう再コンパイルが必要となる。

2010/07/30 追記

portのvariants指定によりインストールを選べました。

sudo port install php5-mysql +mysql5

ただ、portのPHPを自分で再コンパイルしたい時もあると思うので、

以下記述は残します。

php -iで出てくるport版のcomplileオプションを参照し、

php5.3.2を再コンパイルした。

この際、MySQLのライブラリ指定で癖があったのでメモ。


--with-mysql=/opt/local/include/mysql5/mysql

で試してみたのだが、ライブラリ類とヘッダーの相対パスがずれているため、

必要なファイルが見つからないと申している。


> cd /tmp
> mkdir php5mysql5
> ln -s /opt/local/lib/mysql5 php5mysql5/lib
> ln -s /opt/local/include/mysql5 php5mysql5/include
>
> Then use --with-mysql=/tmp/php5mysql5 in your php configure line
> instead. Then delete /tmp/php5mysql5 when you're done.


上記のように、tmpにライブラリ類のシンボリックリンクを作成し、コンパイルをおこなうことで成功。

mysqlndめんどい。

 



PHP Xdebug

利用したのでインストールメモ


■サーバー側




pecl install xdebug

mv /usr/local/lib/php/extensions/no-debug-non-zts-20060613/xdebug.so

/usr/local/lib/php/extensions/

echo "extension=xdebug.so" >> /usr/local/lib/php.ini 

 

vi php.ini

xdebug.profiler_enable_trigger = 1

xdebug.profiler_enable = On;



■クライアント(プロファイル結果を見るマシン)


Mac OSXの場合、

sudo port install kcachegrind 



起動方法

$ kcachegrind [プロファイルした結果]

出てくるもの


サーバー応答がなんかのボトルネックで死ぬ直前のスナップショットが取れた。

※↑のはちがうよ

ボトルネックの分別は完了したので、あとはチューニングです。

きっついねー


 



Synergyc設定インストールめも

MacProの再設定しているんですが、

毎度毎度めんどくさいsynergycの設定をキャプっときます。

まずは、コマンドラインでの起動について。

以下 -f をつけるとフロントで起動してくれます。

 


screen synergy command
 






os 10.5.8 と synergy 1.3.1だったんですが、

なぜかデーモンモードで起動しないので

/dev/nullに捨てるようにして起動。

自動起動用にapplescript


screen synergy applescript2
 







screen synergy applescript



 



 



VoxからMixiへ投稿するためのPlagger設定

Voxの皆様や、Hatenaから自動投稿死たりしている方のモノをぱくってますが


まあ需要あるんだろう ということで記載


 


 


global:
 assets_path: /usr/local/share/assets/
 timezone: Asia/Tokyo
 log:
  level: debug


 


plugins:
  - module: Subscription::Config
    config:
      feed:
        - url: http://taikimen.vox.com/library/posts/atom-full.xml


  - module: Filter::Reverse


  - module: Filter::Rule
    rule:
      module: Deduped
      path: /home/shimazu/.vox2mixi.db


#エントリ内の画像を取得して最初の3枚を投稿
  - module: Filter::FindEnclosures
  - module: Filter::FetchEnclosure
    config:
      dir: /tmp


#エントリ内の<a> <img>を変換
  - module: Filter::Regexp
    config:
      regexp: s//([m:133]$1)/g
  - module: Filter::Regexp
    config:
      regexp: s/(.*?)<\/a>/link:$1/g
  - module: Filter::Regexp
    config:
      regexp: s/.*enclosure-asset-name.*\n//g
  - module: Filter::TinyURL


  - module: Publish::MixiDiary
    config:
      "username": "hoge@hoge.com"
      "password": "hogehoge"


 


 


 


 


 


 


 


画像の投稿は失敗してますね。
デバッグする気も起きません。


元々はTitle
のように、<a hreg="url">Title</a>の書式が対象のようだが、
個人的には<a hreg="url">url</a>とするので、TinyURLプラグイン追加


というかPluginつくった。
http://github.com/taikimen/Plagger-Plugin-Filter-TinyURL


Vox上での改行は詰まってMixiに表示されるので、
結局投稿した後にすこし調整したりしてます。


でも、本文マルチポストとかより楽なので重宝してます。


 



Twitter フォロワーのリスト出力

#!/usr/bin/perl -w
use strict;
use Net::Twitter;

my $user_id = 'taikimen';

my $nt = Net::Twitter->new(
    username => 'taikimen',
    password => '********'
);

binmode(STDOUT, ":utf8");

for (my $cursor = -1, my $fol; $cursor; $cursor = $fol->{next_cursor} ){
    $fol = $nt->followers({'screen_name' => $user_id, cursor => $cursor});
    foreach my $user(@{$fol->{users}}){
        print $user->{name}.",".$user->{screen_name}."\n";
    }
}

exit 0;

 



懸賞とかで使えるんじゃないかなー。
Authenticateで指定したユーザーじゃないと、
TL非公開ユーザーがとれませぬ。