こんばんは。nanoです。
今日はちょっとIPアドレスの正規表現化ロジックの解説でも。
と、思ったんですが、時間が無いのでやめます。
基本的にこのアルゴリズムは、
・数値のある桁nの範囲を基準にn+1桁の範囲を考えると、3パターンに分岐するので、全パターンを洗い出す。
という力技で出来てます。
この手のアルゴリズムにはたいてい2つの手法があり、あらかじめ全パターンを計算で求めて表とかツリーにしちゃう方法と、再帰的に処理を加えていく方法があるんですが、今回の場合は再帰的にやったほうが効率が良いので再帰処理を選びました。
というかGoogleさんがそうしてたのでそうしました。
でも、Googleさんは何をトチ狂ったのか、2パターンしか分岐しない場合(n桁同士の差が1の場合)を考慮してないので、最小値192.168.1.10、最大値192.168.2.10とかやると、192.168.1.10~192.168.2.255までヒットする正規表現を返してきます。アーァ。
そういえば、ライセンスをつけ忘れてました。
とりあえずApacheライセンスがいいです。
このソフトウェアの一部はDEZZ Networksが作成した何かを利用してます。
みたいな文章をつけてくれるとうれしいです!
でも誰もアプリケーションの中には組み込まないから意味ないよね。きっと。
まあとりあえず、仕事で自由に使えるライセンスとしておきます。
2019年頃にC++版が出るかもしれません。
うちの不調なWordpressも、今日こそは更新Pingがちゃんと飛びますように。
某掲示板の正規表現スレッドで、IPアドレスの範囲を正規表現に変えるツールが欲しい!
と訴える人がいた。
正規表現生成ツール Google アドワーズ広告サポート
まあ、要はコレだ。
ソースも見たら書いてある。
でもなんかこう、自分で作ってみたくなったので、ちょっとやってみた。
iprange.py
Python 2.4以上が必要です。
「ちょっとやってみた」って書いたけど、そりゃもう恐ろしく大変でした。
水曜の夜から考え初めて、今日一日かかってようやく出来たよ。
バグ等はコメントで突っ込みどうぞ。
っつうか外人のスパムウザス
Rubyを見ていると、よく、mix-inだとか、メタプログラミングという言葉が出てきます。
最近話題(?)なのがこの、メタプログラミングというもの。
メタプログラミングというのは、IBMのサイトでは、
プログラムを記述してプログラム本体あるいはプログラムの部品を生成する技法
とされています。要するに、直接手で情報を記述するのではなく、プログラムをプログラム的に記述してみよう、というような変な手法です。
Rubyはよく知りませんが、Pythonではメタプログラミング的な要素として、メタクラスという怪しげなものがあります。
メタクラスというのは、クラスをインスタンスを生成するための定義と考えると、クラスを生成するための定義と考えられるものです。クラスを生成するための定義情報なので、そのクラスには定義されていなかったメソッドを追加したりすることができる優れものです。詳しい実装方法などはIBMのページ「Pythonでのメタクラス・プログラミング」や、孫請プログラミングの「Pythonプログラミング」をどうぞ。(特に後者のページはわかりやすくていいです)
メタプログラミングを行うと、とりあえずAOP的な応用は出来そうです。他にどんなことが出来るのかは正直よくわかってませんが、応用は色々とできそうだなーとは感じます。
あと、全然話は変わりますが、今日はRubyのことを少しだけ勉強してみました。
Rubyはやっぱりなんというか少し馴染まない…。少しだけあるPerl的なところが妙に体に合いません。私にはPythonのほうが合ってるかもしれない(’A‘) っていうか、インデント=2が標準なのが妙に気に入らないんですが!やっぱインデントは4ですよ、4。
あんまり横幅の取れないエディタで編集するとき(80文字ぐらいで折り返すルールとか)は2のほうがいいんじゃないかとは思いますが。実際どうなんでしょう。