動かざることバグの如し

近づきたいよ 君の理想に

物件探すならat homeで探せ

賃貸サイトの反映に差があるらしい。

SUUMO

毎日反映(1日4回反映)
(1)24時〆(日曜 23時〆)→ 翌9時反映
(2)11時〆→ 15時反映
(3)15時〆→ 18時反映
(4)19時〆→ 22時反映
※スマホサイト、スマホアプリへの物件情報の反映は、上記時間より2時間ほど遅れて反映されます。

引用: https://business.suumo.jp/chintai/faq.html

ホームズ

連携時間 物件登録・出稿設定 反映タイミング
1回目 11:29まで 当日14:00~20:00の間
2回目 23:29まで 翌朝02:00~08:00の間

引用: https://www.zennichi.or.jp/wp-content/uploads/2024/02/5448acb6013f6978ea1001d89961f8cb.pdf

at home

公開・更新指示後 約1時間で反映

引用: https://atbb.athome.co.jp/front-web/www_athome/riyoujikan/index.html#anchor03(※ATBB会員のみ参照可能)

結論

at homeで物件探すのが勝ち

参考リンク

東芝ドラム式洗濯機の消費電力を計測してみた

東芝製のドラム式洗濯機を愛用しているのだが、日々の電力消費量について気になった。 ググってみても東芝の公式情報では詳細なデータが十分に開示されておらず、また具体的な消費電力を実測したレビューや記事も見当たらなかった。 そこでワットチェッカーを用いて実際の消費電力を測定した。

環境

  • 東芝ドラム式洗濯機 TW-127XP3L
  • 1日1回 2人分の服を洗う
  • 温水40度設定
  • 乾燥高速
  • エコモードはOFF(というか東芝洗濯機では温水設定にすると強制的にエコモードは無効になる)

計測について

今回TP-Linkのワットチェッカーを使った。 深夜に洗濯機を使用することが多いため、その都度直接消費電力を確認することは現実的ではない。 そこで、スマートフォンと連携してあとからまとめて電力消費を確認できる機種を購入した。

洗濯機の運転時間は洗濯物の量によって変動するため、より正確なデータを得るべく、約1週間にわたって測定を行い、平均値を算出した。

結果

日付 使用電力量 (kWh)
2024年11月13日 1.964
2024年11月14日 1.94
2024年11月15日 1.874
2024年11月16日 1.823
2024年11月17日 1.816
2024年11月18日 2.005
2024年11月19日 1.876
2024年11月20日 1.791

洗濯〜乾燥までの平均値は1.886kWh

電気使用量の単位であるkWhは、消費電力(kW)と稼働時間(h)を掛け合わせて算出される。 例えば1.8kWhという数値は、1800Wの電力を1時間連続で使用した場合の電気量に相当する。 1.886kWhの電気を使用した場合、東京電力EPのスタンダードSプランでは1kWhあたり29.80円で計算するため、1.886kWh × 29.80円で56.20円となる。 1回の利用で1000円近くかかる都内のコインランドリーに対し、自宅での乾燥にかかる電気代はわずか1日60円程度なのでかなり安い。

エコモードを使うと消費電力はどうなるのか

東芝ドラム式洗濯機の場合、温水設定をした時点でエコモードは無効にされる。のでエコモードは不要なのだがこれについて言及している記事もなかったので調べてみた。 1日だけ温水設定を無効にしてエコモードを有効にして洗濯してみたところ、1.209kwhだった。 電気代にして36円なので半分まではいかなくても2/3程度には電気代が抑えられるようである。ただし繰り返しになるがそもそも温水設定を無効にしているので同じ仕上がりにはならない。

運転時間

ついでなので運転時間も表にしてみた。

日付 洗濯時間(分) 乾燥時間(分) 合計時間(分)
2024年11月13日 149 68 217
2024年11月14日 140 66 206
2024年11月15日 138 66 204
2024年11月16日 135 61 196
2024年11月17日 137 61 198
2024年11月18日 140 71 211
2024年11月19日 134 64 198
2024年11月20日 130 65 195
  • 洗濯時間の統計
    • 平均時間:137.9分(約2時間18分)
    • 標準偏差:約5.7分
  • 乾燥時間の統計
    • 平均時間:65.3分(約1時間5分)
    • 標準偏差:約3.2分
  • 合計時間の統計
    • 平均合計時間:203.1分(約3時間23分)
    • 標準偏差:約7.4分

意外にも洗濯時間より乾燥時間の方が標準偏差は小さかった。つまり洗濯の方が時間のばらつきが大きいということになる。 とはいえ1番は合計時間が1番ばらつきが最も大きいので、10分程度のズレは日々起こるのかなと認識した。

電子レンジでつくるフライドポテト

用意する物

  • 男爵いも 1~3個
  • 片栗粉 薄力粉がベストだがないので代用
  • バター,ブラックペッパー or 顆粒コンソメ,バジル
  • オリーブオイル

手順

  • 1cm弱の拍子切りにしてそれぞれを2~3等分に切る
  • 水につけて15分おく
    • でんぷんを飛ばしてサクッとした食感にさせるため
  • 水切って袋にいれる
  • 小麦粉とオリーブオイルをそれぞれ芋1個ごとに大さじ0.5ずつ入れる
  • 全体にまぶす
  • オーブンレンジで23分
  • ボウルにあけてバター&ブラックペッパー or 顆粒コンソメ&バジルであえる

参考リンク

ZodとJSON modeを使ってChatGPTのレスポンスをJSONで取得

環境

  • Nodejs v22

やりたいこと

OpenAIのJSONモードは、ChatGPTの出力を確実にJSON形式で取得できる機能である。 従来のFunction Callingと比べてより簡潔に実装でき、zodと組み合わせることでTypeScriptとの相性も良い。

今回はFunction CallingではなくJSONモードを使ってJSONを返却してもらう。

コード

import OpenAI from 'openai';
import { zodResponseFormat } from 'openai/helpers/zod';
import z from 'zod';

const schema = z.object({
  quizzes: z.array(
    z.object({
      question: z.string(),
      answer: z.string()
    })
  )
});
type QuizProps = z.infer<typeof schema>;

export async function fetchGPT(): Promise<QuizProps> {
  const client = new OpenAI({
    apiKey: process.env.OPENAI_API_KEY
  });

  const chatCompletion = await client.beta.chat.completions.parse({
    messages: [
      {
        role: 'user',
        content: 'なぞなぞの問題と答えを難易度順に3つ作成してください。'
      }
    ],
    model: 'gpt-4o-mini',
    response_format: zodResponseFormat(schema, 'responseSchema')
  });

  return chatCompletion.choices[0].message.parsed as QuizProps;
}

fetchGPT()
  .then((x) => console.log(x))
  .catch(console.error);
  • Zodを使用してレスポンススキーマを定義している。これにより型安全性が確保される
  • zodResponseFormatヘルパー関数を使用して、ZodスキーマをOpenAI APIで使用可能なJSON schemaに変換する
  • response_formatパラメータを設定することで、GPTからの応答が必ず指定したスキーマに従ったJSON形式になることが保証される
  • client.beta.chat.completions.parseメソッドを使用することで、レスポンスを自動的にパースし型付きのオブジェクトとして取得できる

注意点

  • JSONモードを使用するには、gpt-4oまたはgpt-4o-miniモデルを使用する必要がある
  • すべてのフィールドはrequiredとして指定する必要がある
  • スキーマ定義では、discriminated unionなどの複雑な型は使用できない制限がある

Node.jsでプログラムからVitestを実行したい

やりたいこと

通常vitestのテストはコマンドラインから実行するが、通常のTypeScriptコードから Vitestのテストコードをロードして実行したい。で、テスト結果を取得したい。

コード

vitestの内部APIを使うとできる。

import { readFile } from 'node:fs/promises';
import { startVitest } from 'vitest/node';

export async function runVitest(testPath: string): Promise<string> {
  const jsonPath = 'test-results.json';
  const vitest = await startVitest('test', [testPath], {
    watch: false,
    run: true, // 単一実行モードを有効化
    reporters: ['json'], // JSONレポーターを使用
    outputFile: jsonPath
  });
  if (!vitest) {
    throw new Error('vitestの初期化に失敗しました');
  }
  await vitest.close();
  const json = await readFile(jsonPath, 'utf-8');
  // console.log(json);
  return json;
}

runVitest('src/script/hoge.test.ts');

解説

  • startVitest()を使うことで、Vitestのテストランナーをプログラムから起動できる。
    • 第一引数にはテスト対象のファイルを指定。testを渡すとtestディレクトリ以下の.test.tsファイルを探索する。
    • 第二引数にはテスト対象のファイルを配列で指定。{ watch: false, run: true }で単一実行モード。reporters: ['json'], outputFile: jsonPathJSON形式の結果を指定ファイルに出力。
  • vitest.close()でテストランナーを終了。非同期で実行されるテストが完了するまで待つのを保証する。
  • readFileJSONファイルを読み込み、文字列として返す。test-results.jsonoutputFileで指定したファイル名。
  • runVitest関数を呼び出すことで、指定したテストファイルを実行し、JSON形式の結果を取得できる。

参考リンク