サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Wikipedia
perl-users.jp
初めまして、@nqounetです。 2011年はYAPC::ASIAデビュー(参加という意味で)したので、アドベントカレンダーもデビューしたいと思います。 そんな新人の私でもカジュアルに使えそうな Data::Section::Simple を紹介します。 「ヒアドキュメント」って知ってますよね? my $html = <<"EOM"; <html> <head><title>タイトル</title></head> <body>ボディ</body> </html> EOM こんなヤツです。 古いCGIファイルを見るとよくありますよね? でも、ヒアドキュメントを使っているコードが見難いと思ったことはありませんか? 思いますよね。 そんな時には「__DATA__」を使うと簡単にコードが見やすくなります。 #!/usr/local/bin/perl use utf8; use 5.008001;
deflateを辞書で引くと http://ejje.weblio.jp/content/deflate とあるように、ふくらんだものをすぼませるといった意味があります。 これも経済でいうデフレでインフレとは逆の意味でつかわれますね。 なのでdeflateはオブジェクトという構造体を単純な文字列のようなものに変換することを言います。 Tengでのinflate / deflate Tengではinflate / deflateの定義をschemaに書きます。 今回のinflate / deflateの例を持ち出すのにいまのschemaではものたりないのでuserテーブルにcreated_atとupdated_atというカラムを追加したいと思います。 追加した後のtable定義、schema定義はまずこうなります。 package Proj::DB::Schema; use strict;
Tengでdatabaseからデータを取得すると、基本的には各レコードはTeng::Rowのオブジェクトになって返されます。 my $row = $teng->single('user', +{id => 1}); この時点の$rowはProj::DB::Row::Userというクラスでインスタンス化されています。 しかし今までの説明でProj::DB::Row::Userを定義したことはありませんでした。 Tengではtableに対応するRowクラスを自動的に生成し、利用します。 例えばこのProj::DB::Row::Userというクラスにメソッドを追加したいとします。 その場合は単純に自分でそのクラスを定義するだけです。 package Proj::DB::Row::User; use strict; use warnings; use parent 'Teng::Row'; sub
こんにちは。dann です。みなさん、意識は高まっていますか? 僕は上々です。 今回は拙作の Perl::Metrics::Lite というモジュールを紹介させて頂きます。 開発した動機 Perl::MetricsやPerl::Metrics::Simpleなど、PerlのコードのMetricsを測定するツールがあるのですが、どれも使い勝手の点でいまいちです。 Perl::Metricsは測定項目をプラガブルに追加可能なのですが、APIがプリミティブすぎてMetricsを測定するには使いずらいです。 一方、Perl::Metrics::Simpleは、Perl::MetricsをよりユーザーフレンドリなAPIにして、名前の通りシンプルに使えるように作られているのですが、今度は測定項目が拡張可能になっておらず、特定のメトリックしか測定できませんでした。 従来のモジュールの問題点を解決するため
こんにちは、torii (@yoshi704)です。 コマンドラインで完結するCUIアプリをサクっと作る前に楽をするための便利モジュール Getopt::Long を紹介します! 普段良く使うコマンドで -l とか -u とか --help とか付けてよく使うと思います。 自分でCUIアプリを作成して使う時にもこんな感じのコマンドラインオプションを簡単に使えると便利ですよね! コマンドライン引数はすべて@ARGVに入ることは知っていてもいざオプションを1つ1つ解析しようと思うと意外と面倒です。 その時に使う便利モジュールがGetopt::Longです。 GetOptions()という関数で、コマンドラインオプションを定義してあげます。 例えば、 $ ./sample.pl --user=torii --env=dev --times=2 --verbose hoge.dat というようなオ
DBIx トラックの最終日となりました。 当初もしかしたら一人で大方書くことになるのかガクブルしてたのですが、 多くの方のご協力のもとここまでたどり着くことができ感謝感謝です。 最後はちょっと大規模よりのお話になるかもしれませんが、 アイデアとして知っておいて損はないので紹介させて頂きます。 MySQLを使われている場合、master - slave構成で構築されていて、 参照クエリをslaveに向けるなんてことよくやられていることかと思います。 ただ単純に参照クエリをslaveに向けると http://d.hatena.ne.jp/sfujiwara/20110620/1308531677 http://d.hatena.ne.jp/sfujiwara/20110621/1308625519 このような問題があるので気をつけるのを前提として、 master:slave = 1:3のような
はじめに こんにちは、xaicron です。みんな、僕のグラビア写真は買ってくれたかな?買ってない人は WEB+DB Press vol.66 を今すぐゲットだぜ!! さて、ついに長かった Test Track も最終日がやって参りました!みなさんはどうせリア充を尻目にリナカフェの閉店を見たり、独り者同士でなんとなーく集まってお酒飲んだり、もしくは僕のように一人寂しく Advent Calendar を書いているのでしょうね!!その昔、コンビニでゆでたまご買って間違って「あ、あっためてください」っていっちゃったことを何故か思い出しました。 というわけで、クリスマスぐらいはせめてテストを書きたくないし、そもそもコケたテストとか見たくないわけですね。ですので、僕からのスペシャルなクリスマスプレゼンツ!!その名も Test::Successful だぜ!ベイベー!! これはなに? これはあれです
はじめに ikasam_a です。クリスマスイブいかがお過ごしでしょうか。私は寿司食べたりしてました。 16日のエントリでテストダブル、特にフェイクやスタブについて触れましたが、今日はそもそもテストダブルって何ぞや、という話をします。またまた Perl の話はあまり出てこない予定です。 テストダブルとは http://xunitpatterns.com/Test Double.html:title=xUnit Test Patterns] で登場した言葉で、システムのある部分をテストするために特定箇所を置き換えることがあるが、その置き換え手段の総称として「テストダブル(代役)」という名前を当てたということです。 置き換え手段としては、以下の5つが挙げられています。 ダミー スタブ スパイ モック フェイク ダミー メソッド呼び出しの数合わせに使うことを目的とした、ダミーオブジェクトのことで
はじめに こんばんは。大遅刻に定評のあるふしはらかんです。……皆さんごめんなさい。 App::Donburiは名前空間から分かるように、ライブラリではなくアプリケーションです。Donburiという名前は開発中に丼が食べたかったという理不尽な理由で付けられたものでアプリの機能とは全く関係なく、バッチ等からIRCへの通知を簡単にする、というのがdonburiの簡単な説明になります。 インストール & 起動 App::DonburiはCPANにアップロード済みなので、cpan(cpanm)コマンドで簡単に導入できます。 cpanm App::Donburi インストールが済んだら、donburiコマンドを実行してみましょう。 % donburi donburi need 'config.yaml'. I write config.yaml sample at ./config.yaml . pl
こちら Yappo の日でございますが、 Yappo の執筆ペースが芳しくないので、本日も社員のオオサワが代打で「DBI」や「ORM」について書かせて頂きたいと思います。 trigger / hook point insert, update, delete クエリの前後処理を拡張して、レコード作成時刻の設定や update 時刻の更新はたまたレコード削除時に削除テーブルへの自動コピー等を、一度ベースクラス上で定義しておけば新しく作るテーブルへも use parent する等して簡単に適用出来きるように便利になりますが、うっかりしてると後続の開発者がハマったり制約が出てきます。 DBMS の trigger ORM の機能の trigger を多用していると、後続は DBMS 本体の trigger を使う事に躊躇します。使っちゃいけないというわけではないでしょうが、一つのクエリに対する副
単純な増幅ではテストで見抜けない性能ボトルネック こんにちは。dukkiedukkieです。クリスマスが近づいてきてますね。 さて、先日[/articles/advent-calendar/2011/test/6]を書かせていただきましたが、今日はその話の続きで。 エンティティのカーディナリティを考慮しつつデータ増幅を行ったとしても、先日のやり方では、全ての増幅データのデータ量が均一になってしまいます。ですが、現実のデータストア運用現場で発生する問題には、 「WHERE条件句で絞込みを行なっているのだけど、この条件指定に対してマッチする行数が多すぎて、結果の返却スピードが遅い」 「実行計画的には変わらないのだけど、当該IDのみconsistent gets量がメガバイト単位になってしまって、どうしてもクエリがスローダウンしてしまう」 「AWRとかRDBMSの統計情報を見ると、バッファイン、
FormValidator::Simple::Plugin::V8 - バリデーションルールをサーバー/クライアントで共有するためのモジュール 前置き こんにちは。cho45 です。もう本当に年末ですね。みなさん、意識は高まっていますか? 僕は年末に向けて下がりつつあります。それはともかく、今回は FormValidator::Simple::Plugin::V8 というモジュールを紹介させて頂きます。 ウェブアプリケーションを開発するとき、だいたいの場合、サーバーサイドで入力にバリデーションをかけますよね。そんなとき便利な FormValidator::Simple というモジュールがあり、こちらはみなさんご存知かと思います。さらに近年ではフォームを submit する前にクライアントサイド JavaScript でリアルタイムでエラーがわかって欲しいとう欲求もときどきあるというのも、ご
lestrratです。本日めでたく正式にSTFがオープンソースとしてlivedoor ラボ EDGE上でリリースされました! プレスリリースはこちら。 いままでちょこちょこと先出し先出しで情報をだしていましたが、これで本当に本当の正式公開です。一応上記のサイト以外に「公式」サイト的なものも用意しました。ソースコードはgithub上に公開されています。ということで使って欲しいので紹介記事です。 STFは分散オブジェクトストレージです。Perlメインの似たようなシステムとしてはMogileFSが有名ですが、STFは後発のメリットを生かしてPSGI互換にしたり、使用するプロトコルを基本的にHTTPというオープンで枯れた技術を採用したりとメンテナンス・運用の利便性があがっていると考えています。 歴史 STFは元々ApacheモジュールといくつかのPerlワーカーで書かれていましたが、ひょんなことか
わりと古くからDBIx::Connector使ってるんで、DBIx::Handlerマンセーなこのadvent calendarでDBIx::Connectorをどう使ってるのかを軽く話したいと思います。 使いどころ DBIx::ConnectorにしろDBIx::Handlerにしろ、DBIの面倒くさいところを簡単にしてくれるツールですよね。でも僕のスタンスとしては「どちらにしろ帯に短したすきに長しじゃねーの?」と思ってます。もちろん便利なんだけど、別に全てのかゆいところまで手が届くわけじゃないし・・・やってほしくないことをする事もあるし・・・というわけで本当に本当にコントロールが必要な部分では今でも自分で制御できるように自分で細かい所まで書く事にしています。 じゃあDBIx::Connectorをどこで使ってるかというと、「DBへの接続が切れるかもしれないぐらい長く走るスクリプトで、気
Webスクレイピングとは? 例えば、昇天するくらいかわいい猫画像ください : あじゃじゃしたーの猫の画像が欲しいときにどうすればいいでしょうか*1。画像を1つずつ手作業で保存?面倒くさいですね。 そんなときのためのWebスクレイピングです。まずはじめは、Web::Scraperというモジュールを使ってみましょう。 use strict; use warnings; use autodie; use File::Basename; use File::Spec; use LWP::UserAgent; use URI; use Web::Scraper; my $url = 'http://blog.livedoor.jp/chihhylove/archives/3573873.html'; my $scraper = scraper { process '.main img.pict, .
はじめに 忘年会シーズンまっただ中で皆さんは毎日お酒を飲んでいることでしょうが、僕は友達が少ないため忘年会とか全然無いので財布はまだホットな状態なんですが、なぜ僕の妹は小鳩ちゃんじゃないんだっていうかそもそも妹いないしもう死ぬって感じの xaicron です。こんにちは。 そろそろ prove について簡単に説明しときますよっと。 prove のよく使うオプション prove にはいっぱいオプションがあるんですが、ここではよく使いそうなやつをピックアップして紹介しちゃいますよ! -v, --verbose # いっぱい出力する -l, --lib # lib を INC についかする perl -Ilib 相当 -b, --blib # blib/lib とか blib/arch を INC につかする -Mblib 相当 -c, --color # カラフルになる! MSWin32 だと
Perl AdventCalendar初投稿でドキドキしているriywoです。目指せhirose31ということで「コードも書けるインフラエンジニア」を所望していますが、正直、DBI使ってゴリゴリアプリとか作ってない。。。限りなくひとりDBIx::Casual Trackではありますが、そんな僕だからこそ書けるゆるふわなエントリをどうぞ! 情弱なんで生SQLがいいんです。。。 Tengとかすごい魅力的なんですが、ゆるふわ過ぎてついつい生でSQLを書きたくなります。ORMのメソッド覚える努力をしないだけ情弱なんですが、特にインフラはいつも慣れ親しんでいるSQLをそのままアプリでも使いたくなっちゃいます。 とは言え、こんなコードを書いてしまうと色々と残念な感じです(注:2年前くらいの僕)。 my @line = `mysql -N -uuser -ppass hoge -e "select *
数日前にカバレッジの話がありましたが、そんな事言ってたって自分でカバレッジなんてとらないでしょ?僕はそうそうとらないです。 なのでそんなのJenkinsにやらせればいいんですよ。 自動的にカバレッジを計測しましょう (Jenkinsじゃなくてもそうですが)Devel::Coverでカバレッジを計測するならPERL5OPTで渡すのが一番簡単ですね。 export PERL5OPT="-MDevel::Cover" ちなみにJenkinsでテストしてるときにはなるたけテストに使っているPerlから見えるところに余計な依存ライブラリを置きたくないので、Devel::Coverはそれだけ別の場所にいれてます。こうすればDevel::Coverを使う時以外はDevel::Coverをインストールしてあるディレクトリを有効化しないようにしてます。 cpanm -l/path/to/devel-cove
好きって言葉は最高さーー!!!!kamipoです!!今日はAKB48の紅白対抗歌合戦があるので急いでいきたいと思います!! DBIx::QueryLog で EXPLAIN の結果もロギングしたい xaicron さんの9日目のエントリ、[/articles/advent-calendar/2011/dbix/9:title=DBIx::QueryLog で DBI で実行された SQL を丸見えにする!]でおなじみの神モジュール DBIx::QueryLog 便利ですよね!? でもEXPLAINの結果もロギングできたらもっと便利だと思いませんか?僕は思いました!! そこで、EXPLAIN の結果もロギングできるパッチを取り込んでもらったので、新しいのが出たら使えるようになると思います!(いまはまだMySQLだけですが…) つかいかた とくにクエリに意味はないですが、こういうクエリを投げる
こんにちはこんにちは、sakurako_sです。 日本の祝日を求めるのに便利なCalendar::Japanese::Holidayをゆるふわっと紹介します。 このモジュールには2つの関数があります。 isHoliday() - 指定日が祝日なら祝日名を返す getHolidays() - 指定月の祝日とその名前のハッシュリファレンスを返す コードを見てみましょう。 use strict; use Calendar::Japanese::Holiday; use YAML qw/Dump/; use Perl6::Say; binmode STDOUT, ':utf8'; # 祝日の名前 say isHoliday(2012, 1, 9); # 指定月の祝日 say Dump getHolidays(2012, 1); 実行結果は次の通り。 成人の日 --- 1: 元日 9: 成人の日 振
こんにちは! 子供のころは、誕生日がクリスマスと一日違いだったために誕生日プレゼントとクリスマスプレゼントがよく一緒にされてました。walf443です。 Migrationとは? 複数人でプロジェクトを開発していると、途中でDBのschemaが変更になったりすると、schemaの変更方法が記述されてないと、手元で気軽にテストしたりしづらくて、困ります。 schemaの管理方法は、プロジェクトによって色々あるかと思いますが、別のbranchの担当者に「あれっ、ここ替えたんでよいんでしたっけ?」と聞いたり、DBのschemaを丸ごとされているファイルをチェックして、diffをチェックしてからALTER TABLE文を考えて適用、とかになったりしてしまいます。 Ruby on Railsとかだと、Migrationという仕組みをサポートしていて、(開発者がちゃんと書いていれば)様々なバージョンの
どうも、最近あまりコード書いてないと思ってたけど、よく考えたら今回ネタにしているアプリに関して*だけ*はコード書いてるlestrratです 皆さんはdotcloud使ってますか?僕は基本的にはdotcloudにほれこんでいて、料金とかの問題がGAEとかみたいに表面化しなければしばらくは使っていきたいと考えています。 ちなみに僕はありがたいことにβユーザーなんですね。なんでもしかしたら一部非βユーザーの方には使えない機能とかの話があるかもしれません。まぁその辺りは適当に読み進めてやってください。 本題 さて、ここのところ一番時間をかけてるのはJenkinsとSTFというアプリケーションです。なんでSTFに色々手を入れているかというと、まぁ日々のメンテナンスもあるのですが、もうちょっとしたら正式にオープンソース化をするからです。今は僕の先走り的な感じでちょこちょこ情報が漏れてる状態ですね。 で
今日はDBIx::モジュールのテストなどでときおり見受けられるDBD::SQLiteのハマリどころとその対策を紹介します。 後片づけ編 (オブジェクトではなく)クラス内部でコネクションを張りっぱなしにしてしまうDBIx系モジュールでありがちなことですが、テストの後始末をするときに、DBD::SQLiteで開いておいたデータベースを閉じずに削除しようとすると、Windows環境などではパーミッションの問題でエラーになります。 my $dbh = DBI->connect('dbi:SQLite:foo.db'); ... unlink 'foo.db'; 明示的にデータベースを閉じてからデータベースを削除するのが王道ですが、 my $dbh = DBI->connect('dbi:SQLite:foo.db'); ... undef $dbh; unlink 'foo.db'; 並列処理を行
はじまりはパクり 最近あんまりコード書いてません、lestrratです。 テストを走らせる時にいろんな他のデーモンを立ち上げたり、そのテストのためだけの設定を先にしないといけなかったりとか色々ありますよね。結構長い間Makefile.PLはModule::Installで書いていたせいもあって、ちょっと前にxaicronさんが書いてたModule::Install::TestTargetでごにょごにょやってたのですが、ちょっと前にYappo/tokuhiromさんがproveで書いてたセットアップがまるっと自分の欲しい用途にも使える事に気づいたのでいろんなアプリケーションのテストをそのように変えてみました。 流れ proveでテストをすると、proveのプラグインを呼び出す設定ができるのですが、これをプラグインというよりテスト前に実行されるフックとして利用する事によって任意の設定用のコード
こんにちは。Perlで遊ぶと言うより、 未だ、Perlに遊ばれているtaiju (id:jdg) です。 YAPC::Asia TOKYO2011に参加したので、爪あとを残すべく、Perl Advent Calendar 2011に参加することにしました。 さて、Perl5.10から導入されたスマートマッチですが、これをより快適に使えるモジュールがないか、CPANで探してみたところ、Smart::Matchというモジュールが見つかりましたので、ご紹介したいと思います。 Smart::Matchはスマートマッチを快適に使うためのユーティリティをたくさん提供しているモジュールのようで、デフォルトで比較演算子でスマートマッチが採用される、switch文などで便利に使えそうなユーティリティがたくさん導入されています。 junctive Perl6のJunctionのような動作をするユーティリティ群
こんにちは! nekokakさんに誘われて、引き受けたものの、DBIxとか特に知らない ktat です。 そんなわけで、あんまりPerlに関係ない、DB関係のトピックでも書いてみることにしました。 そんなの常識だよねーっていう人はスルーしちゃって下さいね! フラグじゃなくてビットを使う とあるサービスのユーザー情報を格納するテーブルを設計するとします。 そのサービスでは、ユーザーが開発言語に何を使うかを登録していて、使う言語の組み合わせで検索することが多いとします。 そんな時に、 use_c use_c_plus_plus use_java use_php use_perl use_python ... のように延々とフラグを作ってしまうと、これらをAND/OR条件で検索しようと思うと、 use_c = 1 AND use_c_plus_plus = 1 use_c = 1 AND (us
こんにちは、最近 Nintendo 3DS の電池が一瞬で切れてしまってまともにゲームができないと嘆いていたら「それ、HOME ボタン押してソフトをサスペンドすると電池減りにくくなりますよ」とスーパーハックを教えてもらった cho45 です。 DBI を生で使うときの罠はだいたいもう書いてあるし特に書くことがありませんし、DBIx 系は最近だと DBIx::TransactionManager 以外使ってないので、最近の僕の構成を紹介してお茶を濁します。 connect_cached を使わない 1リクエストごとに connect しなおすようにしています。1リクエスト内に関しては自力で dbh インスタンスをキャッシュするようにしています。 connect_cached はハマりがちで、DB サーバにコネクションを残しまくったりしたので、なんかもう面倒になってやめました。 SQL::Na
DBIC って… 最近なにかと dis られることの多い DBIx::Class (DBIC) ですね。 曰く「重い」「複雑すぎる」「コードが読めない」……まあそれはそうかもしれませんが、数年前の DBIC 全盛期に作られて今まで生き残っているシステムを、そう簡単に他の ORM や生 DBI に置き換えられるものでもありません。 自分の管理しているとあるシステムは DBIC + MySQL で動いていますが、最初はデータも多くなく、DBIC が生成する SQL で何ら問題はなかったのです。 が、データが増えて行くにつれて、 MySQL が適切な index を使用してくれないとパフォーマンス的に厳しい、FORCE INDEX 句を付けたい!という状況に出くわしました。そこで試行錯誤して見つけた、FORCE INDEX を指定する方法をご紹介します。 どうやって? たとえば以下のように、fo
こんにちは、コンビニに行くたびに店員さんから舌打ちされるdameninngennです。サックリと書きます! 対話的に処理を進めるスクリプト書いたりしますよね!あの[yes/no]とか聞かれて入力するやつです!! 例えばrsyncで--dry-runオプション付きで一旦実行して、そこから[yes/no]を聞いて本当にsyncするかどうかみたいな感じのやつです!!! まず、標準入力から受け取るだけであれば、 my $str = <STDIN>; chomp $str; # do something # ... こんな感じに受け取ったりするかと思いますが、本当に[yes/no]が入力されたのか判定したりそうじゃなかったらもう一回入力求めたりとか書くのめんどくさいですよね。 そこらへんのめんどくささとかを解消してくれるTerm::UIというモジュールがあります。 誤解を招くかもしれませんがTerm
次のページ
このページを最初にブックマークしてみませんか?
『Perl-users.jp - 日本のPerlユーザのためのハブサイト』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く