SlideShare a Scribd company logo
1 of 55
Textile記法とか
 Markdown記法とか

2012-09-29 YAPC::Asia 2012 LT-thon
          岩田 享 / issm
using Markdown?
using Textile?
ですよねーw
Textile記法とか
 Markdown記法とか

2012-09-29 YAPC::Asia 2012 LT-thon
          岩田 享 / issm
アジェンダ
自己紹介

Textile記法

Text::Textile
Text::Textile::Pluggable
Textile 記法な Wiki 的 Web アプリ

まとめ
アジェンダ
自己紹介

Textile記法

Text::Textile
Text::Textile::Pluggable
Textile 記法な Wiki 的 Web アプリ

まとめ
おまえだれよ?

岩田 享 / issm(いわた)

http://blog.iss.ms/

@issm, qr/issmx{,2}/

個人事業

  とある「商品」を販売 → 発注 → 発送管理
  などするためのシステムを開発していたり

Perl / JavaScript CoffeeScript
http://www.imasaramario2.com/
入院!
Nagoya.pm の方からきまし
       た!
アジェンダ
自己紹介

Textile記法

Text::Textile
Text::Textile::Pluggable
Textile 記法な Wiki 的 Web アプリ

まとめ
Textile記法
「(軽量)マークアップ言語」の1つ

 http://textile.sitemonks.com/

 http://en.wikipedia.org/wiki/Textile_(markup_language)

 http://en.wikipedia.org/wiki/
 Lightweight_markup_language

特定のシンプルな記述によるテキストをHTMLに
変換

Redmine や GitHub (Wiki) 等でもサポート
Textile記法
見出し




          ▼
Textile記法
文字装飾




           ▼
Textile記法
リスト




          ▼
Textile記法
テーブル




           ▼
アジェンダ
自己紹介

Textile記法

Text::Textile
Text::Textile::Pluggable
Textile 記法な Wiki 的 Web アプリ

まとめ
Text::Textile
http://search.cpan.org/dist/Text-Textile/

“Text::Textile is a Perl-based
implementation of Dean Allen's Textile
syntax. Textile is shorthand for doing
common formatting tasks.”
Text::Textileは,Dean Allen によるTextile記
法のPerl実装である.Textileは共通のフォー
マッティングタスクを簡単にする.
Text::Textile
  手続き的
use Text::Textile qw/textile/;
my $text = ‘h1. textile syntax’;
my $html = textile($text);


  オブジェクト指向
use Text::Textile;
my $textile = Text::Textile->new;
my $text = ‘h1. textile syntax’;
my $html = $textile->process($text);
Text::Textile
% perl -MText::Textile=textile 
-le 'print textile("h1. textile syntax")'
<h1>textile syntax</h1>
簡単ですね!
Text::Textile
Redmineでは...




           ▼
記法の独自拡張は
アプリケーション側で
アジェンダ
自己紹介

Textile記法

Text::Textile
Text::Textile::Pluggable
Textile 記法な Wiki 的 Web アプリ

まとめ
Text::Textile::Pluggabl
           e
Textile → HTML 変換の前後に処理を挟める

プラグイン形式で好きなようにできる

https://github.com/issm/p5-Text-Textile-
Pluggable
Text::Textile::Pluggabl
           e
  手続き的
use Text::Textile::Pluggable qw/textile/;
my $text = ‘h1. textile syntax’;
my $html = textile($text, [qw/Foobar/]);

  オブジェクト指向
use Text::Textile;
my $textile = Text::Textile::Pluggable->new(
    plugins => [qw/Foobar/],
);
my $text = ‘h1. textile syntax’;
my $html = $textile->process($text);
Text::Textile::Pluggabl
           e
プラグインモジュール

 Text::Textile::Pluggable::Plugin::*

 pre メソッド → 変換前に処理

 post メソッド → 変換後に処理

 それぞれ処理後の文字列を返す
Text::Textile::Pluggabl
            e
package Text::Textile::Pluggable::Plugin::Foobar;
 
# 変換前に処理する
sub pre {
    my ($textile, $text) = @_;
    ...
    return $text;
}
 
# 変換後に処理する
sub post {
    my ($textile, $text) = @_;
    ...
    return $text;
}
 
1;
先のRedmineの件を例に
Text::Textile::Pluggabl
            e
package (ry)::Plugin::RedmineLinks;
 
# 変換前処理はないので定義は不要
sub post {
    my ($textile, $text) = @_;
     $text =~ s{(#d+)}{
         <a href=”...”>$1</a>
     }egx;
     $text =~ s{commit:([0-9a-f]{8})}{
         <a href=”...”>$1</a>
     }egx;
     return $text;
}
 
1;
Text::Textile::Pluggabl
           e
  こんな感じで...
use Text::Textile;
my $textile = Text::Textile::Pluggable->new(
    plugins => [qw/RedmineLinks/],
);

my $text = << ‘...’;
チケットへのリンク: #1234
コミットへのリンク: commit:abcd1234
...

my $html = $textile->process($text);
シンタックスハイライトしてみる
Text::Textile::Pluggabl
           e
GeSHi - Generic Syntax Highlighter

 http://qbnz.com/highlighter/

 written in PHP

 WordPress プラグイン 「WP-Syntax」
Text::Textile::Pluggable::Plugin::SyntaxHighlight::GeSHi
 https://github.com/issm/p5-Text-Textile-Pluggable-Plugin-SyntaxHighlight-
                                  GeSHi
Text::Textile::Pluggabl
           e
(ry)::Plugin::SyntaxHighlight::GeSHi

  bc[lang].. で記述されたコードをハイライト

  GeSHi な処理をするPHPを `...` で呼び出し
Text::Textile::Pluggabl
without plugin
               e

before




after
Text::Textile::Pluggabl
with plugin
            e

before




after
アジェンダ
自己紹介

Textile記法

Text::Textile
Text::Textile::Pluggable
Textile 記法な Wiki 的 Web アプリ

まとめ
Textile記法なWiki的Webアプリ
 SiTeWiki (Simple Textile Wiki)
   https://github.com/issm/SiTeWiki

   based on Amon2

   Textile記法で記述・保存(変更管理なし)

   編集時のプレビュー

   データディレクトリ指定

   データディレクトリ変更監視・表示自動更新
Textile記法なWiki的Webアプリ
 Textile記法で記述・保存
Textile記法なWiki的Webアプリ
 編集時のプレビュー
Textile記法なWiki的Webアプリ
     編集時のプレビュー

       use PocketIO;
use PocketIO;
use Plack::Builder;
use SiTeWiki::Web::WebSocketHandler;

builder {
    mount ‘/socket.io/’ => PocketIO->new(
        class => ‘SiTeWiki::Web::WebSocketHandler’,
        method => ‘run’,
    );
};
Textile記法なWiki的Webアプリ
 編集時のプレビュー

  デモ
Textile記法なWiki的Webアプリ
      データディレクトリ指定

        config/*.pl

+{
     datadir => undef,   # default ($basedir/data)
};


+{
     datadir => ‘/path/to/your/favorite/directory’,
};
Textile記法なWiki的Webアプリ
     データディレクトリ指定

      ローカルとデプロイ先とを Dropbox で共有

+{
     datadir => ‘/Users/issm/Dropbox/sitewiki/data’,
};


      ローカルでデータを編集するだけでおk
Textile記法なWiki的Webアプリ
 データディレクトリ変更監視・表示自動更新

  Filesys::Notify::Simple → 通知スクリプト

  通知スクリプト

    written in PhantomJS

    WebSocket で「更新された」通知
Textile記法なWiki的Webアプリ
 データディレクトリ変更監視・表示自動更新

  デモ
アジェンダ
自己紹介

Textile記法

Text::Textile
Text::Textile::Pluggable
Textile 記法な Wiki 的 Web アプリ

まとめ
まとめ
Textile 記法のことも思い出してあげて!

Text::Textile::Pluggable ってモジュールを書いてみ
た

Textile 記法を扱える Wiki 的なものを作ってみた

    WebSocketおもしろい!

    nginx を前に立てるとうまくいかない><
おまけ
Text::Markdown::Pluggableもあるよ
    https://github.com/issm/p5-Text-Markdown-Pluggable
ご静聴ありがとうございました!
Q?

More Related Content

What's hot

株式会社インタースペース 清水様 登壇資料
株式会社インタースペース 清水様 登壇資料株式会社インタースペース 清水様 登壇資料
株式会社インタースペース 清水様 登壇資料leverages_event
 
モテる JavaScript
モテる JavaScriptモテる JavaScript
モテる JavaScriptOsamu Monoe
 
約束なんていらないPromiseよりもasync/awaitだ!
約束なんていらないPromiseよりもasync/awaitだ!約束なんていらないPromiseよりもasync/awaitだ!
約束なんていらないPromiseよりもasync/awaitだ!kaz3391
 
クライアントサイドjavascript簡単紹介
クライアントサイドjavascript簡単紹介クライアントサイドjavascript簡単紹介
クライアントサイドjavascript簡単紹介しくみ製作所
 
Web制作勉強会 #2
Web制作勉強会 #2Web制作勉強会 #2
Web制作勉強会 #2Moto Yan
 
Ma gician <wide version> @meguro.es 2019/10/10
Ma gician <wide version> @meguro.es 2019/10/10Ma gician <wide version> @meguro.es 2019/10/10
Ma gician <wide version> @meguro.es 2019/10/10Eucen Stew
 
Deep dive into oss written in swift
Deep dive into oss written in swiftDeep dive into oss written in swift
Deep dive into oss written in swiftYuki Asai
 
JavaScriptことはじめ
JavaScriptことはじめJavaScriptことはじめ
JavaScriptことはじめYuki Ishikawa
 
nanocのhelper 利用実例
nanocのhelper 利用実例nanocのhelper 利用実例
nanocのhelper 利用実例Go Maeda
 
アレと Perl で AWS を - JAWS-UG Aomori #2
アレと Perl で AWS を - JAWS-UG Aomori #2アレと Perl で AWS を - JAWS-UG Aomori #2
アレと Perl で AWS を - JAWS-UG Aomori #2Eikichi Gotoh
 

What's hot (14)

株式会社インタースペース 清水様 登壇資料
株式会社インタースペース 清水様 登壇資料株式会社インタースペース 清水様 登壇資料
株式会社インタースペース 清水様 登壇資料
 
モテる JavaScript
モテる JavaScriptモテる JavaScript
モテる JavaScript
 
約束なんていらないPromiseよりもasync/awaitだ!
約束なんていらないPromiseよりもasync/awaitだ!約束なんていらないPromiseよりもasync/awaitだ!
約束なんていらないPromiseよりもasync/awaitだ!
 
クライアントサイドjavascript簡単紹介
クライアントサイドjavascript簡単紹介クライアントサイドjavascript簡単紹介
クライアントサイドjavascript簡単紹介
 
Web制作勉強会 #2
Web制作勉強会 #2Web制作勉強会 #2
Web制作勉強会 #2
 
Ma gician <wide version> @meguro.es 2019/10/10
Ma gician <wide version> @meguro.es 2019/10/10Ma gician <wide version> @meguro.es 2019/10/10
Ma gician <wide version> @meguro.es 2019/10/10
 
Deep dive into oss written in swift
Deep dive into oss written in swiftDeep dive into oss written in swift
Deep dive into oss written in swift
 
JavaScriptことはじめ
JavaScriptことはじめJavaScriptことはじめ
JavaScriptことはじめ
 
何なのc?
何なのc?何なのc?
何なのc?
 
Js祭り
Js祭りJs祭り
Js祭り
 
nanocのhelper 利用実例
nanocのhelper 利用実例nanocのhelper 利用実例
nanocのhelper 利用実例
 
アレと Perl で AWS を - JAWS-UG Aomori #2
アレと Perl で AWS を - JAWS-UG Aomori #2アレと Perl で AWS を - JAWS-UG Aomori #2
アレと Perl で AWS を - JAWS-UG Aomori #2
 
MT LOVE!
MT LOVE!MT LOVE!
MT LOVE!
 
覚醒!JavaScript
覚醒!JavaScript覚醒!JavaScript
覚醒!JavaScript
 

Viewers also liked

20091010.Nagoyarubykaigi#01
20091010.Nagoyarubykaigi#0120091010.Nagoyarubykaigi#01
20091010.Nagoyarubykaigi#01IWATA Susumu
 
2009-09-11 / YAPC::Asia 2009
2009-09-11 / YAPC::Asia 20092009-09-11 / YAPC::Asia 2009
2009-09-11 / YAPC::Asia 2009IWATA Susumu
 
2012-09-09.nagoyapm07
2012-09-09.nagoyapm072012-09-09.nagoyapm07
2012-09-09.nagoyapm07IWATA Susumu
 
2012 11-17.nagoyapm08
2012 11-17.nagoyapm082012 11-17.nagoyapm08
2012 11-17.nagoyapm08IWATA Susumu
 
2013-07-13 Kyoto.pm #5 LT
2013-07-13 Kyoto.pm #5 LT2013-07-13 Kyoto.pm #5 LT
2013-07-13 Kyoto.pm #5 LTIWATA Susumu
 
2014 08-30 YAPC::Asia 2014 LT
2014 08-30 YAPC::Asia 2014 LT2014 08-30 YAPC::Asia 2014 LT
2014 08-30 YAPC::Asia 2014 LTIWATA Susumu
 

Viewers also liked (6)

20091010.Nagoyarubykaigi#01
20091010.Nagoyarubykaigi#0120091010.Nagoyarubykaigi#01
20091010.Nagoyarubykaigi#01
 
2009-09-11 / YAPC::Asia 2009
2009-09-11 / YAPC::Asia 20092009-09-11 / YAPC::Asia 2009
2009-09-11 / YAPC::Asia 2009
 
2012-09-09.nagoyapm07
2012-09-09.nagoyapm072012-09-09.nagoyapm07
2012-09-09.nagoyapm07
 
2012 11-17.nagoyapm08
2012 11-17.nagoyapm082012 11-17.nagoyapm08
2012 11-17.nagoyapm08
 
2013-07-13 Kyoto.pm #5 LT
2013-07-13 Kyoto.pm #5 LT2013-07-13 Kyoto.pm #5 LT
2013-07-13 Kyoto.pm #5 LT
 
2014 08-30 YAPC::Asia 2014 LT
2014 08-30 YAPC::Asia 2014 LT2014 08-30 YAPC::Asia 2014 LT
2014 08-30 YAPC::Asia 2014 LT
 

Similar to 2012 09-29.yapcasia2012ltthon

SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugSpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugY Watanabe
 
CodeIgniterによるPhwittr
CodeIgniterによるPhwittrCodeIgniterによるPhwittr
CodeIgniterによるPhwittrkenjis
 
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略takezoe
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejsTakayoshi Tanaka
 
Rails基礎講座 part.2
Rails基礎講座 part.2Rails基礎講座 part.2
Rails基礎講座 part.2Jun Yokoyama
 
WordPressをこれから始める人のためのテーマ講座
WordPressをこれから始める人のためのテーマ講座WordPressをこれから始める人のためのテーマ講座
WordPressをこれから始める人のためのテーマ講座Takami Kazuya
 
re RainbowTwtr - 構造化テキストの安全なエスケープ手法について
re RainbowTwtr - 構造化テキストの安全なエスケープ手法についてre RainbowTwtr - 構造化テキストの安全なエスケープ手法について
re RainbowTwtr - 構造化テキストの安全なエスケープ手法についてKazuho Oku
 
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)Hiroaki KOBAYASHI
 
node+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作るnode+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作るKiyoshi SATOH
 
第2回品川Redmine勉強会(日本語全文検索)
第2回品川Redmine勉強会(日本語全文検索)第2回品川Redmine勉強会(日本語全文検索)
第2回品川Redmine勉強会(日本語全文検索)Masanori Machii
 
jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -Hayato Mizuno
 
SQLマッピングフレームワーク「Kobati」のはなし
SQLマッピングフレームワーク「Kobati」のはなしSQLマッピングフレームワーク「Kobati」のはなし
SQLマッピングフレームワーク「Kobati」のはなしKazuki Minamitani
 
Ohotech特盛 #11 Box2DWebを触ってみよう
Ohotech特盛 #11 Box2DWebを触ってみようOhotech特盛 #11 Box2DWebを触ってみよう
Ohotech特盛 #11 Box2DWebを触ってみようFumihito Yokoyama
 
お父さんのための実用JavaScriptプログラミング~入門篇~
お父さんのための実用JavaScriptプログラミング~入門篇~お父さんのための実用JavaScriptプログラミング~入門篇~
お父さんのための実用JavaScriptプログラミング~入門篇~Che Renkov
 
Elasticsearchプラグインの作り方
Elasticsearchプラグインの作り方Elasticsearchプラグインの作り方
Elasticsearchプラグインの作り方Shinsuke Sugaya
 
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)崇之 清水
 
SATySFiでDSLを作る/使うと便利って話
SATySFiでDSLを作る/使うと便利って話SATySFiでDSLを作る/使うと便利って話
SATySFiでDSLを作る/使うと便利って話YuitoMurase1
 

Similar to 2012 09-29.yapcasia2012ltthon (20)

Inside Movable Type
Inside Movable TypeInside Movable Type
Inside Movable Type
 
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugSpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
 
CodeIgniterによるPhwittr
CodeIgniterによるPhwittrCodeIgniterによるPhwittr
CodeIgniterによるPhwittr
 
jQuery超入門編
jQuery超入門編jQuery超入門編
jQuery超入門編
 
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
 
Rails基礎講座 part.2
Rails基礎講座 part.2Rails基礎講座 part.2
Rails基礎講座 part.2
 
Apache Tapestry
Apache TapestryApache Tapestry
Apache Tapestry
 
WordPressをこれから始める人のためのテーマ講座
WordPressをこれから始める人のためのテーマ講座WordPressをこれから始める人のためのテーマ講座
WordPressをこれから始める人のためのテーマ講座
 
re RainbowTwtr - 構造化テキストの安全なエスケープ手法について
re RainbowTwtr - 構造化テキストの安全なエスケープ手法についてre RainbowTwtr - 構造化テキストの安全なエスケープ手法について
re RainbowTwtr - 構造化テキストの安全なエスケープ手法について
 
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
 
node+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作るnode+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作る
 
第2回品川Redmine勉強会(日本語全文検索)
第2回品川Redmine勉強会(日本語全文検索)第2回品川Redmine勉強会(日本語全文検索)
第2回品川Redmine勉強会(日本語全文検索)
 
jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -
 
SQLマッピングフレームワーク「Kobati」のはなし
SQLマッピングフレームワーク「Kobati」のはなしSQLマッピングフレームワーク「Kobati」のはなし
SQLマッピングフレームワーク「Kobati」のはなし
 
Ohotech特盛 #11 Box2DWebを触ってみよう
Ohotech特盛 #11 Box2DWebを触ってみようOhotech特盛 #11 Box2DWebを触ってみよう
Ohotech特盛 #11 Box2DWebを触ってみよう
 
お父さんのための実用JavaScriptプログラミング~入門篇~
お父さんのための実用JavaScriptプログラミング~入門篇~お父さんのための実用JavaScriptプログラミング~入門篇~
お父さんのための実用JavaScriptプログラミング~入門篇~
 
Elasticsearchプラグインの作り方
Elasticsearchプラグインの作り方Elasticsearchプラグインの作り方
Elasticsearchプラグインの作り方
 
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
 
SATySFiでDSLを作る/使うと便利って話
SATySFiでDSLを作る/使うと便利って話SATySFiでDSLを作る/使うと便利って話
SATySFiでDSLを作る/使うと便利って話
 

2012 09-29.yapcasia2012ltthon

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n