Home > Perl Archive

[ << < 14  15  16  17  18  19  20  21  22  23  24 >> ]

Perl Archive

HikiDoc.pm は命名を失敗したかも

HikiDoc ではなくて、Perl 的には Text::HikiDoc とかの方がいいんではないかと思った。いや、何となく。今ならまだ間に合うなぁ、きっと。

PersistentPerl 試験中

http://daemoninc.com/PersistentPerl/
昔 SpeedyCGI と呼ばれていたもの。現在は SpeedyCGI と PersistentPerl は全く同じもので、将来は PersistentPerl になるらしい。。。といいながら、最近更新されていないっぽいけど。まぁ、今のところ快適だ。FSWiki は、目に見えて速度が変わった。

HikiDoc.pm 公開

HikiDoc.pm を公開しました。「B's Soft」のコーナーにおいてあります。

ついでに日記に「HikiDoc」というカテゴリを作った。これで多少はまじめにメンテする。。。かもしれない。
ともあれ、オリジナルの作者、かずひこ氏に感謝。

NAME
    Text::HikiDoc - 「テキスト→HTML」変換ツール 'HikiDoc' の Perl による実装

SYNOPSIS
      use Text::HikiDoc;

      # $text = '!Title';
      # $html = '<h1>Title</h1>';

      $obj = Text::HikiDoc->new();
      $html = $obj->to_html($text);

        or

      $obj = Text::HikiDoc->new($text);
      $html = $obj->to_html();

      # $text = "!Title¥n----¥n!!SubTitle";
      # $html = "<h2>Title</h2>¥n<hr />¥n<h3>SubTitle</h3>";

      $obj = Text::HikiDoc->new({
                                 string => $text,
                                 level => 2,
                                 empty_element_suffix => ' />',
                                 br_mode => 'true',
                                 table_border => 'false',
                                });

        or

      $obj = Text::HikiDoc->new($text, 2, ' />', 'true', 'false');

      $html = $obj->to_html();

      # $text = "!Title¥n----¥n!!SubTitle¥nhogehoge{{br}}fugafuga";
      # $html = "<h1>Title</h1>¥n<hr />¥n<h2>SubTitle</h2>¥n<p>hogehoge<br />fugafuga</p>¥n";

      $obj = Text::HikiDoc->new();
      $obj->enable_plugin('br');
      $html = $obj->to_html($text);

      $obj->enable_plugin('br','ins');
      @plugins = $obj->plugin_list; # br, ins
      $obj->is_enabled('br'); # 1
      $obj->is_enabled('pr'); # 0

DESCRIPTION
    'HikiDoc' は「テキスト→ HTML」変換ツールです。書きやすく読みやすい
    文法の テキストをまともな HTML (や XHTML) に変換します。
    オリジナルの 'HikiDoc' は Ruby による実装です。

    本ライブラリは、Pure Perl による 'HikiDoc' の実装です。オリジナルの
    'HikiDoc' と互換性を保っています。

Methods
  new
    HikiDoc オブジェクトを生成します。下記のパラメータを指定できます。

    string
        変換するテキストデータです。

    level
        <h1>〜<h6> タグに変換する際のレベル指定です。デフォルトは 1 です。
        2 を設定すれば、HTML変換時 <h2> から始めます。

    empty_element_suffix
        閉タグがないタグ (<hr> や <br>など) の閉じ方を指定します。デフォ
        ルトは「 />」です。<hr />のようになります。<hr> としたい場合は
        「>」を設定してください。

    br_mode
        br_mode を「true」にすると、<p></p> 内の改行を <br> に変換します。
        デフォルトは「false」です。

        このパラメータは、本ライブラリ独自の拡張です。

    table_border
        table_border を「true」にすると <table border="1"> に、「false」
        にすると <table> に変換します。デフォルトは「true」です。

        このパラメータは、本ライブラリ独自の拡張です。

  to_html
    HTML に変換します。

    string
        変換するテキストデータです。もし new と to_html の両方で string
        を設定した場合は、to_html の方が優先されます。

  enable_plugin(@args)
    プラグインを有効にします。「@args」はプラグインの名前リストです

  plugin_list
    有効になっているプラグインの名前リストを返します

  is_enabled($str)
    プラグイン $str が有効かどうか 1 か 0 で返します。有効なら 1 を返し
    ます

Plugin
    Text::HikiDoc はプラグインによる拡張が可能です。enable_plugin() を
    使って、プラグインを有効にできます

  Text::HikiDoc::Plugin::aa
          {{aa "
                       (__)
                      (oo)
               /-------¥/
              / |     ||
             *  ||----||
                ‾‾    ‾‾
          "}}

          を下記のように変換します

          <pre class="ascii-art">
                       (__)
                      (oo)
               /-------¥/
              / |     ||
             *  ||----||
                ‾‾    ‾‾
          </pre>

          Text::HikiDoc::Plugin::texthighlight か Text::HikiDoc::Plugin::vimcolor
          が有効なら、下記のように書く事もできます

          <<< aa
                       (__)
                      (oo)
               /-------¥/
              / |     ||
             *  ||----||
                ‾‾    ‾‾
          >>>

  Text::HikiDoc::Plugin::br
        {{br}}

        を下記のように変換します

        <br />

  Text::HikiDoc::Plugin::e
        {{e('hearts')}} {{e('9829')}}

        を下記のように変換します

        &hearts; ♥

  Text::HikiDoc::Plugin::ins
        {{ins 'insert part'}}

        を下記のように変換します

        <ins>insert part</ins>

  Text::HikiDoc::Plugin::sub
        H{{sub('2')}}O

        を下記のように変換します

        H<sub>2</sub>O

  Text::HikiDoc::Plugin::sup
        2{{sup(3)}}=8

        を下記のように変換します

        2<sup>3</sup>=8

  Text::HikiDoc::Plugin::texthighlight
        pre に、Text::Highlight を使ったシンタックスハイライトを追加します

        下記の表記は、Perl のソースコードとしてハイライトされます。
        「<<< Perl」のかわりに「<<<」と記述すれば、ハイライトされない通常
        の pre になります

          <<< Perl
          sub dummy {
              $string = shift;
  
              $string =‾ /$PLUGIN_RE/;
              print "s:$string¥tm:$1¥ta:$2¥n";
              $a = $2;
              $a =‾ s/^¥s*(.*)¥s*$/$1/;
  
              if ( $a =‾ /($PLUGIN_RE)/ ) {
                  &hoge($a);
              }
              return $string;
          }
          >>>

        NOTE: このプラグインの実装方法は将来変わるかもしれません

  Text::HikiDoc::Plugin::vimcolor
        pre に、Text::VimColor を使ったシンタックスハイライトを追加します

        NOTE: このプラグインの実装方法は将来変わるかもしれません

SEE ALSO
    本家 'HikiDoc' サイト
        http://http://projects.netlab.jp/hikidoc/

    Text::HikiDoc::Plugin
    Text::HikiDoc::Plugin::aa
    Text::HikiDoc::Plugin::br
    Text::HikiDoc::Plugin::e
    Text::HikiDoc::Plugin::ins
    Text::HikiDoc::Plugin::sub
    Text::HikiDoc::Plugin::sup
    Text::HikiDoc::Plugin::texthighlight
    Text::HikiDoc::Plugin::vimcolor

AUTHORS
    オリジナルの 'HikiDoc' はかずひこ氏 <kazuhiko@fdiary.net> によって
    作られました。

    本ライブラリの本リリースは、川端 一道 (Higemaru) <oneroad@mac.com>
    によって作られました。
    http://haro.jp/

COPYRIGHT AND LICENSE
    This library 'HikiDoc.pm' is free software; you can redistribute it
    and/or modify it under the same terms as Perl itself.

    Copyright (C) 2006- Kawabata, Kazumichi (Higemaru) <oneroad@mac.com>

HikiDoc.pm その後

先日

結果オーライじゃなくてロジックもできるだけ本家と同じような感じにする (本家のバージョンアップに追随しやすくするため) ことを心がけ、目標は今月中リリースってことで。

などと言っていた HikiDoc.pm だが、とりあえず test_hikidoc.rb は全て ok になったし、TextFormattinRules.ja の parse 結果は hikidoc.rb と同じになった。目標よりも早くできたので、ちょっとコード見直して、せっかくだから Makefile.PL とかも準備して、それから後悔しよう。

後悔するのかよ orz - 髭。 (2006年05月23日 10時24分47秒)
月刊カメラマンの大谷です。初めまして。弊誌7月号(6月20日)にて、「デジタルフォトライフに役立つフリーウェア」を企画しております。 - 大谷惠基 (2006年05月23日 14時34分45秒)
つきましては、OneRenamerを紹介させていただきたくメールいたしました。何卒ご了承のほど、お願い申し上げます。 - 大谷惠基 (2006年05月23日 14時35分47秒)
了解しました。ありがとうございます。 - 髭。 (2006年05月23日 17時42分46秒)

HikiDoc.pm

元々電算写植屋だったからかもしれないが、ワープロが嫌いだ。レポートとかをどうやって書いてるかというと、最近はFreeStyleWiki上で書いてて、その前はrdtoolを使っていた。

特に不満もなかったのだが、先日「rdtool みたいにコマンドラインで使いたいときも結構あるよなぁ」と感じ、「最近 Wiki とか流行ったし、いろんな書式があるだろう」と、ちょっと調べてみた。あんまりいろんなことができる必要はない。機能的にちょうどよくても、書式が自分の感性と合わないとダメ。

結果、一番良さげだったのがHikiDoc。では移行しようと思ったが、一つ難点が。ruby がはいってなくて自分で勝手にインストールとかできない環境がある。。。Perl 版誰か作ってないかな。。。なさそうだな。。。自分で作るか。

結果オーライじゃなくてロジックもできるだけ本家と同じような感じにする (本家のバージョンアップに追随しやすくするため) ことを心がけ、目標は今月中リリースってことで。

perl の split で、パターンも含めた配列を返す

例えば、

my @tmps = split(/,/, 'hello, world');

の場合は

@tmps = ('hello',' world');

だが、

my @tmps = split(/(,)/, 'hello, world');

の場合は

@tmps = ('hello',',',' world');

となり、「,」も含まれる。

どういうときに便利かというと、

for my $str ( split(/({{|}})/, 'aa{{plugin arg}}bb') ) {
  if ($str eq '{{') {
   }
   elsif ($str eq '}}') {
  }
  else {
  }
}

というような感じで使う。

。。。というようなことに、ruby の Regexp.union 関連を見ててたどりついたわけだが、

perldoc -f split

するとちゃんと書いてある。やっぱり基本は重要。

au 携帯電話と GPS と ALPSLAB slide と - ロジック編 -

http://www.alpslab.jp/slide.html
先日「プログラム作ってる時にはまりどころがあったのだが、それは別項目で。」と言って放置してたので、そろそろ書いておく。

au の携帯電話を使った位置取得方法については、「ここギコ!」の「EZナビでの位置取得方法」が詳しいのでそちらを参照されたし。

GPSに位置情報取得依頼するためには「device:gpsone?hogehoge」にアクセスするわけだが、これは直接 URL 入力しようとしてもブックマークに登録しようとしても「http:// で始めなされ」と断られてしまう。なのでまずやったのがこれ。

Phase.1 単発取得

  1. 携帯電話から wml ファイルにアクセス。リンクをクリックする
  2. gpsone リンク。返り先は、返り値を表示したり保存したりする CGI にしておく
  3. CGI で、受け取った値を表示したり保存したり

手動トラックロガーとしてはこれで成功。でも、自動取得したいので、Phase.2 にすすむ

Phase.2 連続取得

  1. 携帯電話から wmlファイルにアクセス。リンクをクリックする
  2. gpsone リンク。返り先は、返り値を表示したり保存したりする CGI にしておく
  3. CGI で、受け取った値を表示したり保存したり。60秒後、2. に redirect

これでいけると思っていたのだが、3. で redirect するまではよくて、2. で情報取得するのもよくて。。。でも、3. に戻ってきたら CGI に処理が移らずに再度 2. を繰り返してしまうのだ。ブラウザのキャッシュとかかなぁ、とも思ったが、そもそも 3. で CGI にアクセスしている記録も残らない。仕方ないので色々試すことにする

Phase.3 返り先をかえて連続取得

  1. 携帯電話から wml ファイルにアクセス。5 秒後、2. に redirect
  2. gpsone リンク。返り先は、返り値を表示したり保存したりする CGI にしておく
  3. CGI で、受け取った値を表示したり保存したり。60秒後、1. に redirect

これでうまくいった。でも、もう一つ謎が残っていて、wml 5秒+CGI 60秒ではなくて wml 60秒+CGI 5秒にすると、Phase. 2 と同じ状態になるのだ。何故?

まぁ、結果的に動くものはできてるので、いろんなことの究明はそのうち気が向いたら。

最後に。wml にしている理由は、html だと携帯電話はで refresh 効かないから。wml だと大丈夫 (^^)v

au 携帯電話と GPS と Google マップと

昨日散歩したルートを、Google マップで表示してみた。見ることが目的ならこっちの方が見やすいような。ALPSLAB slide を短い距離でも楽しむためには、もっと短い間隔でトラッキングすればいいのかな?

IE では多分見れません。ごめんね。回避方法はわかってるので、そのうちなんとかする。

au 携帯電話と GPS と ALPSLAB slide と - 実行編その2・徒歩 -

今日は徒歩で 1 時間ほどプラプラ。1 分間隔で情報取得。

34/46/36.413,135/29/01.184 34/46/36.377,135/29/01.138 34/46/35.411,135/29/01.192 34/46/32.443,135/29/03.236 34/46/29.406,135/29/03.231 34/46/25.406,135/29/05.152 34/46/22.427,135/29/05.143 34/46/22.458,135/29/08.175 34/46/23.392,135/29/11.159 34/46/22.440,135/29/12.153 34/46/21.428,135/29/16.153 34/46/21.442,135/29/17.228 34/46/22.425,135/29/20.147 34/46/23.444,135/29/20.159 34/46/25.440,135/29/22.160 34/46/29.381,135/29/24.178 34/46/29.424,135/29/25.140 34/46/27.432,135/29/24.214 34/46/25.364,135/29/26.166 34/46/23.430,135/29/25.181 34/46/23.406,135/29/28.177 34/46/26.400,135/29/27.205 34/46/27.385,135/29/31.159 34/46/29.396,135/29/11.217 34/46/31.439,135/29/10.206 34/46/35.424,135/29/09.235 34/46/32.423,135/29/06.227 34/46/32.445,135/29/05.193 34/46/32.427,135/29/05.207 34/46/32.447,135/29/04.150 34/46/33.417,135/29/02.219

当たり前なのに今日気づいたこと。携帯電話は「圏外」になることがある。圏外になると GPS も使えない。で、何が困るかというと、ブラウザが「通信できませんでした」のエラーを出して、キー操作するまでその状態で止まってしまうのだ。今日もそのせいで、半分しか情報取得できていなかった。

1分間隔で取得というのは、徒歩でプラプラするにはいい感じだとは思ったが、地図のアニメーションが速すぎるなぁ。

au 携帯電話と GPS と ALPSLAB slide と - 実行編 -

http://www.alpslab.jp/slide.html
昨日 alpsmap plugin を APLS slide 対応したので、有効活用するために「au 携帯電話でブラウザ自動リロードしながら GPS 情報を保存していく CGI」というものを作ってみた。

作ってみたからには有効活用しないといけないので、自転車でプラプラしてみた。地図を2段階くらい縮小してから再生すると見やすいかと。

↓猪名川沿いの農業公園から豊中方面に向かって、3 分間隔で情報取得

34/45/58.413,135/26/11.174 34/45/58.413,135/26/11.174 34/46/00.450,135/26/12.147 34/46/03.397,135/26/20.213 34/46/23.373,135/25/59.155 34/46/27.385,135/25/56.181 34/46/26.377,135/25/46.183 34/46/38.439,135/25/37.215 34/46/26.376,135/25/47.175 34/46/27.373,135/25/56.201 34/46/01.402,135/26/26.180 34/45/47.380,135/27/16.126 34/45/31.384,135/27/29.176 34/45/33.391,135/27/29.148 34/45/54.407,135/27/29.189 34/45/55.374,135/28/18.206 34/46/05.442,135/28/18.223 34/46/22.443,135/28/24.225 34/46/32.394,135/28/38.218

↓服部緑地あたりからオープンしたばかりのミドリ電化まで往復を、1分間隔で情報取得

34/46/32.389,135/28/47.219 34/46/22.395,135/28/55.235 34/46/12.409,135/29/00.231 34/45/58.369,135/28/59.205 34/45/41.434,135/28/56.167 34/45/27.427,135/28/55.164 34/45/10.445,135/28/54.208 34/44/57.388,135/28/51.203 34/44/52.411,135/28/44.185 34/44/44.396,135/28/44.225 34/44/27.366,135/28/44.223 34/44/15.387,135/28/52.201 34/44/13.384,135/28/53.180 34/44/13.446,135/28/53.219 34/44/19.409,135/28/58.133 34/44/32.415,135/28/51.192 34/44/46.357,135/28/52.206 34/44/59.356,135/28/56.152 34/45/12.402,135/28/54.184 34/45/17.418,135/28/53.226 34/45/17.430,135/28/53.184 34/45/16.447,135/28/53.221 34/45/17.375,135/28/53.226 34/45/16.403,135/28/53.219 34/45/17.401,135/28/54.155 34/45/28.371,135/28/54.199 34/45/40.448,135/28/56.163 34/45/52.369,135/28/59.145 34/46/03.387,135/28/58.174 34/46/03.450,135/28/58.219 34/46/05.366,135/28/58.233 34/46/04.413,135/28/58.208 34/46/13.428,135/29/00.189 34/46/20.416,135/28/56.169 34/46/19.449,135/28/56.220

今日の時点の感想。

  • 1分間隔で 50km 以上情報とったら楽しめそう
  • 1分間隔だと、電話着信できないと思うので、もはや携帯「電話」ではないな
  • パケ代かかりそうだな。Win 端末じゃないとつらいかも

プログラム作ってる時にはまりどころがあったのだが、それは別項目で。

[ << < 14  15  16  17  18  19  20  21  22  23  24 >> ]

Home > Perl Archive

Feeds

Return to page top