2012-05-04

perl - Markdown変換スクリプト

ネタを整理するのに Markdown で書くと便利なのかなと調べていると
CPAN に Text::Markdown というモジュールがあったので
思いつきで変換スクリプト書いてみました。

スクリプトにファイル名を渡すか、__END__ 以下に Markdown を書いて使います。
出力を保存する場合はリダイレクトして下さい。

# markdown2html.pl

use strict;
use warnings;

use Text::Markdown 'markdown';

my $file = shift;
my $text = "";

if ($file) {
 open(my $fh, '<', $file) or die($!);
  local $/;
  $text = <$fh>;
 close $fh;
} else {
 local $/;
 $text = <DATA>;
}
my $html = markdown($text);

#print $text;
print $html;


__END__
#markdown sample
##h2
###h3

paragraph  
hoge
moge

[リンク文字列](http://example.com/)
[リンク文字列](http://example.com/ "タイトル")
<http://example.com>

![画像の説明](/path/to/image.jpg "タイトル")

- listA
- listB
- listC

---

1. listA
2. listB
3. listC

>blockquote
blockquote

    ...code...
`...code...`
ドラッグアンドドロップ用にバッチファイルも付けておきますね。
スクリプトと保存先のパスは適宜修正して下さい。
::markdown2html.bat

set markdown2html="C:\markdown2html.pl"
set output="C:\%~n1%.htm"

perl %markdown2html% %1 > %output%

pause

Markdown用のエディタとかもあるので、わざわざこんなの使うことないですよね。
個人的には秀丸から perl に渡して処理とかよくやるので、使うかなと思いまして。

参考リンク

Tomas Doran / Text-Markdown - search.cpan.org
Daring Fireball: Markdown
blog::2310 » Markdown文法の全訳
Markdown - Wikipedia

2012-05-02

rtmpdump - v2.5 Unofficial binaries

RTMPDump v2.5 GIT-2012-03-31 (Handshake 10 support by Xeebo)
http://stream-recorder.com/forum/showpost.php?p=44648&postcount=96

--swfVfy | -W オプションは Type2 未対応らしくこんなエラーが出ます。
ERROR: HandleCtrl: SWFVerification Type 2 request not supported,
       attempting to use SWFVerification Type 1! Patches welcome...

Perl - リンク集

Perl

The Perl Programming Language
本家
The Comprehensive Perl Archive Network
CPAN
The CPAN Search Site - search.cpan.org
ActivePerl
Windows(32|64bit), MacOS, Linux(32|64bit)
Strawberry Perl
Windows(32|64bit)

Document

Perl programming documentation
perldoc
perldoc.jp
perldoc邦訳
Argrath's lair
pod日本語訳仮置き場
ちょいマシなCPAN機械翻訳

Framework | Library

Perlbrew
ユーザー環境下で複数バージョンの perl を管理
App-perlbrew - search.cpan.org
Catalyst
The Elegant MVC Web Application Framework
Catalyst - search.cpan.org
Moose
A postmodern object system for Perl 5
Moose - search.cpan.org
Moose 邦訳ドキュメント - perldoc.jp
PSGI/Plack
Perl Superglue for Web frameworks and Web Servers (PSGI toolkit)
Plack - search.cpan.org
Mojolicious
Real-time web framework
Mojolicious - search.cpan.org
Mojolicious リファレンス - サンプルコードによるPerl入門
ImageMagick
画像処理ライブラリ
PerlMagick, Perl API for ImageMagick
Image::Magick - search.cpan.org
ChartDirector for Perl
チャート描画ライブラリ
EPIC
Eclipse用 Perl IDE

News

Perl.com
O'Reillyのperlニュースサイト

Community

Perl Mongers
YAPC - Yet Another Perl Conference
Perl-users.jp - 日本のPerlユーザのためのハブサイト
PerlMonks

Learn

--- 基礎 ---
サンプルコードによるPerl入門
Perl基礎文法最速マスター - サンプルコードによるPerl入門
Perlオブジェクト基礎文法最速マスター - 燈明日記
Perl5編 - Programing Place
--- 基礎以上 ---
Perl-users.jp
JPerl Advent Calendar
JPerl Advent Calendar 2008
JPerl Advent Calendar 2009
JPerl Advent Calendar 2010
JPerl Advent Calendar 2011
JPerl Advent Calendar 2012
連載:モダンPerlの世界へようこそ|gihyo.jp
連載:Perl Hackers Hub|gihyo.jp
特集:Happy Testing Perl|gihyo.jp
--- 日本語処理 ---
Encode.pm - search.cpan.org
404 Blog Not Found:perl - Encode 入門
404 Blog Not Found:perl - Encode 中級
404 Blog Not Found:perl - use encoding; #は黒歴史
404 Blog Not Found:perl - EncodeでXSSを防ぐ
404 Blog Not Found:perl - use CGI; use Encode; # 非英語Webプログラミング3原則
404 Blog Not Found:perl - 最速のUTF-8処理法
Encodeでラクラク日本語処理 - JPerl Advent Calendar 2009
続・Encodeでラクラク日本語処理 - JPerl Advent Calendar 2010 Casual Track
モダンPerlの世界へようこそ:第32回 Encode:日本語だけ扱えればよいのではなく|gihyo.jp
--- その他 ---
Perl道場
PerlエンジニアがつくるPerlエンジニアのための検定試験

Books

--- O'Reilly's CD bookshelf ---
[eng]Perl in a Nutshell 第2版 - 2002
[eng]Learning Perl 第3版 - 2001
[eng]Learning Perl Objects, References and Modules - 2003
[eng]Programming Perl 第3版 - 2000
[eng]Advanced Perl Programming - 1997
[eng]Perl Cookbook - 1998
日本語インデックス
[eng]Perl Cookbook 第2版 - 2003
[eng]Mastering Regular Expressions 第2版 - 2002
[eng]Perl & LWP - 2002
[eng]CGI Programming with Perl 第2版 - 2000
[eng]Perl & XML - 2002
[eng]Mastering Perl/Tk - 2002
[eng]Learning Perl on Win32 Systems - 1997
[eng]Perl for System Administration - 2000
--- Google Books ---
Google Books Downloader for Windows and Mac OS X
 
[eng]Learning Perl 第6版 - 2011
初めてのPerl 第3版 - 2003
[eng]Intermediate Perl 第2版 - 2012
続初めてのPerl 改訂版 - 2006
[eng]Mastering Perl - 2007
[eng]Learning Perl Objects, References, and Modules - 2003
[eng]Programming Perl 第4版 - 2012
プログラミングPerl VOLUME 1 第3版 - 2002
プログラミングPerl VOLUME 2 第3版 - 2002
Perlクックブック VOLUME 1 第2版 - 2004
Perlクックブック VOLUME 2 第2版 - 2004
実用Perlプログラミング 第2版 - 2006
ミニマルPerl: Unix/LinuxユーザのためのPerl習得法 - 2008
Perlベストプラクティス - 2006
詳説正規表現 第2版 - 2003
正規表現デスクトップリファレンス - 2004
[eng]Regular Expressions Cookbook - 2009
[eng]Perl Debugger Pocket Reference - 2004
[eng]Perl & Lwp - 2002
[eng]Spidering Hacks: 100 Industrial-Strength Tips & Tools - 2003
CGIプログラミング 第2版 - 2001
入門Perl DBI - 2001
初めてのPerl Win32システム -1998
Perl & XML -2002
[eng]Perl Graphics Programming - 2002
Perl/GNUソフトウェアによるWebグラフィックスプログラミング - 2000
[eng]Web Security Testing Cookbook - 2008
[eng]Perl Hacks: Tips & Tools for Programming, Debugging, and Surviving - 2006
モダンPerl入門: 実務で使う実用的なPerlの"すべて" - 2009
PerlフレームワークCatalyst完全入門 - 2010

2012-04-29

オブジェクト指向とイデア論

HTML→CSS→JavaScript(挫折)→CGI(Perl)→PHP,VB ... と、
元はホームページ作りたかったので、そこから色々つまみ食いしては忘れ、
忘れた頃になにかプログラム組みたくなったりして現在に至るわけですが、
とりわけJavaScriptには苦い思い出があります。

当時はIE6、ネットスケープとかだったのでステータスバーに文字を流すとかやってた牧歌的な時代です。
JavaScript本を一冊買ったもののメソッドだのプロパティだの意味が分からない。
今にして思えば、JavaScript自体のオブジェクト、ブラウザのオブジェクト、 DOM なんかがごっちゃになってたんだなと。

全体は見通せないし、デバッグの仕方も分からないし、労力の割りに大したこと出来なくて投げたわけです。
ここでオブジェクト指向的なものに苦手意識が植え付けられます。

その後、CGI(Perl)を改造したりしてるとモジュールに出会う。
モジュールはオブジェクト指向で書かれてるらしいので苦手意識がありつつも調べてみる。
やっぱりここでも挫折するわけですが、すごく印象に残っているのがこの記事。

@IT:オブジェクト指向の世界(10) プラトン編-イデア論とクラス/インスタンス

読んだ当時はさっぱりでしたが、オブジェクト指向って哲学由来なんだなと。

そこで自分のプログラミングの入り口たる HTML と CSS に戻りますが、
文章と装飾の分離という考え方は 「本質」 と 「本質でないもの」 の分離で
哲学っぽいなと思っていたので、非常に印象深いわけです。


プラトンのイデア論

プラトンは「無知の知」で知られるソクラテスの弟子。
ソクラテスは倫理を追求した人なので、プラトンもかなりその影響を受けてます。
そのせいなのかプラトンは理想主義的な印象。

イデア論とは、端的に言えばこういうことです。
ものには イデア(idea) という真の原型が存在する。
この世にあるものは イデア のコピーに過ぎない。

この考え方がオブジェクト指向に似てるわけです。

イデア - クラス
イデアのコピー - インスタンス(オブジェクト)

似てるというよりそのまんまですね。


抽象と具体

一度クラスを使ったプログラムを作ってみれば、その後は理解が進むものです。
一方で、humanクラスからbaker、animalクラスからdogを作るみたいな例は なんで分かりづらいのか。

それは、クラスが抽象化されたものだから、じゃないかと。

抽象化というのは、対象の特徴、要素を抜き出すことです。
抽象化されたクラスを説明するのにクラスから入ると、 具体的なもの(オブジェクト)がイメージしにくい。

むしろ、複数のオブジェクトからクラスを作った方が、 抽象化のプロセスから考えても分かりやすいのでは。


プラトンの弟子のアリストテレスもイデア論はしっくりこなかったようです。
「実体が先にあって、それらを基にして人間が頭の中で抽象化して創りだしたものを
イデアと呼んでいるにすぎないというのが自然な考え方である」
アリストテレスは帰納的アプローチが好きなので
実体がなく検証しようがないイデアという概念は納得いかないのでしょう。

アリストテレスも、オブジェクトからクラスの方が分かりやすいタイプだと思いませんか。


PCは叡智の結晶

ハイテクの塊であるPCに古代ギリシャの哲学が生きている。
それだけ過去の賢人は普遍的なもの、本質に迫っていたんだなと感じます。

PCを通じて人類の叡智に触れられるなんて、PCはオモチャとして最高。
いろんな概念に触れられるオモチャなんて他にはそうないんじゃないでしょうか。


参考リンク

@IT連載 「オブジェクト指向の世界」
オブジェクト指向と哲学
ギリシア哲学への招待状

2012-04-28

可能性と蓋然性の違い

普段、なにげなく使ってる「可能性」という言葉。

「可能性が高い(低い)」 というのは間違っていて、
「蓋然性が高い(低い)」 と使うのが正しいとのこと。

可能性 は possibility、起こるか起こらないか、有るか無いか。
蓋然性 は probability、確からしさの度合い、確率。
「可能性がある(ない)」
「蓋然性が高い(低い)」
これが本来の使い方らしい。

そうはいっても普通は「蓋然性」っていっても通じないよね。
日銀のレポートぐらいでしか見たことないし。

英語に訳す場面だと使い分けないとまずいのでしょう。

日本語だと曖昧だけど、英語にすると明確に違う実感が湧くのは何ででしょうね?
プログラミングもいくつか違う言語をつまみ食いすると理解が進んだりしますし。
もしや、これは単に習熟度が低い(日本語含む)ということか!

概念と言語というテーマは面白いですね。
この面白さに中学の時、気付いていればなー。