毎度おなじみHachioji.pmに参加してきました。
今回は町田で開催ということもあって、近くに住んでいることもあり、幹事をやらせてもらったのですが、24名の参加者が集まる賑やかなpmとなりました。雨にもかかわらず来てくださった皆さん、本当にありがとう!
LTのテーマは「○○道」ということだったのですが、みなさん思い思いの「道」に関するネタを発表されていました。
ちなみにぼくは「幹事道」と題し、perl関係ない内容の話をさせてもらいました(資料こちら)。
幹事の経験が実はあまり無いので、主に時間周りでご不便をかけてしまったところもあったのですが(本当に申し訳ない!)、そういったところもフォローしていただいたりした結果、非常に意義深く、楽しい集まりになったんだと思っています。
Hachioji.pmは、参加者全員の協力のもとに成り立っているのです。
※名言:「Perlはコンピュータとお話をするための自然言語」
2011-12-04
[perl]Hachioji.pm #11 で幹事やってみた
[perl]今年のadvent calendarの記事を書いたので宣伝
Casual Track 3日目の記事を書きました。
Crypt::SaltedHash - パスワードを安全に保存するための一手段 - Perl Advent Calendar Japan 2011 Casual Track
テーマは割りとディープなものですが、5分以内で読める非常にライトな内容ですので、まあ読んでやってください。
それと、記事を書く人も募集中だそうですよー!
Crypt::SaltedHash - パスワードを安全に保存するための一手段 - Perl Advent Calendar Japan 2011 Casual Track
テーマは割りとディープなものですが、5分以内で読める非常にライトな内容ですので、まあ読んでやってください。
それと、記事を書く人も募集中だそうですよー!
2011-11-18
[perl]Yokohama.pm #8に参加したのでメモをあげてみる
bonnuさん - orepanとcpanmを使ったcpan module の部分ミラーの運用管理
Cartonの話ではありません!
kazeburoさんの11/2月時点のブログ記事が元ネタ。
CPANミラーをローカルに作る理由
本家CPANの更新の影響を受けずにモジュールをインストールしたい。
アプリケーションが依存するモジュールの挙動を保障するためにバージョンを固定する必要がある。
アプリケーションをネットに依存せずに確実にインストールしたい
search.cpan.orgやそのミラーは作者による取り下げも反映されてしまう。
CPANネットワークがあがっている保障はない。
複数代をセットアップする際に外部ネットワークに接続したくない。
数十大規模になればなおさら。セットアップをすばやく行うためにも重要。
企業によっては外部ネットワークへの接続ポリシーに縛られる。
社内パッケージをCPANモジュールと同様に扱いたい。
ミラーを作り、維持するために必要な道具
cpanm
orepan
pm-uninstall
手順
cpanmをセットアップする
OrePANをセットアップする
orepan.pl、orepan_index.plにパスを通す
ローカルミラーを作る
モジュールのダウンロード
アプリケーションのMakefile.PLから依存モジュールをDLする。(requiresに依存モジュールを書いておく)
cpanm のオプション --save-dists=cpan-mirror をつけておくと、tarballにモジュールを保存してくれる。
ダウンロードしたファイルの確認
インデックスの作成
orepan_index.plを利用してインデックスを作成する。
作成したインデックスファイルの確認
ここまででローカルミラーが完成。
バージョン管理システムへの登録
GITなどに。
ローカルミラーを利用してのデプロイ
デプロイしたいサーバ上でプロジェクトをチェックアウト。
プロジェクトに含まれるミラーをつかってcpanmを実行。(cpanm --mirror=hogehoge --mirror-only)
ローカルミラーを運用
モジュールを追加する
Makefile.PLに依存モジュールの記述を追加
cpanmを実行
orepan_index.plを実行。
オリジナルモジュールを追加
orepan.plを利用してミラーに追加。
チラ裏
Carton
minicpan_webserver.pl
まとめ
ミラーを運用することでサービスを簡単に設置できる状態を整える。
プロジェクトに関連付けてtarballにまとめておくだけです。
3年後、今のCPANモジュールをベースにして書かれたアプリケーションを楽にセットアップできるように
CatMoose以前のプロジェクトをすんなり動かすのは難しい
APIが変更されるモジュールもままある
野良リポジトリのモジュールなどはリポジトリがなくなってることも。
masartzさん - Mixiの大規模案件の話
大規模案件とは
mixiページ作ったときの話。
名前空間、モジュール設計
1つのレポジトリで世界が構成されている場合
名前空間の衝突は気をつけるべき問題
命名規則もトップレベルはサービスを表現できるように
配下の構成は周りと整合性があるように
意識あわせとタスク分担のために結構がっちり決めた
そんなんやってもだいたいは仕様追加・変更で思い通りにならない
最初にがっちり決めるものではない
単体テスト
レイヤーごとに適切なテストがある。
今回はController/Model・DB-Accessそれぞれで書きわけ・方針決めた
開発人数がおおかったので、誰がどの修正をしたのかわかるように
DBAccessクラスのテスト
DBとの接続
ORM使ってない
Select系はis_deeplyで取得結果全体チェック
Insert系もInsert行をSelectしてis_deeplyで全体チェック
これらの実現のために社内製Fixtureモジュールを指定
最近ではDBIx::DataFactoryも使い始めている
Controllerのテスト
社内の一番の泣き所
Plack::Test::test_psgi使った
すごく便利
今後はどこまでやるかの境界線も考えたい。
CI(Jenkins)
Perl5の開発にも使われている
test書く→ブランチにコミットする→自動テスト
テスト結果をIRCで通知
scoreboard
コミットのスコアを計算してくれる
テスト落とすと-10点
テストを10個書くと+10点
一番最後のリリースのとき
プロジェクトメンバー全員が数ヶ月必死にテストを書いた
プロジェクトを通じて個人的な振り返り
コードをあまりかけなかったので、もっと書きたかった
先のフェーズを見て、必要なことをする
約束事をきめたり、環境構築周りをごにょごにょしたり。
プランチコントロール、リリースフローの調整
忙しさのピークな時も仕事を拾えない
運用トークをもっと聞きたい。
Yokohama.pmだし。
リーダーやマネージャーさんのマネジメントな話も聞きたい
まとめ
大規模開発にはそれなりの大変さ
スピード感ではぜんぜん遅い
サービス品質もまだまだなところもある
CIツールはとっても便利なので導入するといいとおもいます。
コード書いてる人意外の話も聞きたいです。
Yappoさん - はかどる話2
ITSのはかどった話
before
Cat-based
Moose
mod_perl
直したいけどメンテやってる人にやらせようと思った
After
Amon2 based
cpanmで簡単に開発環境をつくれる
コードの見通しが良くなった
開発者が3倍くらいになった
業務がはかどる拡張がすごい増えた
Tracから乗り換える開発プロジェクトも
タイトルの抽出
記法の追加
PRE記法、SUPER-PRE記法
TODO記法
社内GyazoURLをインライン表示
変更があったらIRCに通知
喜びの声
TODO便利
マイルストーンとは?
ikachanもほめられた
まとめ
社内ツールは小さく作って新規参入しやすいようにしておくと捗る。
IRC関連
ツイッターのURLから内容を取ってくるスクリプトを書いた
ITSのURL張られたときに内容をとってくる
#数字でIRCのチャンネルに該当するITSのイッシューを持ってくる
コミットメッセージの内容もはいたり
CloudForecastとかYabitzとの連携
グラフ
書くためのツールがなかったので、昨夜いらっとして書いた。
→ClothForest
kazeburo先生が本気だし始めたので、今後は正座して見守る
IRCBot捗らせたい話
Kuragepo
サーバ・クライアントモデル
クライアントのつくりが簡単。依存少ない。
gearmand動かしてるけどkuragepo -S ircserverってするだけでOK
ikasam_aさん - Brownie
YAPC::AsiaでPerlのテストと他のテストの比較をした。
Perlのテストの足りないライブラリ
Mock
ブラウザインテグレーション周り
Capybara
実際のユーザがブラウザで操作を行うのをエミュレーション/テストするもの
DSL
ドライバ
RackTest
Selenium
HtmlUnit
WebKit(QtWebKit)
Envjs
Zombie.js
Brownie
今作ってる
Capybaraをインスパイア
統一的なAPIを提供し、ブラウザ操作をエミュレーションできるようにした
ドライバ
Selenium
Mechanize
HtmlUnit
今後
Mechanizeドライバを完成させる
Scoping
Seleniumサーバを内臓する
HtmlUnitドライバを作ってみたい
shin1roseiさん - カヤック流ソーシャルアプリの作り方 アプリ編
「ぼくらの甲子園!」「ぼくらの甲子園!熱闘編」を作っている
サイトの規模間
mobageランキングに入るくらい(最高6位)
開発環境
条件
ローカルで開発できること
本番環境に極力近いこと
Perl・ライブラリのバージョン
Gadgetサーバ
APIへのアクセス
APIClientの切り替え
Moxy+OpenSocialPlugin
Mobage対応。
利用ライブラリ
WAF=Ark
Template=Text::MicroTemplate
ORM=DBIC
DB関連
ORMはDBIC、場合によってはDBI
Shardingはしない
Paritioningを駆使する
DBIx::Class::Schema::Versioned
SQL::Translatorでバージョン間のDiffを取れる
DBIx::Class::Storage::DBI::Replicated
透過的にMasterとSlaveの振り分け
Moose依存
DBIx::Class::Schema::Versionedとの併用はできない
DBIx::Class::ResultSetのchain
DBICを導入してみて
SQLとORMの一元管理は必要
情報が多い
ソースがでかい
SQLの発行タイミングを意識する必要がある
まとめ
Perl初心者でもPerlでソーシャルアプリは作れる
そこそこの規模であればDBICは十分使える
Master-Slaveの透過的な振り分けなどを充実させて次はTengも挑戦したい
Perlに慣れてきたのでいろいろやりたい
gfxさん - From Template-Toolkit2 to Xslate
3行で
Xslateを開発
TTからの違いはWikiに書きます。
irc.perl.orgの#xslateへjoin!
テンプレートエンジン
要するにでっかいsprintf
早速使いたい
cpanmでOK
TT2 -> TTerse
INCLUDEが裸のワードを受け付けない
INCLUDE foo.ttの挙動
意図的にやってます。
FOREACH item = listが構文エラー
むやみやたらにエイリアスを作らない。
INCLUDE file WITH param1 = value ... でWITHが必須。
省略は良しとしない方向で。
関数・メソッドでスカラーコンテキスト強制
マクロがレキシカルスコープ
INCLUDEでマクロを取り込みたい
優先順位高めで実装予定
WRAPPERの微妙な違い
未確認。
エンコーディング関係
stashにはdecoded-UTF8で渡すべき。
エスケープ関連
mark_law()を使えばエスケープしない。
危ないところにしるしをつける意味が。
多用はオススメできません
Kolonもあります
Perl6ライクな構文。
オススメ
日本語ドキュメント
wikiで編集中
まとめ
わからないところがあったらMLにPOST!
日本語でOK
LT
sugyanさん - 記号PerlでFizzBuzz
FizzBuzz
"FizzBuzz"の形をしたFizzBuzz
1分でわかる記号プログラミング
拡張正規表現
XOR(排他的論理和)
use Acme::EyeDrops
32種類記号がある
もっと少ない種類の記号では?
いくつかは表現できない。
"1"があれば全部表現できる
HelloWorldも7種類の記号だけで!
Acme::HeptaSymbolizeというモジュールにまとめた
鋭意開発中
xaicronさん - いまつくったモジュールの紹介
ツイッターとかで マジレス -> mjrs
Acme::Mjrs?じゃなくてAcme::Shiin
Yokohama.pmではIRCで何かするのがきまりらしい
IRCにBOTを放流
本当はmjrs->マジレスにしたかった
nekokakさん - DBIx::Handler
DBIx::Handlerをつくった
DBIx::Connetorに無駄が多かったので自前実装。
txn()
txn_scope()
result_class()
trace_query(1)
思うところ
ORM使う場合はDBコネクション周り等の面倒見てくれる
Teng
開発再開
アドベントカレンダーやります
Spring_MTさん - Anaを開発してみました
毎回
Getopt::Longの使い方を調べたりしてる
そこでAna
毎回スクリプトにoptionハンドリングをかかないようにする
使い方
ana test.pl --test
まとめ
Input Outputのバリエーションを増やしたい
テストがまだたりない
clouderさん Plack on SL4A
Scripting Layer for Android
AndroidでPerlを動かせる
今回はPlackをいれてみた
Android SDKをつかってapkをインストール。
Interpretersを選ぶ
Perlをインストール
Perlが動く
hello_world.plを動かす→トーストが表示される
Plackを入れる
Android端末のSDカードをPCにマウントして、関連モジュールのみをインストール
Android端末にスクリプトを転送する
Start Server for run
起動できた!
まとめ
XS系はmake大変
キャリアの制限でグローバルに出れない
Perlで動くのが魅力
ikebeさん - Titaniumで色々捗るぞ
Titaniumを使ってアプリを作った話
AKB48の話w
AKBまとめというiPhoneアプリ
仕組み
サーバでクローラーが収集
本文から画像URLを取得
JSONにして再配信
サーバサイド
せいぜい100ブログくらいをクロール
Coro::Select+Furlで皿tt
Titanium
APIたたく系には強い
XHRとJSON
SQLiteもさくっと。
Androidまでカバーする夢は見ないほうが。
まとめ
Titanium使えばWeb脳でもアプリ作れますよ!
bayashiさん - Detect User-Agent
UserAgent
クライアントについて色々わかる
偽装できる
使ってますよね
集計とか
ある程度信頼できる
UAの管理は大変
どんどん変化する
一様にParseできない
出たとこ勝負
俺たちにはCPANがある!
Detect側も変化に対応しなければいけない
常にアクセスを受け付けて状況を把握するためのサイト
モジュールの構成やテストを複数人で維持
HTTP::UADetector
明日くらいにPush
typesterさん - Perl道場の紹介
Perl道場
オンラインでPerlの問題を受けられる
ソースがgithubで公開されている
良問・難問ランキングが見れる
2011-11-16
[perl]perlbrewな環境下でImage::Magickを使いたくなったのでセットアップしたというお話
「Imagerじゃないとかマジウケるんですけどw」的なツッコミは予測済みですが、Webサービスに組み込む機能として、PDF→JPEGな変換を行うのに、もっともスマートな方法としてImage::Magick(=PerlMagick)しか見つけられなかったのです。もっといい方法あったら教えてください!
ここまでできれば、$HOME/local/imagemagick/bin 以下にconvertなどのimagemagickのコマンド群が配置され、
本当ならここで、
とかできればいいんですけど、これやってみたらここに書いてあるような現象に見舞われました。
なので、ソースディレクトリの下にあるPerlMagickをインストールすることにします。
最後のmake installの時に
で、実際にPDFをJPEGにするときは、
まずはimagemagickをインストール
で、PerlMagick使うためにはホストにimagemagickが入ってないといけないんですけど、これをroot権限で入れるのは別に難しくない。のですが、perlbrewな環境となると、root権限?何それおいしいの?状態なので、今回は$HOME/local 以下にimagemagickをインストールする方法をとります。$ mkdir $HOME/local $ mkdir $HOME/src $ cd $HOME/src $ wget ftp://ftp.kddlabs.co.jp/graphics/ImageMagick/ImageMagick-6.7.3-6.tar.gz $ tar zxvf ImageMagick-6.7.3-6.tar.gz $ cd ImageMagick-6.7.3-6 ### prefixは必須、そのほかお好みでオプションつけてください $ ./configure --prefix $HOME/local/imagemagick $ make $ make install
ここまでできれば、$HOME/local/imagemagick/bin 以下にconvertなどのimagemagickのコマンド群が配置され、
$ $HOME/local/imagemagick/bin/convert foo.pdf bar-%03d.jpgみたいにPDF→JPEG変換ができるようになると思います。
PerlMagickのインストール
本当ならここで、
$ cpanm Image::Magick
とかできればいいんですけど、これやってみたらここに書いてあるような現象に見舞われました。
なので、ソースディレクトリの下にあるPerlMagickをインストールすることにします。
$ cd ./PerlMagick $ perl Makefile.PL $ make $ make test $ make install
最後のmake installの時に
Files found in blib/arch: installing files in blib/lib into architecture dependent library tree Installing /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/lib/site_perl/5.12.3/x86_64-linux/auto/Image/Magick/Magick.so Installing /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/lib/site_perl/5.12.3/x86_64-linux/auto/Image/Magick/Magick.bs Installing /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/lib/site_perl/5.12.3/x86_64-linux/auto/Image/Magick/autosplit.ix Installing /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/lib/site_perl/5.12.3/x86_64-linux/Image/Magick.pm Installing /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/man/man3/Image::Magick.3 Appending installation info to /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/lib/5.12.3/x86_64-linux/perllocal.podみたいに出てくれば、インストール完了です。
PerlでPDF→JPEG変換してみよう
とりあえず小さく書いてみました。use strict; use Image::Magick; my $i = Image::Magick->new; $i->Read( $ARGV[0] ); $i->Write( 'output-%03d.jpg' );
で、実際にPDFをJPEGにするときは、
$ perl ./imager.pl hachiojipm_10_LT_ytnobody.pdfとかすると、こんな具合に
$ ls -l *.jpg -rw-rw-r-- 1 ytnobody ytnobody 17787 11月 16 15:31 output-000.jpg -rw-rw-r-- 1 ytnobody ytnobody 3362 11月 16 15:31 output-001.jpg -rw-rw-r-- 1 ytnobody ytnobody 5223 11月 16 15:31 output-002.jpg -rw-rw-r-- 1 ytnobody ytnobody 12139 11月 16 15:31 output-003.jpg -rw-rw-r-- 1 ytnobody ytnobody 13849 11月 16 15:31 output-004.jpg -rw-rw-r-- 1 ytnobody ytnobody 32502 11月 16 15:31 output-005.jpg -rw-rw-r-- 1 ytnobody ytnobody 39353 11月 16 15:31 output-006.jpg -rw-rw-r-- 1 ytnobody ytnobody 14955 11月 16 15:31 output-007.jpg -rw-rw-r-- 1 ytnobody ytnobody 46003 11月 16 15:31 output-008.jpg -rw-rw-r-- 1 ytnobody ytnobody 34576 11月 16 15:31 output-009.jpg -rw-rw-r-- 1 ytnobody ytnobody 5327 11月 16 15:31 output-010.jpg -rw-rw-r-- 1 ytnobody ytnobody 15200 11月 16 15:31 output-011.jpg -rw-rw-r-- 1 ytnobody ytnobody 10807 11月 16 15:31 output-012.jpg -rw-rw-r-- 1 ytnobody ytnobody 7135 11月 16 15:31 output-013.jpg -rw-rw-r-- 1 ytnobody ytnobody 12210 11月 16 15:31 output-014.jpg -rw-rw-r-- 1 ytnobody ytnobody 7920 11月 16 15:31 output-015.jpg -rw-rw-r-- 1 ytnobody ytnobody 7375 11月 16 15:31 output-016.jpg -rw-rw-r-- 1 ytnobody ytnobody 8818 11月 16 15:31 output-017.jpg -rw-rw-r-- 1 ytnobody ytnobody 8524 11月 16 15:31 output-018.jpg -rw-rw-r-- 1 ytnobody ytnobody 7237 11月 16 15:31 output-019.jpg -rw-rw-r-- 1 ytnobody ytnobody 11853 11月 16 15:31 output-020.jpg -rw-rw-r-- 1 ytnobody ytnobody 6681 11月 16 15:31 output-021.jpg -rw-rw-r-- 1 ytnobody ytnobody 6142 11月 16 15:31 output-022.jpg -rw-rw-r-- 1 ytnobody ytnobody 6012 11月 16 15:31 output-023.jpg -rw-rw-r-- 1 ytnobody ytnobody 44886 11月 16 15:31 output-024.jpg -rw-rw-r-- 1 ytnobody ytnobody 5473 11月 16 15:31 output-025.jpg -rw-rw-r-- 1 ytnobody ytnobody 3592 11月 16 15:31 output-026.jpg -rw-rw-r-- 1 ytnobody ytnobody 3880 11月 16 15:31 output-027.jpg -rw-rw-r-- 1 ytnobody ytnobody 27537 11月 16 15:31 output-028.jpg -rw-rw-r-- 1 ytnobody ytnobody 9094 11月 16 15:31 output-029.jpg -rw-rw-r-- 1 ytnobody ytnobody 13211 11月 16 15:31 output-030.jpg -rw-rw-r-- 1 ytnobody ytnobody 45757 11月 16 15:31 output-031.jpg -rw-rw-r-- 1 ytnobody ytnobody 7093 11月 16 15:31 output-032.jpg -rw-rw-r-- 1 ytnobody ytnobody 49141 11月 16 15:31 output-033.jpg -rw-rw-r-- 1 ytnobody ytnobody 35089 11月 16 15:31 output-034.jpg画像ファイルがボコボコ出来上がります。まあ当たり前ですねw
2011-10-30
[Perl]Hachioji.pm #10
10/29(土)、11回目の開催となるHachioji.pmに参加してきました。
会場となったペルー料理専門店MISKYは Hachioji.pm では2回目の利用。こちらのお店では、ソーセージやらパスタやらチキンステーキやらを心行くまで堪能できます。また、テーブルに配られる3種類のディップソースがあるのですが、これがまたスパイシーでおいしいです!
今回は初参加の方が多かったので、まずは自己紹介から始まり、その後飲んだ食ったをしながら技術的な話やら世間話で場の雰囲気をほぐしていく流れとなりました。まあこういう所はHachioji.pm式ですね。そして、ご近所トークで盛り上がったり出来るところもまた、地方pm(?)ならではの醍醐味でしょう。個人的に@ktatさん(こちらの記事の著者)とお話できたのは非常に感慨深かったです。
で、いい感じにアルコールが回ってきたところでLT。テーマは「ぼくがかんがえたさいきょうの○○」でした。参加人数が16名ということもあり、もうこれはまともにまとめるのは無理だろうと判断し、完全に聞き&質問に徹していました。その中で「ささった」内容をピックアップ。
- @hondallicaさん作Hachioji.pmのAndroid-app。「Titanium mobileで3時間くらいかけて作った」そうですが、そんなに短時間で出来るものなのか!と素直に感心しました。@ktatさんのandroid端末で動作する様子を拝見しましたが、過去の参加者一覧が手軽に見れるのはなかなかいいかも。でもなんでIDEOSではマーケットで検索しても出てこないのかしら><
- @uzullaさんはATND的イベントサービスの発表をしていましたが、「正直ATNDは楽しくない」とのこと。参加者も主催も楽しくなれる、そんなサービスに期待。
- @hide_o_55さんの作ったさいきょうのAcmeモジュール。
Acme::ChuckNorrisExceptions(って名前であってたかしら?w)。
「例外を投げる?否、チャック・ノリスがお前を投げる!」
ソヴィエトロシア的倒置法が効いていて楽しそう!
- @yellow844さんのブラック経歴トークでの名言。
残り参加枠がかなり少ないですが、参加したいという方はぜひお越しください。
初参加の方がたくさん!
会場となったペルー料理専門店MISKYは Hachioji.pm では2回目の利用。こちらのお店では、ソーセージやらパスタやらチキンステーキやらを心行くまで堪能できます。また、テーブルに配られる3種類のディップソースがあるのですが、これがまたスパイシーでおいしいです!
今回は初参加の方が多かったので、まずは自己紹介から始まり、その後飲んだ食ったをしながら技術的な話やら世間話で場の雰囲気をほぐしていく流れとなりました。まあこういう所はHachioji.pm式ですね。そして、ご近所トークで盛り上がったり出来るところもまた、地方pm(?)ならではの醍醐味でしょう。個人的に@ktatさん(こちらの記事の著者)とお話できたのは非常に感慨深かったです。
LT
で、いい感じにアルコールが回ってきたところでLT。テーマは「ぼくがかんがえたさいきょうの○○」でした。参加人数が16名ということもあり、もうこれはまともにまとめるのは無理だろうと判断し、完全に聞き&質問に徹していました。その中で「ささった」内容をピックアップ。
- @hondallicaさん作Hachioji.pmのAndroid-app。「Titanium mobileで3時間くらいかけて作った」そうですが、そんなに短時間で出来るものなのか!と素直に感心しました。@ktatさんのandroid端末で動作する様子を拝見しましたが、過去の参加者一覧が手軽に見れるのはなかなかいいかも。でもなんでIDEOSではマーケットで検索しても出てこないのかしら><
- @uzullaさんはATND的イベントサービスの発表をしていましたが、「正直ATNDは楽しくない」とのこと。参加者も主催も楽しくなれる、そんなサービスに期待。
- @hide_o_55さんの作ったさいきょうのAcmeモジュール。
Acme::ChuckNorrisExceptions(って名前であってたかしら?w)。
「例外を投げる?否、チャック・ノリスがお前を投げる!」
ソヴィエトロシア的倒置法が効いていて楽しそう!
- @yellow844さんのブラック経歴トークでの名言。
あるSE曰く「うちAjaxできませんよtomcatはいってませんから」- @maka2_donzokoさんのかんがえたさいきょうのLT
紙の強度的に最強だそうで。。。「どうぞ今のうちに撮影してください!」って、気分はもはやモデルですか?w
自分のLTはYAPCでイベントレポーターしてきたよって話を交えて、最強のレポーターについて高橋メソッドで発表してきました。(資料こちら)
あんまり技術的なトークするのが得意じゃないので、次回はもう少し技術よりのお話にしたいなとか思ってたりしてます。
次回
12/3(土) 18:00より町田で開催します!(ATNDこちら)
2011-10-16
[Perl]YAPC::Asiaにレポーターとして参加してきたよ!
去る10/14(金)と10/15(土)の2日間、東京工業大学大岡山キャンパスにてYAPC::Asia 2011が開催されました。
既に前回の記事でおさわり程度には書いたのですが、今年はgihyo.jpのレポーターとして参加してきました。
gihyo.jpスペシャルレポート
そんなわけで、今年は当ブログでは去年のようなライブレポートはやりません。
その代わりに、レポーターとして参加した感想を少々。。。
このうち、1のメモ取りが大変だと思われがちですが、実はそうでもなくて、3の清書がなかなか大変。
実際、メモのほうが細々とデティールを記録してあるのですが、それだと雰囲気を伝えるための記事としてはNGです。
そして、gihyo.jpを通して自分を売り込むことが出来ます。レポートの質が高ければ、すばらしい実績を残した事になりますよ!
最後に、アルバイトなのでお小遣いがもらえます。まあ、このあたりは正直あまり気にしなくてもチケット代が浮くのでそれで十分だとは思いますが。
そこで!「来年のレポーターやってもいいよ!」という方がいましたら、@ytnobodyまでご一報ください。たぶん僕以外にもう2名ほど集まってくれたら、来年も引き続きレポーターをやるかもしれません。もちろん、gihyo.jpさんがOKといってくれればですけどね!
既に前回の記事でおさわり程度には書いたのですが、今年はgihyo.jpのレポーターとして参加してきました。
gihyo.jpスペシャルレポート
そんなわけで、今年は当ブログでは去年のようなライブレポートはやりません。
その代わりに、レポーターとして参加した感想を少々。。。
レポーター楽しいです
騙してるように見えるかもしれませんが、間違いなく面白い。というのも、やはり人様のサイトに載せる原稿を(アルバイトとして)提供するわけですから、是が非でもメモをとる事になります。そうなると、漫然とトークを聞くのと比較して、鮮烈に記憶に残るのです。レポーター大変です
ただ、大変なのも事実でして、以下のような流れで原稿を投稿することになるのですが、- トークを聞きながらメモを取る
- メモをとりあえずアップする
- トークの合間を縫ってメモを清書する
このうち、1のメモ取りが大変だと思われがちですが、実はそうでもなくて、3の清書がなかなか大変。
清書が大変とはどういうことか
それは、書いたメモの内容を、トークの雰囲気が引き立つように圧縮する必要があるからです。実際、メモのほうが細々とデティールを記録してあるのですが、それだと雰囲気を伝えるための記事としてはNGです。
レポーターをやるメリット
まず、レポーター枠で入場できますので、スピーカー同様チケットを買うことなくYAPCを楽しむことが出来ます。そして、gihyo.jpを通して自分を売り込むことが出来ます。レポートの質が高ければ、すばらしい実績を残した事になりますよ!
最後に、アルバイトなのでお小遣いがもらえます。まあ、このあたりは正直あまり気にしなくてもチケット代が浮くのでそれで十分だとは思いますが。
来年のYAPC::Asiaレポーターは?
今年は僕と@hirataraさんの2名でレポートを行いました。正直2名は大変ですね!そこで!「来年のレポーターやってもいいよ!」という方がいましたら、@ytnobodyまでご一報ください。たぶん僕以外にもう2名ほど集まってくれたら、来年も引き続きレポーターをやるかもしれません。もちろん、gihyo.jpさんがOKといってくれればですけどね!
2011-10-14
[Perl]YAPC::Asia開催!
10/14(金)と10/15(土)の2日間、東京工業大学大岡山キャンパスにてYAPC::Asia 2011が開催されます!
僕はgihyo.jpのレポーターとして参加していますので、派手なレギンスでノートPCに向かってるおっちゃんを見つけたら、声かけてください。もしかすると、飲み物をせがむかもしれません!
2011-10-04
[Perl]Hachioji.pm #9
ついに通算10回目を迎えたHachioji.pmに行ってきました。会場はHachioji.pmの聖地ことタイラーンナーさん。
今回の参加人数は10名。到着した人からシンハービールを頼み、手酌の気取らないスタイルでさくさくっと呑んでいました。
@elecineさんが当日飛び入りで参加。ご本人曰くDJしたりMarkupしたりだそうです。
Lightning Talk
Hachioji.pmのLTは銅鑼(=時間制限)なし・A4用紙1枚程度の非常にカジュアルなものです。そんな超軽量LTではありますが、各々が持ち寄る内容は毎回よく出来たものだと関心してしまいます。
- uzullaさん
- GroongaをSQLite的に使っているお話
- 位置情報の使いでのよさ
- 黙って起動に失敗するニクイやつ
- なんでかDB破損。
- 色々とオフレコなお話
- オフレコ過ぎて詳細を忘れたw
- _takeR14さん
- phpdoc
- perldoc for php
- perl製!Amon2使ってるらしい。
- オフラインかつCUIでphpのドキュメントを読みたい向きに
- hide_o_55さん
- 最近作ったもの2点
- node-murmurhash3
- MurmurHash3 for Node.js
- npm install murmurhash3
- ShipItJS
- ShipIt for Node.js
- umeyukiさん
- 近況報告など
- 転職活動をしているそうです
- ytnobody
- こんなコミットメッセージを書いてほしい
- 実は「こんなコミットメッセージは嫌だ」
- 公私共に今まで色々なコミットログを見てきたけど、半分以上ガチであった話が元ネタ(全部じゃないよ)。
- 資料こちら
- ono_pmさん
- YAPC::Asia 2011タイムテーブル Chrome Extention
- chrome上でYAPC::Asiaのタイムテーブルを表示。
- レポジトリこちら
- norry_gogoさん
- Hachioji.pmの円滑な運営のための提案
- 幹事持ち回り制度
- 会場の選定とLTテーマの設定が大変
- uzullaさん曰く「奥さんの一声がないと開催も怪しい」!?
- equinox79さん
- perlbrew + cpanm + OrePAN
- cpanm --save-distsの偉大さ
- OrePANによるDarkPAN管理
- perlbrewによる特定バージョンのperlインストール
- ポータブルなアプリケーションの実現
- maka2_donzokoさん
- Perl Monger Training Card Game - Parumon
- CPAN Modulesを駆使し、迫りくる納期と戦う
デスマーチ開発者体験カードゲーム - YAPC::Asia 2011で発売
- プロトタイプで遊びました!
Try::Tiny, DBI, Test::More, OrePANが偉い! ペアプロ超重要! 新入りは大抵納期に押しつぶされるのが生々しいです><
ご満悦のumeyukiさん
主催のuzullaさん、ご多忙な中でのセッティング本当にお疲れ様でした。
Hachioji.pm in machida !?
解散して少ししてから、こんなつぶやきが。。。@hiratarahirataraいつか町田で#hachiojipm やらないかなあ。
それを聞いて我らが主催の一言。
2011-09-03
[Perl]dotcloudにPSGIアプリを上げてみた
しばらく放置気味だったブログも久々に更新。
さて、夏バテ気味の僕もついにあのdotcloudに入門してみました。
補足としては、先のブログの「インストール」のところにあるコードスニペットの7行目
ちなみにこのステップをpythonbrewを使って楽することも出来るってすごい人から教えてもらいました。すげー!
初回起動時に限り、dotcloudのapi-keyを聞かれますので、このあたりでコピーし、ターミナルに貼り付けてやればいいです。
とはいえ、本当にスッカスカの状態のアプリを作って上げないことには基本がわかりにくい気もするので、スッカスカアプリ(ハローワールド)を仕立てていきます。
すると、rsyncで同期しているような表示がでてきて、ちょっとまっていると
最後に表示されたURLにアクセスして、
調査の仕方というかsshログインの仕方がわかったのでメモ。
で、$HOME/.cpanm/build.logを漁ってみたところ、疑問は氷解。
こいつらが足りなかったので、
としてから再度PicklesベースのアプリをデプロイしてやればOKでした。
さて、夏バテ気味の僕もついにあのdotcloudに入門してみました。
作業するための環境を用意する
今回は作業環境にさくらVPS(CentOS5.5)を使うことにしました。理由は聞かないで。python2.6とeazy_install, pipを入れる必要があるらしい
こちらの記事を参考に、素直にrootでpython2.6などをビルド&インストールしました。補足としては、先のブログの「インストール」のところにあるコードスニペットの7行目
zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lzここは、「こういう行が Modules/Setup の中でコメントアウトされているから、それをコメントインしなさいね」の意であるようです。
ちなみにこのステップをpythonbrewを使って楽することも出来るってすごい人から教えてもらいました。すげー!
dotcloud コマンドラインツールをインストール
どう見ても# easy_install-2.6 dotcloudこれだけでした。本当にありがとうございました。
一般ユーザ権限でpython2.6を使えるように設定
先のブログにも書いてますけど、$HOME/.bashrcに以下を追記すればOKです。PATH=$PATH:/usr/local/python/bin alias python='python2.6'
アプリケーションをdotcloudに登録する
デプロイの準備としてアプリケーション名をdotcloudに教える必要があるので、アプリケーション登録をします。$ dotcloud create [App-Name][App-Name]には半角英字4文字以上でアプリケーション名を入れてあげましょう。
初回起動時に限り、dotcloudのapi-keyを聞かれますので、このあたりでコピーし、ターミナルに貼り付けてやればいいです。
PSGIアプリをこさえてUPする
このあたりにグッドでナイスなドキュメントがありますが、重要なのはdotcloud.ymlという設定ファイルと、アプリのファイル構造です。とはいえ、本当にスッカスカの状態のアプリを作って上げないことには基本がわかりにくい気もするので、スッカスカアプリ(ハローワールド)を仕立てていきます。
アプリのディレクトリを作る
そのまんまです。好きな名前のディレクトリ名でいいでしょう。$ mkdir myhello
アプリのルートディレクトリを作る
approotと呼ばれるディレクトリを用意する必要があります。さっき作ったディレクトリの直下に置くということさえ守れば、ディレクトリ名はなんでもOKです。$ mkdir myhello/oreapp
dotcloud.ymlを書く
dotcloudにアプリを上げて適正に動作させるためには、dotcloud.ymlが不可欠です。とはいえ、非常にシンプルなので臆せずに。viなどのエディタで、先に作成したアプリのディレクトリ直下(approotと同列)にdotcloud.ymlを作りましょう。www: type: perl approot: oreapp
app.psgiを書く
取り急ぎ以下のようなアプリを書いて、oreapp/app.psgi として保存します。sub { [ 200, [ 'Contents-type' => 'text/html' ], [ 'All your vase are belong to ass' ] ] }
デプロイする
dotcloudにアプリをデプロイします。$ dotcloud push myhello ./myhello/
すると、rsyncで同期しているような表示がでてきて、ちょっとまっていると
2011-09-02 15:31:08 [api] All the services are ready. Beginning the build. 2011-09-02 15:31:08 [www.0] The build started 2011-09-02 15:31:09 [www.0] Fetched code revision rsync-1314977467.1 2011-09-02 15:31:11 [www.0] Reloading nginx configuration: nginx. 2011-09-02 15:31:13 [www.0] uwsgi: started 2011-09-02 15:31:14 [www.0] The build finished successfully 2011-09-02 15:31:14 [api] Deploy finished Deployment finished. Your application is available at the following URLs www: http://ytnobody-myhello.dotcloud.com/みたいな感じの表示が出てきます。これでデプロイ終了です。
最後に表示されたURLにアクセスして、
All your vase are belong to assと表示されていれば無事にアプリが稼動しています。
perl on dotcloud に関するもっと良い情報
hachioji.pm常連のすごい人がまとめてるPerl on DotCloud まとめがいい感じです。さいごに
途中から書くのだるくなっちゃって、テキトーな感じになりましたが、意外とdotcloudは難しくないぞ、ということを言いたかったのであります。ついでに
こうなったらどうすればいいのでしょうか。どなたか教えてください><Deployment for "ytnobody" triggered. Will be available in a few seconds. 2011-09-02 16:31:15 [api] Deploy ytnobody scheduled for revision=latest 2011-09-02 16:31:15 [api] Waiting for the build. (It may take a few minutes) 2011-09-02 16:31:15 [api] All the services are ready. Beginning the build. 2011-09-02 16:31:15 [www.0] The build started 2011-09-02 16:31:16 [www.0] Fetched code revision rsync-1314981073.92 2011-09-02 16:31:17 [www.0] --> Working on . 2011-09-02 16:31:17 [www.0] Configuring Ytnobody-Hello-0.01 ... OK 2011-09-02 16:31:17 [www.0] ==> Found dependencies: Pickles 2011-09-02 16:31:18 [www.0] --> Working on Pickles 2011-09-02 16:31:18 [www.0] Fetching http://search.cpan.org/CPAN/authors/id/D/DM/DMAKI/Pickles-0.08.tar.gz ... OK 2011-09-02 16:31:18 [www.0] Configuring Pickles-0.08 ... N/A 2011-09-02 16:31:18 [www.0] ! Configure failed for Pickles-0.08. See /home/dotcloud/.cpanm/build.log for details. 2011-09-02 16:31:18 [www.0] ! Bailing out the installation for Ytnobody-Hello-0.01. Retry with --prompt or --force. 2011-09-02 16:31:20 [www.0] Reloading nginx configuration: nginx. 2011-09-02 16:31:24 [www.0] uwsgi: stopped 2011-09-02 16:31:24 [www.0] uwsgi: ERROR (abnormal termination) 2011-09-02 16:31:24 [www.0] The build finished successfully 2011-09-02 16:31:24 [api] Deploy finished
調査の仕方というかsshログインの仕方がわかったのでメモ。
$ dotcloud ssh [appname].[servicename]
で、$HOME/.cpanm/build.logを漁ってみたところ、疑問は氷解。
* Module::Install::AuthorTests; * Module::Install::TestTarget;
こいつらが足りなかったので、
$ cpanm Module::Install::AuthorTests Module::Install::TestTarget
としてから再度PicklesベースのアプリをデプロイしてやればOKでした。
2011-07-23
2011-07-10
[Perl]Shibuya Perl Mongersテクニカルトーク#16 に行ってきた
7月6日(水)にmixiさんで開催されたShibuya Perl Mongersテクニカルトーク#16に参加してきました。
さて、一応ではありますが、各発表ごとに概要と感想が入り混じったようなものをまとめてみました。
ちなみに、直ぐ隣の大きい部屋でmixiさんのご好意で開かれた懇親会では、jcode.pl開発者の歌代和正氏による乾杯のご発声がありました。(かなり豪華な食事が出ました!mixi++)
そして、なぜか同じテーブルに集うHachioji.pmの面々。ここまでくればある種、異様な集団ですねw
歌代氏。あのjcode.pl開発者がついにEncode.pmを使って一言。
「いいですねぇ、あれ。使いやすいです!」
閉会後、会場に入れなかったmakamakaさんがビルの前で途方にくれていた(正しくはAcme大全2011を販売していた)ので、Hachioji.pmのメンバーが拍手で労ったのでした。
最後にはmakamakaさんの胃袋を満たすべく、ミニHachioji.pmを急遽開催(といっても、ただ飲み食いしに行っただけですけど)。1日に2つのpmに参加するという無茶苦茶をやってのけたのでした。たのしかったー!!
こういう書き方もできるのがperlの面白いところだと僕は思います。
テーマは正規↑表現↓・・・///
__gfx__サンの発表で、正規表現が正規↑表現↓と発音されていたのを機に、休憩時間のあいだに「正規表現の正しい発音とは何か?」のような議論がアツく繰り広げられていました(おもに弾さんとか)。一歩間違えばgenital expressionsとも捉えられかねないです><!さて、一応ではありますが、各発表ごとに概要と感想が入り混じったようなものをまとめてみました。
- Dan the (Irr|R)egular Expressionist [by @dankogai]
- 「まどか☆マギカ」ネタが随所に散りばめてあった
- 原作見てないからほんのりとしかわからなかった;;アニメとかあまり見ないので。。。
- 「すべての魔女を消し去りたい」?なら「s/魔女//g;」!命かけずにコードかけ!
- これが言いたかっただけじゃないかと・・・w
- 正規表現の使いすぎに注意
- /(foo|bar)/は無駄。
- /(a|b|c|d)/にかかるコストは/[abcd]/の4倍以上
- ここで言うコストはCPUコストのことでOK?
- 素手で変態的な正規表現書くくらいなら・・・
- Regexp::Common使いましょう。
- Regexp::Assembleをつかうと、複数パターンのRegexのうちどれにマッチしたか検出可能。
- なんか色々多機能っぽいモジュールなので、PODを熟読すべし
- 正規表現についてはPerlがルール。
- つまりperlを通して身につけた正規表現の技は他言語でもだいたい通用する!
- スペシャルゲスト「正規表現メモ」 [by 木村浩一さん]
- 「正規表現メモ」は黒歴史。
- 出版社から過去数度お声がかかったらしいが、結構ボツになった原稿も多数あったのだそう。
- 当該サイトは初見だったけど、非常によくまとめられており、regexを深く掘り下げるに十分な教科書となり得ると思います。
- [=e=]って何にマッチするか知ってますか?
- "e"のほか、ёなどにもマッチ。
- tclの正規表現です!
- マイナーすぎてわからんとです!><
- JPerl5.6
- 幻?!
- Perl5.6で追加された戻り読みによって、JPerl5.6は幻の存在となった。
- 3種類の正規表現
- POSIX basic regex
- POSIX extended regex
- Perl拡張
- Hello, re::engine! [by __gfx__]
- この人のイントネーション「正規↑表現↓」が後々いろんなところに影響をもたらす。
- Perlの正規↑表現↓エンジンはpluggable
- 素数判定の正規↑表現↓
- そしてトーク中にcommit
- git commit -m "Update"
- ちょ、お行儀www
- 一同爆笑w
- re::engine::OnigurumaはバックトラックしてもSEGVが発生しない
- re::engine::boostは遅すぎて使いもんにならない
- 正規表現のデバッグになら使えそうという声も。
- 正規表現の限界 [by sinya8282]
- 正規表現愛
- いろいろなものを正規表現であらわしたい癖がある
- 魔女ネタに憧れ・・・
- とある否定の正規表現
- 正規表現の否定は難しい
- というか変態的
- DFAにしてしまえば否定も簡単ですよ!
- DFAの状態遷移図をスライドに載せまくり
- DFA祭りではないですねw
- 「皆さんは正規表現がみたいんですよね?」
- regex->NFA->DFA->否定のDFA->GNFA->否定の正規表現
- not /abc/ = /((a?|ab)|((([^a]|a[^b])|ab[^c])|abc.).*)/
- ここでdankogaiによるキャプチャ使用についてのツッコミ。
- とある再帰の正規表現
- \Rをつかった再帰処理
- 140文字以内の四則演算
- 69回が再帰上限。
- 約40ゼタ文字に相当。。。
- あたまいたいです><
そしてLT。
- 僕の考えた最強の正規表現エンジン [by sinya8282]
- とにかく速度重視!
- 正規表現ジェネレータRegen
- Xbyakで動的に最適化されたコードを生成
- Plaggerで覚えたPerlの正規表現 [by yusukebe]
- ヘアースタイル(モヒカン)は某有名人のオマージュ
- エロサイト収集用YAMLの数々に正規表現
- そういえばいまどきYAMLは無しだよなあと思いながら聞いていた。
- Plaggerって5年くらい前のプロダクトだし仕方ない
- Regexp::Assembleで正規表現を作るとか [by yappo]
- 正規↑表現↓のイントネーションに苦戦した結果、本題に入る前に銅鑼。
- ホントはGroongaの話をするつもりだったらしい。。。
- 正規↑表現↓の被害を露骨に食らった例
- 再帰的正規表現 [by takesako]
- 再帰的正規表現を駆使してJSON Validatorを実装。
- (?R)や?(DEFINE)がでてきた
- 今回のLTでもっとも正統派???
- 僕と契約して、自己言及コードになってよ! [by sugyan]
- quine(自分のソースそのものを出力するだけのプログラム)がQBを出力し、それをさらにPerlにくわせてやるとQBがいろいろ喋り捲るというもの
- 厳密に言うと出力->入力ごとに異なる結果が出力されるので、quineとはいえない。
- もともとRubyで実装されたものをPerlに移植。
- いろいろなものを正規に表現してみよう [by nipotan]
- RegEx
- 正規表現共有サイト
- 非常にすばらしいコンセプト。
- しかし、残念な正規表現が多い
- 郵便番号、電話番号に*正しく*マッチングする正規表現
- 電話番号についてはNumber::Phone::JPで
- 正規表現そのものではえらく長大なものになる
- 素手で書くのは狂気の沙汰なので、モジュール化
- 郵便番号向けにNumber::ZipCode::JPをshipped
- この辺のソースを見ればわかると思いますが、まさに正規↑表現↓の狂気に取り憑かれたようなコード。
- MySQLに郵便番号マスタを持たせるより多少早いですよ!!
ちなみに、直ぐ隣の大きい部屋でmixiさんのご好意で開かれた懇親会では、jcode.pl開発者の歌代和正氏による乾杯のご発声がありました。(かなり豪華な食事が出ました!mixi++)
そして、なぜか同じテーブルに集うHachioji.pmの面々。ここまでくればある種、異様な集団ですねw
歌代氏。あのjcode.pl開発者がついにEncode.pmを使って一言。
「いいですねぇ、あれ。使いやすいです!」
閉会後、会場に入れなかったmakamakaさんがビルの前で途方にくれていた(正しくはAcme大全2011を販売していた)ので、Hachioji.pmのメンバーが拍手で労ったのでした。
最後にはmakamakaさんの胃袋を満たすべく、ミニHachioji.pmを急遽開催(といっても、ただ飲み食いしに行っただけですけど)。1日に2つのpmに参加するという無茶苦茶をやってのけたのでした。たのしかったー!!
mixiうちわについて
すでにshinpei_cmykさんが当日のうちに解説記事をかいてくれています。こういう書き方もできるのがperlの面白いところだと僕は思います。
2011-06-26
[Perl]Hachioji.pm #6
先日開催のHachioji.pm #6に参加してきました。
思い出したかのようにトイデジで写真を撮っておいたのですが、よくわからない状態のものばかりとなってしまいました。すみませんすみません><
さて、今回のお店はカレー&ダイニング Very wellさん。
夏バテ克服にカレーはもってこいのチョイスですね!
今回はキャンセル5名ということもあって貸切下限の15名に届かず、急遽貸切をキャンセルせざるを得ない状況となってしまいました。それにも関わらず大いに盛り上がったのは、開始時刻前から到着したメンバーから順に早々と出来上がっていたところが大きいと思います。このいい感じのアバウトさ加減こそHachioji.pmメソッドですよ!
各自、各々の近況やネタトーク(主にGANC教祖によるGANCネタ)で盛り上がっているところ、おもむろに(というより遅れて)makamakaさんの登場。
皆で拍手で迎えるという当会合の恒例行事もきっちりと執り行われました。
ちなみに彼はATNDで
ちなみにネタトークで盛り上がっていて、すっかりカレーの写真を撮り忘れてしまいました><
今回のテーマは「省エネ・エコ」。非常に難しいテーマでした。
LTのざくっとした内容を覚えている限り列挙します。
現地はWiMAXおよびEMobileが絶望的に使えないようです。もしかすると僕がcpanレポジトリのミラーを用意するかもしれません。気が向けば、ですが!
7/23(土)11:0014:00 京王線高尾山口駅前に集合です。
思い出したかのようにトイデジで写真を撮っておいたのですが、よくわからない状態のものばかりとなってしまいました。すみませんすみません><
カレー食べながらネタトーク
さて、今回のお店はカレー&ダイニング Very wellさん。
夏バテ克服にカレーはもってこいのチョイスですね!
今回はキャンセル5名ということもあって貸切下限の15名に届かず、急遽貸切をキャンセルせざるを得ない状況となってしまいました。それにも関わらず大いに盛り上がったのは、開始時刻前から到着したメンバーから順に早々と出来上がっていたところが大きいと思います。このいい感じのアバウトさ加減こそHachioji.pmメソッドですよ!
各自、各々の近況やネタトーク(主にGANC教祖によるGANCネタ)で盛り上がっているところ、おもむろに(というより遅れて)makamakaさんの登場。
皆で拍手で迎えるという当会合の恒例行事もきっちりと執り行われました。
ちなみに彼はATNDで
などと宣言しているのですが、これは折るべくして作られたフラグなのでしょう。
- makamaka_at_donzoko : 遅刻しない自信があります!
ちなみにネタトークで盛り上がっていて、すっかりカレーの写真を撮り忘れてしまいました><
二次会場へ移動
すっかり酒の入りきった十数名の男たちが、これまたすっかり「聖地」となりつつある名店「タイラーンナー」の前で数分ほど待つことに。この日はお店がいつも以上の混雑振りだったようで、席が開くまで時間がかかったのです。タイ料理屋でLT
今回のテーマは「省エネ・エコ」。非常に難しいテーマでした。
LTのざくっとした内容を覚えている限り列挙します。
- umeyukiさん:東電の「おとくなナイト」について
- 夜行性のあなたに。趣味のコーディング等は大抵夜間なので効果的か。
- mgikenさん:はじめてのGANCアプリ
- GANCでブログアプリを作ったというお話。
- 投稿画面は未着手のため、記事作成はCouchDBの管理画面から行うという破天荒っぷり。
- ytnobody:バッドノウハウはエコの母
- 2011年のエコなperl=正規表現!?タイトルと内容がかみ合っていない!
- (資料はこちら。※PDF注意)
- nekoyaさん:URI::Escape::XSでエコライフ
- おなじみURI::Escape。しかし意外と重い。そこでURI::Escape::XS!
- Mouseは比較的エコ。しかしMoose、テメーはだめだ
- okamuuuさん:knockout.js
- JavascriptのMVVMフレームワーク
- コード品質の画一化のためにもフレームワークは有用
- shinpei_cmykさん:運用に省コストを強いられる例
- ホスティングで困ること:ローカルネットワークに後からサーバ増設できない
- DBサーバのお引越しはどうしてるの?
- >リモートでレプリケーションをしましたよ!(by nekoyaさん)
- hide_o_55さん:PerlでGroongaをごにょごにょ
- GroongaのHTML-APIはローカルI/Fをバインドしているので、Perlでproxyっぽいことをするモジュール作った
- norry_gogoさん:バージョン管理・テスト自動化などでエコを目指す
- プログラマはすべからくエコである
- uzullaさん:UPSと車のバッテリで停電対策/cloud9でファミレスコーディング
- 家にUPSが4つもある!
- ブラウザさえあればエディタ・gitレポジトリ操作が可能。デプロイもできるようになる予定。
- makamakaさん:ハイブリッド・エコLT
- 物理的エコ→紙のLT資料を薄く・軽く・小さくする
- 謎の紙片「さっきまでA4だった」LT資料???配布。
- LT資料じゃなくて「くじ」!
- 「あたり」を引いた人にそれぞれ「エコ」「高尾山の天狗」についてLTしてもらうという無茶振りメソッドだった!
次回は"Takao.mt"!
次回のHachioji.pmは高尾山登山イベント"Takao.mt"です!ハッカソンやりたい人は各自企画してくださいとのことですので、そのつもりで!現地はWiMAXおよびEMobileが絶望的に使えないようです。もしかすると僕がcpanレポジトリのミラーを用意するかもしれません。気が向けば、ですが!
7/23(土)
2011-06-16
[リアルライフ]ライブドアに入社しました
2011/6/15をもちまして、株式会社ライブドアへ入社いたしました。
これまで苦楽をともに歩んできた元同僚・上司へ、この場を借りて、改めてお礼申し上げます。
今後も皆様より、従来と変わらぬご愛顧・ご指導を頂けますと大変幸甚でございます。
どうぞ、よろしくお願いいたします。
これまで苦楽をともに歩んできた元同僚・上司へ、この場を借りて、改めてお礼申し上げます。
今後も皆様より、従来と変わらぬご愛顧・ご指導を頂けますと大変幸甚でございます。
どうぞ、よろしくお願いいたします。
2011-05-31
[Perl]Hachioji.pm #5
5/28(土)に開催されたHachioji.pm #5に参加してきました。
いつものことですが、このレポートは他の方に比べ24時間ほど出遅れています。
ま、そんな事どうでもいいんですよ!そもそもレポートになってるか怪しいんだから!!
なお、公式の開催レポートはこちら
まあ、こういうアクシデントもたまにはあるのでしょうけど、そこは八王子。すんなりと会場の確保ができた模様です。
そんなわけでA4-LTは二次会で行うこととなりました。ほどなく、参加者全員が完全に「呑むぞ食うぞモード」に突入したのは言うまでもありません。
一つ言える事としては、とにかく肉がうまかった!
というのがあげられます!
いいじゃない、PICKみたいなトイデジカメだって!
このころ僕はビール*3、まんこい(黒糖焼酎)ロック*3を飲み干しており、ただのヨッパライと化していました。
※Hachioji.pm #3でお世話になったお店です。
各々のLTのレポートはこちらやこちら、こちらなどでご確認いただけます。
というのも酔っ払ってて、詳細を記憶できていないのです。。。
個人的には、nekoyaさんのcobbler使ったサーバ管理(というか構築)のお話がフックしました。
takeR14aさんのLTにあった「ALIX board」というPCも楽しそうでした。アプライアンス向けでしょうか。
あと、らくがきライブってアプリを使うとJKとおともだちになれるかもしれないそうですね!
ちなみに僕のLTですが、こちら(PDF)に資料をあげておきました。
まあ内容がほとんどないのですけど。。。
それから、mgikenさんは素敵なGANC教祖ですね!素敵すぎてツッコミがとまりませんでした><
いつものことですが、このレポートは他の方に比べ24時間ほど出遅れています。
ま、そんな事どうでもいいんですよ!そもそもレポートになってるか怪しいんだから!!
なお、公式の開催レポートはこちら
$stuff[0]->say( seat( expire => 7200 ) );
開始直後、お店の方から「2時間制限」といわれたので、uzullaさん、急遽二次会をセッティング。まあ、こういうアクシデントもたまにはあるのでしょうけど、そこは八王子。すんなりと会場の確保ができた模様です。
そんなわけでA4-LTは二次会で行うこととなりました。ほどなく、参加者全員が完全に「呑むぞ食うぞモード」に突入したのは言うまでもありません。
一つ言える事としては、とにかく肉がうまかった!
というのがあげられます!
いいじゃない、PICKみたいなトイデジカメだって!
このころ僕はビール*3、まんこい(黒糖焼酎)ロック*3を飲み干しており、ただのヨッパライと化していました。
酩酊の靄の中で
二次会は「タイラーンナー」でした。※Hachioji.pm #3でお世話になったお店です。
各々のLTのレポートはこちらやこちら、こちらなどでご確認いただけます。
というのも酔っ払ってて、詳細を記憶できていないのです。。。
個人的には、nekoyaさんのcobbler使ったサーバ管理(というか構築)のお話がフックしました。
takeR14aさんのLTにあった「ALIX board」というPCも楽しそうでした。アプライアンス向けでしょうか。
あと、らくがきライブってアプリを使うとJKとおともだちになれるかもしれないそうですね!
ちなみに僕のLTですが、こちら(PDF)に資料をあげておきました。
まあ内容がほとんどないのですけど。。。
次回とか
6/25(土)開催の予定だそうです。それから、mgikenさんは素敵なGANC教祖ですね!素敵すぎてツッコミがとまりませんでした><
2011-05-26
[Scala]Scala勉強会in秋葉原#35に行ってきた
HelloWorldとxhtmlのパーシングあたりで止まってるScalaについてもう少し掘り下げるべく、Scala勉強会にお邪魔してきました。
勉強会第35回 - Scala勉強会 in 渋谷
まあ僕は初学者ということもあって、正直なところ発表内容を深く理解できていない部分があるのですが、それでも基礎的な部分についてはおおむね理解できたつもりではあります。
特にJavaプリミティブ型からScalaの各種型への自動的な変換(Auto-Unboxing for Java Boxed valuesのスライドのあたり)なんかは、「今までなかったのかよw」と心の中でツッコんでしまいました。
例外コンパイルエラーが発生してしまうのはなぜ?という質問があがりました。
実際に試してみました。
たとえば、こんな状態。
この状態でメソッドX.aをコールすると、例外コンパイルエラーが発生するということですが・・・
例外コンパイルエラーが発生しました。しかも第2引数にInt、Stringの何れを与えてもこの現象が発生します。
質疑応答の中での回答では、「Odersky曰く『仕様です』」とのことでした。
皆さんのご意見を聞く限りでは、どうやらjerichoというライブラリを使用するのがベターとのことでした。
また、近々yuroyoroさん共著のscala本が出版されるそうです。こういった情報に関するアンテナを広げるという意味でも、今回の参加は意義深いものでした。
勉強会第35回 - Scala勉強会 in 渋谷
発表について
当日の発表はよしださんによる Scala2.9.0の新機能についての説明でした(資料)まあ僕は初学者ということもあって、正直なところ発表内容を深く理解できていない部分があるのですが、それでも基礎的な部分についてはおおむね理解できたつもりではあります。
特にJavaプリミティブ型からScalaの各種型への自動的な変換(Auto-Unboxing for Java Boxed valuesのスライドのあたり)なんかは、「今までなかったのかよw」と心の中でツッコんでしまいました。
質問タイム
カリー化されたメソッドのオーバーライドについて、第2引数の型が異なるメソッドのオーバーライドを定義できるにも拘らず、メソッドのコール時に実際に試してみました。
たとえば、こんな状態。
scala> object X { | def a( x:String )( y:String ){} | def a( x:String )( y:Int ){} | } defined module X
この状態でメソッドX.aをコールすると、
scala> X.a( "hoge" )( 1 )たしかに:9: error: ambiguous reference to overloaded definition, both method a in object X of type (x: String)(y: Int)Unit and method a in object X of type (x: String)(y: String)Unit match argument types (java.lang.String) X.a( "hoge" )( 1 ) ^ scala> X.a( "hoge" )( "fuga" ) :9: error: ambiguous reference to overloaded definition, both method a in object X of type (x: String)(y: Int)Unit and method a in object X of type (x: String)(y: String)Unit match argument types (java.lang.String) X.a( "hoge" )( "fuga" ) ^
質疑応答の中での回答では、「Odersky曰く『仕様です』」とのことでした。
xhtml関連の質問をしました
じつは開会前に「xhtmlのパース/置き換えをするにはどうしたらよいか」という質問をしました。皆さんのご意見を聞く限りでは、どうやらjerichoというライブラリを使用するのがベターとのことでした。
感想とか
scala初学者でも十分に参考となる内容でした。ぼくの他にも数名初学者の方がいらしたのですが、むしろ初学者の方ほどこの勉強会に参加するメリットがあると思います。また、近々yuroyoroさん共著のscala本が出版されるそうです。こういった情報に関するアンテナを広げるという意味でも、今回の参加は意義深いものでした。
2011/05/27 追記
例外と表記されている箇所ですが、よしださんより「例外発生というより、あれはコンパイルエラーですね」とツッコミをいただき、「コンパイルエラー」と表記を改めました。2011-05-19
[Linux]CentOS5.5にText::MeCabを入れるときのコツ
原因
mecabとmecab-ipadicを入れてるのに、/root/.cpanm/work/1294395897.25225/Text-MeCab-0.20011/assertlibeiKR8srG: error while loading shared libraries: libmecab.so.1: cannot open shared object file: No such file or directory /root/.cpanm/work/1294395897.25225/Text-MeCab-0.20011/assertlibEejMJieF: error while loading shared libraries: libmecab.so.1: cannot open shared object file: No such file or directory wrong result: 'mecab', 'mecab'とか言われてしまうことがあります。
これについてはこちらの記事にわかりやすく書いてありますが、CentOSは初期設定だと/usr/local/libをライブラリの置き場所として認識していないためです。
対処
以下のコマンドを実行後、cpanmでText::MeCabを入れるといいです。# echo '/usr/local/lib' >> /etc/ld.so.conf # ldconfig
2011-05-17
[Linux]JS/Linuxでcronを動かす
巷で話題のJS/Linuxですが、そのままではcrondが動いてないから、cronエントリを書いてもまともに動きません。
だから、
だから、
# crond -bなどとしてcrondを動かしてやり、
# crontab -eでcronエントリを追加すると、正常に動作します。
2011-05-10
[Perl]Data::Model::Driver::MongoDBというものをかいた
MongoDBをData::ModelのDriverとして使うためのモジュールをかいたので、githubにあげました。
http://github.com/ytnobody/Data-Model-Driver-MongoDB
まず、setするときに自分で主キー値(idとかそういうの)を設定する必要がなくかつ、主キー値の変更ができません。
また、D::Mではデータを取得するget()において、絞り込み条件設定に"where"をつかうのですが、D::M::D::MongoDBでは、
http://github.com/ytnobody/Data-Model-Driver-MongoDB
使い方
githubにも書いてる通りですけど、こんな感じで使います。use Data::Model::Driver::MongoDB; my $mongo_db = Data::Model::Driver::MongoDB->new( host => 'localhost', db => 'my_database', ); my $schema = Oreore::Schema->new; $schema->set_base_driver( $mongo_db );これでData::Modelのインターフェースに則ってデータの差し込みや更新、読み込み等が出来るようになります。
普通のドライバと異なる箇所
ほとんどMongoDBの仕様(?)に由来するものばかりです。まず、setするときに自分で主キー値(idとかそういうの)を設定する必要がなくかつ、主キー値の変更ができません。
また、D::Mではデータを取得するget()において、絞り込み条件設定に"where"をつかうのですが、D::M::D::MongoDBでは、
my @rows = $schema->get( book => { where => [ price => { '<' => 1000 }, ], );などのような、不等号などを用いた範囲検索ができません。
2011-04-28
[Linux]ユーザ権限でsvscanbootを立ち上げて色々exportする手間を省く
何が嬉しいか
僕がやっている限りですが、perlbrew環境でもdaemontoolsのrunファイルで色々exportしなくても意図した通りにアプリケーションが動作してくれる、という点が挙げられます。設定
例えば$HOME/service/myappとかつくって、PSGI-appをdaemontoolsで常駐させたい場合。$HOME/.bashrcに1個exportを追記する
以下の行を追記しておく。export PATH=$HOME/bin:$PATH書いたら、一旦ログインし直す。
$HOME/以下に必要なディレクトリを用意する
~$ mkdir -p ~/service ~/bin ~/myapp/log
ユーザ用のsvscanbootを作る
$HOME/bin/svscanboot
#!/bin/sh svscan $HOME/service 2>&1 | \ readproctitle $HOME/service errors: ................................................................................................................................................................................................................................................................................................................................................................................................................
runファイルを作る
$HOME/service/myapp/run
#!/bin/sh exec 2>&1 start_server --port=6000 -- plackup -L Shotgun -s Starlet ~/psgi/myapp/myapp.psgi
$HOME/service/myapp/log/run
#!/bin/sh exec 2>&1 exec multilog t ~/myapp/log
サービスをdaemontoolsに登録する
~$ mv ~/myapp ~/service/ -v
svscanbootを起動する
~$ svscanboot & [1] 13787プロセス番号(ここでは13787)を控えておき、これをdisownする。
~$ disown 13787
ps axfhでプロセスを見ると、大体こんな感じになってると思います。
~$ ps axfh : : 省略 : : 13787 ? S 0:00 /bin/sh /home/ytnobody/bin/svscanboot 13788 ? S 0:00 \_ svscan /home/ytnobody/service 17896 ? S 0:00 | \_ supervise api 19351 ? S 0:00 | | \_ /bin/sh ./run 19352 ? S 0:00 | | \_ /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/bin/perl /home/ytnobody/perl5/perlbrew/perls/current/bin/start_server --port=6000 -- plackup -L Shotgun -s Starl 19353 ? S 0:00 | | \_ /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/bin/perl /home/ytnobody/perl5/perlbrew/perls/current/bin/plackup -L Shotgun -s Starlet /home/ytnobody/myapp 19354 ? S 0:00 | | \_ /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/bin/perl /home/ytnobody/perl5/perlbrew/perls/current/bin/plackup -L Shotgun -s Starlet /home/ytnobody/my 19355 ? S 0:00 | | \_ /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/bin/perl /home/ytnobody/perl5/perlbrew/perls/current/bin/plackup -L Shotgun -s Starlet /home/ytnobody/my 19356 ? S 0:00 | | \_ /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/bin/perl /home/ytnobody/perl5/perlbrew/perls/current/bin/plackup -L Shotgun -s Starlet /home/ytnobody/my 19357 ? S 0:00 | | \_ /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/bin/perl /home/ytnobody/perl5/perlbrew/perls/current/bin/plackup -L Shotgun -s Starlet /home/ytnobody/my 19358 ? S 0:00 | | \_ /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/bin/perl /home/ytnobody/perl5/perlbrew/perls/current/bin/plackup -L Shotgun -s Starlet /home/ytnobody/my 19359 ? S 0:00 | | \_ /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/bin/perl /home/ytnobody/perl5/perlbrew/perls/current/bin/plackup -L Shotgun -s Starlet /home/ytnobody/my 19360 ? S 0:00 | | \_ /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/bin/perl /home/ytnobody/perl5/perlbrew/perls/current/bin/plackup -L Shotgun -s Starlet /home/ytnobody/my 19361 ? S 0:00 | | \_ /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/bin/perl /home/ytnobody/perl5/perlbrew/perls/current/bin/plackup -L Shotgun -s Starlet /home/ytnobody/my 19362 ? S 0:00 | | \_ /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/bin/perl /home/ytnobody/perl5/perlbrew/perls/current/bin/plackup -L Shotgun -s Starlet /home/ytnobody/my 19363 ? S 0:00 | | \_ /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/bin/perl /home/ytnobody/perl5/perlbrew/perls/current/bin/plackup -L Shotgun -s Starlet /home/ytnobody/my 17897 ? S 0:00 | \_ supervise log 17900 ? S 0:00 | \_ multilog t /home/ytnobody/myapp/log /home/ytnobody/src/mongodb/data/db --nohttpinterface : : 省略 : :
2011-04-27
[Nginx]フォワードプロキシを構築する
ここを参考に、俗に言う串をNginxで構築しました。
schemeとhttp_host,requet_uriを使いまわすのがポイントですね。
2011/5/16 追記
httpsについては、このフォワードプロキシを通すことで、まともにアクセスできなくなる可能性があります。
nginx.conf
http { ### google DNS resolver 8.8.8.8; server { listen 80; server_name proxy.mydomain.net; location / { proxy_pass $scheme://$http_host$request_uri; } } }
schemeとhttp_host,requet_uriを使いまわすのがポイントですね。
2011/5/16 追記
httpsについては、このフォワードプロキシを通すことで、まともにアクセスできなくなる可能性があります。
2011-04-26
[Perl]Hachioji.pm #4
4/23(土)に開催されたHachioji.pm #4に参加してきました!
ぼくが記事を書く頃には大体いつも、皆さんきっちりと記事を書いてくれてますので、僕は雰囲気を伝える方向に専念できます><
#0 会場 八王子駅南口 あじこ家(沖縄料理)
#1 会場 魚米 八王子店(海鮮料理)
#2 会場 八王子北口 多熱食房(中華料理)
#3 会場 タイ料理レストラン タイラーンナー(タイ料理)
・・・と、かなりグルメな選定となっています。uzullaさんのチョイスが光っているのが良くわかりますね!
そして、今回の会場は南米ペルー料理 MISKY(ペルー料理)。もう八王子だけで世界の料理が堪能できそうな勢いですね!
「到着おめでとうございます!」
雨ということもあって、心なしかmakamakaさんの顔に疲れの表情が見え隠れしていたようにも見えましたけどね!><
今回のテーマは「最近作ったもの or GW中につくりたい物」です。
Gentoo、Arcあたりの話をすると、たいていの人はその先の話を聞いてくれなくなるそうなので、今回はCouchDBのViewサーバをArcでつくったよ!という話に的を絞ってました。
これはequinox79さんによる撮影ですが、これを見てLTの資料だと思う人はそう多くはないでしょう。
LT資料はこちら。
ぼくが記事を書く頃には大体いつも、皆さんきっちりと記事を書いてくれてますので、僕は雰囲気を伝える方向に専念できます><
ひどい雨にもかかわらず・・・
当日はかなりどしゃ降りの雨だったのですが、なんとATNDで参加表明していた13名が全員参加。さすがHachioji.pm、毎度のことながら出席率の高さがハンパ無いです。Hachioji.pm =~ Gourmet.pm ???
さて、これまでのHachioji.pm開催会場となったお店を振り返ってみますと・・・(※以下、ATNDへのリンク)#0 会場 八王子駅南口 あじこ家(沖縄料理)
#1 会場 魚米 八王子店(海鮮料理)
#2 会場 八王子北口 多熱食房(中華料理)
#3 会場 タイ料理レストラン タイラーンナー(タイ料理)
・・・と、かなりグルメな選定となっています。uzullaさんのチョイスが光っているのが良くわかりますね!
そして、今回の会場は南米ペルー料理 MISKY(ペルー料理)。もう八王子だけで世界の料理が堪能できそうな勢いですね!
「makamakaさんが登場したら拍手で迎えてください!」
これはHachioji.pmでの恒例儀式のようなものですね!makamakaさんはお仕事の都合もあって遅刻せざるを得ないのですが、そんな彼を労うべく(?)皆で大きな拍手で迎えましたw「到着おめでとうございます!」
雨ということもあって、心なしかmakamakaさんの顔に疲れの表情が見え隠れしていたようにも見えましたけどね!><
ustreamもリアルタイムつぶやきもない
そりゃあそうです。だって、みんな呑んで食ってしてるんですものwまったりした空気の中で恒例のA4-LT
飲み食いしてるので、みなさんそりゃあもうまったりしてました。そんな中LTが執り行われたわけですが、掻い摘んで印象に残ったものについて取りあげます。今回のテーマは「最近作ったもの or GW中につくりたい物」です。
GANCってなんだーーーーー!!!
まず印象に残ったのがmgikenさんの「LAMPではなくGANC」のお話でした。Gentoo(Linux), Arc(関数型プログラミング言語), Nginx(Webサーバ), CouchDB(NOSQLデータストア)の頭文字を取って「GANC(がんく)」だそうです。Gentoo、Arcあたりの話をすると、たいていの人はその先の話を聞いてくれなくなるそうなので、今回はCouchDBのViewサーバをArcでつくったよ!という話に的を絞ってました。
Dropboxでblogを管理
su_askaさんの「Dropboxでblog/wikiを管理する」お話。「Perl MongerなのにPukiwikiやWordPress使ってるのはおかしいだろう」という信念から、DropboxにMarkdownファイルを置いてblogとwikiを更新するようにしたというのですが、管理ツールいらずという謳い文句が琴線に触れるものがあります。ハリセンメソッド
サブタイトル見ただけで誰のLTなのかある程度想像できる人もいると思いますが、「期待を裏切らない男」makamakaさんによる斬新なプレゼン手法です!これはequinox79さんによる撮影ですが、これを見てLTの資料だと思う人はそう多くはないでしょう。
最近作ったサービスについて発表しました
ぼくの発表では、個人的な欲求に則って作ったサービス「dossug」について話しました。LT資料はこちら。
2011-04-22
[Perl]Test-WWW-Mechanize-1.30のテストがこける
こんな風にこけました@perl-5.12.3
で、ここ見る限り、Test-LongString-0.15がダメっぽいので、Test-LongString-0.14をいれてからT::W::Mech入れればいいっぽいです。
追記
どうやら、これ以外の原因でコケる場合もある模様。
とりあえずCPANRTではなくgoogle codeにて不具合等を管理しているようなので、そちらもご参照を。
~/$ cpanm Test::WWW::Mechanize --> Working on Test::WWW::Mechanize Fetching http://search.cpan.org/CPAN/authors/id/P/PE/PETDANCE/Test-WWW-Mechanize-1.30.tar.gz ... OK Configuring Test-WWW-Mechanize-1.30 ... OK ==> Found dependencies: Test::LongString, WWW::Mechanize, HTML::TreeBuilder, HTTP::Server::Simple, Carp::Assert::More, HTTP::Server::Simple::CGI --> Working on Test::LongString Fetching http://search.cpan.org/CPAN/authors/id/R/RG/RGARCIA/Test-LongString-0.15.tar.gz ... OK Configuring Test-LongString-0.15 ... OK Building and testing Test-LongString-0.15 ... OK Successfully installed Test-LongString-0.15 --> Working on WWW::Mechanize Fetching http://search.cpan.org/CPAN/authors/id/J/JE/JESSE/WWW-Mechanize-1.68.tar.gz ... OK Configuring WWW-Mechanize-1.68 ... OK ==> Found dependencies: HTML::TreeBuilder, HTTP::Server::Simple, HTTP::Server::Simple::CGI --> Working on HTML::TreeBuilder Fetching http://search.cpan.org/CPAN/authors/id/J/JF/JFEARN/HTML-Tree-4.2.tar.gz ... OK Configuring HTML-Tree-4.2 ... OK Building and testing HTML-Tree-4.2 ... OK Successfully installed HTML-Tree-4.2 --> Working on HTTP::Server::Simple Fetching http://search.cpan.org/CPAN/authors/id/J/JE/JESSE/HTTP-Server-Simple-0.44.tar.gz ... OK Configuring HTTP-Server-Simple-0.44 ... OK Building and testing HTTP-Server-Simple-0.44 ... OK Successfully installed HTTP-Server-Simple-0.44 Building and testing WWW-Mechanize-1.68 ... OK Successfully installed WWW-Mechanize-1.68 --> Working on Carp::Assert::More Fetching http://search.cpan.org/CPAN/authors/id/P/PE/PETDANCE/Carp-Assert-More-1.12.tar.gz ... OK Configuring Carp-Assert-More-1.12 ... OK Building and testing Carp-Assert-More-1.12 ... OK Successfully installed Carp-Assert-More-1.12 Building and testing Test-WWW-Mechanize-1.30 ... FAIL ! Installing Test::WWW::Mechanize failed. See /home/ytnobody/.cpanm/build.log for details.
で、ここ見る限り、Test-LongString-0.15がダメっぽいので、Test-LongString-0.14をいれてからT::W::Mech入れればいいっぽいです。
~/$ cpanm http://search.cpan.org/CPAN/authors/id/R/RG/RGARCIA/Test-LongString-0.14.tar.gz --> Working on http://search.cpan.org/CPAN/authors/id/R/RG/RGARCIA/Test-LongString-0.14.tar.gz Fetching http://search.cpan.org/CPAN/authors/id/R/RG/RGARCIA/Test-LongString-0.14.tar.gz ... OK Configuring Test-LongString-0.14 ... OK Building and testing Test-LongString-0.14 ... OK Successfully installed Test-LongString-0.14 ~/$ cpanm Test::WWW::Mechanize --> Working on Test::WWW::Mechanize Fetching http://search.cpan.org/CPAN/authors/id/P/PE/PETDANCE/Test-WWW-Mechanize-1.30.tar.gz ... OK Configuring Test-WWW-Mechanize-1.30 ... OK Building and testing Test-WWW-Mechanize-1.30 ... OK Successfully installed Test-WWW-Mechanize-1.30
追記
どうやら、これ以外の原因でコケる場合もある模様。
とりあえずCPANRTではなくgoogle codeにて不具合等を管理しているようなので、そちらもご参照を。
2011-04-19
[Linux]Titanium Mobile 1.2.2をUbuntu10.10-i386に入れた
基本的な手順としては、こちらのサイトの通りに進めました。
しかし、Titanium Developerの起動時の手順で問題が発生。以下の様な手順で問題を回避しました。
ちなみにこれでもまだ
といわれ、起動できません。Titanium + Ubuntuのマリアージュまでの道のりは、なかなか険しいですな。
ちなみに起動時に
追記
しかし、Titanium Developerの起動時の手順で問題が発生。以下の様な手順で問題を回避しました。
Titanium Developerのディレクトリのリネーム
これをやらないと、まともに起動できません。~$ mv Titanium\ Developer-1.2.2/ ~/.titanium
runtime以下に各種同梱ライブラリ群を移動
次に、ライブラリ群を$HOME/.titanium/runtime/linux/1.0.0/ から $HOME/.titanium/runtime/ へと移動させてしまいます。~$ mv ~/.titanium/runtime/linux/1.0.0/* ~/.titanium/runtime/
ちなみにこれでもまだ
~$ ~/.titanium/Titanium\ Developer /home/ytnobody/.titanium/Titanium Developer: symbol lookup error: /usr/lib/libgtk-x11-2.0.so.0: undefined symbol: g_malloc_n
といわれ、起動できません。Titanium + Ubuntuのマリアージュまでの道のりは、なかなか険しいですな。
衝突している同梱ライブラリを削除する
前述のエラーでググれば情報が出てくるのですが、要するに$HOME/.titanium/runtime/配下にあるライブラリのうち、- libgobject2.0
- libglib2.0
- libgio2.0
- libgthread2.0
~$ rm ~/.titanium/runtime/libgobject-2.0.* -f ~$ rm ~/.titanium/runtime/libglib-2.0.* -f ~$ rm ~/.titanium/runtime/libgio-2.0.* -f ~$ rm ~/.titanium/runtime/libgthread-2.0.* -f ~$ ~/.titanium/Titanium\ Developer
ちなみに起動時に
icedteanp plugin error: Failed to run /etc/alternatives/../../bin/java. For more detail rerun "firefox -g" in a terminal window.といわれます。今のところ正常に動作しているようなのであまり気にしていないのですが、これは大丈夫なのでしょうかねえ。。。
追記
android-sdkのパスを指定してもエラーが出てプロジェクトが作れない時の対処
いざ、新規プロジェクトを立ち上げようとして、プロジェクト種別「Mobile」を選択した際、「android-sdkの場所を教えてくんな」と言ってきます。この時、正常なandroid-sdkのパスを指定してもCouldn't find adb or android in your SDK's "tools" directory. You may need to install a newer version of the SDK tools.とか言われてしまいました。そんな時は、
~$ ln -s ~/android-sdk-linux_x86/platform-tools/adb ./android-sdk-linux_x86/tools/とすればOKでした。
2011-04-15
[Forth]perlでいうところのrequireをしたい
include hoge.fthのように、includeを使うか、
s" ./lib/hoge.fth" includedのように、includedワードでスタック内の文字列に該当するソースファイルを指定するかの2方式を選べるみたいです。
どちらの場合も、プログラムが置かれているディレクトリを元にソースファイルの場所を指定する必要があります。
追記
Ubuntu 10.04 LTSの場合、/usr/share/gforth 配下にgforthのモジュール群があったので、これもrequireできるみたいです。
従って、libパスは ./ および /usr/share/gforth ということになります。
[Forth]gforthをCGIとして動かす場合のshebangの書き方
[Forth]スタックに乗ってる文字列を複製してみる
えーとforthについてはほぼ初心者の域をでないのですが、時折触ってみては「いつかは使いこなしたい」と思っている言語のひとつです。
そんなforth学習の一環として、手始めに
・ワード定義
・スタック操作
・文字列操作(?)
あたりを一気にやってみたので、メモを残しておきます。
そんなforth学習の一環として、手始めに
・ワード定義
・スタック操作
・文字列操作(?)
あたりを一気にやってみたので、メモを残しておきます。
: ddup ( a b -- a b a b ) over over ; s" ほげ" ddup type type cr bye
$ gforth hoge.fth ほげほげ
2011-04-14
[Linux]さくらVPSにてMongoDBを一般ユーザ権限で動かす
MongoDBにすこし興味が出たので、このページを参考に、さくらVPS(CentOS 5.5)で動かしてみました。root無くても動かせそうだったので、ユーザ権限で動かすことにしました。
今回は、$HOME/src/mongodb/data/db をデータストアにします。
セキュリティ的にはこんなのを外部から見れるようにしておきたくないので、mongod起動時のオプション"--nohttpinterface"を付加して、この機能を止めておきましょう。
あとはdaemontools経由で起こすなりしてやれば良いというわけですね。
ユーザ権限で動かすので、その用意。
$HOMEにいろいろどっ散らかるのはイヤなので、$HOME/srcを作って、そこにMongoDBを置くことにしました。~ $ mkdir ~/src
MongoDBの入手
こちらのサイトにLinux 64-bit向けのtarボールがあるので、おすすめ(recommended)と書かれてるバージョンのをwgetで引っ張ってきます。~ $ wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-1.8.1.tgz
インストール
$HOME/srcにtarボールを移動して、そこで解凍します。~ $ mv mongodb-linux-x86_64-1.8.1.tgz ~/src/ ~ $ cd ~/src ~/src $ tar zxvf mongodb-linux-x86_64-1.8.1.tgz ~/src $ ln -s ~/src/mongodb-linux-x86_64-1.8.1.tgz ./mongodb以上でインストール自体は完了です。なまら簡単だべ?
データストアの置き場所を用意する
MongoDBでは、デーモンプログラム"mongod"の起動オプション"--dbpath"で、データストアのパスを設定できます。今回は、$HOME/src/mongodb/data/db をデータストアにします。
~ $ mkdir ~/src/mongodb/data/db -pこれだけです。
mongodを起こす
ではmongodを起こします。~ $ ~/src/mongodb/bin/mongod --dbpath ~/src/mongodb/data/dbフォアグラウンドで起き上がってきて、ログをだくだく吐き出したら、無事に起動できています。止めるときはCtrl+Cすれば止まります。
mongod起こした状態でweb管理インターフェースを見てみる
mongodを起こすと、ログの中にThu Apr 14 11:14:40 [websvr] web admin interface listening on port 28017のような記述が見受けられます。見ての通り、「Web管理インターフェースがポート28017で待ち受けている」ということです。試しにブラウザでVPSの28017番ポートにアクセスしてみると、以下のようなページを見ることが出来ます。
セキュリティ的にはこんなのを外部から見れるようにしておきたくないので、mongod起動時のオプション"--nohttpinterface"を付加して、この機能を止めておきましょう。
あとはdaemontools経由で起こすなりしてやれば良いというわけですね。
2011-04-13
[Perl]Plack::Middleware::*を作ってみる
いい加減Plackが当たり前のこの頃ですが、いまだにPlack::Middleware::*を作ったことが無かったので、練習してみました。
なお、あまり気にせずに書いていたら、内容がほとんどPlack::Middlewareのドキュメントと似たものになってしまいました。
で、callというメソッドですが、ここに実際の処理を書いてあげて、最後に$self->app->( $env )としてappを実行するようにします。もしHTTPレスポンスを返したい場合は、途中でPlack::Response形式のarrayrefをreturnしてあげればOKです。
もしenableするときにオプション値を取りたい(enable "OreOre", foo => 'bar'; とか)場合は、Plack::Util::Accessorを使う必要があります。
多分、これだけあれば大抵の機能をPlackに組み込むことができそうです。
ようやく少しはPlackの使い方に慣れてきました!
なお、あまり気にせずに書いていたら、内容がほとんどPlack::Middlewareのドキュメントと似たものになってしまいました。
基本型
以下が、だいたい定型となるコードです。package Plack::Middleware::OreOre; use strict; use warnings; use parent qw/ Plack::Middleware /; ### enableでオプションを受け取る時に使用 # use Plack::Util::Accessor qw/ oreore watewate soregashisoregashi /; our $VERSION = '0.01'; sub call { my ( $self, $env ) = @_; ### ここに処理をかく ### $self->app->( $env ); } 1; __END__Plack::Middleware::*を作るには、Plack::Middlewareを継承する必要があります。
で、callというメソッドですが、ここに実際の処理を書いてあげて、最後に$self->app->( $env )としてappを実行するようにします。もしHTTPレスポンスを返したい場合は、途中でPlack::Response形式のarrayrefをreturnしてあげればOKです。
もしenableするときにオプション値を取りたい(enable "OreOre", foo => 'bar'; とか)場合は、Plack::Util::Accessorを使う必要があります。
多分、これだけあれば大抵の機能をPlackに組み込むことができそうです。
ごく単純な例
ある特定パスにアクセスされた時に、他のページにリダイレクトする、というだけの単純なPlack::Middleware::Hogehogeをつくってみました。package Plack::Middleware::Hogehoge; use strict; use warnings; use parent qw/ Plack::Middleware /; use Plack::Util::Accessor qw/ jump_url listen_path /; our $VERSION = '0.01'; sub call { my ( $self, $env ) = @_; return [ 301, [ 'Location', $self->jump_url ], [''] ] if $env->{ PATH_INFO } eq $self->listen_path; $self->app->( $env ); } 1; __END__この場合、実際に使うときは以下の様なpsgiになります。
use Plack::Builder; my $app = sub { [ 200, [ 'Content-Type', 'text/html' ], ['<h1>hoge!</h1>'] ] }; builder { enable "Hogehoge", listen_path => '/yahoo', jump_url => 'http://www.yahoo.co.jp/'; $app; };これをplackupすると、/yahooにアクセスしたときだけYahoo!Japanにリダイレクトされ、それ以外は"hoge!"とかかれたページが表示されます。
ようやく少しはPlackの使い方に慣れてきました!
2011-04-07
[Perl]WebService::Simpleでレスポンスが文字化けしたら
XML::Simpleのパフォーマンスの話
WebService::Simpleは内部的にXML::Simpleを使っている。古い話だけど、XML::Simpleといえばこちらにもあるように「遅い」と評されることがあって、それはここに原因と対策がまとめられていて、掻い摘んで説明すると・XML::SimpleはデフォルトでXML::SAX::PurePerlを内部的にパーサとして使用している。
・XML::SAX::PurePerl*が*遅いのであって、XML::Parserを使えば速度が改善される。
ということになる。そのためには
$XML::Simple::PREFERRED_PARSER = 'XML::Parser';という具合に、XML::Simpleが内部的に使用するパーサにXML::Parserを指定すれば良い。
本題
のっけから脱線したけど、これはWebService::Simpleのparse_response()の結果が文字化けを起こすという現象にも、同様の事が言える模様。use WebService::Simple; my $ws = WebService::Simple->new( base_url => 'http://example.com/api', param => { api_key => '***' }, ); my $res = $ws->get( 'hoge/fuga', { q => 'piyo' } ); my $xml = $res->parse_response;
例えば、こんな具合で生成されたWebService::Simpleのオブジェクトがあって、parse_responseの戻り値が文字化けしていたとする。そんな時はまず、
use WebService::Simple; use WebService::Simple::Parser::XML::Simple; $XML::Simple::PREFERRED_PARSER = 'XML::Parser'; my $ws = WebService::Simple->new( base_url => 'http://example.com/api', param => { api_key => '***' }, response_parser => WebService::Simple::Parser::XML::Simple->new( xs => $xs ), ); my $res = $ws->get( 'hoge/fuga', { q => 'piyo' } ); my $xml = $res->parse_response;この様な具合でresponse_parserを食わせてみると、文字化けが治ったりするかもしれない。
2011-03-28
[Perl]Hachioji.pm #3 に参加しました
公式にもレポートがあがってます通り、3/26(土)にHachioji.pm #3が開催されました。
Hachioji.pm #3 開催いたしました! - hachioji.pm
詳細ついては、こことかこちらとかを参照のこと。
じつはかなり酔っ払っていて、あまり細かいことは覚えていないのです。でもまあ、概ね以下のような話題でがやがやと話していたとおもいます(本当に記憶が薄れてるので、覚えてるとこだけ箇条書きでw)
・停電のせいで仕事にならない人も。
・今、インフラ系の人は大変ですよね。。。
・データセンターでも、一部では発動機用の燃料を確保するのに大変。
・さくらは大阪なのでさくらVPSはたぶん大丈夫。
・東京23区にお住まいの方はあまり実感がないらしく、「たいへんそうですねー」とコメント。
・八王子はあまりゆれないらしい。uzullaさんのTL見てると「ゆれてなーい」とか言っててうける。
・今回のHachioji.pm開催に際して「不謹慎」等のツッコミが一切なかった。
※決してFUDではないです。
・MySQL
データベース操作とかチューニングとかレプリケーションとか・・・
・Q4M
成り立ちからしてバッドノウハウだという意見も。
>つまりグッドラッパー???
・Apache
XMLもどきなconfファイルがそもそもバッドノウハウ。
>名前からして"a patchy"をもじってるので、バッドノウハウの権化といえるのかも。
ちなみに、いまならnginxでほぼ代替可能でしょう。
・PHP
多くを語らずとも皆さんが「これはバッドノウハウ」という認識のようでした。。。
これもapacheと同じで、バッドノウハウの権化となるべくしてなってる感が強いです。
・ガラケー向けノウハウ全般
絵文字周りのノウハウとかは特にバッドノウハウの塊といえるでしょう。
それに対するグッドラッパーがPerlにもPHPにも豊富なのですが。
・SJIS-win
PHPで扱うことの出来る文字コードのひとつ。なぜCP932じゃないんだ。。。
ちなみにPHPにはCP932をまっとうに扱えるライブラリ類が無いんだそうで。
・IE6
「IE6とガラケー向けノウハウが無くなれば、8割のバッドノウハウは消え失せる」といわれるほどのバッドノウハウの総合商社っぷり。
これについてはそのままFUDとして受け取ってもらっても構わないでしょうw
しかしuzullaさんも言っていたように、バッドノウハウをうまく利用する/ラップする仕事というのは、大抵お金的においしい仕事だったりします。
バッドノウハウをDISったりするのは、ぶっちゃけ素人でもできるわけです。単にバッドノウハウを忌み嫌うのではなく、バッドノウハウとうまくお付き合いするという考え方は、実はギークの態度として非常に大切なものではないでしょうか。
・ソーシャルアプリは100万人単位の登録数がないとあまりおいしくなさそう。
・震災復興特需に期待か。具体的には土木・建築・電力系に関連したお仕事等。
Hachioji.pm #3 開催いたしました! - hachioji.pm
詳細ついては、こことかこちらとかを参照のこと。
じつはかなり酔っ払っていて、あまり細かいことは覚えていないのです。でもまあ、概ね以下のような話題でがやがやと話していたとおもいます(本当に記憶が薄れてるので、覚えてるとこだけ箇条書きでw)
地震と計画停電
・八王子は駅前付近も含めて、ちょくちょく停電が実施されている模様。・停電のせいで仕事にならない人も。
・今、インフラ系の人は大変ですよね。。。
・データセンターでも、一部では発動機用の燃料を確保するのに大変。
・さくらは大阪なのでさくらVPSはたぶん大丈夫。
・東京23区にお住まいの方はあまり実感がないらしく、「たいへんそうですねー」とコメント。
・八王子はあまりゆれないらしい。uzullaさんのTL見てると「ゆれてなーい」とか言っててうける。
・今回のHachioji.pm開催に際して「不謹慎」等のツッコミが一切なかった。
毎度おなじみ
makamakaさんが遅れて到着(予め遅れるという話はいつもの事)した時に、全員で大きな拍手を持って迎えられてました。バッドノウハウ
LTで扱った話題とも重複するのですが、「これってバッドノウハウだよねー」というものがいくつかありました。※決してFUDではないです。
・MySQL
データベース操作とかチューニングとかレプリケーションとか・・・
・Q4M
成り立ちからしてバッドノウハウだという意見も。
>つまりグッドラッパー???
・Apache
XMLもどきなconfファイルがそもそもバッドノウハウ。
>名前からして"a patchy"をもじってるので、バッドノウハウの権化といえるのかも。
ちなみに、いまならnginxでほぼ代替可能でしょう。
・PHP
多くを語らずとも皆さんが「これはバッドノウハウ」という認識のようでした。。。
これもapacheと同じで、バッドノウハウの権化となるべくしてなってる感が強いです。
・ガラケー向けノウハウ全般
絵文字周りのノウハウとかは特にバッドノウハウの塊といえるでしょう。
それに対するグッドラッパーがPerlにもPHPにも豊富なのですが。
・SJIS-win
PHPで扱うことの出来る文字コードのひとつ。なぜCP932じゃないんだ。。。
ちなみにPHPにはCP932をまっとうに扱えるライブラリ類が無いんだそうで。
・IE6
「IE6とガラケー向けノウハウが無くなれば、8割のバッドノウハウは消え失せる」といわれるほどのバッドノウハウの総合商社っぷり。
これについてはそのままFUDとして受け取ってもらっても構わないでしょうw
しかしuzullaさんも言っていたように、バッドノウハウをうまく利用する/ラップする仕事というのは、大抵お金的においしい仕事だったりします。
バッドノウハウをDISったりするのは、ぶっちゃけ素人でもできるわけです。単にバッドノウハウを忌み嫌うのではなく、バッドノウハウとうまくお付き合いするという考え方は、実はギークの態度として非常に大切なものではないでしょうか。
今後おいしくなる仕事とは何だろう
・バッドノウハウを要する仕事はおいしい・ソーシャルアプリは100万人単位の登録数がないとあまりおいしくなさそう。
・震災復興特需に期待か。具体的には土木・建築・電力系に関連したお仕事等。
2011-03-24
[Linux]nginxをさくらVPSのCentOS5.5に入れてみた
最近借りた「さくらのVPS(CentOS5.5)」にnginx-0.8.54をインストールしてみました。
CentOSにはrpmforge含めyumパッケージが無いので、ソースからインストールします。
今回は「安定版」とされている0.8系を選択しました。
コマンドをまとめると、以下の様になるはずです。
設定ファイルは /usr/local/nginx/conf/nginx.conf です。
nginx.confに以下のようなネームバーチャルを追加し、ネームバーチャルをまるごとプロキシとしました。
で、急ごしらえの動確用PSGIアプリを
しかし、これだけだとログがローテートされません。放っておくと、アホみたいなサイズになってしまいます。
これもdaemontoolsに任せてしまいたいので、どうにかログを標準出力に吐いておきたいところ。
そこで、/dev/stdoutにログを吐いてやるように設定したところ、期待通りの動作となりました。
さようならapache!もう君には(よほどの事がない限り)世話にならないだろう!
nginxとは
nginx - Wikipediaダウンロード
http://wiki.nginx.org/InstallJaからダウンロードできます。CentOSにはrpmforge含めyumパッケージが無いので、ソースからインストールします。
今回は「安定版」とされている0.8系を選択しました。
インストール
僕が試した限り、以下のyumパッケージを予めインストールしておく必要がありました。- pcre-devel
- openssl-devel
コマンドをまとめると、以下の様になるはずです。
# yum -y install pcre-devel openssl-devel # tar zxvf ./nginx-0.8.54.tar.gz # cd ./nginx-0.8.54 # ./configure && make && make install/usr/local/nginxにいろいろ入っていればインストール成功です。
nginxを起動する
では、httpサーバとしてnginxを起動してみます。# /usr/local/nginx/sbin/nginxこれだけです。
nginxを停止する
停止する場合は# /usr/local/nginx/sbin/nginx -s stopと実行するだけです。
ネームバーチャルを設定する
ドメイン毎にドキュメントルートを変えたりしたかったので、ネームバーチャルを設定しました。設定ファイルは /usr/local/nginx/conf/nginx.conf です。
server { listen 80; server_name alpha.ytnobody.net; location / { root vhosts/alpha; index index.html; } } server { listen 80; server_name beta.ytnobody.net; location / { root vhosts/beta; index index.html; } }こんな感じの記述を http { ... } の中に書いてやります。
プロキシとして動作させる
バックエンドでstarmanとか動かしたいので、プロキシとして動作させてみました。nginx.confに以下のようなネームバーチャルを追加し、ネームバーチャルをまるごとプロキシとしました。
server { listen 80; server_name lab.ytnobody.net; location / { proxy_pass http://127.0.0.1:5000; } }
で、急ごしらえの動確用PSGIアプリを
sub { [ 200, [ 'Content-Type' => 'text/html' ], [ '<html><head><title>PLACK</title></head><body>PLACK!</body></html>' ] ]; };こんな感じででっち上げて、plackupで起こしてやります。
$ plackup ./hoge.plこれで、lab.ytnobody.netにアクセスすると、PSGIアプリにリクエストが流れます。
ロードバランシングさせる
さきほどのlab.ytnobody.netを改造して、ロードバランサとして設定してみます。upstream mybalancer { server www.google.com:80; server www.cpan.org:80; server www.yahoo.co.jp:80; } server { listen 80; server_name lab.ytnobody.net; location / { proxy_pass http://mybalancer; } }これだけで、upstreamのserver達にリクエストがバランシングされます。
フォアグラウンドで走らせて、daemontoolsに食わせやすくする
nginxをフォアグラウンドで動かすには、# /usr/local/nginx/sbin/nginx -g 'daemon off;'のように、グローバル指定子"daemon off;"を指定する必要があります。
しかし、これだけだとログがローテートされません。放っておくと、アホみたいなサイズになってしまいます。
これもdaemontoolsに任せてしまいたいので、どうにかログを標準出力に吐いておきたいところ。
そこで、/dev/stdoutにログを吐いてやるように設定したところ、期待通りの動作となりました。
server { listen 80; server_name lab.ytnobody.net; access_log /dev/stdout; location / { proxy_pass http://mybalancer; } }
さいごに
いままでnginx使ってなかった理由がわからない!!!!というほど、簡単に導入できました!!さようならapache!もう君には(よほどの事がない限り)世話にならないだろう!
2011-03-13
[地震]東京電力より輪番停電のおしらせ
PDF版 https://docs.google.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwapBcGA1141Y2FkNmU4YWItYTA3My00ODY5LTk0ZTEtYzU4MWI1MjRmN2Nl&hl=ja&pli=1
毎日.jpによるHTML版
毎日.jpによるHTML版
第1グループ 6:20~10:00 の時間帯のうち3時間程度
第1グループ 16:50~20:30 の時間帯のうち3時間程度
第2グループ 9:20~13:00 の時間帯のうち3時間程度
第2グループ 18:20~22:00 の時間帯のうち3時間程度
第3グループ 12:20~16:00 の時間帯のうち3時間程度
第4グループ 13:50~17:30 の時間帯のうち3時間程度
第5グループ 15:20~19:00 の時間帯のうち3時間程度
2011-03-04
[Perl]plackアプリとAttribute::Handlersの相性は悪い
先日作ったRouter::Simple::Attributeを使ってPlackベースのWAFを作ろうとしたのですが、どういうわけかrouterの中身がカラッポになってしまい、ちっともまともに動作してくれませんでしたorz
で、よくよく調べてみると、どうやらPlack::SandboxとAttribute::Handlersの相性がよろしくない模様でした。
そんなわけで、plackupからでも問題なく使用できるメソッドアトリビュートハンドラを探しています。
どなたかご存知の方、教えてください。よろしくお願いしますm(_ _)m
まとめると、僕は「Attribute病」:) に罹患していたらしく、
・PSGIアプリではINIT/CHECKなどが呼ばれないため、アトリビュートはほぼ動かない。
・アトリビュート使うと、第3者からみて「何してるかわからないコード」になってしまい、おすすめできない。
・Attr::Handlers sucks, and Perl5 attribute sucks too. で FA。
ということらしいです。従って結論は
アトリビュートを使うのはお止しなさい
で、よくよく調べてみると、どうやらPlack::SandboxとAttribute::Handlersの相性がよろしくない模様でした。
検証用コード - eg/sample.pl
まあ幾つかツッコミどころが有りますけど、問題の本質とは関連がないものばかりの筈なのでスルー。use warnings; use strict; use lib qw( ../lib ./lib ); use Attribute::Handlers; use Router::Simple; use Data::Dumper; my $router; BEGIN { $router = Router::Simple->new(); } sub Path :ATTR { warn Dumper( @_ ); my $path = $_[4]; my $code = $_[2]; $router->connect( $path, { code => $code } ); } sub myapp : Path(/) { warn Dumper( @_ ); [ 200, ['text/html'], ['Hello, world!'] ]; } warn Dumper( $router, __PACKAGE__ ); sub { my $env = shift; if ( my $p = $router->match( $env ) ) { $p->{ code }->( $p ); } else { [404, [], ['no']]; } };
perlコマンドから直接実行して見た場合
$ perl eg/sample.pl Useless use of reference constructor in void context at eg/sample.pl line 35. $VAR1 = 'main'; $VAR2 = \*::myapp; $VAR3 = sub { "DUMMY" }; $VAR4 = 'Path'; $VAR5 = '/'; $VAR6 = 'CHECK'; $VAR7 = 'eg/sample.pl'; $VAR8 = 24; $VAR1 = bless( { 'routes' => [ bless( { 'pattern_re' => qr/(?-xism:^\\/$)/, 'pattern' => '/', 'capture' => [], 'dest' => { 'code' => sub { "DUMMY" } }, 'name' => undef, 'on_match' => undef }, 'Router::Simple::Route' ) ] }, 'Router::Simple' ); $VAR2 = 'main';一応、Pathアトリビュートのトリガが引かれていることが確認できてます。
plackupした場合
では、今度はeg/sample.plをplackupで起こしてみます。$ plackup eg/sample.pl $VAR1 = bless( { 'routes' => [] }, 'Router::Simple' ); $VAR2 = 'Plack::Sandbox::eg_2fsample_2epl'; HTTP::Server::PSGI: Accepting connections at http://0:5000/こんな感じで、Pathアトリビュートのトリガが引かれません。
誰かおしえてください
どなたかご存知の方、教えてください。よろしくお願いしますm(_ _)m
教えていただきました!
Twitterで、色々な方にご教示頂きました!この場を借りて、改めて御礼申し上げます。まとめると、僕は「Attribute病」:) に罹患していたらしく、
・PSGIアプリではINIT/CHECKなどが呼ばれないため、アトリビュートはほぼ動かない。
・アトリビュート使うと、第3者からみて「何してるかわからないコード」になってしまい、おすすめできない。
・Attr::Handlers sucks, and Perl5 attribute sucks too. で FA。
ということらしいです。従って結論は
アトリビュートを使うのはお止しなさい
2011-03-03
[Perl]Router::Simple::Attributeというものをつくったものの、筋が悪い物だった
最近、そろそろ自前のWAFが欲しいと思い始めているのですが、いかんせん設計がまとめきれていないので、作っては棄てを繰り返しています。
そんな中、Router::Simpleを弄っていて、「毎度newするの面倒だなあ。connectって毎度書くのも億劫だしぃ。。。」とか思っちゃって、じゃあAttributeにパス書けるようにしたらどうだろうということで、Router::Simple::Attributeなるものをつくってみました。
podをコピってきただけなんですけど、とりあえず簡単に説明。
Pathアトリビュートのついたサブルーチンを作ると、Router::Simple->connect相当のことをやってくれます。アトリビュートオプションには、Router::Simple流のパス文字列を渡してやるといいです。
それから、router()という関数が使えるようになります。こいつはRouter::Simpleのインスタンスを返しますが、これにはdoというメソッドが追加されています。
doメソッドは、Router::Simple::match()の返り値(=HashRef)の要素{code}をコードリファレンスとして実行するものです。
素のRouter::Simpleの場合、
あと、例によってテストが少なく、自分でもまだ実戦投入できていないものなので、信頼性については「?」という具合です。とはいえ、R::S::Attribute自体のコード量は非常に少なく、Router::Simpleが安定しているので、何か問題があったとしても、トレースはしやすいとおもいます。
2011-3-4 追記
どうやら、Plack::Sandbox::*とAttribute::Handlersの相性が悪いらしく、plackupからうまく利用できませんでした。
この辺を調査した時の記録は、こちらの記事に書きました。
一つ言えるのは、Attribute::Handlers や Perl5のアトリビュートを使うのは筋がよろしくないということです。
そんな中、Router::Simpleを弄っていて、「毎度newするの面倒だなあ。connectって毎度書くのも億劫だしぃ。。。」とか思っちゃって、じゃあAttributeにパス書けるようにしたらどうだろうということで、Router::Simple::Attributeなるものをつくってみました。
使い方
use MyApp; use Router::Simple::Attribute; sub root : Path(/) { return 'root'; } sub home : Path(/home/:myname) { return 'ok, '. shift->{ myname }. '!'; } router->do( '/' ); # >>> 'root' router->do( '/home/ytnobody' ); # >>> 'ok, ytnobody!'
podをコピってきただけなんですけど、とりあえず簡単に説明。
Pathアトリビュートのついたサブルーチンを作ると、Router::Simple->connect相当のことをやってくれます。アトリビュートオプションには、Router::Simple流のパス文字列を渡してやるといいです。
それから、router()という関数が使えるようになります。こいつはRouter::Simpleのインスタンスを返しますが、これにはdoというメソッドが追加されています。
doメソッドは、Router::Simple::match()の返り値(=HashRef)の要素{code}をコードリファレンスとして実行するものです。
素のRouter::Simpleの場合、
$router->connect( '/path/:user', { code => sub { ... } } ) ... if ( my $p = $router->match( $env ) ) { $p->{code}->( ... ); } else { ... }こんなふうに { code => sub { ... } } のところとか if文のくだりが若干冗長に感じますが、R::S::Attributeなら、
sub user :Path(/path/:user) { ... } ... return router->do( $env ) || [ 404, [], ['not-found'] ];みたいな書き方が可能です。
但し書き
当然ですが、Router::Simpleに処理を追加しているモジュールなので、Router::Simpleより遅いです。あと、例によってテストが少なく、自分でもまだ実戦投入できていないものなので、信頼性については「?」という具合です。とはいえ、R::S::Attribute自体のコード量は非常に少なく、Router::Simpleが安定しているので、何か問題があったとしても、トレースはしやすいとおもいます。
2011-3-4 追記
どうやら、Plack::Sandbox::*とAttribute::Handlersの相性が悪いらしく、plackupからうまく利用できませんでした。
この辺を調査した時の記録は、こちらの記事に書きました。
一つ言えるのは、Attribute::Handlers や Perl5のアトリビュートを使うのは筋がよろしくないということです。
2011-02-21
[Perl]Hachioji.pm #2
去る2/19(土)に開催されたHachioji.pm #2に参加しました。
・hide_o_55さんのレポート
・uzullaさんのレポート
・maka2_donzokoさんのレポート
・norry_gogoさんのレポート
・equinox79さんのレポート(#1含む)
・bisque33さんのレポート
手っ取り早く言うと、「八王子周辺のIT技術者の飲み会」で間違いないと思います。
たぶん首都圏のpmの中では最も敷居の低いpmでしょう。
ご興味のあるあなた!ぜひとも参加してみてください!
次回は3/26(土) 18:00スタート予定です! → Hachioji.pm #3
IRC #hachiojipm (freenode)
Twitter @hachiojipm #hachiojipm
「Perl以外」
でした。
>perlならDevel::NYTProfがあるけど…
>>もっとローレベルな情報取得をする場合(デバイスドライバの開発など)には重宝するとのこと。
JavaScript,PHP,ActionScript等に変換できるのが強みだそうです。
ご本人も当日より始めたばかりだそうです。
LT資料はこちら(スライドが8枚ありますが、実際はA4用紙1枚に印刷しました)。
ただし、内容が内容なので、詳細は非公開です。
測地系一つとっても日本測地系と世界測地系で400~500mも差がでてしまうというお話。
実際、OpenSocialコンテナによっても、採用している測地系が異なるので、苦戦を強いられます。
ちなみに、Geo::Coordinates::Converterを使えば、測地系毎の変換ができます。(その際に生じる誤差がどうなるかは解りませんが。。。)
「鉄拳メソッドでやればいいんじゃないんですか?」
なあんて、軽い気持ちでボケていたのですが、それがどうやら図星だったらしく、鉄拳風紙芝居/もんたハイブリッドメソッドというとてつもない手法でLTを敢行してました。
hachioji自体にもなんか尊大な意味があったり、PMには某大物チェンバロ奏者があてがわれていたりと、お馴染みのまかまか節が炸裂していたのでした。
LT資料
というのを思いつき、実際にやってしまうのが彼にとって自然な流れらしいですw
そのうち、CPANモジュールをnode.jsに食わせたりするのではないのでしょうか。
IISと聞くだけでも「ご苦労様です!」と言わざるを得ないのに、バージョンアップに伴う仕様変更に相当泣かされている模様でした。
そしてそれぞれの解決方法もWindowsならではのパワープレイが効いており、改めて「IISコワー><」と実感した次第です。
いや、僕が大分昔にSourceforgeにあげていたCUIツイッタークライアント「Cuitter」もそんな実装してますんでw
uzullaさん「んじゃうごかしまーす」<ポチっ>
...
uzullaさん「うごかねーw」<ぎょわははははは>
ネタとテクノロジーに関する話題が程よくミックスされた、面白いLTでした!
いつもNAVIはサービスとして非常によくできていますね!
Cassandraでデータ分散させるも、分散自体が偏ったりして結構苦戦している模様です。
それもそうですが、PHPのMTAというのが非常に興味深いですね!
MySQLとPostgreSQLとでEXPLAINの出方が全然違ったりするので、この辺はできるなら統一してほしいかも…
既にあるレポート等
・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枚に印刷しました)。
Alluren of prototype-based OOP
View more presentations from azuma satoshi.
モバイルのキャリア課金に関するお話 - 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を書いているのですが、
text()って引数Stringじゃないし、アクセッサではないようなので。。。orz
だれかおしえてください!!!!><
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
とすれば、daemontoolsのインストールが始まります。
※2014/01/03 記事を一部修正しました。
かなり前に書いた記事で、daemontoolsのインストールをするスクリプトをこさえました。
もうあれから1年半ほど経過したわけですが、僕自身が未だにこのスクリプトに助けられています。
で、いっそのことネットからもっと取りやすい位置に置いておけばいいんじゃないかと思い、gist + URL短縮でサクッと取得しやすいURLにしてみました。
gist: 825704 - daemontools installer script- GitHub
こちらが最新版です。 http://is.gd/dtinstall
$ curl -L http://is.gd/dtinstall | sh
とすれば、daemontoolsのインストールが始まります。
※2014/01/03 記事を一部修正しました。
登録:
投稿 (Atom)