タグ

ブックマーク / charsbar.hatenadiary.org (28)

  • '.' in @INC問題とその対処法について(2017年3月版) - Charsbar::Note

    YAPC::HokkaidoやYAPC::Kansaiで話した通り、Perl 5.26ではセキュリティ上の問題で@INCにカレントディレクトリが含まれなくなります。p5pやツールチェーン側ではその影響を軽減すべくCPANクライアントやTest::Harnessに従来の挙動を残すような仕組みを用意中ですが、現時点ではまだすべての対策が出そろっているわけではありません。最終的にどうすべきかは5月に開催される予定のPerl Toolchain Summit (旧Perl QA Hackathon)後にあらためてまとめるつもりですが、直接的な影響を受けるCPAN Authorのところには順次バグレポートが届いているかと思いますので、可能であれば以下の対応をご検討ください。 incディレクトリなどにMakefile.PL/Build.PL用の特殊なモジュールなどを同梱している場合 カレントディレクト

    '.' in @INC問題とその対処法について(2017年3月版) - Charsbar::Note
    YAA
    YAA 2017/03/19
  • MojoliciousとWebSocketとiTunesと - Charsbar::Note

    これはMojolicious Advent Calendar 24日目の記事です。 iTunesに英語教材などを放り込んでエンドレス再生していると、「ここにテキストが表示されていればいいのになあ」と思うことがあります。あるいは、洋楽を流しっぱなしにしているときに、ふと聞き取れなかった歌詞を確認したくなるとか。 もちろんその都度メモなりなんなりを開いてもいいのですが、いちいち該当のトラックに関係のあるファイルを探すのも面倒ですから、トラックが変わるたびに自動でテキストが表示されるようにしたいものです。GUIをごりごり書くのは面倒ですし、ターミナルに流し続けるのも見づらいですから、ここはテキストはブラウザに表示することにし、WebSocket経由で更新し続けるようにしてみましょう。 Windows環境では以下のようにWin32::OLEを利用することでiTunesからトラック情報を取得できます

    MojoliciousとWebSocketとiTunesと - Charsbar::Note
    YAA
    YAA 2013/12/26
  • DBD::SQLite 1.41_01 - Charsbar::Note

    SQLite 3.8.0 が出たので、DBD::SQLiteにバンドルされているライブラリも更新して、1.41_01としてリリースしました。SQLite 3.8.0ではクエリプランナーが一新されているほか、where節で限定する部分インデックスも利用できるようになっています。 新しいクエリプランナーの詳細については下記をどうぞ。 http://www.sqlite.org/queryplanner-ng.html 私自身はまだ使い込んでいませんが、SQLiteの作者氏によれば、sqlite.orgで2ヶ月以上使ってみたけれども問題は出ていないとのこと。DBD::SQLiteのテストから判断する限り、今回の変更によって余分なsortがひとつ減ったりしていますので、通常は新しいクエリプランナーの方が多かれ少なかれよい結果が期待できるはずですが、前回のクエリオプティマイザ最適化のときにもあったよ

    DBD::SQLite 1.41_01 - Charsbar::Note
  • DBD::SQLite 1.39 - Charsbar::Note

    気がつけば前回の安定版を出してから丸一年が過ぎてしまいましたが、ようやくDBD::SQLiteの1.39をリリースしました。 それぞれ以前にも書いたことですが、今回の1.39ではimmediate transactionをデフォルトにしたのと、クエリオプティマイザ最適化によってORDER BYのないSELECT文の返り値の並び順がこれまでと異なったものになる可能性があるのが大きな変更点です。 また、やや地味な変更ですが、カラム名などにutf8文字列が含まれている場合の処理が改善されたほか(jamadam++)、bind_paramに渡す変数を再利用しようとしたときに起こる問題も修正されました。 最近のDBD::SQLiteがOpenBSDを除くBSD系のシステムでスレッド対応版のPerlを使っているときにうまくコンパイルできていなかった件も暫定的に対応してあります。 その他、細かい変更点に

    DBD::SQLite 1.39 - Charsbar::Note
  • (DBD::)SQLiteにおけるORDER BYの最適化と検索結果の並び順について - Charsbar::Note

    最初に結論を書いておきますが、これは正しい使い方をできている方ならまったく気にする必要がない記事です。要するに「ORDER BYを指定していないのにSELECT文の返値に一定の並び順を期待する方が間違い」というだけの話なんですが、先日のQA Hackathonで潜在的な問題が存在していることが浮き彫りになったので、念のため共有しておきます。 さて、SQLiteは2012年12月12日にリリースされたバージョン3.7.15でクエリオプティマイザを強化し、その結果、ORDER BYがより積極的に最適化されるようになりました。 ただ、DBD::SQLiteはしばらくリリースから遠ざかっていたため、この変更がPerl界隈の開発者の目に触れるようになったのはつい最近、2013年4月4日に1.38_02がリリースされたときのことでした。 このときどのモジュールのどのテストがこけるようになったのかはまだ

    (DBD::)SQLiteにおけるORDER BYの最適化と検索結果の並び順について - Charsbar::Note
  • DBD::SQLiteで作成したデータベースがsqlite3コマンドで開けない場合 - Charsbar::Note

    以前こちらでも書いた通り、DBD::SQLite 1.37以降ではバンドルしているSQLiteライブラリのデフォルトのファイルフォーマットが変更になったため、「PRAGMA legacy_file_format=ON」を有効にしないと2006年以前のSQLiteでは読めなくなるという問題があるのですが、それとは別に、SQLite 3.7以降で新設されたWAL (Write Ahead Logging)という機能を使うと、バージョン3.7より前のsqlite3コマンドでは「file is encrypted or is not a database」などといわれて該当のデータベースが開けなくなります。 詳細については下記のリンクをご覧いただくとして、データベースを開いたときに-walとか-shmという接尾辞のついたファイルができる場合はこの機能が妨げになっているものと思われますので、最近のD

    DBD::SQLiteで作成したデータベースがsqlite3コマンドで開けない場合 - Charsbar::Note
    YAA
    YAA 2012/11/22
  • DBD::SQLite 1.38_01 - Charsbar::Note

    細かいことについてはYAPC::Asiaの発表が済んでからまたあらためて記事を書くつもりでいますが、多くの方に関係のありそうな部分だけ先に書いておきます。 デフォルトのトランザクションモードをdeferredからimmediateにしました DBD::SQLite 1.30_02以降、sqlite_use_immediate_transactionというアトリビュートを使えばトランザクションのモードを(デフォルトの)deferredからimmediateに変更できるようにしてありましたが、今回このimmediateの方の挙動をデフォルトとしました。deferredの挙動が必要な方は明示的にsqlite_use_immediate_transactionアトリビュートをfalseにしてください。 といってもわかりづらいと思うのでもう少し平易に言い換えると、今回の変更で(おもに書き込み用の)ト

    DBD::SQLite 1.38_01 - Charsbar::Note
  • DBD::SQLite 1.37 - Charsbar::Note

    報告が遅くなりましたが、週末にDBD::SQLite 1.37をリリースし(てもらい)ました。1.35以降の大きな更新については過去記事やDBD::SQLiteのChangesファイルもあわせてご覧いただくとして、今回のリリースでは1.35で問題噴出していた型指定時の数値の処理が修正されていますので、これまで1.35を使っていた方はぜひ更新をお願いします。 http://d.hatena.ne.jp/charsbar/20120119/1326981740 http://d.hatena.ne.jp/charsbar/20120508/1336487730 なお、既報の通り、今回のバージョンアップでは過去のDBD::SQLiteとの互換性が一部失われます。万一2006年以前に構築されたシステムとデータベースファイルをやりとりする可能性がある場合は「PRAGMA legacy_file_fo

    DBD::SQLite 1.37 - Charsbar::Note
  • DBD::SQLite 1.36_03とDBD::SQLite::AuthorTests - Charsbar::Note

    いささか遅くなりましたが、QA Hackathonでやるつもりでいたことの続きとして、DBD::SQLiteの型指定、数値判定まわりを改善した1.36_03をリリースしました。SQLiteをカジュアルなテキスト型データベースとして使っている方にはほとんど影響はないはずですが、以下の条件にあてはまる方には何らかの影響が見られる可能性があるので検証をお願いします。 最近のDBICを使ってSQLiteデータベースにアクセスしている。またはbind_paramなどを通じて明示的に数値型の指定を行っている SQLite用のスキーマといえどもすべてのカラムについて(特別な意味を持つinteger primary keyだけでなく)きちんと型を指定している 32ビットではおさまらない数値を扱っている。特に32ビット環境で64ビットの数値を扱えるようにした(=USE_64_BIT_INTが立っている)Pe

    DBD::SQLite 1.36_03とDBD::SQLite::AuthorTests - Charsbar::Note
  • DBD::SQLite 1.36_01 - Charsbar::Note

    遅くなりましたが、1.35のリリース以降いくつか不具合の連絡をいただいていたので、ひとまずsegfaultするものを中心に修正しました。特に64ビット環境でお使いの方は更新&テストをおねがいします。 なお、今回の版ではバンドルされているSQLite側のライブラリの都合で内部スキーマのバージョンが変更になっているため、新しく作成するデータベースファイルについては作成時に「legacy_file_format」というプラグマを有効にしておかないと、2006年以前のSQLiteでは読めなくなります。ほとんどの方にはいまさら関係ないとは思いますが、大昔のシステムを維持管理している方には影響があるかもしれませんのでご注意ください。 ちょっとしたおまけ機能として、SQLiteAPIをたたくsqlite_traceとsqlite_profileという独自メソッドも実装しておきました。使い方はこんな感じ

    DBD::SQLite 1.36_01 - Charsbar::Note
  • 手元のPODを簡単・綺麗に見るひとつの方法 - Charsbar::Note

    ほかにもやり方はいろいろあるわけですが、カレントディレクトリにCPANモジュール風のディレクトリ構成をもった何かがあるとすると、コマンドラインから > cpanm Mojolicious Pod::Simple (必要なら) > mojo generate lite_app podviewer > perl podviewer daemonとタイプして、http://localhost:3000/perldoc/lib/Hoge のようなURLを見ると、http://mojolicio.us/perldoc 以下で使われているPODビューアを構文ハイライトやらなにやら込みで利用できます。 また、実際には@INCの中をチェックしているので、必要ならpodviewerを起動するときに-Ilibを追加するか、podviewerの中でuse lib "lib";のような行を追加してやると、http

    手元のPODを簡単・綺麗に見るひとつの方法 - Charsbar::Note
  • DBD::SQLite 1.34_02 - Charsbar::Note

    もう一週間近くたってしまいましたが、DBD::SQLite 1.34_02が出ています。今回はいくつか後方非互換な修正が入っているので、簡単に説明しておきます。 まず一点目。従来のDBD::SQLiteではbind_paramで明示的にデータ型を指定しても、その指定はその場限りで次に残らなかったのですが、これはDBIの仕様に反しているということで、一度指定したデータ型はそのまま残るように修正しました。具体的にいうと、このようなコードがあった場合、従来はfooは明示的に指定したBLOB型、barの方はデフォルトのTEXT型となっていたのですが、1.34_02以降は両方ともBLOB型になります。 use strict; use warnings; use DBI qw/:sql_types/; use Data::Dump qw/dump/; my $dbh = DBI->connect('d

    DBD::SQLite 1.34_02 - Charsbar::Note
  • 関西近郊の地方.pmの話 - Charsbar::Note

    なにやら関西方面でまた新しい.pmの話が出てきているようですが…… 1) Kyoto.pmは過去に登録済みのものがあるので、pm管理グループ(supportpmorg)に「Kyoto.pm - reactivation request」とかいうタイトルで新しい管理人の名前やメールアドレスなどを知らせてあげれば、特に問題なく復活できるとおもいます。詳しくは http://www.pm.org/faq/ の最後の方、「How do I request a new group or to reactivate a group that has been inactive?」の項目をご覧くださいませ。 2) Osaka.pmはもう少し大変です。http://www.pm.org/groups/271.html を見てもらえばわかる通り、現在Kansai.pmの登録地は大阪になっているので、どこがど

    関西近郊の地方.pmの話 - Charsbar::Note
    YAA
    YAA 2011/10/24
  • DBD::SQLite 1.33 - Charsbar::Note

    SQLite家の更新もあった都合でリリースが予定より10日ほど遅れましたが、ようやくDBD::SQLiteの1.33が出ました。この半年ほどの更新内容についてはここでもその都度報告してきましたが、大きなところでは、一度disconnectしたハンドルを操作するとセグる問題がようやく正式版でも対応されたほか(これで自動再接続するようなO/Rマッパでforkするテストを書いても落ちることはなくなるかと思います)、sqlite_see_if_its_a_numberというオプションを指定することで数値をより素のSQLiteに近い形で取り扱えるようになっています。 その他、細かな修正についてはChangesやここの過去ログをご覧ください。

    DBD::SQLite 1.33 - Charsbar::Note
  • DBD::SQLite 1.32_02 - Charsbar::Note

    今回の更新ではRTreeのサポートが入ったほか、半年以上前から実装は済んでいたものの表に出していなかった、DBD::SQLiteのバインド値が数値だった場合に不要にクォートされてしまうため関数の戻り値などとマッチできなかった問題への対策が入っています。 具体的にいうと、従来はこんなテストコードがあった場合、 use strict; use warnings; use DBI; use Test::More; my $dbh = DBI->connect('dbi:SQLite::memory:'); $dbh->do('create table foo (id integer, bar text)'); $dbh->do('insert into foo values (?, ?)', undef, 1, 'odd'); $dbh->do('insert into foo values (

    DBD::SQLite 1.32_02 - Charsbar::Note
  • DBD::SQLite 1.30_04/05 - Charsbar::Note

    遅ればせながらDBD::SQLiteの新しい開発版が出ました。今回の目玉はLaurent Dami氏が実装してくださったFTS3の拡張機能。これを使うとDBD::SQLiteでも簡単に日語全文検索ができるようになります。 使い方はこんな感じ。 use strict; use warnings; use DBI; use Text::MeCab; my $mecab = Text::MeCab->new; my $dbh = DBI->connect('dbi:SQLite::memory:'); $dbh->do('create virtual table foo using fts3 (content, tokenize=perl "main::tokenizer")'); my $sth = $dbh->prepare('insert into foo values (?)'); $

    DBD::SQLite 1.30_04/05 - Charsbar::Note
  • DBD::SQLite 1.30_02 - Charsbar::Note

    あと、先日リリースしたDBD::SQLite 1.30_02の変更点について。 DBD::SQLiteはこれまで DBIが用意した枠組みの範囲内でのトランザクションを利用している(AutoCommit/begin_work) fork()などを利用して並列性を高めている 読み書きを平行して行っている といった条件が重なったときにトランザクションがデッドロックすることがある、という問題を抱えていました。最小限の再現コードはこんな感じになります。 use strict; use warnings; use DBI; my $pid = fork(); if ($pid) { do_transaction(); } else { sleep 1; do_transaction(); exit; } unlink 'test.db'; sub do_transaction { my $dbh =

    DBD::SQLite 1.30_02 - Charsbar::Note
  • 『JPerlは偉大だった』……けれど - Charsbar::Note

    匿名のJperlユーザとおぼしき方から連載記事への要望コメントをいただいた。非公開希望ということなので取り合う必要はまったくないのだけれど、おかしなFUDを広められても困るので簡単にコメントを書いておく。 1) Perlのコアに「大きいことは良いことだ」という思想はない。「ワンライナーのためのツール」という側面を切り捨てたことはないし、これからもないだろう。21世紀に入ってツールチェーンまわりを新しくするためにいくつかのモジュールがコア入りしたが、コアにはモジュールをインストールするのに最低限必要なもの以外は入れない、というのが基路線だ。 2) ActivePerlもStrawberry Perlも、コアのみのPerlではない。いずれもコアだけでは一般的な用途には足りないからという理由でさまざまな追加モジュールを同梱した独自パッケージだ。同梱しているものも異なるし、設定にも異なっている部

    『JPerlは偉大だった』……けれど - Charsbar::Note
    YAA
    YAA 2010/03/26
  • DBD::SQLite 1.30_01 - Charsbar::Note

    今回のリリースから、コンパイルに利用したソースとヘッダをFile::ShareDir経由で取得できるようになったほか、複数のSQL文がふくまれているダンプをわせたときに最初の一文だけ実行して残りを捨ててしまうという問題に仮対応しておきました。あと、BLOBにUTF8のデータをわせていた方は今回非互換な修正が入っていますので、フラグの挙動をよくご確認ください。

    DBD::SQLite 1.30_01 - Charsbar::Note
  • モダンPerl連載第22回 - Charsbar::Note

    文中にも書いた通り、当はまだ取り上げる予定はなかったんですが、いろいろあったので今年の締めくくりもMojo(というかMojolicious::Lite)にしてみた次第。どうせすぐに連載記事がでるからと思ってここではアナウンスしていなかったのですが、年頭に書いた特集記事のコードもあわせて更新してありますので興味のある方はご確認くださいませ。日付がおかしい理由は文/注釈にも書いたとおり「なんでこんなんが二ヶ月も放置されてるかなあ」というバグを踏んでしまって前回原稿を落としてしまったからです。 http://gihyo.jp/dev/serial/01/modern-perl/0022 http://gihyo.jp/dev/feature/01/mojo/ それはそれとして、Mojolicious::Liteアプリのサンプルは掲示板的なものよりこんな感じのAPIサーバにした方がよかったの

    モダンPerl連載第22回 - Charsbar::Note
    YAA
    YAA 2010/01/06