Dropbox の Datastore API 終了にともなって、日記アプリ Diaro が少し前に個別ファイルでの Dropbox 同期に移行したので、久しぶりに Android アプリをインストールしてお試ししてみました。思い浮かんだことを一時的に書き留めておくツールとしてどうかなと思ったのですが、表示・編集画面の雰囲気がやっぱり垢抜けないのでちょっと自分には合わない感じでした。
などを使っているなかで random thought を書き留めておくツールとしては Google Keep が今のところ一番しっくりしている感じです。これでアンドゥがついてくれればと思うところです。
昨年10月にサインアップした Medium、何か書くのに良さそうなプラットフォームだとは思っているのですがまだ活用できてません。
Ulysses や iA Writer から直接下書きを投稿できるので、うまく使えないかとちょっと試してみました。しかし結局下書きを投稿できるに過ぎないんですよね。まあ Medium 側がポスト(ストーリー)について POST しか API を提供していないので仕方がない訳ですけれども。
Ulysses や iA Writer で Markdown 形式で書いて一度 Medium に上げた下書き(やそれを公開したもの)について、再度手元で修正して反映させることができません。
一度 Medium に送ってしまったら、あとは「手元の原稿と Medium 上の記事を同じように手で修正する」か「再度 Medium に新しい草稿として上げて Medium 上でまるっとコピー&ペーストする」とかしかないです。残念。
自分の Tweet は API で取ってきておおむね nDiki の記事にまとめてあるのですが、使い始めの頃はそんなことをしていなかったので手元にデータとして取ってありませんでした。公式機能で全ツイート履歴ダウンロードができるのは知っていましたがそのうちと思いつつずっとやり忘れていたので、ようやく腰を上げて全ツイート履歴リクエストを設定からしてみたところ、ほどなくして準備完了のメールが届きました。
ダウンロードした ZIP ファイルの中をみると、予想していた通り人間用に HTML ファイルがありました。そしてそれ以外に CSV 形式ファイル・JSON 形式ファイルが含まれていてきちんと利用しやすい形になっていて良くできているなと感心してしまいました。良いですね。
きちんと README.txt をみてみたら HTML ファイル (index.html) は JSON 形式ファイルを読んで表示するページになってました。なるほど。API のレスポンス仕様と同じ JSON 形式をエクスポートデータにしているのですね。
「Markdown で書いているノートを Web ブラウザで見るのに MkDocs を使う」とつぶやいたら @bsdhack 氏が Grip を紹介してくれました。
私はgithubなどのmdファイル(https://t.co/nyoqRnjsN7)を読むために python製の grip 使って↓なスクリプトを書いて使ってます。
— Mitzyuki IMAIZUMI (@bsdhack) 2018年2月28日
grip --export ${1:-README.md} - | w3m -T text/html
さっそく試してみました。
$pip2 install grip
でインストールしたら Markdown ファイルを指定して Grip を起動します。
grip index.md
Grip が http://localhost:6419/ で Web サーバとして立ち上がるので Web ブラウザでアクセスすると index.md の HTML 変換されたものを見ることができます。なお
grip -b index.md
とすれば起動と同時に Web ブラウザで開いてくれます。URL でパスを指定すればそのまま同じ/サブディレクトリにある Markdown ファイルもプレビューできるので、ハイパーリンク付けをしておくことでドキュメント群をブラウジングすることもできます。なるほどお手軽で便利。 GitHub 上とほぼ同様の見慣れたデザインになるのがいいですね。
そもそも Grip は「GitHub Readme Instant Preview」で GitHub 上での表示確認のためのツールで、 GitHub の REST API を使ってレンダリング結果を生成しているので当然といえば当然だったりはします。
ただそのかわり GitHub の API を使うので
と場合によっては不便な部分があります。なお後者については GitHub Enterprise があるなら Grip でそちらを指定するとう手もあります。
GitHub に push する前にチェックしたい時はもちろん、それ以外でさっと Web ブラウザで見てみたい時にも便利なツールですね。
https://api.twitter.com/1.1/direct_messages/new.json
https://api.twitter.com/1.1/direct_messages/show.json
https://api.twitter.com/1.1/direct_messages.json
https://api.twitter.com/1.1/direct_messages/sent.json
https://api.twitter.com/1.1/direct_messages/destroy.json
ちょっとしたメモを Alfred for Mac から一発で TaskPaper ファイルに挿入したい。Packal 上に TaskPaper のための多機能な Alfred Workflow があるので入れたんだけれど、うまくタスク追加ができないことがあるので、自前でスクリプトを作って Alfred から呼ぶことにした。
TaskPaper ファイルはテキストファイルなので書き慣れている Perl でスクリプトを書いてもいいんだけれど、 編集の競合が避けられるし parser も書かなくて済むしということで TaskPaper の API を使うことにした。
JavaScript for Automation (JXA) を使えば JavaScript コードで TaskPaper API を呼べるっぽい。
以下指定した TaskPaper ファイルに Inbox: プロジェクトがなければ追加した上でその子供としてノートを挿入するコード(エラー処理割愛。実際にはタイムスタンプとかもノートにつけるようにした)。
#!/usr/bin/env osascript -l JavaScript function TaskPaperContext(editor, options) { let inbox = editor.outline.evaluateItemPath("//Inbox:")[0]; if (!inbox) { inbox = editor.outline.createItem("Inbox:"); let projects = editor.outline.evaluateItemPath('@type = project') if (projects.length == 0) { editor.outline.root.appendChildren(inbox) } else { editor.outline.root.insertChildrenBefore(inbox, projects[0]); } } let items = ItemSerializer.deserializeItems(options.text, editor.outline, ItemSerializer.TEXTMimeType) editor.setCollapsed(items[0]) inbox.appendChildren(items, inbox.firstChild) } function run(argv) { Application('TaskPaper').open(argv[0]).evaluate({ script:TaskPaperContext.toString(), withOptions: {text: argv[1]} }) }
これを inbox.scpt というファイルで保存し実行権限を与えれば
./inbox.scpt $HOME/tmp/test.taskpaper こんにちはこんにちは!!
という感じで呼び出せるようになる。
あとは Alfred Workflow を作ってそこからこのスクリプトを実行すれば OK だ。
Slack コール(ビデオ通話)では動画表示用の小さいウインドウが最前面で表示される。これを MacBook Pro 内蔵ディスプレイの上部中央、内蔵カメラの直下に配置すると自然とカメラの方に視線が行くようになる。 one-on-one ミーティングなど視線を大切にしたい時に便利だ。
一方最近使っているビデオ会議ツール Google Meet (旧 Google Hangouts Meet) は Google Chrome でアクセスして使う形(Mac)のため同じことができない(Meet を開いているウィンドウは Chrome の装飾がついて大きいし、特定の Chrome のウィンドウだけを最前面に置くこともできない)。
なんかいい方法ないかなと思っていたところ Picture-in-Picture Extension (by Google) という Google Chrome 拡張機能を発見。
Google 公式の拡張機能だ。これを使うと Picture-in-Picture Web API に対応している YouTube などのサービスの動画部分をフローティングウインドウとして最前面に表示させることができる。Google Meet のビデオ会議ページで使ってみたところ、動画部分をフローティングさせられた。1対1で画面共有無しの場合はこれでいけるぞ。
拡張子 md の Markdown ファイルを「バックアップと同期」アプリで新規に同期したり、 Web 版の Google ドライブでアップロードしたりすると MIME タイプが text/markdown となり全文検索対象にならない。不便。
StackEdit は Google ドライブに送る時の MIME タイプを設定で text/plain を選べるようにすることで問題を回避しているようだ。
クラウドストレージ上のファイルを管理するためのコマンドラインプログラム rclone でアップロードするとどうだろうと思ってやってみたところ、ちょっと設定をいじれば拡張子 md の Markdown ファイルを text/plain で Google ドライブにアップロードできることがわかった。
rclone では Google Drive API で新しいファイルを作成する際に、rclone 側で MIME タイプを判定している。内部的には Go の mime パッケージを使っている。
このパッケージは UNIX 系の環境では mime.type ファイルがあれば参照するようになっていたので macOS Catalina にあった /etc/apache2/mime.type ファイルの text/plain 行に md を追加して試したところ、めでたく text/plain として Google ドライブにアップロードできた。全文検索対象になることも確認。
ちなみに「バックアップと同期」アプリは /etc/apache2/mime.type 変更の影響を受けなかった。
rclone での方法が分かったわけだけれど、実際のところ Markdown ファイルの Google ドライブとの同期や読み書きを rclone だけに限定するわけにもいかないな。引き続き拡張子 txt で管理するのが現実的のようだ。
Naney (なにい)です。株式会社ミクシィで SNS 事業の部長をしています。
nDiki は1999年1月に始めたコンピュータ日誌を前身とする Naney の Web 日記(兼パーソナルナレッジベース)です。
#nNote タグがついている記事は他の記事に比べて、より断片的・未整理・不完全なちょっとしたノートです。まだ結論に至っていない考えなども含まれます。頻繁/大幅に更新したり削除したりすることがあります。
ナレッジベースアプリケーション Obsidian で書いているノートの一部を notes.naney.org で 公開しています。
※内容は個人的見解であり所属組織とは関係ありません。