書くときのメモとかスクリプトとか
- クラス名とかは
`
で囲う - 英単語は半角 space を両サイドに入れる
x 気づく
o 気付く
x いろんな
x 色んな
o 色々な
x いろいろな
、
を使う
。
は使わない
太字 は使わない
太くしなくても読みやすい文体文量にする
同じ理由で 「 」 も多用しない
発言や独白に限定する
言語ハイライトは可能な限りファイル名を表示する
```haskell:main.hs
main = do
putStr "hello"
putStrLn "world"
```
main = do
putStr "hello"
putStrLn "world"
diff の場合は diff と言語指定とファイル名指定を全部やる
```diff haskell:main.hs
main = do
- putStr "hello"
+ putStr "hey"
putStrLn "world"
```
main = do
- putStr "hello"
+ putStr "hey"
putStrLn "world"
diff の場合は一律で行頭に space x 2 を入れて、-
か+
を置換で入れる
以下の様なインデントずれを避けるため
main = do
- putStr "hello"
+ putStr "hey"
putStrLn "world"
自分の記事の todo は fixme で残す
todo は文章やサンプルコードで実際に使いたいから
grep fixme -i -w ./*
とかで適当に管理
url はベタ貼りにしたので^http
の正規表現で見つけられるはず
機械的に探してリンク切れとか確認するスクリプト作ると良さげ
- markdown 形式を撲滅したら試す
見出しの確認が cli プレビューだとちょっと違う感じなので
どうせならと行数目安も数えることにした
驚くくらい適当に
python が 27 なのは単純に慣れているから
import itertools
def dw(word, lines):
return itertools.dropwhile(lambda line: not line.startswith(word), lines)
def read(path):
with open(path, 'r') as f:
return f.read().splitlines()
chapters = [line.replace('- ', '').strip() for line in dw('chapters:', read('./config.yaml')) if not line.strip().startswith('#') and line.strip() != ''][1:]
for chapter in chapters:
lines = read(chapter)
body = dw('#', lines)
print '\n---------- ' + lines[1].split('"')[1] + ' ----------'
count = 0
for line in body:
if line.startswith('#'):
print '.\n' * (count / 5)
print line
count = 0
else:
count += 1
$ python /tmp/index.py
---------- この本について ----------
# 想定する人
# 内容
.
.
# 次の章
---------- xxx するには ----------
# 仕様
.
.
## tips 他には
# 目的 / 目標を定める
.
.
.
.
---------- 構築する ----------
# 絵で整理
.
.
## 1. xxx
.
## 2. xxx
.
.
.
## 3. xxx
.
.
## 4. xxx
.
.
---------- おわりに ----------
# まとめ
使って気に入ったらもう少し真面目に作るかも
ターミナルスクロールだと見通し悪すぎる
収集する##
の深さとか決めたりとか
x 下さい
o ください
なんとなく ruby で ( 素人 )
標準出力しても見辛いので .md ファイルを吐き出した
config.yaml に入れなければ公開されないけど cli のプレビューで閲覧できるので都合が良い
5 行ごとに ● で文字数感を確認する line-summary.md と、画像かリンクだけを抜粋した link-summary.md ができる
chapters = File.read('./config.yaml')
.split("\n")
.reverse
.take_while { |line| !line.start_with?('chapters') }
.reverse
.select { |line| !line.strip.start_with?('#') }
.collect { |line| line.strip.gsub('- ', '') }
link_summary = []
line_summary = []
for chapter in chapters do
lines = File.read(chapter).split("\n")
header = lines.reverse.drop_while { |line| line != '---' }.reverse
title = '# ' + header.select { |line| line.start_with?('title') }[0].split('"')[1]
body = lines.reverse.take_while { |line| line != '---' }.reverse
link_summary.push title
line_summary.push title
sub_title_line_numbers = body.collect.with_index { |line, n| [line.start_with?('#'), n] }.select { |b, _| b }.collect { |_, n| n }
for s, e in sub_title_line_numbers.zip(sub_title_line_numbers.drop(1)) do
e = body.size if e == nil
paragraph = body.slice(s .. e - 1)
link_summary.push '#' + paragraph[0]
line_summary.push '#' + paragraph[0]
paragraph.select { |line| line.start_with?('http') || line.start_with?('![') }.each { |line| link_summary.push line }
line_summary.push "●\n" * [1, paragraph.select { |line| !line.start_with?('http') && !line.start_with?('![') }.size / 5].max
end
end
File.write('./link-summary.md', link_summary.join("\n"))
File.write('./line-summary.md', line_summary.join("\n"))
まぁまぁいんでねか
link-summary.md
line-summary.md
o ひとり
x 一人
x 独り
あー、単語一通り溜まったら grep でチェックするか
〜〜 は使わない
xx で統一
ng: 〜〜の場合は
ok: xx の場合は
x 二つ
o 2 つ
x あいう(えお)です
x あいう(えお)です
o あいう ( えお ) です
慣れれば気にしすぎなくてもだいたい守れるはず
それを逸脱するほどはやらない
x できる
o 出来る
言う ?
いう ?
時 ?
とき ?
他 ?
ほか ?
など ?
等 ?
などかなー?
箇条書きを効果的に使う
あいうえおあいうえおは「かきくけこかきくけこ」や「さしすせそさしすせそ」や「たちつてとたちつてと」といったメリットがあります
あいうえおあいうえおのメリットは以下の通りです
- かきくけこかきくけこ
- さしすせそさしすせそ
- たちつてとたちつてと
/
あんま使わない
x scala / scalatest
o scala と scalatest
x github
o GitHub
基本小文字は使わないもんなのかなー
x scala
o Scala
x java
o Java
php はよく迷う
PHP ?
生成物は除外
grep fixme -i -w --exclude 'link-summary.md' --exclude 'line-summary.md' ./*
grep -e 気づく -e いろんな -e 色んな -e 色々な -e いろいろな -e 。 -e '\*\*' -e 「 -e 一人 -e 独り -e 〜 -e 一つ -e 二つ -e 三つ -e 出来る -e '/' -e github --exclude 'link-summary.md' --exclude 'line-summary.md' ./* | grep -v http | grep -v '//'
出過ぎるので分解しよ...
あとやっぱどうしても章順になってないとめんどくさい
除外しないで消せばいっか
こんなんで
何となく あいうの様に は開きたくない気持ち
grep 気づく ./*.md
grep いろんな ./*.md
grep 色んな ./*.md
grep 色々な ./*.md
grep 。 ./*.md
grep 独り ./*.md
grep 一人 ./*.md
grep 一つ ./*.md
grep 二つ ./*.md
grep 三つ ./*.md
grep 〜 ./*.md
grep ( ./*.md
grep ) ./*.md
grep 出来る ./*.md
grep 時 ./*.md
grep 事 ./*.md
grep 他 ./*.md
grep 等 ./*.md
grep github ./*.md | grep -v http
grep java ./*.md | grep -v '```'
grep scala ./*.md | grep -v '```'
grep kotlin ./*.md | grep -v '```'
grep swift ./*.md | grep -v '```'
grep haskell ./*.md | grep -v '```'
grep rust ./*.md | grep -v '```'
grep fixme ./*.md
x あんまり
o あまり
x 後
o あと
と思ったけど 前 って使うし
o 後
x あと
ruby のやつ
- 見出しの深さを指定して抽出したい
- 本になった時の見出しがみたい
-
●
が縦に出るとやばいので横に出す
.gitignore あとで書く
適当に整えた
- chapter ごとの分量可視化は機能カット
- でかい本を書く頻度が高くないし vi でちょろすれば済むので
- 厳密な日本語チェックはできないので、目検
-
ある時
をあるとき
にしたいけど実行時
とかもひっかかる
-
- そのかわり、色をつけて目検しやすくした
- 英単語は highlight とか url で引っかかりすぎるので検査しない
-
java
とかgithub
とか -
Java
とかGitHub
って書く習慣がついたので良い
-
- 引数がある場合は articles の md 指定と判断して 1 ファイルチェック
- 引数がない場合は books のとあるディレクトリにいると判断して chapter 順に全ファイルチェック
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys, commands, itertools
import defs
def check(path):
print '\n%s' % path
for (black, white) in defs.pairs:
lines = filter(str.strip, commands.getoutput("grep -n '%s' %s" % (black, path)).split('\n'))
for line in lines:
print ' %s → %s' % (line.replace(black, '\033[31m%s\033[0m' % black), '\033[32m%s\033[0m' % white)
def book():
with open('./config.yaml', 'r') as f:
paths = ['config.yaml'] + [line.strip().replace('- ', '') + '.md' for line in itertools.dropwhile(lambda line: 'chapters' not in line, f.read().splitlines()) if line][1:]
for path in paths:
check(path)
def article(path):
check(path)
if __name__ == '__main__':
if len(sys.argv) == 2:
article(sys.argv[1])
else:
book()
#!/usr/bin/python
# -*- coding: utf-8 -*-
pairs = [
('気づく', '気付く'),
('いろんな', 'いろいろな'),
('色んな', 'いろいろな'),
('色々な', 'いろいろな'),
('独り', 'ひとり'),
('一人', 'ひとり'),
('一つ', '1 つ'),
('二つ', '2 つ'),
('三つ', '3 つ'),
('四つ', '4 つ'),
('五つ', '5 つ'),
('ひとつ', '1 つ'),
('ふたつ', '2 つ'),
('みっつ', '3 つ'),
('よっつ', '4 つ'),
('いつつ', '5 つ'),
('(', ' ( '),
(')', ' ) '),
('出来る', 'できる'),
('下さい', 'ください'),
('時', 'とき'),
('事', 'こと'),
('他', 'ほか'),
('等', 'など'),
('あんまり', 'あまり'),
]
よかった
ひとまず終わり
cat config.yaml | ~/Library/Python/2.7/bin/yq -r '.chapters[]' | xargs -Ipage grep '^#' page.md