やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

Python学習用サイトについて考えてみる

Python学習したことを記録するサイトを作りたい。

前回まで

http://ytyaru.hatenablog.com/entry/2017/12/12/000000
http://ytyaru.hatenablog.com/entry/2017/12/14/000000
http://ytyaru.hatenablog.com/entry/2017/12/15/000000
http://ytyaru.hatenablog.com/entry/2017/12/16/000000
http://ytyaru.hatenablog.com/entry/2017/12/17/000000

  • 私はどうすれば快適にプログラミングで問題を解決していけるようになるのか
  • 今はPythonの基礎学習をするのが得策か
  • Python公式ドキュメントをインプットにして学習する
  • 学習したことを自作サイトに記録し、検索できるようにしたい

今回

自分の学習用サイトを作りたい。どうするか。

実装形式

項目
サーバ GitHub Pages, Netlify
実装形式 静的サイトジェネレータ (Pelican)
記述形式 AsciiDoc

HTMLをアップロードするサーバはGitHub PagesNetlifyが良さそう。

GitHubならアップロードも簡単か。容量1GB、通信量100GB/月などの制限あり。What is GitHub Pages? - User Documentation この規模でサイト構成を考える。

静的サイトジェネレータならサーバ側がサービス終了してもデータはローカルに残る。サーバを変更してアップロードできる。複数あるが選ぶのが難しい。

PelicanはPythonで実装されている。ライセンスはAGPL。環境構築にPythonのHowToが使える。何かあったらコードを読めたほうがいい。また、別のコードに流用できるライブラリなどがあるかも知れない。AsciiDocAPIとか。などの理由でPython製がよいか。

Netlify上にPelicanで作成したドキュメントを静的ホスティング - cycle n' craft
Pythonの静的サイトジェネレータ"Pelican"でお手軽にブログをはじめる手順 - Qiita

目的

Python基礎学習。インプットから自分が抱えた疑問(課題)を抽出し、それをコードに書いて記録し検索できるようにしたい。

1記事1課題。1課題1コード。検索にはそれが理想だが、小さすぎる課題を1つずつ見るは面倒。1件ずつ検索できるようにしつつ、関連性の高いものは同時に見たい。課題をどうやって、どれくらいの単位で抽出するかで悩みそう。

記録する方法

記事を探す方法

サイトマップ

  • Home
  • About
  • Archive
  • RSS
  • Search

一般的には上記のような項目がある。今回の目的では以下も欲しい。

  • Environment(実行環境。この環境でやりました。こうして環境構築しました。)
  • Coverage(カバレッジ。学習網羅率。インプット全体から学習した項目の割合)

カバレッジが記事へのリンクになる。学習項目の全体を俯瞰して絞り込み記事へたどり着く。

カテゴリ

カテゴリにより全体を木構造で捉えて記事を絞り込んでいく方法。

カテゴリはインプットに従うべきか。それとも、自分が抽出した課題にすべきか。またはインプットをなぞるだけの記事と、インプットから自分の課題を抜き出して個別に遂行する記事とを分けるか。

  • インプットの1ページ
    • インプットの1項目
      • 課題一覧
        • 個別課題
          • 1記事
            • 1 gist
            • 1 ideone

タグ

  • 主題となるライブラリ名

メタデータ

  • 動作確認した環境
  • 主題となるライブラリ名

関連URL

  • このインプットにあたるURL
  • このインプットから派生した課題一覧
    • この課題の前後にあたる課題

キーワード検索

サイトから全文検索する。

課題の抽出手順

課題はコードとして形に残るものを対象とする。

Python公式ドキュメントをインプットとする。この項目の中からコードとして残る内容がある文書を対象とする。

言語リファレンスライブラリーリファレンスチュートリアルが中心になると思う。

見出し

各ページの見出しをインプットの最小単位とする。

機械的にWebスクレイピングで全ページの全見出しを抽出する。

それをなぞったコードを書くことで学習項目を達成したと判断する。

  • コードが書けない内容の場合もある
    • ステータス未学習とする
    • ステータスを手動で学習済みとする
    • ステータスを手動で学習項目なしとする
    • ステータスを手動で保留とする
  • コードが1つでは収まらない場合もある
    • 手動で複数の学習項目に分割する
    • 1つの学習項目とするが複数のコードを紐付ける

すべてにおいてコードをかけたら学習網羅率100%となる。

課題

見出しから自分が感じた疑問を課題とする。

  • 課題が出ない見出しがある
  • 1つの見出しから1つの課題が出る
  • 1つの見出しから複数の課題が出る

1つの見出しについて課題を洗い出している作業がどの状態であるか。

  • ステータス: 課題は未だ洗い出していない
  • ステータス: 課題を洗い出している最中である
  • ステータス: 課題を洗い出し終えた

別の見出しで解決できる課題が生じそう。それはリンクで表せば解決する。

1記事あたりの表示項目

  • インプットURL
    • 学習項目(見出し)
      • 課題(疑問)
        • コード
  • 実行環境
    • OS
    • ツール
    • Python
      • バージョン
      • ライブラリ

関連リンクで他の記事に移動できるようにしたい。

  • 前後の課題
  • インプットURLから派生した課題一覧
  • インプットURL
  • カバレッジ

パンくずリスト木構造を表現すれば可能か。前後の移動がすばやくできなさそう。

所感

ざっくりとしたイメージだけ。