SQL_MakerをComposerでインストールできるようにした

PerlのSQL::MakerをPHPに移植して作ったSQL_Makerを、 書き直してPackagistにアップロードしてみました。https://packagist.org/packages/uchiko/sql-makerこれでComposerからインストールすることができます。 導入手順 以下のコマンドでcomposer.pharをイ…

!!1する意味が分からない

1と!!1の違いが分からない。 !!'test' ならやりたいことは分かる。 !!1はやりたいことが分からない。ひとまずDumpしてみた。 use strict; use warnings; use Devel::Peek; # SV = IV(0xdf12788) at 0xdf12798 # REFCNT = 1 # FLAGS = (IOK,READONLY,pIOK) # …

ルーティング設定に名前をつける

以下のようにルートに名前をつけることが出来ます。 # Mojolicious::Liteの場合 get '/hoge/detail/:id' => sub { ... } => 'hoge/detail'; # Mojoliciousの場合 $r->get('/hoge/detail/:id')->to('hoge#detail')->name('hoge/detail'); このようにしておく…

emacsclientでtty関連のエラーが出る

http://www.emacswiki.org/emacs/EmacsAsDaemon#toc17他のユーザーから切り替えたユーザーでemacsclientを実行すると、 以下の様にttyでエラーが出ます。 *ERROR*: Could not open file: /dev/pts/1ユーザーを切り替えるときはsshを使ったほうが良いみたいで…

Orepanでローカルミラーを作成・管理する

プロジェクトが依存しているモジュールをローカルミラーで管理します。 ローカルミラーはプロジェクトのバージョン管理下に入れます。 こうすることで、依存モジュールのバージョンを固定することができます。 管理ツールインストール ローカルミラーを管理…

NotFound時の処理を書く

NotFoundページを表示するだけなら「$self->render_not_found」を使う。 表示以外の処理を書きたい場合は、after_dispatchフックを使う。 $self->hook(after_dispatch => sub { my $c = shift; if ($c->res->code eq '404') { # HogeHoge return $c->render_…

バージョン番号の比較

3.8.9と3.8.2.3の比較とかマイナー番号がなんかいっぱいあるときの比較。versionモジュールを使う。 use version; warn "true" if version->new('3.8.9') >= version->new('3.8.2.3'); warn "false" if version->new('3.8.9') >= version->new('3.8.9.1');

PPIとTest::LocalFunctions、Compiler::Lexer周辺について調べたこと

帰省中にTwitterを眺めていたら話題になっていて、知らなかった事だったので調べてみました。 MANIFESTファイルとMANIFEST.SKIPファイル MANIFESTファイルは、パッケージに含めるファイルの一覧です。 MANIFEST.SKIPファイルには、パッケージに含めたくない…

Test::MojoのUserAgentを変更する

Test::Mojoないで使われているMojo::UserAgentのnameを変更する。 $t->ua->name('Test UserAgent');

Mojo::Uploadのmove_toは必ずしもmvではない

Mojo::Uploadのmove_toの実態は、メンバ変数のassetのmove_toに委譲しています。 sub move_to { my $self = shift; $self->asset->move_to(@_); return $self; } このassetは「Mojo::Asset::Memory」か「Mojo::Asset::File」のインスタンスが入ります。 どち…

ドメインを取得する

$self->req->url->to_absを使う。 say $req->url->to_abs->userinfo; say $req->url->to_abs->host; say $req->url->to_abs->path; Mojo::Message::Request - HTTP request - metacpan.org

Ukigumoで構築するCI環境

UkigumoでCI環境を構築します。 今回構築した環境では、 proveでテスト実行 Ikachanでテスト通知 を行うことにしています。 Ukigumo-Serverの設置 gitでcloneしてきます。 $ git clone git://github.com/ukigumo/Ukigumo-Server.gitREADMEに従って依存モジュ…

タブをスペースに変換する

再帰的に「.pl」「.pm」のファイルのインデントをタブからスペースに変換する。 find . -name "*.pl" -exec perl -i.bak -ple 's{^(\t+)}{q( ) x (length($1)*4)}e' {} \; find . -name "*.pm" -exec perl -i.bak -ple 's{^(\t+)}{q( ) x (length($1)*4)}e' …

scala-modeの設定

ダウンロードと設置 Scala公式ページにEmacsの拡張がおいてある。 ダウンロードページの「Scala tool support」のファイルをダウンロードしてくる。Scala Distribution | The Scala Programming Language解凍すると「scala-emacs-mode」というディレクトリが…

zencoding-modeの導入

以下のリンクから拡張ファイルをダウンロードして「.emacs.d/packages」に入れます。 http://emacswiki.org/emacs/ZenCoding 以下の内容を「.emacs.d/config/50-zencoding-mode.el」として保存します。 (require 'zencoding-mode) (add-hook 'sgml-mode-hook…

Plack::App::PHPCGIを読んだときに調べたこと

概要 Plack::App::PHPCGIは、PlackでPHPを実行するモジュールです。 php-cgiを利用して実行しています。 Plack::Component 「Plack::App::*」モジュールをつくるためのベースクラス。 prepare_appとcallをオーバーライドする。 callはto_appで呼び出されるよ…

yumとrpmについて

まとめようと思ったら、よくまとまったブログ記事を見つけた。初心者の頃に知っておきたかった rpm と yum の違いと使い分け デフォルトでtmuxがインストールできなかったので、以下を参照してレポジトリを追加した。 CentOS6でRPMforge、Remi、EPELをyumレ…

cpanfileとかMakefile.PLとかBUILD.PLとかcpanmとかcartonとか

自分の中でこんがらがってたのでまとめました。 cpanmとcartonの違いについて どちらもモジュールをインストールするものです。carton installの挙動は cpanm --installdeps -L local/ . とだいたい同じ。carton execの挙動は perl -Mlib::core::only -Mlib=…

Mojolicious::LiteでWebSocketを使ってボンバーマン

こちらのサンプルプログラムについて調べたことメモ。 mojomber 概要 サーバに繋いだ分だけプレイヤーが作成されます 矢印キーで移動、スペースで爆弾を置く 爆発で自分が死ぬと自分のスコア(frag)が減ります 爆発で相手が死ぬと自分のスコア(frag)が増えま…

Javascriptモード追加

Javascriptモードにjs2-mode.elを使います。https://code.google.com/p/js2-mode/ ダウンロードした「js2-mode.el」を「.emacs.d/packages」に置きます。 そして、以下のコマンドでバイトコンパイル。 $ emacs --batch -f batch-byte-compile .emacs.d/packa…

Mojolicious::LiteでWebSocket使ったチャット

CentOSにEmacs24をコンパイルしてインストールする

今回はCentOSにEmacs24をソースからインストールしました。libncursesというのがなくてconfigureが失敗しました。 以下のコマンドでインストール。 $ sudo yum install ncurses-devel あとは以下のコマンドでインストール。 $ ./configure --without-x --wit…

Emacsのデーモン化

設定が多くなってくるとEmacsの立ち上がりが遅くなってくるのでデーモン化します。 この機能はEmacs23から。 Emacsをデーモンで起動する 以下のコマンドでデーモンで立ち上げることができます。 $ emacs --daemon クライアントで繋げる クライアントでデーモ…

tmuxの設定

設定ファイル内容は以下の感じ。 .tmux.confを置いても読み込まれない場合は、 C-b : source-file で「.tmux.conf」を指定する。

Emacsの基本設定

環境を移動したとき、毎回Emacsの設定を行うのが大変です。 いつも触っているEmacsならガチガチに設定するのですが、移行するのがダルイ場合があります。 また、最低限の設定だけを行いたい場合があります。なので、Emacsを段階的に設定できるようにメモっと…

Teng::Schema::Loaderが遅くなってくる件

Teng::Schema::Loaderは、動的にDBのテーブル情報を読み込んでスキーマ設定を行ってくれるので楽なのですが、テーブルが多くなってきたり、データがたくさんあるテーブルがあったりすると、この解析がとても遅くなってきます。 実際の解析は、DBIx::Inspecto…

Redis.pmでexpireコマンドを実行する

Redis - Perl binding for Redis database - metacpan.orgぱっと見、ドキュメントにもソースにもexpireメソッドみたいなのがないので、 できないのかと思ったけど、できることをツイッターで教えていただけました。@memememomo podには書いてないようですが…

Kansai.pmに行ってきた

Kansai.pmに行って来ました。以下、印象に残っているもの。 ■「Webサービスの作り方」の作り方 本を持っていくのを忘れて、サインがいただけなかったのが残念。 Mojoliciousを使っている人が多かったのが意外だった。 ■Cinnamon ちょうどデプロイツールをな…

MIME-Headerでエンコードした場合、utf8フラグが付いたままになる

Encode.pmを用いてMIMEヘッダ用にエンコードする時、MIME-Headerを指定した場合にutf8フラグが付いたままになる。 use strict; use warnings; use Encode; use Devel::Peek; my $fromname = decode_utf8('メメメモモ <memememomo@gmail.com>'); Dump encode('MIME-Header', $fromna</memememomo@gmail.com>…

Mojo::DOMの&nbsp;の扱い

Mojo::Domでパースすると、&nbsp;がUnicodeのU+00A0(ノーブレークスペース)に変換される。 なのでto_xmlで出力した文字列をUTF-8以外の文字コードでエンコードすると、文字化けを起こしてしまう。以下、再現コード。 use strict; use warnings; use Encode; …

UTF-16に変換する

utf16beかutf16leで指定する。

CPAN関連のサイトやツール

CPAN関連のサイトやツールが色々あってよくわからないのでまとめてみた。 そういえば今ではすっかり「シーパン」と読んでいるが、昔は「くぱぁん」って読んでいた。 Comprehensive Perl Archive Network http://www.cpan.org/CPANサイト。 SearchCPAN http:/…

qudoのワーカーの起動スクリプトについて調べたこと

以下で紹介されているサンプルを元にワーカーの起動スクリプトを作ったので色々調べてみた。 https://github.com/nekokak/qudo/blob/master/sample/init.d/qudo-worker-sample.pl (Qudo::Parallel::Managerというものがあることは最近知った。。。)このスク…

Server::StarterとStarletについて調べたこと

Server::Starter --portオプション Listenするポートを指定する。 (port|host:port) --intervalオプション このオプションで指定された秒数で、再起動したアプリがエラー終了しなければ成功とみなす。 このオプションが短すぎると、エラー終了が検知できない…

正規表現マッチがエラーになる時

以下の場合、正規表現エラーになります。 use strict; use warnings; use utf8; use Encode; my $text = 'test)testetsttest'; my $match = 'test)'; $text =~ s/$match/aaaa/g; $matchの中にある")"が、正規表現の特殊記号として評価されてしまうのでエラー…

Test::Mojoでアップロードテストをする

post_form_okで、fileタイプのカラムは以下のように指定する。 # ファイルの中身をcontentで指定 $t->post_form_ok('/post', { csv => {content => "hogehoge,fugafuga"}, }); # アップロードするファイルパスを指定 $t->post_form_ok('/post', { csv => { f…

Mojoliciousで動的に大きなファイルを配信する

こちらの記事を参考にさせていただきました。 http://perlcode.hateblo.jp/entry/20120321/1332488265 プロセスがずっとreadしつづけている? ダウンロードが完了してうまくいっているように見えたのですが、 プロセスが残り続ける症状が出ました。「strace …

コールバックを、あるクラスのメソッドとして実行する

以下のようにすればできることを知った。 use strict; use warnings; package HogeHoge; sub fugafuga { print "fugafuga\n"; } package main; my $cb; $cb = sub { my $self = shift; print "hogehoge\n"; $self->fugafuga(); }; HogeHoge->$cb;

正規表現でURLをマッチさせる場合、エンコードする

以下のような感じで、エンコードしないとマッチしない。 use strict; use warnings; use utf8; use Encode; binmode STDOUT, ":utf8"; my $text = "テストhttp://example.com/テスト"; my $regex = q{\b(?:https?|shttp)://(?:(?:[-_.!~*'()a-zA-Z0-9;:&=+$,…

Mojoliciousでダンプ

日本語もちゃんと表示したい場合、以下のように定義した。 { package D; sub dump { require Data::Dumper; require Data::Recursive::Encode; my $text = Data::Dumper::Dumper(Data::Recursive::Encode->encode('utf8', $_[1])); die Encode::decode_utf8(…

jqueryでformのsubmitをする

triggerメソッドを使う。 $("form:first").trigger('submit'); jQuery日本語リファレンス

emacs-w3mを使うまでの設定

gcをインストール w3mでgcがないとエラーが出るのであらかじめインストールしておきます。 以下のリンクからソースを取ってきてコンパイルとインストールをします。 Index of /personal/Hans_Boehm/gc/gc_source w3mをインストール 以下のリンクからソースを…

PHPUnitでデータベースありのテストを行うための設定メモ

第8章 データベースのテスト インストール PHPUnitのインストールは以下のコマンドで行う。 # pear config-set auto_discover 1 # pear install pear.phpunit.de/PHPUnitauto_discoverでインストールがうまくいかない場合は。 # pear channel-discover pear.…

Mojo::EventEmitter

emitは「放出する」という単語。 eventをemitだから、イベントを放出するモジュール。 例えば以下のように、イベントに対してコールバックを設定して使用するようなモジュールを作成できる。 my $tiger = Cat->new; $tiger->on( roar => sub { my ($tiger, $…

YAPCに行ってきた&LTソンで発表してきた

YAPCに行って来ました。 ブログ書くまでがYAPCということなのと、 LINEのぬいぐるみが欲しいので、ブログを書きます。 LTソン 「YAPCでLTやってみたいけど、ステージに上がって発表するとかハードル高杉」 という自分にとって、夢のような企画でした。 とい…

Kyoto.pm Tech Talks 02に行ってきました

行ってきました。 あとLTもさせていただきました。 CPANモジュールをPHPに移植してみた話 from memememomo

最近入れた拡張など

chrome Chrome ウェブストア - AutoPager Chrome Chrome ウェブストア - Session Manager emacs zencoding zencoding + emacs - tototoshiの日記 perldoc-m EmacsでPerl開発する上で必須な設定 #3 - perldoc-m - antipop perldoc [http://d.hatena.ne.jp/IMA…

emacsの記号

いつも忘れるのでメモ。 M Metaキー。ESCかCtrl+[ C コントロールキー。Ctrl 参考 Emacs

ハッシュをparamメソッドがあるオブジェクトに変換する

ハッシュに入ってる値をFormValidator::Liteでバリデーションしたい時とかに、 CGI.pmに変換してやってます。 use FormValidator::Lite; use CGI; my $hash = {name => 'aaaa'}; my $req = CGI->new($hash); my $validator = FormValidator::Lite->new($req)…