みずぴー日記

人間の再起動ボタンはハワイのビーチにある

RSSリーダー

冬休みにRSSリーダーを書いた。楽しかった。

feedlyへの不満

feedlyを使っていたが不満が溜まっていた。

  • ネットワークエラーが頻発する。これは日本に一時帰国中で、サーバーから距離があるせいかもしれない。
  • 画像が縮小表示されるため、画像主体のRSSフィードが読みづらい。

とはいえ、自作するほどの不満ではない。冬休みで魔が差した。

猫ブログ画像が縮小表示になって悲しい

Ultraladder

インストール不要で複数デバイスからアクセスしたかったので、Webアプリとして作った。これまで使ったRSSリーダーの中ではFastladderが一番気に入っていたので、各所で影響を受けている。jkキーバインドも実装した。

RailsAPIサーバーとジョブサーバーを、Next.jsでフロントエンドを書いた。AWSにデプロイしようと思ったら思ったより高くなりそうだったので、fly.ioにAPIサーバーを、Vercelにフロントエンドを配備した。

Webサービスとして一般公開するつもりはないので、認証機能などは簡易なものしか付けていない。スケールしそうにない機能もいくつか付けた。

モダンブラウザAPI

最近*1のブラウザの機能は追っていなかったが、改めてみたら便利なAPIがいくつか追加されていた。

scroll-snap-typeでエントリの先頭でスクロールを簡単に止めれるようになった。

未読から既読への切り替えのためのエントリ表示判定が必要だったが、これもIntersectionObserver APIで簡単に実現できた。

画像用デザイン

画像主体のフィード用のデザインも用意した。

スケールしない機能

同じエントリを複数回見るのが嫌だったので、同じURLはまとめて既読扱いとした。

  def mark_as_read
    item = current_user.items.find(params[:item_id])
    read_at = Time.current
    item.update!(read_at:)

    # mark same url items as read
    current_user.items
                .unread
                .where(url: item.url)
                .update(read_at:)

このあたりは購読数に対してスケールしそうにないが、個人用なので遠慮なく実装した。

楽しかった

とても楽しかった。

ほどほどにしてのんびり正月を過ごすつもりだったが、止まらなくなってしまった。 ジョブの実行頻度を間違えてることに気がついて、初詣の帰りにデプロイをやり直したこともある。

デプロイ直後の焼き肉

YouTubeで音楽をランダム再生しながら深夜までコードを書くのはエキサイティングだった。終盤、メドレーに投入したため、めまぐるしく変わる曲の中でHTMLをいじるのが最高に楽しかった。

思い通りのものが目の前にだんだんと現れてくるの、他に変え難い喜びがある。こういうことがやりたいからプログラミング覚えたのが出発点だったのを思い出した。

*1:2019年

自炊

TL; DR

  • 自炊を始めた
  • 自炊とはレシピ組み合わせパズルである

自炊を始めた

深夜2時ごろに人生について考えていたら自炊を始める気持ちになった*1。日本よりも広いキッチンがあるんだし、使わないともったいない。

食洗機とオーブン、ディスポーザーがついている。換気扇は外につながっていない。

作り置きを諦める

インターネットや書籍だと一人暮らしの自炊は作り置きが主体になってる。ただ俺は作り置きが苦手で、これまでそれが原因で何度も失敗している。

友人に勧められた本。パスタに飽きて挫折。

今回は諦めて毎食作るようにした。

豚汁(1杯分)。ゴボウは韓国系スーパーのH-martに売ってる。

シチュー(1杯分)。数回トライの後、シチューが茶色にならなくなった。

食器の調達

2、3食分ためてから食洗機を動かすので、食器が足りなくなりがちだった。いったん食洗機に入れた食器を再び取り出すことも多かった。

これが面倒だし自炊するハードルを下げたかったので、食器や調理器具を買い揃えた。

ほぼIKEAで揃えた

一人暮らしだが茶碗が6セットある

レシピが多すぎる

インターネットや書籍には大量のレシピが載っている。誰かの食卓の上で出てる料理が、時間的・空間的にも離れた俺のキッチンで再現できるのは楽しい。

ただ、レシピだけではわからないことが多い。

  • 材料が足りないときどうしたらいいのか
  • 余った材料はどうしたらいいのか
  • 複数の料理をどう組み合わせたらいいのか

いい感じになる料理

何度か試行するうちに、組み合わせる条件がわかってきた。

自炊の目標としておいしい料理を作ることを置いてるわけだが、そもそも料理のおいしさには見た目の良さが含まれる。最初、これが理解できていなかったが、食感やにおいなども料理のおいしさに含めてるのに、視覚を除外するのはおかしいなと気づき認識を改めた。

要はいい感じの盛り付けをしたいわけだが、これにはいくつかのノウハウが知られている。

  • フォーマットを合わせる
  • 黒・白・黄色・赤色・緑色を入れる

例えばフランス料理は前菜、スープ、魚、肉、シャーベット、野菜、デザートというフォーマットを持っている。ここからスープ、肉、野菜を選んだサブセットを作るとこうなる。

ペトラーレ・カレイ (Petrale Sole; 知らん)を焼いた

色を加える方法はいくつかあり、この時は赤のためにソースを赤くし、緑のためにハーブを乗せ、黒の食器を選んだ。ハーブは値段あたりの見た目への貢献度が抜群に高い。

スズキ(Branzini; 日本のやつとは種類が違うらしい?)を焼いた

パズル

一方で食材を無駄にしたくないので、以下のような制約も生じる。

  • 古い食材を優先して使う
  • なるべく新しいものを買わない

さらに、その日の気分に合わせて食べたいものも追加したい。

あとはこれらの制約条件を満たすように、レシピを組み合わせるパズルを解き続けていけばいい。

最初のうちは不慣れだったのでガントチャートを書いていた。もうやってない。

買い物

過去の挑戦から食材をまとめ買いして使いきれないことがわかっていたので、毎日買い物に行くようにした。オフィスも再開したので帰り道に寄ってる。

途中で絡んできたネコ

上記の制約条件を満たす範囲で自由に選べばいい。足りない色の野菜を買うことが多い。

野菜売り場がカラーパレットに見える

Specialと書いてあるとお得な気がして買っちゃう

色さえあってればいいので、その時売ってるものに合わせて柔軟に組み換えれる。フルーツソースは肉にかけても美味しいので、果物の色も使える。

オレンジを絞ったらオレンジ色になると思ったら黄色だった

まとめ

市販されている食材でちゃんとしたレシピを使って調理すればそれなりに美味しい。つまりキッチンに立つ以前に自炊の勝敗は決まっている。

勝利確定

*1:人生がわからん→わからんことより今を生きた方がいい→とりあえず美味しいものを食べよう。深夜の思考に論理性はない。

2021年に買ったもの

ずっと自宅勤務だったので、家で使えるものを増やした。

デロンギ コーヒーメーカー

f:id:mzp:20211219101043p:plain

Amazon.com: De'Longhi ECAM35075SI Dinamica with LatteCrema Fully Automatic Espresso Machine, Silver: Home & Kitchen

コーヒー豆と水、入れカスを内部に保持できるので、普段はボタンを押すだけで済むのが気に入ってる。

ミルクを泡立ててくれるのでキレイなカプチーノが淹れれる。

f:id:mzp:20211219101100p:plain

コーヒーサイフォン用ヒーター

f:id:mzp:20211219105544p:plain

Amazon.com: YUCHENGTECH Halogen Beam Heater Burner Syphon Coffee Heater Beam Heater for Coffee Syphon (110V(Host)) : Home & Kitchen

アルコールランプを使うのが面倒でコーヒーサイフォンがしまいっぱなしになっていたので買った。「使っていたら割れた」というレビューが多かったので、交換用の部品が手に入りやすそうなやつにした。

コーヒーメーカーより面倒なので、休日にしか使っていない。

モナンシロップ

f:id:mzp:20211219101458p:plain

夏頃にクリームソーダが流行っていて(お酒がダメでもクリームソーダで乾杯すればいいんだよ…!プロントが始めた夜の顔「キッサカバ」が超楽しいぞ - ぐるなび みんなのごはん)、羨ましかったので買った。

炭酸水はいつも冷蔵庫に入っている。

f:id:mzp:20211219110426p:plain

見た目優先で緑色で作ったが、ピスタチオ味なのでそこまで爽快感がない。

f:id:mzp:20211219101516p:plain

いちご味の方がおいしい。

f:id:mzp:20211219101533p:plain

ハロウィンのカボチャ

f:id:mzp:20211219101342p:plain

ハロウィンシーズンにいろんな所で売ってたので買って彫った。

f:id:mzp:20211219110909p:plain

中に入れる用のキャンドル型LEDも売っていて面白い。LEDなので7色に光る。

買ったけど今ひとつだったやつ

ビール醸造キット。楽しかったけど、この量のビールを飲む習慣はない。

f:id:mzp:20211219101118p:plain

冷凍クロワッサン。めっちゃおいしい、食パン(ミルクパン)の方が好き。

f:id:mzp:20211219101305p:plainf:id:mzp:20211219101321p:plain

チョコレートシロップ。アリに狙われたので捨てた。

f:id:mzp:20211219111504p:plain

個人用ダッシュボード

NAS上でDashblingを動かして、個人用ダッシュボードを作った。

f:id:mzp:20211214094523p:plain

テレビを買った

テレビを買った。画面サイズによる価格差は少なかったので70インチにした。(Buy TU7000 Series 7 Smart TV 4K UHD 70" | Samsung Singapore)

f:id:mzp:20211214094318p:plain

Webブラウザが組み込まれているので、これで常時ダッシュボードを表示するようにしたい。スクリーンセイバー機能があるので焼き付きの心配もない。

ホスティング

公開しづらい情報も表示したいのでローカルネットワーク内のサーバーでホスティングしたい。 いい機会なのでNAS(DS 920+)を買った。

Dockerをインストールした上で、そこでDashblingを動かした。

f:id:mzp:20211214094353p:plain

ウィジェット

時刻・天気

標準のウィジェットを使って日本と西海岸の時刻、天気を表示した。

f:id:mzp:20211214094410p:plain

pixivデイリーランキング

RSS - みずぴー日記でpixivデイリーランキングRSS化したので、取得したイラストを順番に表示した。CSSを調整してイラストは常に大きく表示されるようにしている。

ついでに温度表示を華氏に変更した。もうこっちの方がしっくりくる。

f:id:mzp:20211214094428p:plain

室温

Smart Indoor Air Quality Monitor | Netatmoを設置しているので、室温・湿度・CO2濃度を表示した。夕方ごろに眠気が強くなるので室温やCO2濃度に問題があるかと思って設置したが、一日を通して共に安定していた。単純に疲れてるだけだ。

f:id:mzp:20211214094446p:plain

買い物メモ

買い物メモを表示するためにWeb APIが用意されているTodoistに移行した(Sync API Reference | Todoist Developer)。単純なCRUDしか用意されてないので、買い物リストを抽出するためにタグのパースを自前でやっている。

f:id:mzp:20211214100949p:plain

口座残高(日本)

日本の口座には入金がないので、たまに残高が怪しくなる。クレジットカードの引き落としに失敗するのが怖いので、常に表示するようにした。 amazon.co.jp で買っているKindleが主な原因。

口座残高を取得するAPIは存在しているようだが、個人は使うことはできない(APIサービス | 三菱UFJ銀行)。しょうがないのでMoneyForwardをスクレイピングした。

この月はまさに十分な残高がなかったので、やってよかった。

f:id:mzp:20211214094505p:plain

口座残高(アメリカ)

同様にアメリカの口座も表示した。普段使うCheckingc口座にはあまり現金を入れていない。

日本の時と同様にMint経由で残高を取得している。Charlesで見つけたiOSアプリ用のAPIを利用している。https://github.com/mintapi/mintapiより動かすのが楽。

f:id:mzp:20211214094252p:plain

関連リンク

RSS

RSSリーダーの利用を再開した。RSSフィードを提供していないサイトも多いので、AWS Lambdaでスクレイピングした上で生成している。

f:id:mzp:20201204192744p:plain

AWS Lambdaによるスクレイピング

RSSリーダーが取得しに来たときに、対象サイトのサイトをスクレイピングRSSフィードの生成をすればいいので、AWS Lambdaを利用している。そのままでは辛かったので、Serverless Frameworkを使っている。

おおまかにいって

  1. node-fetchで対象サイトを取得
  2. jsdomでコンテンツを取得
  3. rssRSSフィードを生成

という流れになる。

まとめるとこんな感じ。

import fetch from 'node-fetch'
import { JSDOM } from 'jsdom'
import RSS from 'rss'

export default async (event, _context) => {
    const feed = new RSS({
        title: 'ジャンプ+読切シリーズ',
        site_url: 'https://shonenjumpplus.com/series/oneshot',
    })

    const response = await fetch('https://shonenjumpplus.com/series/oneshot')
    const body = await response.text()
    const dom = new JSDOM(body)

    const items = Array.from(
        dom.window.document.querySelectorAll('.series-list-item'),
        (item) => {
            const url = item.querySelector('a[href]').attributes['href'].value
            const title = item.querySelector('.series-list-title').textContent
            return {
                url,
                title,
                description: item.innerHTML,
            }
        }
    ).forEach((item) => feed.item(item))

    return {
        headers: { 'Content-Type': 'application/rss+xml' },
        statusCode: 200,
        body: feed.xml(),
    }
}

生成しているRSSフィード

作成中の様子

Plaggerのことを思い出している。

Pixiv Fanboxきびしい。

新着チェックができるようになると、アニメも見る気持ちにもなる。

⌨️かな入力

かな入力を覚えた。だんだんと文が打てるようよっていくのが楽しい。

このエントリもかな入力で書いている。

練習

かなタイピング 基本コース - FMVサポート : 富士通パソコンで段ごとの文字の練習をした。そのあとはインターネットでタイピング練習 イータイピング | e-typing かなタイピングを繰り返しやった。

ほとんどのタイピング練習ソフトはかな入力に対応しておらず、この2つ以外ほぼ見つけれなかった。寿司打で練習したかった。

自宅にあるキーボードは仮名が印字されいないやつがほとんどで、練習用のキーボードを探すのが大変だった。かろうじてiPadPro用のSmart Keyboardが一枚だけあった。

f:id:mzp:20200726142937j:plain

期間

三日ぐらいでゆっくり打てるようになるが、普通の速度で打てるようになるには1ヶ月くらいかかる。

それまでは日常会話が困難になる。Discordでうまく会話に参加できなのはかなしい。相手に「mzpが入力中...」ってずっと出てるのかな、とか考えてしまう。

これにはわりとストレスを感じる。どうしてもつらくなった時はiPhoneで書いた。

練習サイトに書いてなかったこと

上記の練習サイトには書いていない挙動がいくつかある。詳しくは調べてないが、macOS/iOS標準の日本語入力だけの話かもしれない。

数字や記号の入力

数字はOptionキーとの組み合わせで入力する。

f:id:mzp:20200726145429p:plain

Shiftキーとの組み合わせで!のような記号も入力できる。

f:id:mzp:20200726151841p:plain

US配列でかな入力

US配列はJIS配列よりもキーが少ないので「ろ」などの一部のキーはシフトキーとの組み合わせが必要となる。これに気が付かないと、連勝ガイドに表示されたキーを押しても不正解になる理不尽を味わう。

f:id:mzp:20200726152016p:plain

感想

ローマ字入力では入力しづらい「いっぬ」がスムーズに入力できて面白い。

キーを押す回数は減っているが、上下移動の距離は伸びてるので、そんなに早く打ててる気はしない。

🍪ソイレント

買い物に行くのが面倒なので完全食を食べてる。

f:id:mzp:20200610184330j:plain

デリバリー

外食ができなくなったので、Doordashの利用頻度が増えた。

カレーにご飯つけたら、みっちり詰まってきた。半分は翌日の朝ごはんになった。

f:id:mzp:20200306115714j:plain

ピザおいしい。

f:id:mzp:20200515185624j:plain

自炊

デリバリーだげてなく自分でも作っている。

トーストは料理。

f:id:mzp:20200518073501j:plain

食材を使い切りたくて、献立作ったこともある。

f:id:mzp:20200611123302j:plain

つくれぽも書いた。

f:id:mzp:20200329174027j:plain

勘で豚カツに挑んだら、引き返せなくなった。

f:id:mzp:20200308191030j:plain

アイスが丸いと嬉しい。

f:id:mzp:20200312194937j:plain

買い物

体温チェックなスーパーもある。

f:id:mzp:20200503134525j:plain

でかい野菜しか売ってない。

f:id:mzp:20200503130045j:plain

タイミングをミスると小麦粉だけの食事になる。

完全食

だんだんと買い物に行くのが面倒になってきた。入場列に並ぶのも大変だし、マスクあまりつけたくない。

完全食は前から気になっていたので、Soylent Squaredを買った。塩キャラメル味、チョコレートブラウニー味、シトラスベリー味がある。でもシトラスベリーはAmazonで品切れだった。

f:id:mzp:20200603164607j:plain

3〜4枚で一食分らしい。作業しながら食べれて便利。

f:id:mzp:20200604112741j:plain

それなりに噛まないと食べれないので、満腹感はある。

f:id:mzp:20200604113649j:plain

すぐ食べれる、片付けが楽、栄養のこと考えなくて良くなる、と色々楽。

基本はソイレントでたまにデリバリーなり自分で作るなりするのが良い気がしてきた。とりあえずAmazonで定期購入の設定をした。

f:id:mzp:20200611125927p:plain