技術書典10 – 【技術書を自作PDFリーダーで読む(2)】の予告と書籍アップデート

技術書典10

技術書典9が開催される中、もう次のイベント(技術書典10)が予定されているみたいです。
私が知らなかっただけなのですが、12月開催予定とのこと。
なので、気が早いかもですが自分も予定を立ててみました。

第1巻の更新

第2巻の前に、第1巻を更新しましたので案内します。追加内容は以下のとおりです。

  • WindowsインストールについてWSL2周り
  • 参考文献へのクレジット(書いてなくてすいませんでした)
  • Agdaの参考文献、動画
  • 参考文献(もともと電子で持っていた文献と、技術書典9で購入したものを追記)
  • 第二巻の予告
  • MacOSへの対応(仮想環境以外でのインストール方法に言及)

poppySBookVol1_gisho9_20200921Ver4.pdfというファイルに差し替わる予定です。

GUIを一からつくる

今回の第1巻は、不思議な読書体験がメインでHaskellプログラム分が20%程度と少なかったです。
次回(第2巻)は、今あるPDFリーダーを一からどう組んでいくか、をネタにしようと計画しています。
最低でも画像を表示してキーボードかマウスクリックでページ送り、理想的には単語をクリックしたら対応する位置の色が変わるところまでは持っていきたいです。
極力、ブラックボックス(私の手製の関数云々。使うにしても説明をする)はない状態で進めます(文字の座標情報は鬼門なのでブラックボックス化するかもですが)。

GUI作成はプログラミングした結果が目に見えてわかるのでキャッチーで面白いです。プログラミングを勉強するモチベーションになります。
さらに、画像の位置情報をもとにインタラクティブになにかできる、というスキルを持っておくといろいろ役に立ちます。
文章をクリックしたら該当箇所のS式構造がポップアップでPDFリーダー上に表示されるとか、そういうのも簡単に実装できるようになります。
自分でチューニングすると、効率もそうですが面白さが全然違ってきます。

本書ではGtkというLinuxのGUIでも採用されているGUIライブラリ(もともとはGimpという画像編集ソフトのGUI)を利用しています。汎用性の高いスタンダードなものです。
もともとはCで書かれていて、他言語はそれを操作するFFIを持っているという感じです。対応している言語は多いです。
なのでHaskellでGtkを覚えた知識は他言語でGtkをやる際にも無駄にならないです。
また、GtkはHaskellの各GUIライブラリのなかでは手厚いサポートがなされているものになります。

長くなりましたが、次回はこのあたりにフォーカスしていきますのでよろしくおねがいします。
物理本にも挑戦してみたいです。

高度なA.I.云々

上のGUIがあくまでメインですが、名詞句を自動で抽出する、みたいな実験は個人的に興味があるので進めています。
それっぽい関数は作成済みで、なにか結果が出そうなので、そちらも載せる予定です。

Haskellプログラミングの基礎

この4連休でプロットは作成してしまおうと思っています。
今は初日で、プログラミングを知らない人が一からHaskellプログラミングを習得しようとした際に、モチベーションが続きつつ、しっかりと学べるネタを思案していました。
キャッチーなのはExcelファイルを読み込んでゴリゴリ、見たいのもいいかなって一瞬思いました(Haskellの作り手のSimon Peyton Jones氏もExcelの作り手ですし。そのあたりネタにできるかなと)。
しかし、PDFリーダーをネタにしているのだから、PDFだろうと初心に返りました。文字列をゴニョゴニョする。そこからスタートしたら、Haskellというか、プログラミングの基本(データフロー)まわりがやれそうな感ありでした。delimiterを使って文章を分ける方法も、素直なfold, トリッキーなmap, takeWhileと再帰、といった複数の実装でまとめて説明できそうとわかり、ホクホクしています。エクセルも出てきます(リストの説明とmap, foldはエクセルで説明します)。また、ヒストグラムとかそういう簡単なやつをやればsortByとか便利な高階関数を扱えて、最低限、データをparseする準備は整いそうです。結構ネタに困るかと思いましたが思ったより楽に書けそうです。

目次(仮)

  1. Haskellの基本
    0.1 PDFからのテキストの抽出
    0.2 Haskellらしい関数でテキストを自在に加工
    0.3 統計処理とか機械学習とか

  2. 一から作るGUI
    1.1 必須事項
    1.1.1 HelloWorld的なものの説明(Gtkの構成をざっくりと)
    1.1.2 なにか画像を写すキャンバスの用意
    1.1.3 IORefの説明をざっくりと
    1.1.4 PDFファイルの読み込み
    1.1.5 ページ送り(KeyPressEventなど)
    1.2 追加事項
    1.2.1 特定の単語の着色(ソース直書きでの設定)
    1.2.2 特定の単語の着色(ファイル読み込みでの設定(IO))
    1.2.3 特定の単語の着色(文書の文字のクリック)
    1.2.3.1 PDFファイルから座標情報を抽出
    1.2.3.2 クリック位置と上記座標情報のヒモ付け

  3. 関数型プログラミングの可能性
    2.1. 置換可能性、変換からの類別化

目次は上のようなのを考えてます。

表紙も凝ったものを作りたいです。次回はキノコでなくサボテンにするとか、黒でなくピンクにするとか。
表紙に関する技術書もいろいろ新刊が出ています。

サークル味噌とんトロ定食の表紙の作り方、考え方。(味噌とんトロ定食著)
Affinity Suite(*PetitBrain著)

私は上の2つを購入しました。門外漢な分野なのでこれを機にいろいろ学びたいところです。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする