About

このサイトは藤森吉昭( fjm ) の個人サイトです。

Works

準備中...

Log

日々の雑多な記録です。

Obsidian / Session のログをDaily Note に保存する

ポモドーロに Session – Pomodoro focus timer with analytics をつかっているのだけど、セッション終了時にそのセッション内容を Obsidian の Daily Note に書き込むようにした記録です。

投稿される内容

- [hh:mm] #session #[カテゴリー]/[目標] [note] `([開始時間] - [終了時間])`

▼こんな感じで Obsidian の Daily Note に追記される

必要なもの

1. 準備

Session.app を開いて 設定 > ショートカット で 「Session end」を有効にします。
※ これで、セッション終了時に、ショートカットに登録した 「session_end」というショートカットが実行されるようになります。

ref. Session – Setup session automation on iOS and MacOS with Apple Shortcuts

2. ショートカットの登録

「session_end」という名称でショートカットを作成します。

input

「指定なし」で入力を受け取ります。Session終了後にアプリから引き渡されるデータは以下にまとまっています。

  1. Shortcut input data
    https://www.stayinsession.com/learn/session-automation-on-ios-and-macos-with-apple-shortcuts

JavaScript for Automation を実行

受け取った値を整形して、Obsidian に Advanced URI をつかって引き渡します。

obsidian://advanced-uri?daily=true&mode=append&openmode=silent&data=[整形した投稿内容]

JavaScript for Automation のコード内容
/**
 * Session から受け取ったデータを整形して Obsidian に送信する
 * - function run(input, parameters): ショートカットはこの run 関数を実行する。(JXA ではこの関数を定義する必要がある)
 * - input : 前のアクションからの入力データ。配列 (Array) になっている。 ほとんどの場合、前のステップから渡されたテキスト(やファイルパスなど)はこの配列の最初の要素にはいっており。 input[0] でアクセスできる。
 * - return: この JXA アクションの結果を、さらに次のショートカットアクションに渡したい場合は、run 関数の最後に return で値を返す。
 */
function run(input) {
  // アプリケーションと標準機能の準備
  var app = Application.currentApplication();
  app.includeStandardAdditions = true;

  // 入力データを取得
  var inputData = getInputParsedJson(input);
  if (!inputData) {
    return "run : 入力がありません";
  }

  // 入力データをフォーマット
  var { categoryTitle, title, startDate, endDate, notes } = formatInputData(inputData);

  // 現在の時間を取得し投稿日時を生成
  var prefix = `- ${getNow()}`;

  // 投稿データを生成
  var tag = `#session #${categoryTitle}`
  if ( title ) {
    tag += `/${title}`;
  }
  // - 日付の前後をバッククオートで囲うのはその日付が投稿時間と認識されないように。
  var dataToSend = `${prefix} ${tag} ${notes} \`(${startDate} - ${endDate})\``;

  // 投稿データを送信するURLを生成
  // - advanced-uri : プラグインを使って、Obsidian にデータを送信する
  // - daily=true : daily note に送信する
  // - mode=append : 追記する
  // - openmode=silent : Obsidian を開かずに実行する
  // - data= : 送信するデータ
  var baseUrl = "obsidian://advanced-uri?daily=true&mode=append&openmode=silent&data=";

  // 最終的なURLを組み立て
  var finalUrl = baseUrl + encodeURIComponent(dataToSend);

  try {
    // Obsidian を開く
    app.openLocation(finalUrl);
  } catch (e) {
    app.displayDialog("URLを開けませんでした: " + e);
  }

  // 次アクションでも input データを利用できるように
  return input;
}

/**
 * # ショートカットからの input を JSON としてパースする
 * - input は配列なので、通常は最初の要素 input[0] に目的のテキストが入っています
 * - パース成功したらオブジェクトを、失敗したら null を返します
 */
function getInputParsedJson(input) {
  // input 配列自体が空か、要素がない場合は null を返す
  if (!input || input.length === 0) {
    return null;
  }

  var receivedInputString = input[0]; // 配列の最初の要素を取得 (JSON文字列のはず)
  var receivedData = JSON.parse(receivedInputString);
  return receivedData;
}

/**
 * # 入力データをフォーマットする
 * - sessions.app から渡される json : https://www.stayinsession.com/learn/session-automation-on-ios-and-macos-with-apple-shortcuts
 */
function formatInputData(inputData) {
  var category = inputData.category || {};

  return {
    categoryTitle: category.title || "",
    title: inputData.title || "",
    startDate: formatDateFromDateString(inputData.start_date || ""),
    endDate: formatDateFromDateString(inputData.end_date || ""),
    notes: inputData.notes || ""
  }
}

/**
 * # 日付文字列をフォーマットする
 * - 日付文字列を受け取り、HH:MM 形式に変換します。
 * @param {string} dateString - ISO 8601 形式の日付文字列
 * @returns {string} - フォーマットされた時間 (HH:MM)
 */
function formatDateFromDateString(dateString) {
  return formatTime(new Date(dateString));
}

/**
 * # 現在の時間を取得する
 * @returns {string} - フォーマットされた時間 (HH:MM)
 */
function getNow() {
  var now = new Date();
  return formatTime(now);
}

/**
 * # 時間をフォーマットする
 * param {Date} dateObject - 日付オブジェクト
 * @returns {string} - フォーマットされた時間 (HH:MM)
 */
function formatTime(dateObject) {
  var hour = String(dateObject.getHours()).padStart(2, '0');
  var min = String(dateObject.getMinutes()).padStart(2, '0');
  return `${hour}:${min}`;
}

🍛チェティナード料理

祖師谷大蔵の スリマンガラムA/C にいってきた。

  • 南インド料理
  • 手食できる (もちろん任意 )

ぐらいの前知識しかなかったが、シェフの方がいろいろ話してくれて、厳密?には店内にもかいてあったけどチェティナード料理というそう。

南インドタミルナードゥの料理の一つとして、インド国内外で最も有名な料理の一つとして数えられるチェティナード料理。チェティナード料理はNattukotai ChettiarもしくはNagaratharと呼ばれる、伝統的に金融や貿易に携わる商人カーストの人たちの料理であり、Chetthinadという名前自体も、chettiarの地(nad)というのが由来である

ref. インドのThe Bangalaにて怒涛のチェティナード料理教室。チェティナード料理とは一体なんなのか?|カレー哲学|東京マサラ部

おかわり自由のミールスたのんだんだけど、手食のせいだろうか、思いのほかすぐにおなかいっぱいになってしまった。普段たべない感じの料理で新鮮でした。

言語化

ちょっとした空き時間に目的もなく駅前の本屋内ふらふらしてたのだけど「言語化」という言葉が注目されているのだね。
一画そのコーナーになってて驚いた。

ちなみに手に取って読み始めたのは三宅香帆さんの『なぜ働いていると本が読めなくなるのか』。ゆとり大事ですなぁ。

参考:

誤字脱字衍字

  • 誤字
    • 文字の書き間違い、使い間違い
  • 脱字
    • 文中にあるべき文字が抜け落ちていること
  • 衍字 (えんじ)
    • 文中に不必要な文字が紛れ込んでいること。
    • 「衍」は訓読みで「はびこる・ あふれる・ く・ ひろがる・ あまり・ ひろい・ おおきい」。あまり・余分なの意味で「衍字」。
      • はびこる・あふれる : 例. 蔓衍/蔓延(まんえん)
      • ひろがる : 例. 敷衍(ふえん) = 意味のわかりにくい所を、やさしく言い替えたり詳しく述べたりして説明すること

コンプレッサー式の除湿機の処分

5年くらいつかった SHARP の除湿機( CV-G71-W ) が壊れた(水漏れが止まらない)。掃除したりといろいろトライしてみたが改善されず買い換えた。

で壊れた除湿機は自治体の粗大ゴミかなと軽く思っていたが、コンプレッサー式の除湿機は内部にフロンガスを使っているみたいで、自治体によっては回収できないのだね..

壊れた除湿機も内部にフロンガス( HFC-134a ) 使っている機種で、住んでる武蔵野市は収集対象外。

ヨドバシの ヨドバシ.com – 小型家電リサイクル回収承ります に電話確認したところ、フロンガス利用のコンプレッサー除湿機も特例なく回収可能という事だったのでそこで出すことにした。

以上です。

関連:

2024年まとめ

ざっと2024年の📝。

お仕事関連

  • 今年も Shopify。Checkout UI extensions, dotdigital, Zendesk など新しい知見を得た。
  • 2023年から着手していたのだけど、多摩美術大学 のリニューアルお手伝いした。
  • WordPress を Headless CMS として使う。
  • サービス開発のチームに入ってお仕事するようになった。これまでコードレビューしあうみたいな事はあまり経験がなかったのでいろいろと新鮮だ。
  • 個人事業主になった。

個人的な事

買ってよかったもの

イベント

指折り数えるくらいしかないな.. 順位付けするほど数もないし、来年はもうちょっといろいろ見ておきたい。

聴いた音楽

年々音楽聴いてる時間減ってる。毎年あまり変わりないですね。

が毎週の楽しみになってる。

まとめ

年始に目標としていた「働き方に変化を」は達成できた、と思う。もうひとつ目標としていた英語学習は全然。今年仕事で英語(のメール)で複数人とやりとりの機会があったのだけど、共通してこちらの要望がうまく伝わってない感があった。たぶん丁寧にしすぎて回りくどくなってるのだとおもう。来年はコツコツ取り組みたい。

GitHub で今日なにやったっけの振り返り

- [Github:author](https://github.com/search?q=author%3Afjm+created%3A%3E%3D{{date:YYYY-MM-DD}})
- [Github:commenter](https://github.com/search?q=commenter%3Afjm+created%3A%3E%3D{{date:YYYY-MM-DD}})
  • author と commenter を同時に検索はできないみたい
  • Obisidan の Daily Note のテンプレにいれといてその日の終わりにざっとみる

環境構築

今月から一応個人事業主(フリーランス)なのだけど、仕事でつかうメールやドメインどうしよう。

このサイトのドメインは学生の時からずっと使ってるやつでだいぶ個人的な内容もあるので、別でもってたドメインを事業用に利用しようと準備してたんだけど、管理ドメインふえるの面倒なんだよね..

仕事でこのドメイン使うとすると、ちょっとは情報あったほうがいいとおもうので、WordPressのデフォルトテーマを少しだけいじって調整した。いろいろ整えたい構想はあるがいつになるやら..。

ついでにいろんなサーバー使ってみようと思ってインフラ環境変更してみた。

  • heteml -> XServer
  • ムームーDNS -> XServer
  • ローカルのWordPress環境も Vagrant から Docker へ

XServer、いろいろできていい感じなのだけど、唯一、ドメイン、サブドメインのドキュメントルートが決まっちゃうのがつらい。

ポモドーロアプリのSession

ポモドーロテクニックとい「仕事を 25 分ずつのセッションに分け、そのあいだに短い休憩をはさんで行う時間管理術」があって、基本それで日々活動している。

アプリ、実タイマーとかいろいろ試してみてきたけどMacのアプリの今の所『Session – Pomodoro focus timer with analytics』に落ち着いてる。

  • Setapp | Powerful apps for Mac & iOS で有償版利用可能
  • Mac以外にもiPad, iPhone版あり。タイマーは同期する(ちょっとラグあるけど)
  • タイマーがわかりやすい
  • 一日のタイムライン表示にGoogleカレンダーの予定連携できる
  • メニューバーに内容の表示ができる
  • 時間計測、集計、📝を残せる機能

と、一通り揃ってる。操作感もいい。

その他使ったアプリ。