マルチ・フェーズ認証 Plack::Middleware

Google の 2 フェーズ・ログインのように、 2 つ以上のログイン方式を組み合わせて認証を Plack::Middleware::Session を使っておこなう Middleware を試作しました。 ⇒ tociyuki/libplack-middleware-auth-loginchain-perl認証は、 最初の認証ページを GET …

RFC 6238 TOTP 使い捨てパスワード

google-authenticator の時刻ベースだけに対応する、 二段階認証の使い捨てパスワード生成コマンドを描いてみました。 コマンドラインで動きます。⇒ Time-Based One-Time Password generator command使うには google-authenticator の Key-URI 形式をキー・…

QuickTime Cubic VR mov から 6 枚の JPEG 画像をとりだす

以前作った Cubic VR ファイルの元であった 6 枚の画像を捨ててしまっていたものがあったので、 mov ファイルから画像を取り出すスクリプトを作りました。 QuickTime の定義部分を読み出すスクリプトを Perl で 10 年以上前に書いたものがあったので、 それ…

UnicodeData Canonical Combining Class のダブル配列トライ

Unicode の合成文字は、 UnicodeData.txt の第 3 欄 Canonical Combining Class の数値がゼロでないものを抽出します。 以前は狭い範囲で収まっていて単純なテーブル参照で済んでいたのですけど、 広い範囲にばらけながら増える一方なので、 ダブル配列のト…

簡略 Mustache

Mustache からパラメータ置換機能に機能を絞った簡略 Mustache テンプレート・エンジンを C++11 だけでなく、Perl でも使えるようにします。C++11 用の wmustache はセクションの外側のハッシュの値を得ることができましたが、 Perl 版では環境を使わずセク…

インメモリ簡易版 multipart/form-data デコーダ

Lamawiki で使っている、簡易版のマルチパート・デコーダでは、Content-Type ヘッダからバウンダリをとりだす部分を手抜きしすぎていたので、手直ししました。手抜きといっても、CPAN の CGI モジュール、HTTP モジュールも手抜き具合は同様で、それで問題が…

Crypt-PBKDF2-Lite

Lamawiki の htpasswd MD5 crypt 形式から乗り換えようと、 RFC 2898 の Password-Based Key Derivation Function 2 (PBKDF2) を実装した CPAN モジュール Crypt-PBKDF2 を調べてみたら Moose ウェアになっていて使える場所が限られてしまうので、 レガシー…

Unicode の East Asian Width による文字幅チェック

キャラクタ端末で文字の表示幅を求めるには Unicode の文字プロパティ East Asian Width をチェックして、プロパティが F と W は全角、A は使っているフォント次第で全角か半角、それ以外は半角とします。⇒ http://www.unicode.org/reports/tr11/Unicode Ch…

文字列で 10 進任意精度整数の四則演算 その 4 ベルヌーイ数

ネタとはいえ、巨大整数を計算できるようになったら、ベルヌーイ数を計算してみたくなるものです。 ⇒ プログラミング言語年表 - Wikipediaチャールズ・バベッジが提案した最新鋭の機械である解析機関についての記事をイタリアの数学者ルイジ・メナブレアが執…

文字列で 10 進任意精度整数の四則演算 その 3 符号付き除算

昨日の 2 つの符号なし除算ルーチンを利用して、符号付き除算を作ります。被除数と除数のいずれか一方だけが負のときに、商と余りの関係をどう扱うかは、定義次第で実装依存になるので、ここでは Ruby の Integer#divmod メソッドに合わせることにしました。…

文字列で 10 進任意精度整数の四則演算 その 2 符号なし除算

任意精度整数の除算の筆算を2進数以外の位取り記数法の除算ルーチンとして書くには面倒な理論を理解できてなければなりません。なぜ、面倒になるかというと、商の着目している桁の数の候補が 10 進数なら 10 個あり、それらのうちからどれを選べば良いかを少…

Perl のスカラー・リファレンスの怪

おもしろいことに今頃気がついたので、とりあえずメモ。スカラー変数を、そのスカラーへのリファレンスへすげかえると、おもしろいことが生じます。別の変数になら期待した通りの結果になります。Perl の変数は束縛変数ではなく、オブジェクトがむき出しで顔…

文字列で 10 進任意精度整数の四則演算 その 1 加減乗算

10 進数表記の文字列をピュア Perl で直接四則演算してみようというネタ・プログラミングをやってみます。10 進数で計算をおこなうことにし、どうせ遅いので、アルゴリズムは筆算のやりかたを採用します。いまどきの高速化乗算・除算アルゴリズムは使わない…

漢字かな混じり平文表組み

平文表組み作成モジュールは CPAN に幾種類も登録されているものの、漢字かな混じりで飾り気のない左詰め専用テーブルは需要が少ないのか、 はたまた Unicode::EastAsianWidth を使って簡単に記述できるためなのか、これといったものが見当たりません。試し…

スクリプト中の複数パッケージ間で use する方法

Perl の use は import をコンパイル時に自動実行してくれるので便利なのですけど、同じスクリプト中に記述済みのパッケージではなく、モジュール・ファイルに記述されたパッケージをコンパイルすることを前提にしてあります。パッケージをモジュールにして…

さくらのレンタルサーバーの perl 切り替えの仕掛け

本館サイト置き場に「さくらインターネット レンタルサーバー・スタンダード」を使っています。私の分が収納されているサーバが数日前に更新されて、 FreeBSD 9.1 64 ビット版へと OS が変わりました。そこで、システムのライブラリとの互換性がなくなってい…

YukiWikiMini-1.0.2 PSGI 版をアップデート

id:hyuki さん作の YukiWikiMini-1.0.2 を、二年前に PSGI 版へ翻訳したものを、アップデートしました。⇒ https://gist.github.com/tociyuki/1405146変更点: アプリケーションはシングルトンなのでインスタンスを作らなくてもかまいませんが、インスタンス変…

N10K 掲示板のテストの一部

N10K 掲示板のテストは、手抜きで結合テストだけになっています。単体テストは書いておらず、HTTP リクエストに対する HTTP レスポンスの要件を Test::Mojo で長々と書き連ねてあります。日本語のメッセージをポストしてレスポンスで受け取るテストになので…

N10K 掲示板の更新にトランザクションを導入

昨日の続きです。掲示板の投稿をデータ・ファイルとインデックス・ファイルをワンセットで扱うアプリケーションのため、両方の内容の整合性が崩れるとうまく動かなくなってしまいます。データ・ファイルからインデックス・ファイルを再編成することはできる…

N10K 掲示板 Mojolicious::Lite app

半分ネタ半分本気のウェブ掲示板スクリプトです。名前の通り 1 万件 (N10K) を越えるエントリを投稿・閲覧可能な掲示板です。データは平文のテキスト・ファイルに保存する作りで、掲示板としては、とてもシンプルでたいしたことないのですが、莫大なエントリ…

chat.psgi を Mojolicious::Lite で書き直す

昨日の chat.psgi は、 低レベルの Plack アプリケーションで書いていました。その方が Perl/CGI との違いがわかりやすかろうと考えたのですが、 この手のウェブ・アプリケーションに Mojolicious::Lite を使うのがモダン Perl の世界ってやつです。 プロト…

小飼弾著「Perl/CGI道場」の chat-final.cgi を今風に

本棚をあさっていたら、小飼弾著「Perl/CGI道場」(2003) ISBN4-8443-1742-3 が出てきました。古き良き牧歌的なほのぼの Perl コードと説明が並び、この 10 年間の Perl をとりまく世界もずいぶんと変化したものです。 2014 年現在の時点で、この書籍で学ぶの…

Lamawiki-0.02

おもしろいもので、 ソースコードを github に上げて、 見え方が変わると、 これまで気づかなかったコーディングの粗が見えてくるものです。 それで、 Lamawiki のいくつか気になってきた箇所を修正することにしました。 それに伴い、 テンプレートのパラメ…

Lamawiki-0.01

機能面では WiLiKi からコメントをとりのぞいたサブセットで、 Markdown に近い書式の Wiki エンジンを欲しくなって、 自分が使うために、 夏から作っていました。 ここにきて、 コミット頻度がようやく落ちついてきたこと、 目標の一つであった「さくらイン…

簡易 Test::Base 風テスト

Perl5 のデータ駆動テストの定番 Test::Base は、 Perl5 でプログラムを書く人には必需品です。 ですが、 インストールして使うだけの人に、 必ず Test::Base も入れるように強制できるかというと、 そうもいきません。とはいえど、 インストールの際にモジ…

Perl の Boyer-Moore 文字列探索の実装

Perl の正規表現と index 関数は、 Boyer-Moore 文字列探索アルゴリズムを使って文字列探索をしています。どのように実装してあるのか、Perl 5.16.1 のコードを覗いてみました。Perl が使っているアルゴリズムは、パターン文字列のずらし数を一致しなかった…

Make ツールの再帰展開変数の真似

設定ファイルで変数を扱う場合を考えて、make(1) の再帰展開変数と同じやりかたで変数を展開するおもちゃを Perl で書いてみます。再帰展開変数は、定義時に展開をおこなわず、参照時に展開します。展開後にさらに変数参照が含まれるときは、再帰的に展開し…

Fake YAML ローダ

Ruby 製ブログツール Jekyll の YAML フロントライナのように、 Wiki でも平文テキストにメタデータをくっつけてみようとしたのですが、 フルセットの YAML は循環参照を作れたり、 あらゆるコードポイントのユニコード文字を記述できたり、 ブレスした任意…

crypt_md5

BSD/Linux 等の passwd および Apache htpasswd の MD5 符号化は同じアルゴリズムを使っており、ピュア Perl の実装は CPAN モジュール Crypt::PasswdMD5 があります。 これは C 言語のコードを直訳したものな上に余計な機能がついているため、 自分好みに書…

HTML-Tinysiz-0.03

テストで HTML の要素をチェックするのに使う目的で作った、単純機能で短い要素選択モジュールです。POD を除く、コード本体は 133 行。 短かいため、テストの一部としてパッケージに含めて配布するのに向いています。⇒ https://gist.github.com/tociyuki/76…