新しいblogに移行しました

新ブログ "All Yout Bugs Are Belong To Ass" に移行しました!

2011-02-21

[Perl]Hachioji.pm #2

去る2/19(土)に開催されたHachioji.pm #2に参加しました。

既にあるレポート等

hondallicaさんのHachioji.pm参加者まとめ
hide_o_55さんのレポート
uzullaさんのレポート
maka2_donzokoさんのレポート
norry_gogoさんのレポート
equinox79さんのレポート(#1含む)
bisque33さんのレポート

そもそもHachioji.pmとは

ATNDにあるuzullaさんのご説明によると、
本イベントは主に東京西部、神奈川西部のエンジニアの交流を目的としたものです。
普段エンジニア交流会は都心部、平日に多くおこなわれており、それらの補完を目指しています。

pmとついている様に、Perlユーザーが多くいますが、話題はPerlに限定されているわけではありませんし、私を始め、PHPやJS、HTML等をPerlよりも使っている人多くいます。
エンジニアであれば、お気軽に参加いただければと思います。
とのこと。

手っ取り早く言うと、「八王子周辺のIT技術者の飲み会」で間違いないと思います。
たぶん首都圏のpmの中では最も敷居の低いpmでしょう。
ご興味のあるあなた!ぜひとも参加してみてください!
次回は3/26(土) 18:00スタート予定です! → Hachioji.pm #3

IRC #hachiojipm (freenode)
Twitter @hachiojipm #hachiojipm

Hachioji.pm 恒例 A4ライトニングトーク

今回のお題は
「Perl以外」
でした。

MacでDTraceを使って見る - ono_pmさん

Mac上でDTraceを使い、Tatsumaki/eg/chatをトレースしてみたレポート。
>perlならDevel::NYTProfがあるけど…
>>もっとローレベルな情報取得をする場合(デバイスドライバの開発など)には重宝するとのこと。

haXeでさぼる。 - sKSKeさん

このLTでhaXeという言語を初めて知りました。
JavaScript,PHP,ActionScript等に変換できるのが強みだそうです。

タスク管理について - bisque33さん

GTDとよばれるワークフローの管理方法に、TwitterとRemember the Milkを取り入れるタスク管理手法の紹介。
ご本人も当日より始めたばかりだそうです。

プロトタイプベースOOPへの誘い - ytnobody

はい、Plass紹介したかっただけです><
LT資料はこちら(スライドが8枚ありますが、実際はA4用紙1枚に印刷しました)。

モバイルのキャリア課金に関するお話 - hondallicaさん

キャリア側の対応状況やノウハウを披露してくださいました。
ただし、内容が内容なので、詳細は非公開です。

モバイル端末の位置情報まとめ - hatakさん

モバイルにおけるGPSと一般的に呼ばれているのは、A-GPS方式で、
測地系一つとっても日本測地系と世界測地系で400~500mも差がでてしまうというお話。
実際、OpenSocialコンテナによっても、採用している測地系が異なるので、苦戦を強いられます。
ちなみに、Geo::Coordinates::Converterを使えば、測地系毎の変換ができます。(その際に生じる誤差がどうなるかは解りませんが。。。)

Hachioji.pmとは何だったのか - maka2_donzokoさん

前日にTwitterで、
鉄拳メソッドでやればいいんじゃないんですか?」
なあんて、軽い気持ちでボケていたのですが、それがどうやら図星だったらしく、鉄拳風紙芝居/もんたハイブリッドメソッドというとてつもない手法でLTを敢行してました。
hachioji自体にもなんか尊大な意味があったり、PMには某大物チェンバロ奏者があてがわれていたりと、お馴染みのまかまか節が炸裂していたのでした。
LT資料

node.jsでperl - hide_o_55さん

node.jsで何か作りたい→addonはC++で作れる→つまりCのライブラリも使える→perlインタプリタもCだから組み込める!
というのを思いつき、実際にやってしまうのが彼にとって自然な流れらしいですw
そのうち、CPANモジュールをnode.jsに食わせたりするのではないのでしょうか。

IIS5.0→IIS7.0に変わってハマったこと - usaymanさん

閉域網で活躍するクライアント証明書認証付きのHTTP-GWサーバのIISバージョンアップ時の苦労話。
IISと聞くだけでも「ご苦労様です!」と言わざるを得ないのに、バージョンアップに伴う仕様変更に相当泣かされている模様でした。
そしてそれぞれの解決方法もWindowsならではのパワープレイが効いており、改めて「IISコワー><」と実感した次第です。

OAuth/xAuth on mobile sucks - uzullaさん

いつぞやのTwitterの偉い人曰く「モバイルにも力入れマース!」→OAuthだとモバイル環境で文字化けてたりして使い物にならない。→あれはリップサービスだったんだねー。→xauthも面倒。じゃあどうしようか。→WWW::Mechanizeでいいじゃないか→WWW::Mechanizeマンセー!!!
いや、僕が大分昔にSourceforgeにあげていたCUIツイッタークライアント「Cuitter」もそんな実装してますんでw

uzullaさん「んじゃうごかしまーす」<ポチっ>
...
uzullaさん「うごかねーw」<ぎょわははははは>
ネタとテクノロジーに関する話題が程よくミックスされた、面白いLTでした!

最近作った2つのtwitter-botについて - equinox79さん

自社サービス「いつもNAVI」関連のツイッターbot[@itsumolabot]の紹介と、amazonの特価情報を垂れ流す[@amzn_off_bot]の紹介。
いつもNAVIはサービスとして非常によくできていますね!

Cassandraを使って複数台のMTAでNGアドレスを共有とか - norry_gogoさん

PHPで作られたMTA(!!!)がNGアドレスを溜め込んだり、MXにつなげる前に予めNGアドレスの場合はエラーで返したりするメール配信周りのバックエンドのお話。
Cassandraでデータ分散させるも、分散自体が偏ったりして結構苦戦している模様です。
それもそうですが、PHPのMTAというのが非常に興味深いですね!

SQLのEXPLAINについて - takeR14aさん

SQLでEXPLAIN使ってクエリ自体のパフォーマンスをチェックしましょうというお話。EXPLAIN重要ですよ!
MySQLとPostgreSQLとでEXPLAINの出方が全然違ったりするので、この辺はできるなら統一してほしいかも…

2011-02-17

[Scala]scala.xmlつかってxhtml書き換えたいけどやり方が分からなくてこまったの巻

以下のようなmigo.scalaを書いているのですが、
import scala.io._
import scala.xml._

object migo {

    val xml = <html><head><title>abc</title></head><body><h1>hoge</h1><p class="piyo">ahoahoman</p><p><a href="#">yayaya</a>shotes</p></body></html>

    def main ( args: Array[String] ) {
         val targets = xml \\ "p"
         targets.map( _.text ).foreach( println )
    }

}
targets.map(_.text)してるところで、_.textの内容を"おっぺけぺー"に書き換えたい場合、どうすればいいんでしょう。。。
text()って引数Stringじゃないし、アクセッサではないようなので。。。orz
だれかおしえてください!!!!><

2011-02-14

[daemontools]dtinstallというのを用意しました

わざわざ大仰に言うほどのものじゃないんですけど。

かなり前に書いた記事で、daemontoolsのインストールをするスクリプトをこさえました。
もうあれから1年半ほど経過したわけですが、僕自身が未だにこのスクリプトに助けられています。
で、いっそのことネットからもっと取りやすい位置に置いておけばいいんじゃないかと思い、gist + URL短縮でサクッと取得しやすいURLにしてみました。

gist: 825704 - daemontools installer script- GitHub

入手はこちら→http://xrl.us/dtinstall

こちらが最新版です。 http://is.gd/dtinstall

$ curl -L http://is.gd/dtinstall | sh

とすれば、daemontoolsのインストールが始まります。

※2014/01/03 記事を一部修正しました。

2011-02-01

[Perl]インスタンスベースOOPを少し楽に書けるPlassってモジュールを書いた

インスタンスベースOOPって聞いたことありますか?ぶっちゃけ、僕もついこの前までこの用語を知らなかったです!(ちなみに「プロトタイプベース」っていう用語としてなら、それなりに普及しているっぽいんですけど。。。)

要するに、JavaScriptにおけるOOPみたいなものだと思ってもらえれば良いみたいです。
で、Perlでもそういうことを簡単にやってのけるような実装が無いわけじゃないみたいですが(インスタンスベースOOPで必要な機能を部分的にカバーするモジュールなら幾つかある)、あくまで「インスタンスベースOOPの面倒をみてやるぜー」的なモジュールとなると、そういうのは見つけられなかったです。
また、Perlの言語レベルである程度カバーできる箇所もあるんですけど、それってキモチワルい見た目のソースを書くことにつながったりするので、そういうのはナシって方向で考えると、

「あれ、PerlでインスタンスベースOOP実現するのって、なんかすっきりしたやり方が無い様な。。。」

という結果に行き着いてしまいました。。。
そんなわけで、インスタンスベースOOPの面倒を見るモジュールとしてPlassというのを作ってみました!

こんな感じで使えます

ちなみに以下のソースは、Cyanというインスタンスベースな言語のドキュメントの一部にあったサンプルソースです。
Human = Object.child()
Human.walk = ^(self, dir){
  say(self.name + " walked " + dir + ".")
}

Superman = Human.child()
Superman.fly = ^(self, dir){
  say(self.name + " flew " + dir + ".")
}

human = Human.child()
human.name = "John"
human.walk("east")  #=> John walked east.

superman = Superman.child()
superman.name = "Clark"
superman.fly("north")  #=> Clark flew north.
superman.walk("west")  #=> Clark walked west.

これをPerlでPlassを使って書き換えると、以下の様になります。
use warnings;
use strict;
use Plass;

# plassコマンドでPlassオブジェクトのクローンを作成
my $Human = plass; 

# Humanインスタンスにwalkメソッドを追加
$Human->method( walk => sub {
    my ( $self, $dir ) = @_;
    print $self->name. " walked ". $dir. ".\n";
} );

# SupermanインスタンスはHumanインスタンスのクローン
my $Superman = $Human->plass;

# Supermanインスタンスにflyメソッドを追加
$Superman->method( fly => sub {
    my ( $self, $dir ) = @_;
    print $self->name. " flew ". $dir. ".\n";
} );

# humanインスタンスはHumanインスタンスのクローン
my $human = $Human->plass;

# humanインスタンスのname値を設定
$human->name( "John" );

# Humanインスタンスから継承したwalkメソッドを実行
$human->walk( "east" );

# supermanインスタンスはSupermanインスタンスのクローン
my $superman = $Superman->plass;

# supermanインスタンスのname値を設定
$superman->name( "Clark" );

# Supermanインスタンスから継承したflyメソッドとwalkメソッドを実行
$superman->fly( "north" );
$superman->walk( "west" );

出力結果は
John walked east.
Clark flew north.
Clark walked west.
となり、Cyanのそれと同じ出力(Cyanのドキュメントによると、ですが^^;)になっていることがわかります。

Plassではインスタンス継承時にメンバ変数やメソッドを一気に被せることもできますので、上のコードは以下のように書くことが可能です。
use warnings;
use strict;
use Plass;

# Humanインスタンスの定義
my $Human = plass(
  walk => sub {
    my ( $self, $dir ) = @_;
    print $self->name. " walked ". $dir. ".\n";
  }
);

# Supermanインスタンスの定義
my $Superman = $Human->plass(
  fly => sub {
    my ( $self, $dir ) = @_;
    print $self->name. " flew ". $dir. ".\n";
  }
);

# humanインスタンスの定義
my $human = $Human->plass( name => "John" );

# humanインスタンスのwalkメソッドを実行
$human->walk( "east" );

# supermanインスタンスの定義
my $superman = $Superman->plass( name => "Clark" );

# supermanインスタンスのflyメソッドおよびwalkメソッドを実行
$superman->fly( "north" );
$superman->walk( "west" );

出力結果は
John walked east.
Clark flew north.
Clark walked west.
先ほどと同様ですね。

もし興味を持っていただけたら


ytnobody/Plass - GitHub

にアップしてありますので、お気軽にダウンロードしていただければ幸いです!
但し現在のところ、圧倒的にテストが不足してますので、そこんとこは予めご了承ください。

ちなみに僕はインスタンスベースOOP言語は今までJavaScriptしか触ったことが無いです(と思います)。

もし「真のインスタンスベースとはここが違うじゃねえか!」などというツッコミとか「こうした方が使いやすいんじゃないか」などのご提案、「これをこう使うと変になる!」みたいなバグ報告などなどございましたら、@ytnobodyまでご連絡ください!

余談ですが


Cyan言語の開発者はなんと、高校生の頃にCyanを開発したそうですよ!猛者ですね!Cyan言語についても興味がでてきました!

[メモ]vimで文字コードを指定してファイルを開きなおす

ファイルを普通に開いてから、
:e ++enc=Shift_JIS
でOK。