potsu 『Camera Roll』
散歩に丁度いい。特に夕方の。
準備中...
日々の雑多な記録です。
散歩に丁度いい。特に夕方の。
ポモドーロに Session – Pomodoro focus timer with analytics をつかっているのだけど、セッション終了時にそのセッション内容を Obsidian の Daily Note に書き込むようにした記録です。
投稿される内容
- [hh:mm] #session #[カテゴリー]/[目標] [note] `([開始時間] - [終了時間])`
▼こんな感じで Obsidian の Daily Note に追記される
Session.app を開いて 設定 > ショートカット で 「Session end」を有効にします。
※ これで、セッション終了時に、ショートカットに登録した 「session_end」というショートカットが実行されるようになります。
ref. Session – Setup session automation on iOS and MacOS with Apple Shortcuts
「session_end」という名称でショートカットを作成します。
「指定なし」で入力を受け取ります。Session終了後にアプリから引き渡されるデータは以下にまとまっています。
受け取った値を整形して、Obsidian に Advanced URI をつかって引き渡します。
obsidian://advanced-uri?daily=true&mode=append&openmode=silent&data=[整形した投稿内容]
/**
* 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年の📝。
指折り数えるくらいしかないな.. 順位付けするほど数もないし、来年はもうちょっといろいろ見ておきたい。
年々音楽聴いてる時間減ってる。毎年あまり変わりないですね。
が毎週の楽しみになってる。
年始に目標としていた「働き方に変化を」は達成できた、と思う。もうひとつ目標としていた英語学習は全然。今年仕事で英語(のメール)で複数人とやりとりの機会があったのだけど、共通してこちらの要望がうまく伝わってない感があった。たぶん丁寧にしすぎて回りくどくなってるのだとおもう。来年はコツコツ取り組みたい。
- [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}})
今月から一応個人事業主(フリーランス)なのだけど、仕事でつかうメールやドメインどうしよう。
このサイトのドメインは学生の時からずっと使ってるやつでだいぶ個人的な内容もあるので、別でもってたドメインを事業用に利用しようと準備してたんだけど、管理ドメインふえるの面倒なんだよね..
仕事でこのドメイン使うとすると、ちょっとは情報あったほうがいいとおもうので、WordPressのデフォルトテーマを少しだけいじって調整した。いろいろ整えたい構想はあるがいつになるやら..。
ついでにいろんなサーバー使ってみようと思ってインフラ環境変更してみた。
XServer、いろいろできていい感じなのだけど、唯一、ドメイン、サブドメインのドキュメントルートが決まっちゃうのがつらい。