メルマガを仕上げて本と戯れる日曜日
メルマガ読み返し メルマガ配信予約 ジュンク堂に行きたい 8:00 モーディング・コーディング 朝一に、hey juizを叩いたらエラー。そんなファイルはないぞ、と言われた。 よくよく考えたら今日はもう11月で、ログが保存されるフォルダが10/から11/に変わっていなければならないが、それが存在しない。 Finderで11月のフォルダを作れば即時解決だが、手作業を入れておきたくないので、コードに書いておく。 日付を扱うモジュールの関数として。 1 2 3 4 5 [code] def checkMonth(): mPath = "/Users/Tadanori/Dropbox/dailylog/content/posts/" + ty + "/" + tm if not os.path.isdir(mPath): os.mkdir(mPath) これは月しか扱わないので、年のチェックも必要。別の関数にしてもいいが、どちらにせよ、このコードは毎回の起動時に確認する必要があるから、checkDateとでもして(月替わり、みたいな英語がいいかもしれない)、年と月の両方を確認しておくとよさそう。 1 2 3 4 5 6 7 8 [code] def checkDate(): yPath = "/Users/Tadanori/Dropbox/dailylog/content/posts/" + ty if not os.path.isdir(yPath): os.mkdir(yPath) mPath = "/Users/Tadanori/Dropbox/dailylog/content/posts/" + ty + "/" + tm if not os.path.isdir(mPath): os.
メルマガを書き、冬支度をする土曜日
メルマガ(前半)を書く メルマガ(後半)を書く メルマガ(はじめに)を書く 9:00 おはようございます。今日は土曜日なのでメルマガを書きまくります。 あと月末ですが、それよりも寒さへの備え(ストーブの清掃など)を優先したいですね。 モーニング・コーディング 昨日考えた機能を実装していきましょう。 まず、ファイルが存在するかどうかを確かめます。 pythonでファイルの存在を確認する - Qiita 1 2 3 [code] #ファイルの存在を確認する print(os.path.isfile(fpath)) たぶんこれでいけるでしょう。で、これを使ってIfを書けばOKなはずです。 もしファイルがあるなら、ファイル作成処理をスキップするか、「ファイルがありますが、作成しますか?」を尋ねるか、まったく別の処理に分岐するかすればよいでしょう。 とりあえず、明日はif文を書きます。 あとで読む Exceed Notebook Review Dot Grid Journal at Walmart - Notebook Stories 「Evernote 10.1」iOS向け最新版をリリース。検索結果でオプションを並び替えられるようになるなどの機能追加といくつかの問題点の修正 | moshbox Evernote、素早くノートやスクリーンショットを取れるメニューバー常駐型のコンパニオンアプリ「Evernote Helper」を導入したEvernote for MacをMac App Storeでリリース。 | AAPL Ch. 学術会議問題の核心 菅政権が目指す恐るべき「反知性主義的統制」 最注目の政治学者が特別寄稿 白井聡 - 毎日新聞 10:00 メルマガ(前半)を書きます 今回は読書週間にちなんだ特集号にしようと思います。 * * * 一時間ほどで2000字ちょっと書きました。 11:00 メルマガ(前半)を続けます * * *
シゴタノ!を書く金曜日。
シゴタノ!原稿執筆 『僕らの生存戦略』1000字執筆 NL 1000字執筆 妻の病院付き添い 8:00 本日は金曜日なのでシゴタノ!です。前回の続きとして『独学大全』を読み込んでいく記事になりそうです。 あと本日から、プロジェクトNLを書き始めます。いったい何をどう書けばいいのか全然分かっていませんが、とりあえず何かを書き始めます。 午後からは、妻の病院の付き添いがあるので、午前中に頑張って進めましょう。 作業記録:テンプレート化の拒否 どうせ毎日書くのだからと、たとえば「モーニング・コーディング」の部分も作業記録作成時に自動的に入力させておこうかと思ったけども、昨日はコーディングではなくてリーディング(読書)をしたので、やっぱりテンプレートにしない方がいいなと思った。 リーディングでなくても、ライティングとかランニングとか、いろいろできる。朝一に時間をとって何かをする、ということが大切なのであって、「朝はコーディングをしなければならない」となると、少し違う。 いや、そこまでの強制力はないのだけども、コーディング以外の選択肢があらかじめ抑制されているのはやっぱり「行きすぎ」な気がする。 モーニング・コーディング 行頭に「¥」がついている行は、共有ファイルにはうつさない処理ができたので、次は変換に乗り込んでみます。 まずは、最近よく使っている、Hugoでコードを表示するためのショートコードが覚えられないので、それを変換するためのコードを書きます。 *そのままショートコードを書くと、それがHugoで処理されてしまうので日本語にしました。 1 2 3 4 5 6 7 8 9 10 11 12 [code] newbody = [] for n in l: if (re.match(r'^¥', n)): pass if (re.match(r'^\[code\]$',n)): newbody.append('ここにショートコードの開始を') if (re.match(r'^\[/code\]$',n)): newbody.append('ここにショートコードの終了を') else: newbody.append(n) 以下のような感じです。match(r'^[code]$'の部分は正規表現ですので、気になる方はぐぐってください。 おそろしく単純な方法で書きました。変換したいものが増えるほど、ここが長大になっていく仕様ですが、それはまあ仕方がないですね。最終的には関数にして、リストを渡せば、変換済みのリストが返ってくる形にするのが良いでしょうか。 あと、朝一にダッシュボードが自動的に開くようになったので、たとえば、そこに過去の作業記録を表示させることもできそうです。つまり、振り返りが捗りますね。 内容をピックアップして表示させてもいいし、一行タイトルだけをいくつか並べてクリックできるようにしてもいい。 今、ここまで書いた分をアップロードしようとして、makeコマンドを履歴から叩こうと思ったら、間違って一つ前に走らせた「hey juiz」をうっかり叩いてしまい、そのまま実行されて、今日の原本ファイルが上書きされてしまいました(つまり白紙に)。 幸いDropbox上のファイルだったのでバージョンで復帰できましたが。 プログラミングでよくある「ファイルの存在を確認し、存在していなければ作成する」という手順が必要ですね。あるいは、どこかでキャンセルできるようにするか。 TODO:原本ファイルの存在を確認してから上書きする 9:00 まずはシゴタノ!を書きましょう。 『独学大全』を読み返しながら、記事を書いていきます。 * * *
うちあわせCastと執筆スタートな木曜日
うちあわせCast収録 NLプロジェクトの進め方を検討→結果をメールする かーそる第四号の原稿を読む 10:00 おはようございます。今週は好例のうちあわせCastです。それ以外にも新企画の進め方を決めたり、いくつか細々したタスクが山盛りです。頑張っていきましょう。 散歩をしてアイデア巡り * * * 次の本をどう書いていくのか、どんなことを書くのかを長めの散歩をしながら考えておりました。 モーニング・リーディング 今日は朝から『私の生活技術』を読みます。 「休息する技術」と「指揮する技術」を読みました。 どちらも、知的生産系の本ではあまり出てこない話題で、しかも納得いくことばかりでした。 11:00 妻の昼食準備 12:00 コーディング 日付を扱う関数の整理。 1 2 3 4 5 def getTodayDate(): return td.strftime("%Y-%m-%d") def getIOSformatDate(): return now.isoformat(timespec='seconds') 以上を書いて、すべての日付処理をモジュールの方に移動できました。 そうすると、もともとコードでimportしていたモジュールが削除できます。同じpyファイルに多様なモジュールをimportしている状態よりは、モジュールに機能を持たせ、その機能に合わせたモジュールをインポートする方がコードとしても自然で、メンテナンスがしやすいですね。 12:00 かーそるの原稿読みを進めます 共有してもらった原稿を確認のため読みます。確認といっても正否を判断するとかではなく、誤字脱字のチェック程度です。 DONE:原稿提出確認表をScrapboxに作ること 非常に個性的な原稿ばかりで、「これをまとめて一冊の雑誌に仕上げる」という難業が待ちかまえているのが予見されます。楽しい仕事です。 方法を肯定すること 「教養のない人」がビジネス書を読むと、「命取り」になりかねない理由(読書猿) | 現代ビジネス | 講談社(5/6) あなたの方法で良いんです – R-style その人の方向を肯定することは、(存在としての)「その人」を肯定することである。 13:00 NLをいかに進めるか 新しい企画案は、どのように執筆を進めていきましょうか。 現在試している『僕らの生存戦略』の進め方もあり、とりあえずこれまでと同じようにではなく、新しい進め方を試していきたいところです。 企画案のときもそうでしたが、「パスを長く持たない」が一つの(進め方の)テーマになりそうです。 うちあわせCastの準備を進めます 15:00 収録終わりました 編集も終わり、公開されました。 第四十八回:Tak.さんとセルフパブリッシングで本を売るために大切なことについて by うちあわせCast • A podcast on Anchor
病院&企画案の練り直しな水曜日
『僕らの生存戦略』の1000字執筆(TCS) 企画案の練り直し Slackの招待 9:00 おはようございます。本日は午後から心療内科なので、大切な仕事は午前中に終えておきましょう。 あと、企画案のリテイクに取り組みたいと思います。個人的にむしろここからエンジンがかかる感じです。 モーニング・コーディング 原本ファイルから共有ファイルへの変換時に、一行だけスキップするやり方を考えてみます。 単純にやるのなら、正規表現で、マッチする行だけを削除すればいいのですが、他の変換作業を行う場合に、そのやり方だとうまくいきません。 取得した行をループで回していくのが良さそうです。 テストしてみる。 原本ファイルではこうなっています。 しかし、Webページではどうでしょう。あ〜ら不思議、その記述がありませんね(おおげさ)。 1 2 3 4 5 6 7 8 9 10 11 #inputPathの中身を取得 with open(inputPath) as f: l = f.readlines()[1:] #inputの中身を変換する newbody = [] for n in l: if (re.match(r'^¥', n)): pass else: newbody.append(n) こんな感じで、中身を取得して、一行一行取り出し、行頭に¥がある行は放置する、という書式です。もし必要ならば、この行を別のファイルに追記することも可能になりますね。 これで、私の小遣いメモをここに統合して記録できるようになりました。 あと、日付関数の共有化がすごく中途半端なところで終わっているので、明日はそれを続けたいところです。 作業記録について: 検索で十分、という話を以前考えた。ファイルをいちいち作る必要はないのではないか、と。 しかし、たとえば、朝一のダッシュボード作りで、そうしたデータを使う場合は、別ファイルを作っておいた方が処理がしやすい。 あと、たとえばiPhoneからそれらのデータを抜き出してみたい場合は、iOS版のVS Codeはないので、非常に困難になる。 ということは、以下の要件を満たすものは、別ファイルに抜き出すという方針で良いのではないか。 ダッシュボードで表示させたい情報 iPhoneから確認したい情報 要検討、である。 10:00 『僕らの生存戦略』を1000字進めましょう。 * * *
『Spherize』を書く火曜日
『Spherize』を書く 『僕らの生存戦略』を1000字進める(TCS) 8:00 おはようございます。本日は『Spherize』を書き、ひさびさに『僕らの生存戦略』に着手したいと思います。 さて、うまく書けるかどうか。 モーニング・コーディング モジュールの作成の続きから。適切なモジュールの関数設計のフレームワークがまったくわからないので、一番小さい単位で求めているファイルをパスを返す関数を書いてみた。 1 2 3 4 5 6 7 8 def printToday(): print('today is ' + td.strftime("%Y-%m-%d%A")) def getInFilePath(): return ty + '/' + tday + '.md' def getOutFilePath(): return "/Users/Tadanori/Dropbox/dailylog/content/posts/" + ty + "/" + tm + "/" + tday + ".md" これで、機能はまったく変わっていないけれども、ファイルのパスを変更したくなったら、この関数を変更するだけで、すべてのコードに影響を与えられる。 あと、現状切実な問題は、上のようにコードを挿入するときにHugo用のショートコードでサンドイッチしているのだけど、それを覚えていないので毎回昨日の作業記録からコピペしている点。単語登録してもいいけど、変換してみたい。 開始と終了のショートコードを、自分でも覚えられる程度の短さにしておいて、それを変換して利用する。 9:00 『Spherize』を書きます * * * 一時間くらいで書けました。一応中盤の佳境です。 第九回:膜と現象としての自己|倉下忠憲|note WorkFlowyの検索 当たり前だけども、WorkFlowyでは検索はできるけども、正規表現での検索はできない(当たり前なのか?)。 ということは、たとえば「2020/11/9 hogehoge」みたいな記述が一杯あるときに、日付がある行だけを抽出ということができない。そのかわりに、#Schedule のようなハッシュタグを入れておけば抽出できる。 この二つが同じことをしていることを理解しておくことは大切だろう。 作業記録について: 朝一にやりたいこと。「一週間のルーチン業務」と「直近スケジュール」と「抱えているプロジェクト」を一覧したい。
臨時うちあわせCastを収録する月曜日
うちあわせCastの収録 今日からのプロジェクトの進め方を検討 9:00 おはようございます。今日は、プロジェクトの進め方の整理と、臨時のうちあわせCastの収録を行う予定です。 モーニング・コーディング 日付文字列を作成する共有関数(モジュールと呼びましょう)の続き。 地域情報を設定して、mondayではなく月曜日と表示されるように。 1 2 3 4 5 6 7 8 import datetime import locale locale.setlocale(locale.LC_TIME, 'ja_JP.UTF-8') td = datetime.date.today() def printToday(): print('today is ' + td.strftime("%Y-%m-%d%A")) あとは、この関数の利用方法を検討すること。生成される日付がどのように利用されているのかを分析すればよいでしょう。 今後のやることの方向性 日付モジュールの作成 変換機能の強化(たとえば共有には移さない記法を設定する) 朝一のダッシュボード表示(たとえば一週間の予定) あとで読む ハーンスタイン&マレイ『ベルカーブ:アメリカ生活における知能と階級構造』(1994) - 山形浩生の「経済のトリセツ」 再燃するZINE:ネット時代に花開くコミュニケーション・カルチャーの真髄 | FUZE fragment:一年間に1000冊も本を読む 一年間に1000冊も本を読んでいるというひとは、もちろんほとんどの本を「まともに」は読んでいません。 一方で、そうやって「まともに」読まなくても、何かの経験を得ている、ということもまた確かです。 作業記録: 最近は、VS Codeを二つ開いている。一つは、この作業記録を書き込む用のworkspaceで、もう一つは着手するプロジェクト用のworkspace。後者のworkspaceを適宜切り替えながら、作業を進めている。 一つにしないのは、プロジェクトの作業をしているときでも、作業記録にメモしたいことが発生するから。 では、ターミナルから、この作業記録に記録できるようになったらどうなるだろうか。 基本的に新規メモは、下に下にと追記していくのだから、コーディング的には難しくない。ターミナルでinputを要求して、受け取ったものを、今日の日付からファイル名を作成して、そこに追記すればいい。 ただし、inputでは単行しか受け取れない。作業記録用のメモは一行で終わることもあるけど、そうでないこともある。 複数行を受け取るには、繰り返し処理だが、最初から回数はわかっていない。 python — ユーザーから複数行の入力を取得する方法 1 2 while input() !
メルマガを仕上げてゆっくりする日曜日
メルマガ読み返し メルマガ配信予約 What’s this? 9:00 おはようございます。本日は午前中にメルマガを仕上げ、午後からは書店に出かけるか、あるいは家にこもって読書をしたいところです。 あと、zennを少し試すかもしれません。 Zenn CLIをインストールする GitHubリポジトリでZennのコンテンツを管理する MEMO:プログラミングとライティング MEMO:デジタルでいかに考えるのか 作業記録のアイデア hey juizコマンドから、たとえば何かしらのWebページを開く、という手はある。 あとで読む 高速道路からの風景 nonoc「mement」 nonocのアニメ『Re:ゼロから始める異世界生活』の2期ED「mement」という曲がむちゃくちゃMYTH & ROIDの曲調に似ているなと思ったら、作曲がTom-H@ckさん(MYTH & ROIDの作曲の人)だった。 曲を買いました 『Broken Sky』(富田美憂) 10:00 メルマガ読み返しを進めます * * * 終わりました。配信予約作業を進めます。 * * * 終わりました。 メルマガのmakeコマンドの編集 現状以下のようにimportにテキストファイルを指定しているけども、すべてテキストフィルであることが前提なので、拡張子の入力を省きたい。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 def fetchFile(filepath): filepath = filepath + '.txt' with open(filepath) as f: l = f.
メルマガ書く土曜日
メルマガ前半 メルマガ後半 メルマガはじめに 9:00 モーニング・コーディング 昨日書いたファイル(モジュール)を読み込むように。 1 2 3 import getTodayFilePath getTodayFilePath.printToday() importでは、拡張子は不要なのでファイル名だけ。で、ファイル名(モジュール名)を指定して関数を呼び出す。 うまく行きました。 あとは、関数の方の中身をバージョンアップするだけです。 作業記録 ためしに本日からトップに3タスクを表示するようにしました。続けるかどうかはわかりません。 NL push » ノート術の生成 push » 情報を孤立させない。経験を知識を。 setnumber: Twitterの普及と震災、Uber EatsやZoomの普及とコロナ。 setnumber: 計画がうまく立てられないというのも、計画力うんぬんというより、思考技術なのだろう。 あとで読む: Non-Stop Writing🖋|うまっち|note noteをやめようと思います。|Tamaka Ogawa|note 「赤福」東京駅で限定販売 「買うためだけに行く価値あり」など反響 - ライブドアニュース fragment: 身もふたもないこと。 noteをやめようと思います。|Tamaka Ogawa|note ストレートに物事が言われない時代? 要検討。 10:00 メルマガ前半書きます * * * 1時間半ほどで、2700字を書きました。一つ目の連載はこれでOKです。次に行きましょう。 12:00 * * * 1時間半ほどで、2100字ほど書きました。全体は4800字くらいです。これでメルマガの「前半」はクリアです。後半を続けます。 13:00 メルマガ後半を書きます * * * 1時間半ほどで、3200字ほど書きました。全体は約8000字です。あと一踏ん張りですね。
シゴタノを書く金曜日
9:00 おはようございます。本日は雨ですね。 昨日は結構がんばりましたので、今日は比較的ゆっくりめで進めたいところです。 金曜日なのでシゴタノを書き、昨日いろいろとやったので状況整理をしておきたいです。 あと、明日粗大ごみの日なので、出すのを忘れないようにしないと。 モーニング・コーディング 原本ファイルの新規作成時、その日の概要だけでなく、しゃーぷ×2個を置いておくことにした。 で、そのファイルを開いたときに、カーソルを先頭にしておきたい。 1 vscode = 'Code -g ' + fpath + ':3:3' あと、昨日ファイルのネーミングを変えたときに、やはり二つのファイルを変更したので、共通の関数にしておいた方が良さそう。 Python で別ファイルに書いた関数を呼び出す方法 - Python の関数 - Python の基本 - Python 入門 別ファイルを作り、そこで関数を定義して、呼び出す方でそのファイルをインポートして、関数はファイル名(モジュール名)付きで使用する、という感じか。 とりあえず、小さく実装してみる。ファイルを作るところから。 さて、名前は何だろうか。この関数は何をするか。今日の日付から、使用するファイル名(パス)を作成する。 関数としては、呼び出すとファイル名が返ってくる、というところか。 getTodayFilePath.py とでもしておこう。関数は 1 2 def getToday(): print('today is ' + td.strftime("%Y-%m-%d%A")) とだけ書いておく。原本ファイルと共有ファイルはパスが違うので、配列で返して[0]と[1]で使い分けるか、原本ファイル用のパスを返す関数と、共有ファイル用のパスを関数を別に定義していもいい。 とりあえずは、ここまでにしておく。 あと、hey juizコマンドで、原本ファイルだけでなく、デイリータスクリストの初期状態(init)も作れるといいな。最近、これを書き始めてから、WorkFlowyでデイリータスクリストを作成するのが若干面倒になっている。一緒にできればヨロシイ。 ただし、WorkFlowyはAPIが無いので、Pythonでブラウザを操作するようなことをするか、いっそデイリータスクリストもテキストファイルに以降するか、だ。これは大きなプロジェクトになりそうな予感。 setnumber コーディングとライティングの名付け コードのファイルないしは関数名をつけることと、文章のタイトルないし見出しをつけることの相似。 10:00 シゴタノ!を書きます Obsidianではなく、『独学大全』についてです。 週一の確認 Obsidianは日常遣いしていないので、毎週一回シゴタノ!を更新するタイミングでアップデートを確認する、という流れになっている。まるで週次レビューのようだ。 setnumber chaotic-lifeと防波堤としての秩序 11:00 setbumber VR世界にこんまり流は必要か。