SlideShare a Scribd company logo
Gauche で本を作る
株式会社オーム社開発部
鹿野 桂一郎
kshikano@ohmsha.co.jp
1
Gauche で本を作る
鹿野 桂一郎
k16.shikano@gmail.com
http://k16journal.blogspot.com/
2
祝
『プログラミング Gauche』
出版
3
ほんとのこと言うと、僕が編集したかった
4
ほんとのこと言うと、僕が編集したかった
Scheme 本ならオーム社だろ、常考
5
ほんとのこと言うと、僕が編集したかった
Scheme 本ならオーム社だろ、常考
2 月発行予定が結局 Gauche.Night 当日かよ!
6
ほんとのこと言うと、僕が編集したかった
Scheme 本ならオーム社だろ、常考
2 月発行予定が結局 Gauche.Night 当日かよ!
実はオライリージャパンで
発行がちょっとくやしい
7
「Gauche の本」の話ができないなら、
「Gauche で本」の話をするしかない。
8
「理論的にクールな話だけではなくて、実稼働に
応用して得られた具体的な数値や経験なんかも
知りたい」
— Shiro さんの Wiliki より
9
「理論的にクールな話だけではなくて、実稼働に
応用して得られた具体的な数値や経験なんかも
知りたい」
— Shiro さんの Wiliki より
オーム社内の編集制作で Gauche + SXML が実稼働中。
(SXML にして数 M バイト程度の原稿を Gauche でい
じって LaTeX にコンバート。)
10
僕らの仕事は原稿のハック
11
原稿ハッキング環境
Gauche
12
なぜ Gauche?(Perl や Ruby でなく)
13
なぜ Gauche?(Perl や Ruby でなく)
答え:マルチバイトな関数型言語
14
なぜ Gauche?(Perl や Ruby でなく)
答え:マルチバイトな関数型言語
↑
日本語の原稿だし
15
なぜ Gauche?(Perl や Ruby でなく)
答え:マルチバイトな関数型言語
↑
日本語の原稿だし
↑
愚問
16
Gauche といえば正規表現
(regexp-replace-all* manuscript
#/(行) な ([いうえわ])/ "12")
17
Gauche といえば正規表現
(regexp-replace-all* manuscript
#/(行) な ([いうえわ])/ "12")
送り仮名は本則で!
18
充実したライブラリとリファレンス
19
Gauche の周りの人たちもすごい。
たとえば c-wrapper
素人にここまでのパワーを許している関数型言
語のコミュニティがあるか?
20
hurigana.scm
漢字をひらがな化する自作ユーティリティ。
LaTeX で索引を作るときの最大の手間である読み仮名の
入力を省力化。
(c-load-library "/usr/lib/libkakasi.so.2.1.0")
(c-include "/usr/include/libkakasi.h")
(define (kanji->hira str)
(let ((base-ces "utf-8") (kakasi-ces "iso2022jp"))
(kakasi_close_kanwadict)
(kakasi_getopt_argv 2 ’("kakasi" "-JH"))
...
21
なんといっても関数型言語
原稿のハックをサポートするツールがざくざく
作れる。
22
xml-trivial.scm
整形式じゃない XML っぽい原稿を処理したい。
(define (read-xml)
(define (in-tag c tag)
(cond ((eof-object? c)
(error "EOF while tag" tag))
((char=? # c)
(in-escaped (read-char)
(string+char tag c)))
...
23
xml-trivial.scm
整形式じゃない XML っぽい原稿を処理したい。
僕でも作れた、特定目的用の再帰下降パーザ。
(define (read-xml)
(define (in-tag c tag)
(cond ((eof-object? c)
(error "EOF while tag" tag))
((char=? # c)
(in-escaped (read-char)
(string+char tag c)))
...
24
xml2tex.scm
XML っぽく構造化されているテキストをリバースエンジ
ニアリングして、各要素を適当な LaTeX のコマンドや環
境に変換するコンバータをお手軽に作りたい。
(define (make-p name)
(define-rule
(lambda ()
(receive (vskip hskip)
(values (ifstr ($@ ’vskip)
(cut list "vskip" <> "n"))
...
(define-simple-rules make-p
p0 p1 p2 p3)
25
xml2tex.scm
XML っぽく構造化されているテキストをリバースエンジ
ニアリングして、各要素を適当な LaTeX のコマンドや環
境に変換するコンバータをお手軽に作りたい。
僕でもできた、メタプログラミング。
(define (make-p name)
(define-rule
(lambda ()
(receive (vskip hskip)
(values (ifstr ($@ ’vskip)
(cut list "vskip" <> "n"))
...
(define-simple-rules make-p
p0 p1 p2 p3)
26
xml2tex.scm
XML っぽく構造化されているテキストをリバースエンジ
ニアリングして、各要素を適当な LaTeX のコマンドや環
境に変換するコンバータをお手軽に作りたい。
僕でもできた、メタプログラミング。
このプレゼンも、下書きのテキストに適当な
XML タグをつけてから、xml2tex.scm で LaTeX
への変換ルールを定義して作成しました。
27
xml2tex.scm
XML っぽく構造化されているテキストをリバースエンジ
ニアリングして、各要素を適当な LaTeX のコマンドや環
境に変換するコンバータをお手軽に作りたい。
僕でもできた、メタプログラミング。
このプレゼンも、下書きのテキストに適当な
XML タグをつけてから、xml2tex.scm で LaTeX
への変換ルールを定義して作成しました。
→時間が残ってたらデモします。
28
xml2tex.scm のおかげで、XML っぽい原稿から
make いっぱつで印刷用の最終 PDF データを生
成するコンバータが、毎回少しの苦労で作れる。
原稿そのものは Subversion を使って筆者と編
集者とで共有しているので、結果として赤書き
した校正紙ゲラのやり取りはゼロ。
29
デモ
本や出版の話は kshikano@ohmsha.co.jp へ。
それ以外の話は k16.shikano@gmail.com へ。
30

More Related Content

More from Keiichiro Shikano

Sphinxで売り物の書籍を作ってみた
Sphinxで売り物の書籍を作ってみたSphinxで売り物の書籍を作ってみた
Sphinxで売り物の書籍を作ってみた
Keiichiro Shikano
 
脚注をめぐる冒険
脚注をめぐる冒険脚注をめぐる冒険
脚注をめぐる冒険
Keiichiro Shikano
 
ドキュメントシステムはこれを使え2015年版
ドキュメントシステムはこれを使え2015年版ドキュメントシステムはこれを使え2015年版
ドキュメントシステムはこれを使え2015年版
Keiichiro Shikano
 
TeX原稿からEPUBを作りたい
TeX原稿からEPUBを作りたいTeX原稿からEPUBを作りたい
TeX原稿からEPUBを作りたい
Keiichiro Shikano
 
イテレーティブでインクリメンタルな技術書の作り方
イテレーティブでインクリメンタルな技術書の作り方イテレーティブでインクリメンタルな技術書の作り方
イテレーティブでインクリメンタルな技術書の作り方
Keiichiro Shikano
 
TUG 2014 参加体験記
TUG 2014 参加体験記TUG 2014 参加体験記
TUG 2014 参加体験記
Keiichiro Shikano
 
xml2tex at TUG 2014
xml2tex at TUG 2014xml2tex at TUG 2014
xml2tex at TUG 2014
Keiichiro Shikano
 
Index makes your book perfect
Index makes your book perfectIndex makes your book perfect
Index makes your book perfect
Keiichiro Shikano
 
Texuser 2012-lt
Texuser 2012-lt Texuser 2012-lt
Texuser 2012-lt
Keiichiro Shikano
 
多値で簡単パーサーコンビネーター
多値で簡単パーサーコンビネーター多値で簡単パーサーコンビネーター
多値で簡単パーサーコンビネーター
Keiichiro Shikano
 
オーム社開発部がTeXを使う3つのおもな理由
オーム社開発部がTeXを使う3つのおもな理由オーム社開発部がTeXを使う3つのおもな理由
オーム社開発部がTeXを使う3つのおもな理由
Keiichiro Shikano
 

More from Keiichiro Shikano (13)

Sphinxで売り物の書籍を作ってみた
Sphinxで売り物の書籍を作ってみたSphinxで売り物の書籍を作ってみた
Sphinxで売り物の書籍を作ってみた
 
脚注をめぐる冒険
脚注をめぐる冒険脚注をめぐる冒険
脚注をめぐる冒険
 
ドキュメントシステムはこれを使え2015年版
ドキュメントシステムはこれを使え2015年版ドキュメントシステムはこれを使え2015年版
ドキュメントシステムはこれを使え2015年版
 
TeX原稿からEPUBを作りたい
TeX原稿からEPUBを作りたいTeX原稿からEPUBを作りたい
TeX原稿からEPUBを作りたい
 
イテレーティブでインクリメンタルな技術書の作り方
イテレーティブでインクリメンタルな技術書の作り方イテレーティブでインクリメンタルな技術書の作り方
イテレーティブでインクリメンタルな技術書の作り方
 
TUG 2014 参加体験記
TUG 2014 参加体験記TUG 2014 参加体験記
TUG 2014 参加体験記
 
xml2tex at TUG 2014
xml2tex at TUG 2014xml2tex at TUG 2014
xml2tex at TUG 2014
 
Csspage1 2014-06-22
Csspage1 2014-06-22Csspage1 2014-06-22
Csspage1 2014-06-22
 
Index makes your book perfect
Index makes your book perfectIndex makes your book perfect
Index makes your book perfect
 
Our docsys-pyfes-2012-11
Our docsys-pyfes-2012-11Our docsys-pyfes-2012-11
Our docsys-pyfes-2012-11
 
Texuser 2012-lt
Texuser 2012-lt Texuser 2012-lt
Texuser 2012-lt
 
多値で簡単パーサーコンビネーター
多値で簡単パーサーコンビネーター多値で簡単パーサーコンビネーター
多値で簡単パーサーコンビネーター
 
オーム社開発部がTeXを使う3つのおもな理由
オーム社開発部がTeXを使う3つのおもな理由オーム社開発部がTeXを使う3つのおもな理由
オーム社開発部がTeXを使う3つのおもな理由
 

Recently uploaded

20240717_IoTLT_vol113_kitazaki_v1___.pdf
20240717_IoTLT_vol113_kitazaki_v1___.pdf20240717_IoTLT_vol113_kitazaki_v1___.pdf
20240717_IoTLT_vol113_kitazaki_v1___.pdf
Ayachika Kitazaki
 
"ros2rapper", Hardware implimentation of ROS2 communication Protocol without ...
"ros2rapper", Hardware implimentation of ROS2 communication Protocol without ..."ros2rapper", Hardware implimentation of ROS2 communication Protocol without ...
"ros2rapper", Hardware implimentation of ROS2 communication Protocol without ...
たけおか しょうぞう
 
Matsuo-Iwasawa Lab. | Research unit Introduction
Matsuo-Iwasawa Lab. | Research unit IntroductionMatsuo-Iwasawa Lab. | Research unit Introduction
Matsuo-Iwasawa Lab. | Research unit Introduction
Matsuo Lab
 
最速の組織を目指して全社で大規模スクラムを導入してみた話 #dxd2024 #medicalforce
最速の組織を目指して全社で大規模スクラムを導入してみた話 #dxd2024 #medicalforce最速の組織を目指して全社で大規模スクラムを導入してみた話 #dxd2024 #medicalforce
最速の組織を目指して全社で大規模スクラムを導入してみた話 #dxd2024 #medicalforce
chisatotakane
 
LoRaWAN AI Image Sensorエンドデバイス AIG01カタログ
LoRaWAN AI Image Sensorエンドデバイス AIG01カタログLoRaWAN AI Image Sensorエンドデバイス AIG01カタログ
LoRaWAN AI Image Sensorエンドデバイス AIG01カタログ
CRI Japan, Inc.
 
論文紹介:BAM-DETR: Boundary-Aligned Moment Detection Transformer for Temporal Sen...
論文紹介:BAM-DETR: Boundary-Aligned Moment Detection Transformer for Temporal Sen...論文紹介:BAM-DETR: Boundary-Aligned Moment Detection Transformer for Temporal Sen...
論文紹介:BAM-DETR: Boundary-Aligned Moment Detection Transformer for Temporal Sen...
Toru Tamaki
 
論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...
論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...
論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...
Toru Tamaki
 
【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models
【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models
【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models
Sony - Neural Network Libraries
 
Imitation learning for robotics 勉強会資料(20240701)
Imitation learning for robotics 勉強会資料(20240701)Imitation learning for robotics 勉強会資料(20240701)
Imitation learning for robotics 勉強会資料(20240701)
Natsutani Minoru
 
Matsuo-Iwasawa lab. Research Unit Introduction
Matsuo-Iwasawa lab. Research Unit IntroductionMatsuo-Iwasawa lab. Research Unit Introduction
Matsuo-Iwasawa lab. Research Unit Introduction
Matsuo Lab
 
Developer IO 2024 Odyssey SAMを応用したコンピュータビジョンの話
Developer IO 2024 Odyssey  SAMを応用したコンピュータビジョンの話Developer IO 2024 Odyssey  SAMを応用したコンピュータビジョンの話
Developer IO 2024 Odyssey SAMを応用したコンピュータビジョンの話
Shinichi Hirauchi
 
【JSAI2024】J-NER大規模言語モデルのための固有表現認識における拡張固有表現階層を考慮したベンチマークデータセット.pdf
【JSAI2024】J-NER大規模言語モデルのための固有表現認識における拡張固有表現階層を考慮したベンチマークデータセット.pdf【JSAI2024】J-NER大規模言語モデルのための固有表現認識における拡張固有表現階層を考慮したベンチマークデータセット.pdf
【JSAI2024】J-NER大規模言語モデルのための固有表現認識における拡張固有表現階層を考慮したベンチマークデータセット.pdf
ARISE analytics
 
Matsuo-Iwasawa Lab. Research unit Introduction
Matsuo-Iwasawa Lab. Research unit IntroductionMatsuo-Iwasawa Lab. Research unit Introduction
Matsuo-Iwasawa Lab. Research unit Introduction
Matsuo Lab
 
Kyndryl Developer Services のご紹介 2024年7月
Kyndryl Developer Services のご紹介  2024年7月Kyndryl Developer Services のご紹介  2024年7月
Kyndryl Developer Services のご紹介 2024年7月
Takayuki Nakayama
 
【AI論文解説】クラスタリングベースアプローチによる大規模データセット自動キュレーション
【AI論文解説】クラスタリングベースアプローチによる大規模データセット自動キュレーション【AI論文解説】クラスタリングベースアプローチによる大規模データセット自動キュレーション
【AI論文解説】クラスタリングベースアプローチによる大規模データセット自動キュレーション
Sony - Neural Network Libraries
 

Recently uploaded (15)

20240717_IoTLT_vol113_kitazaki_v1___.pdf
20240717_IoTLT_vol113_kitazaki_v1___.pdf20240717_IoTLT_vol113_kitazaki_v1___.pdf
20240717_IoTLT_vol113_kitazaki_v1___.pdf
 
"ros2rapper", Hardware implimentation of ROS2 communication Protocol without ...
"ros2rapper", Hardware implimentation of ROS2 communication Protocol without ..."ros2rapper", Hardware implimentation of ROS2 communication Protocol without ...
"ros2rapper", Hardware implimentation of ROS2 communication Protocol without ...
 
Matsuo-Iwasawa Lab. | Research unit Introduction
Matsuo-Iwasawa Lab. | Research unit IntroductionMatsuo-Iwasawa Lab. | Research unit Introduction
Matsuo-Iwasawa Lab. | Research unit Introduction
 
最速の組織を目指して全社で大規模スクラムを導入してみた話 #dxd2024 #medicalforce
最速の組織を目指して全社で大規模スクラムを導入してみた話 #dxd2024 #medicalforce最速の組織を目指して全社で大規模スクラムを導入してみた話 #dxd2024 #medicalforce
最速の組織を目指して全社で大規模スクラムを導入してみた話 #dxd2024 #medicalforce
 
LoRaWAN AI Image Sensorエンドデバイス AIG01カタログ
LoRaWAN AI Image Sensorエンドデバイス AIG01カタログLoRaWAN AI Image Sensorエンドデバイス AIG01カタログ
LoRaWAN AI Image Sensorエンドデバイス AIG01カタログ
 
論文紹介:BAM-DETR: Boundary-Aligned Moment Detection Transformer for Temporal Sen...
論文紹介:BAM-DETR: Boundary-Aligned Moment Detection Transformer for Temporal Sen...論文紹介:BAM-DETR: Boundary-Aligned Moment Detection Transformer for Temporal Sen...
論文紹介:BAM-DETR: Boundary-Aligned Moment Detection Transformer for Temporal Sen...
 
論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...
論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...
論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...
 
【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models
【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models
【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models
 
Imitation learning for robotics 勉強会資料(20240701)
Imitation learning for robotics 勉強会資料(20240701)Imitation learning for robotics 勉強会資料(20240701)
Imitation learning for robotics 勉強会資料(20240701)
 
Matsuo-Iwasawa lab. Research Unit Introduction
Matsuo-Iwasawa lab. Research Unit IntroductionMatsuo-Iwasawa lab. Research Unit Introduction
Matsuo-Iwasawa lab. Research Unit Introduction
 
Developer IO 2024 Odyssey SAMを応用したコンピュータビジョンの話
Developer IO 2024 Odyssey  SAMを応用したコンピュータビジョンの話Developer IO 2024 Odyssey  SAMを応用したコンピュータビジョンの話
Developer IO 2024 Odyssey SAMを応用したコンピュータビジョンの話
 
【JSAI2024】J-NER大規模言語モデルのための固有表現認識における拡張固有表現階層を考慮したベンチマークデータセット.pdf
【JSAI2024】J-NER大規模言語モデルのための固有表現認識における拡張固有表現階層を考慮したベンチマークデータセット.pdf【JSAI2024】J-NER大規模言語モデルのための固有表現認識における拡張固有表現階層を考慮したベンチマークデータセット.pdf
【JSAI2024】J-NER大規模言語モデルのための固有表現認識における拡張固有表現階層を考慮したベンチマークデータセット.pdf
 
Matsuo-Iwasawa Lab. Research unit Introduction
Matsuo-Iwasawa Lab. Research unit IntroductionMatsuo-Iwasawa Lab. Research unit Introduction
Matsuo-Iwasawa Lab. Research unit Introduction
 
Kyndryl Developer Services のご紹介 2024年7月
Kyndryl Developer Services のご紹介  2024年7月Kyndryl Developer Services のご紹介  2024年7月
Kyndryl Developer Services のご紹介 2024年7月
 
【AI論文解説】クラスタリングベースアプローチによる大規模データセット自動キュレーション
【AI論文解説】クラスタリングベースアプローチによる大規模データセット自動キュレーション【AI論文解説】クラスタリングベースアプローチによる大規模データセット自動キュレーション
【AI論文解説】クラスタリングベースアプローチによる大規模データセット自動キュレーション
 

Gaucheで本を作る