ごらくらいふ

プログラミングしたりゲームしたり

知的生産の技術(著:梅棹忠夫)を読んだ

本について

1969年初版の本である。50年ほど前、半世紀ほども前の本だ。

本書との出会い

メモアプリとして、 Obsidian というアプリケーションを勧められたことから始まる。

これの機能のひとつに、「ZettelKasten IDを付与してノートを作成する」 というものがあった。 このZettelKastenとは何だろうと検索したところ、GIGAZIENの記事(効率的なノートを作成できるドイツの社会学者が生み出した方法「Zettelkasten」とは? - GIGAZINE)が見つかった。

ZettelKastenとは、おおまかな理解で言うと「カード」という単位で一つの知識を書き込み、無数のカード間でリンクを作ることで蓄積とあらたな発見を見出して更に知識を生み出そう、というものと理解している。

で、件の記事のブコメを眺めていたところ、日本でも類似の技術があるというコメントがあった。

効率的なノートを作成できるドイツの社会学者が生み出した方法「Zettelkasten」とは? - GIGAZINE

日本では「知的生産の技術」によって五十年前に発明されていたやつ

2020/06/04 10:49
b.hatena.ne.jp

ZettelKasten について試してみたいと思っていたが、日本語でのちょうどよい情報資源があまり見つけられなかったので、それでは類似の技術を調べてみようと本書を手にとったのだった。

何が書かれているか

知的生産とはなにか・情報の生産に関する価値がいかに高まっているか という話にはじまり、知識の生産や整理のための(本書をよむ目的となった)京大型カードの話や、 本の読み方 、整理の仕方、タイプライターはいいぞという話、日記の書き方から原稿の書き方、果ては文章の書き方にまで言及されている。

面白かったこと

現代における情報の重要さ・扱われ方についての言及に違和感がなく、当時の年代を思えば、まるで未来視しているように思えた。

たとえば、プログラミング技術が、個人としてのもっとも基礎的な技能となる というもの。 2020年から(令和2年度から)小学校でプログラミング教育が必修化された。これはまさに、個人の基礎的な技能になりつつある証だろう。

【事務連絡】小学校プログラミング教育に関する取組について(周知)

また、コンピューターの操作が人間の最低の素養になると予想していた。 これはそういう時代が来たと言っていいだろう。老若男女ことごとくの手元に、スマートフォンがある。

総務省|令和2年版 情報通信白書|情報通信機器の保有状況 によれば、 2019年の段階で8割を超える世帯でスマートフォンが存在しているし、スマートフォン保有している個人は国民の6割を超えているという。

氏が予想として想像しきっていたのか、あるいは読者がそのように導いたのかもしれない。と考えて面白がっていた。

もうひとつ目を引いたのは、日本語をひらがなだけで書こう。タイプライターで書こうというものだった。

自分の聴く Podcast Rebuild.fmのゲストに Naoki Hiroshima さん という方がいる。 Naoki Hiroshima さんは、日本語を使うときは"ひらがな"をつかう、ひらがなせいかつをしている。

ここに共通点があるのかどうかと興味が湧いて読んだのだった。

(読み終えた感想としては、ひらがなを使う動機が異なっていそうだな。というところ。 梅棹忠夫氏がひらがなタイプライターに至ったのは、"手書きで日本語を書いたのでは遅すぎる"、"文字の美醜で何かを評価されたくない"というところにあるように思う。 当時、文字を手書きより素早く出力できる手段にタイプライターがであったがゆえに、「タイプライターを使え。ひらがな だけもやむなし」 ということのようだった。

仮に、梅棹忠夫氏の手元に現代のPCがあったなら、漢字も込みで使い続けただろうか。あるいはIMEの変換すら煩わしくなって ひらがな だけを使うようになっただろうか、などと思いを馳せて面白く思った。)

繋がりを見つけられそうな本

過去に一度読んだ「荒木飛呂彦の漫画術」には、アイデアノート・身上調査書・世界観のためのリサーチという技術が登場する。 これらとの共通項を拾い上げて Obsidian ノート を発展させようと思う。

また、梅棹忠夫氏の存命中にワープロだとかは出たはずで、なにか関連したものはあるかと検索したらドンピシャな本が見つかった。 目次にはタイプライター章と、その章の終わりに「ことはおわった」「ワープロの出現」とある。ある種の答え合わせになりそうで、これは楽しみだ。

SHINY COLORS 3rd LIVE TOKYO公演 のレポート記事を読む

シャニマス 3rd LIVE TOKYO公演 をこじらせてアーカイブを周回するだけでは飽き足らず、各社のレポート記事を読み漁ってしまった。 レポート記事のフォーマットはある程度固まってはいるものの、媒体の方向性によって構成から差異があるのは面白かった。

公演直後の記事ではセットリストを時系列に紹介していくようになっていて、コメントは一行スッと差し込む程度になっているものが多かった。 特徴的なのは声優グランプリで、1日目の紹介のみかつ、ソロとアンコールに比重を置いたものとなっていた。媒体の方向性が視えるというのは主にこの部分。

画像については各社同じで、同一の資料が提供されているのだな、という気づきを得た。

緊急事態宣言の影響に言及しているのはまちまちだった。 後発の記事なだけあって、リスアニ!の記事は情緒的な表現に富んでいた。

各社の記事を読んで構成を箇条書きにしてみた

続きを読む

ボツ案: 同じ内容で、ファイル名が連番のファイルを作成する

zenn に1件記事を書いた。 記事に仕立てようと調べていく内にコマンドの内容が変わっていったので、その供養記事。

zenn.dev

決定稿 (2021-05-04 に zenn.dev へ投稿したもの)

cd /path/to/diary/2021/05
seq -f '%02g.md' 1 31 | xargs -n 1 cp /path/to/template
# 01.md ~ 31.md が生成される

決定稿^

cd /path/to/diary/2021/05
seq -f '%02g' 1 31 | sed -e 's/$/.md/' | xargs -n 1 cp /path/to/template
# 01.md ~ 31.md が生成される
  • sedを使って拡張子を追加していた

決定稿^^

日記ではなく、コンテストを題材にしていた。 01.rs だけが存在していて、問題の数だけ複製しようと試みた。

cd /path/to/contest/src
# 01.rs だけは存在している
paste <(seq -f '%02g' 1 19 | sed -e 's/$/.rs/') <(seq -f '%02g' 2 20 | sed -e 's/$/.rs/') | (while read from to
do
  cp $from $to
done)

01.rs02.rs に、 02.rs03.rs にという発想だった。

同じ内容で良いのだから、前後の番号を意識する必要はないという気づきを得てボツに。面倒くさいし。

Hello Deno

退屈を感じていたので、名前だけは聞いていた Deno を触ってみた。

https://deno.land/

今回、公式サイトトップを眺めながら hello world まで触っただけの完全に雑多なメモ。

Deno とは

  • JavaScript TypeScript のランタイムである
  • セキュアなランタイムである
    • 明示的に有効にしない限り、ファイル・ネットワーク・環境へのアクセスが不可

Deno のインストール

Deno は単一の実行可能バイナリが配布される。

Ubuntu on WSL2 の環境にインストールを試みる。 シェル環境においては、インストールスクリプトを実行すればよい。

curl -fsSL https://deno.land/x/install/install.sh | sh

Oops !!

unzip コマンドが必要だったが、環境に存在していなかった。

Error: unzip is required to install Deno (see: https://github.com/denoland/deno_install#unzip-is-required).

unzip をインストールした。ついでにzipも。

sudo apt install unzip zip

PATHを通す

export DENO_INSTALL="$HOME/.deno"
export PATH="$DENO_INSTALL/bin:$PATH"

フォーマッターや各種ツールが一つのバイナリにまとまっていて、それでなお 72MB ほどというので、キュッと収まっている印象がある。

Getting Started

deno run https://deno.land/std/examples/welcome.ts
# Download https://deno.land/std/examples/welcome.ts
# Warning Implicitly using latest version (0.90.0) for http://deno.land/std/examples/welcome.ts
# Download https://deno.land/std@0.90.0/examples/welcome.ts
# Check https://deno.land/std/examples/welcome.ts
# Welcome to Deno!

deno runでそのままスクリプトを実行できるらしい。 インストールスクリプトcurlで取って shに 流しておいて言うのもなんだが、ちょっと緊張する。 だからこそ、ファイルやネットワークや環境へのアクセスはデフォルトで遮断してあるのだなと実感した。

Downloadの部分はそのまま素直に受け取っていいだろう。 Checkはよくわからない。

スクリプトの内容は素直。

console.log("Welcome to Deno!");

再実行したら、スクリプト本体によるWelcome to Deno!だけが出力された。 スクリプトはキャッシュされるらしい。

ドキュメント

モジュールはネットワーク上にある

  • Node.js では npm を使ってパッケージをローカルに取得し、名前の解決をNode.jsに任せて import していた
  • Deno では モジュールの所在を URL で指定する
  • 標準のモジュールでさえ、インターネット上で配布されている
    • それは監査済みである、とのこと

感想

node.jsを触ったときのように、TypeScriptのコードを書いてdenoでさっと実行できるのは手軽になってよい。 eslintを足したりpretterを入れたり、@typesを入れたりと、そういう手間がなくなった。

モジュールにどう依存してるかが import 文の URL しかないので、 dependabot が仕事しにくくなりそう。 いや、grepして最新と突き合わせるだけか?

調べたいこと

  • std module さえ無い状態でできることの確認
  • stdinとstdoutの扱い方
    • とりあえずこれさえ押さえれば、何かしら使える

posh-gitを導入した

Windows + PowerShell環境におけるGitの使い勝手を改善したくなり、posh-gitを導入した。

手順

repositoryの取得

2021/02/17時点において、posh-gitの v1 はまだ beta らしい。 v1未満のバージョンも、v1のbetaも不安定であることに変わりはないので、repositoryを取得し、masterの最新コミットを使うことにした。

# 自分は `ghq` コマンドを愛用している。
ghq get https://github.com/dahlbyk/posh-git.git

下準備

  • posh-git v1 は PowerShell 5.x、または PowerShell Core 6.0 が必要らしい。バージョンの確認は $PSVersionTable.PSVersion を見ればよい。
  • Windowsではスクリプトの実行ポリシーが RemoteSignedUnrestricted である必要がある。確認は Get-ExecutionPolicy を実行すればよい。
  • git コマンドが環境変数 PATH から参照できなくてはいけない。

Profileへの反映

posh-git は、カレントパスの出力やサフィックスをよしなにやってくれる prompt を標準で用意しているらしいが、自分好みの prompt を定義することもできる。

posh-git に求めているのは git の情報を出力することだけなので、 Write-VcsStatus を拝借すればよさそうだった。

Import-Module \path\to\posh-git-repo\src\posh-git.psd1
function prompt {
    $prompt = ""
    $prompt += "(*-w-) [$(Split-Path (Get-Location) -Leaf)]"
    $prompt += Write-VcsStatus
    $prompt += " > "
    if ($prompt) { "$prompt" } else { " " }
}

f:id:yajamon:20210217225941p:plain

Good.

参考リンク

RSS 0.91の仕様書を読んだというメモ

ウン年前にPHPRSS Readerを作ったことを思い出した。 当時はWebサービスで、今度はiOSアプリケーションにでもしてやろうと思う。

これにあたって、RSSの仕様書をちゃんと読んでみようと考えた。 RSSは諸々分岐していることをWikipediaから知り、RSS 2.0 -> 0.92 -> 0.91 と元にしているバージョンが連なっているようだった。

RSSはXML1.0 で記述されているとのこと。 アプリケーション内で表現するにあたって、まずは構造を把握しようと試みた。 文字列の長さに関する規定などが個別にあるようだが、それらは一旦後回しとした。

RSS 0.91 の構造を手元に書き写した

  • rootに <rss> を持つ
  • <rss>は単一の要素 <channel> を持つ
  • <channel>の必須要素
    • <title>
    • <link>
    • <description>
    • <language>
    • <image>
  • <channel>のオプショナル要素
    • <copyright>
    • <managingEditor>
    • <webMaster>
    • <rating>
    • <pubDate>
    • <lastBuildDate>
    • <docs>
    • <textInput>
    • <skipDays>
    • <skipHours>
  • <image>は以下の必須要素を持つ
    • <url>
    • <title>
    • <link>
  • <image>は以下のオプショナル要素を持つ
    • <width>
    • <height>
    • <description>
  • <channel>は複数の<item>を持つ
  • <item>は以下の要素を持つ
    • <title>
    • <link>
    • <description>

参考URL

エクスポートしたKindle note HTMLをmarkdownに変換するコマンドを作った

Kindleには自分のハイライトをエクスポートする機能がある。 マイノートからシェアボタンを押すと、メモをHTML化した上でメール送信できる。

このHTMLを、必要な分だけ抽出してmarkdownにするコマンドを作った。

github.com

自分のメモを共有したい。ブログに載せたい。 しかもmarkdownの形式になっていると助かる。

実践例:

yajamon.hatenablog.com