トイレ、廊下の電球をモーションセンサー(人感センサー)にするのを検討したら+Styleのセンサー付きLEDスマート電球がとても良かった

要件

  • 点灯時間を設定したい
    • 10分くらい点灯してほしい
  • 夜中にトイレ行ったときに点くと眩しいのでほんのり点灯するか、いっそ反応しないでほしい
    • 17:00から22:00だけ稼働させるみたいなイメージ
    • 反応させないようにして別途人感センサーのフットライトを入れるのもいいと思う

トイレに使う場合は、換気扇と連動していないスイッチじゃないと、換気扇がつきっぱになってしまうのでそれだけ注意。

結論

+Style (プラススタイル)の人感センサー付きLEDスマート電球

f:id:shrkw:20220309235300j:plain

3980円。たまにセールやってて3280円とかになる。

  • メリット
    • 連続点灯時間が設定できる
    • 安い
    • スマートモードの自動設定で一定時間でのセンサーオン、センサーオフが設定できる
      • なので17:00にセンサーオン、22:00にセンサーオフの二つの設定を入れたら、期待する動きになった
  • デメリット
    • 自動設定はスマホからBluetoothで送信してる気がするので、スマホからBTが届かないと動作しないかも
    • 22:00から6:00までは照度をおとしてほんのり点灯とかはできないっぽい?

検討した選択肢

パナソニックのほんのり点灯のあるかってにスイッチ

[トイレ壁取付]かってにスイッチ(換気扇連動・ほんのり点灯モード対応) | アドバンスシリーズ | スイッチ・コンセント(配線器具) | Panasonic

これを使えば全てが解決する。

ダイコーでもオーデリックでもいろいろあるはず。埋め込みなので、電気工事士の資格が必要。

  • メリット
    • 連続点灯時間も設定できる
    • ほんのり点灯にする時間帯も設定できるので夜中に眩しいのを防げる
  • デメリット
    • 定価で14,700円
    • 調光可能型照明器具かLED電球を使わないといけないのでそれもちょっと費用かかる

Phillips Hue スマート電球 + モーションセンサー + ブリッジ

  • スマート電球 2000円
  • モーションセンサー 4000円
  • ブリッジ 6500円

12500円かかる。高い。 モーションセンサーがモデルチェンジするらしく2022年2月時点で品切れ中。

  • メリット
    • 連続点灯時間が設定できる
    • 夜間の設定もできそう
    • Hueで揃えるならこれもありっちゃあり
  • デメリット
    • 12500円払って単体で使うならスイッチ埋め込みで作ってもらう方がいい

SwitchBotスマート電球 + SwitchBot人感センサー + SwitchBotハブミニ

  • SwitchBotスマート電球 1899円
  • SwitchBot人感センサー 2480円
  • SwitchBotハブミニ 3980円

8500円くらいかかる。たまにセールやってるのでその時に揃えたら6500円くらいで揃うみたい。

  • メリット
    • 連続点灯時間が設定できる
    • コストは中間くらい
  • デメリット
    • ハブ経由なので点灯まで3-4秒とかかかるみたい。トイレ照明と考えたら致命的に遅すぎる
      • 開閉センサーにしてもハブ経由なのは変わらないので遅延はあるみたい
    • 夜間の設定ができるのか不明

パナソニックとかの人感センサー付きLED電球

  • メリット
  • デメリット
    • 連続点灯時間が設定できない
    • 夜間の設定とかできない

令和3年度分の確定申告をiPhoneとMacでe-Taxで申請した

毎年やり方を忘れるし、やり方も便利になる方向で毎年アップデートされているので、メモを残しておく。

使う道具

事前準備

マイナポータルと連携するとふるさと納税の明細の入力が不要になるのでそれをやる。各事業会社ごとに電子データ作成の依頼が必要で、依頼してから数日かかるので、申告作業をする前に先にやっておいた方がいい。なんか、NRIのe私書箱とかいうサービスをハブにするらしい。

マイナポータル連携の手順は大体以下。

  • 確定申告書等作成コーナーで作成を開始
  • マイナポータルと連携の事前準備をするか訊かれるので進める
  • iPhoneのマイナポータルアプリでマイナンバーカードの読み込みをなんかいっぱい
    • 鉄のテーブルでは読めないので分厚い本でもおいて読み込ませる
    • なんかとにかくいっぱい
  • 画面通りに進めればいけた

あとは各事業会社で電子データ作成を依頼して寝て待つ。

数日したら、電子データができるので、進める。途中で事業会社側からe私書箱に遷移してログインを促されるけど、マイナンバーカードの読み込みが必要なのでパソコンだと無理。なので、スマホで事業会社にログインして進めるのが必要。ポチポチしたらe私書箱にデータが保存される。

認証のたびにマイナンバーカードの読み込みをやるし、認証はめちゃめちゃ多いので、iPhoneマイナンバーカードは固定して置けるところに置いといてやった方がいい。

申告書作成

普通に画面の指示に従ってポチポチすればOK。

ふるさと納税のデータを入れたりしなくてよくなったのでだいぶ楽になったし、提出も認証をiPhoneのマイナポータルアプリに飛ばす方式にしてくれてるので物凄くラク。これのためのWindows PCを残してたけど、この用途には用済みになった。

入力のいろいろ

  • FXの損益は「分離課税」の所得の欄から「先物取引に掛かる雑所得」を選択
    • 所得区分は「雑所得」
    • 種類は「外国為替証拠金取引
    • 決済の方法は「差金決済」
    • 金額は期間損益合計の合算でOK
  • 医療費控除のための明細の提出はExcelだけど、テンプレートがあるのでそれをNumbersで読み込んで入力するのでも大丈夫
    • うちはGoogle Spreadsheetで記録しておいて申告書作成の時にデータをテンプレートに貼り付けして提出しているけど、文字化けもなくちゃんと読み込めてる

Lenovo ThinkPadを中古で3台買った

実家の父に使わせてたパソコンが7年ほど前に買い替えたCeleron N3050とかで、さすがに令和に使うにはしんどいスペックだったので買い替えた。 要件は以下。

  • 老眼なのでモニターは15インチがいい
  • フルHDは持て余すので1366x768くらいでいい
  • また7年とか使うのならメモリ4GBはしんどいので8GB
  • SSDなら容量はなんでもいい

というのでいろいろ調べてみたけど、最近の PC事情に詳しくないし、長く使うならThinkpadが安心感ある気がするので、中古のThinkpadにすることにした。

ということで、ヤフオク、メルカリで以下を買った。どれも2万前後くらい。

本当は個人売買じゃなくて、ショップで買いたかったけど、地方民であり、感染リスクがあるなかで都心まで出るのは憚れるのでネットで購入した。本当はPCコンフル辺りのお買い得品を買うのが、リスクも少なくて一番いいんだと思う。

ついでに母のPCもCeleronとかだったので買い替えた。

さらについでに、最近3Dマイホームデザイナーで家の3Dモデルをいじって間取りや家具の様子を確認しているのだけど、元々家に転がっていたWindows PCがメモリが4GBしかなくてちょいちょい重くなるので、自分用にも一緒に購入した。

メモリが多くてフルHDなのでなかなかに快適。2万で買えるならもっと速く買っておけばよかった。

照明デザイン究極ガイドなど照明関係の本をいろいろ読んだ

照明デザイン究極ガイド 最新版

  • QA集。コーブ照明を検討しているのでその辺りのQAが参考になった。
  • 基本、造作なのでコストが大変。市販品を工夫でなんとか、みたいなのとは違う世界。
  • 後半の素材別の透光サンプル集がすごい。照明計画デザイナーはこんなことまで考えているんだね

住まいの照明設計

  • 空間の明るさ感の説明がわかりやすい
  • 説明が全般的にコンパクトでわかりやすい
  • コーブ照明のカットオフラインの話は学びがある
  • 居室ごとのポイントもわかりやすかった

世界で一番やさしい照明 (110のキーワードで学ぶ)

  • キーワードごとに2ページしか説明がないので割と物足りない
  • オフィスや商業施設の説明が多い

NA選書 照明ガイド

  • 最初のチャプターの、光による行動誘因、ベース照明としての間接照明の使い方とムラを抑える工夫などは役に立った
  • その後は公共施設、商業施設の説明がメインになるのであまりフィットせず

とっておき住宅デザイン図鑑

イデア集。こういうのをどれか一つでも入れると、面白い住宅になるのかもしれない。

福多 佳子 超実践的住宅照明マニュアル 増補改訂カラー版 を読んだ

LED完全対応版が出ているけど、基本的な説明は変わっていないと思うので、読んだのは古い方。

照明の本はだいたい、理論と実践というパートに分かれていて、

  • 理論パートでlm, lx, cdの説明から、光源ごとの用途、器具ごとの用途の説明
  • 実践パートでは、住宅での居室ごとでの考え方、作例、商業施設での作例

を説明しているのだけど、この本は、理論と実践のバランスがよく、住宅居室ごとの説明と作例も手厚くて、素人が個人住宅の設計を考える最初の一歩として、これを読むと一通りのインプットができる。良い本。

タスク・アンビエント照明という概念を学んだのだけど、全体を照らすアンビエント照明と必要な手元を照らすタスク照明という考え方はわかりやすい。全体を通して抑えておいた方がいい。

以下、読んでいるときのメモ。

  • 天井、壁面を照らすと広がりを感じやすい
  • フロアランプなどで光の重心を下げると部屋の安定感を印象づけやすい
  • ダイニングのペンダントライトは卓上から70mm
  • ダイニングにペンダントライトをつけても、全体を照らす照明もあった方がいい
  • 建築化照明のコーブ照明は30度傾斜とかさせると光がよく広がる
  • 玄関は段差を照らして強調するとアプローチしやすい

長野県の地方都市で100坪の土地を買った

岡山の事情を読んでなるほどと思い、手元に書いたメモを公開してなかったことを思い出したので公開しておく。


移住した先の上田市で土地を買った。こっちに引っ越してから1年も経ってないのに、展開の速さに自分でもびっくりする。

土地を買うにあたっての感想などを書いておく。

土地を買ってから住宅会社を決めたのでそれも後で公開する。Suumoカウンターや住宅展示場なども見たけど、それでは選ばなかったみたいな話。

いい土地は出てこない

全然出てこない。本当に出てこない。地方でもいい土地を買うのって全然簡単じゃなかった。

東京より地方の方が土地も買いやすいとか漠然と思っていたけど、出てくるのは基本的に新規の分譲地で、どこもいい土地はあらかた開発されているので、今から新規で出てくるのは公共交通から遠いところとか、ハザードリスク激高みたいなところばかり。

当たり前の話だけど、いいところだと高いし、すぐ売れてしまう。 いい土地というはもちろん人によるんだけど、

  • 買い物や交通の利便性がよく、
  • ハザード地域から外れていて、
  • 道路幅が狭すぎて消防車や救急車が入りにくいとかもなく、
  • 騒がしくなく寂しすぎもせず、
  • 車で出入りしやすいけど、乱暴な運転の車や騒音なども少なくて、
  • 公園などへも行きやすく、
  • 評判の悪くない学校の学区で、
  • 眺望がひらけていて、
  • 南側の採光を遮るものがなく、

みたいなところはだいたい多くの人にとってのいい土地で、そりゃまあ出てこないし、でてきても高いし、そして、すぐ売れてしまう。

いい土地は表に出てこない

いい土地はインターネットにも出てないし、なんなら不動産屋ネットワークにも載ってない。出たらすぐ売れるはず。

不動産屋にも相談してたけど特に連絡もなかったな。むしろ、建築会社の方が積極的に土地を探してくれる(建てると儲かるので)けど、ネットワークに出てる土地は売れ残ってる土地なので、あんまり意味はなかった。

僕が見つけたのは、住みたいエリアをジョギングしたり散歩したりしていたときにたまたま見つけた土地で、不動産屋ネットワークに載ってない土地だった。立て看板の電話番号に電話して、それで買うことができた。

いい土地は高い

当たり前なんだけど、上記のような条件が揃った土地は相場より高かった。まあでも、地価が高い地域ということがもたらすメリットもあるし、地価はそんなに下がるものでもないので、その辺もひっくるめて納得して買った。

土地と税金

税金のこと全然知らない。土地って、更地より家屋がついてる方が全然税金安いんだね。

固定資産税

3年間、固定資産税額の2分の1が軽減 https://www.city.ueda.nagano.jp/soshiki/zeimu/2766.html

長期優良住宅なら5年 だけど、2022-03-31までの間に新築 だけど、延長するかもらしい https://www.city.ueda.nagano.jp/soshiki/zeimu/4494.html

耐火住宅とは鉄筋コンクリート造や鉄骨鉄筋コンクリート造など

不動産取得税の軽減措置 https://www.pref.nagano.lg.jp/zeimu/kurashi/kenze/aramashi/aramashi/fudosan/kegen/shikichi.html 0円になるくらい軽減されるようだ 不動産取得申告書っていつ提出するんだろう 県税事務所に電話してみるか

行政書士さんに支払う費用もけっこうかかる

行政書士さんに支払う費用もけっこうかかる。私道の共同所有分もあったりすると、その分も手数料かかってくる。安くない。

値切り交渉は不動産屋の仲介手数料も交渉するべき

マックスの「取引物件価格(税抜)×3%+6万円+消費税」とか普通に請求されたりするけど、こここそ値切り交渉すべき。両手取引なら絶対交渉したい。

バリューオブジェクトを利用しやすくするためのActiveRecord Attribute API, ActiveModel Attribute APIでのカスタムクラスの活用

サブジェクトが長い。

tl;dr

  • Attribute APIにはカスタムクラスを登録できるのでバリューオブジェクトを使うのに便利
  • 宣言に合わせて自動で変換してくれるので、デシリアライズのときにも便利
  • バリューオブジェクトを積極的に使っていきたい

ActiveRecord Attribute APIの利用

ActiveRecordにはAttribute APIというのがあって defaultlimit が指定できて便利です。 ActiveRecord::Attributes::ClassMethods

Boolean型の属性に"false""off" などのそれっぽい文字列を入れると false というBoolean型への変換をしてくれているのもこのレイヤーです。 rails/boolean.rb at d269b5a4cf3fbd8072927e6fda4a2e38dc640d2c · rails/rails · GitHub

Attribute APIにはカスタムクラスを定義することもできるので、バリューオブジェクトの利用も容易になります。

例えば以下のようなテーブルとそれに対応したモデルがあって、

# db/migrate/20211117084043_create_cakes.rb
class CreateCakes < ActiveRecord::Migration[6.1]
  def change
    create_table :cakes do |t|
      t.integer :price

      t.timestamps
    end
  end
end

# app/models/cake.rb
class Cake < ApplicationRecord
  attribute :price, :list_price
end

attributeとして list_price という型が指定されていると、バリューオブジェクトとして以下が定義されていて、かつ、シリアライザーが同時にこのように定義されていて、

# app/models/list_price.rb
class ListPrice
  include ActiveModel::Model
  include ActiveModel::Attributes

  attribute :real_price, :integer

  def with_tax
    real_price * 1.1
  end

# スコープを狭める方がいいのでクラス内に定義
  class Type < ActiveModel::Type::Integer
   def cast_value(value)
      if value.is_a?(Integer)
        ListPrice.new(real_price: value)
      else
        super
      end
    end

    def serialize(value)
      value.real_price
    end
  end  
end

initializerなどでActiveRecordの型(ActiveModelの型とは区別されているので注意)として登録されていると、

# config/initializers/types.rb
ActiveRecord::Type.register(:list_price, ListPrice::Type)

以下のように、newするときに意識することなく、バリューオブジェクトを使うことができ、かつ、DBにアクセスするときは自動でキャストしてくれます。

irb(main):008:0> cake = Cake.new(price: 5400)
=> #<Cake id: nil, price: #<ListPrice:0x00005601c7c72a30 @attributes=#<ActiveModel::AttributeSet:0x00005601c7c72990 @attributes={"...
=> #<ListPrice:0x00005601c7c72a30 @attributes=#<ActiveModel::AttributeSet:0x00005601c7c72990 ...
irb(main):010:0> cake.price.with_tax
=> 5940.000000000001
irb(main):012:0> cake.save
  TRANSACTION (0.1ms)  begin transaction
  Cake Create (24.9ms)  INSERT INTO "cakes" ("price", "created_at", "updated_at") VALUES (?, ?, ?)  [["price", 5400], ["created_at", "2021-11-17 09:40:26.428082"], ["updated_at", "2021-11-17 09:40:26.428082"]]
  TRANSACTION (32.9ms)  commit transaction
=> true
irb(main):013:0> c2 = Cake.first
  Cake Load (6.4ms)  SELECT "cakes".* FROM "cakes" ORDER BY "cakes"."id" ASC LIMIT ?  [["LIMIT", 1]]
=> #<Cake id: 1, price: #<ListPrice:0x00005601c65a3f70 @attributes=#<ActiveModel::AttributeSet:0x00005601c65a3e80 @attributes={"re...
irb(main):014:0> c2.price.with_tax
=> 5940.000000000001
irb(main):015:0> c2.price.real_price
=> 5400

ActiveModel Attribute APIでの利用

Railsガイド にはないですが、ActiveModelで属性を定義するときにActiveModel::Attributes::ClassMethodsを使うと同じように定義ができて便利です。そして、ここでも同じようにカスタムクラスを使うことができます。

class Bread
  include ActiveModel::Model
  include ActiveModel::Attributes

  attribute :flavor, :string
  attribute :price, :list_price
end

ここで一つ注意なのは、ActiveRecordのAttribute APIの型の登録とActiveModelの型の登録は区別されているため、どちらにも使うには2回登録する必要があります。

# config/initializers/types.rb
ActiveRecord::Type.register(:list_price, ListPrice::Type)
ActiveModel::Type.register(:list_price, ListPrice::Type)

これらを登録すると以下のように、ActiveModelのクラスでもシームレスにバリューオブジェクトを利用できます。

irb(main):018:0> brea = Bread.new(price: 500)
=> #<Bread:0x00005601c8095d38 @attributes=#<ActiveModel::AttributeSet:0x00005601c8095c98 @attributes={"price"=>#<ActiveModel::Attr...
irb(main):019:0> brea.price.with_tax
=> 550.0
irb(main):020:0> brea.price.real_price
=> 500

ActiveModelでの入れ子シリアライズのときに便利

上記のシームレスな型の変換は、シリアライズの時にも便利です。というか、今回はこのニーズがあって、挙動を調べていました。

例えば、以下のような入れ子のActiveModelモデルがあったとして、

class Bread
  include ActiveModel::Model
  include ActiveModel::Attributes
  include ActiveModel::Serializers::JSON

  attribute :price
  attribute :wheat
end

class Wheat
  include ActiveModel::Model
  include ActiveModel::Attributes
  include ActiveModel::Serializers::JSON

  attribute :color, :string
end

そのままシリアライズすると、デシリアライズの時に型が戻らず、ハッシュとして復元されてしまいます。

irb(main):001:0> b1 = Bread.new(wheat: Wheat.new(color: 'white'))
=> #<Bread:0x00005556cc140258 @attributes=#<ActiveModel::AttributeSet:0x00005556cc140168 @attributes={"price"=>#<ActiveModel::Attr...
irb(main):004:0> b1.to_json
=> "{\"attributes\":{\"price\":null,\"wheat\":{\"attributes\":{\"color\":\"white\"}}}}"
irb(main):002:0> b2 = Bread.new.from_json(b1.to_json)
=> #<Bread:0x00005556cb9d74d0 @attributes=#<ActiveModel::AttributeSet:0x00005556cb9d7408 @attributes={"price"=>#<ActiveModel::Attr...
irb(main):003:0> b2.wheat
=> {"color"=>"white"}
# ハッシュなので使いにくい!!!!

なので、この場合もwheat型を定義して登録してやると、

# app/models/bread.rb
class Bread
  include ActiveModel::Model
  include ActiveModel::Attributes
  include ActiveModel::Serializers::JSON

  attribute :price
  attribute :wheat, :wheat
end

# app/models/wheat.rb
class Wheat
  include ActiveModel::Model
  include ActiveModel::Attributes
  include ActiveModel::Serializers::JSON

  attribute :color, :string

  class Type < ActiveModel::Type::Value
    def cast_value(value)
      if value.is_a?(Hash)
        Wheat.new(value)
      else
        super
      end
    end
  end
end

# config/initializers/types.rb
ActiveModel::Type.register(:wheat, Wheat::Type)

JSON由来のハッシュからのデシリアライズのときにも、適切なバリューオブジェクトの型として戻してくれるので非常に扱いやすいです。

irb(main):001:0> b1 = Bread.new(wheat: Wheat.new(color: 'white'))
=> #<Bread:0x000056235a18a5f0 @attributes=#<ActiveModel::AttributeSet:0x000056235a18a500 @attributes={"price"=>#<ActiveModel::Attr...
irb(main):002:0> b2 = Bread.new.from_json(b1.to_json)
=> #<Bread:0x0000562359b33a08 @attributes=#<ActiveModel::AttributeSet:0x0000562359b33918 @attributes={"price"=>#<ActiveModel::Attr...
irb(main):003:0> b2.wheat
=> #<Wheat:0x000056235a176ed8 @attributes=#<ActiveModel::AttributeSet:0x000056235a176e38 ...
irb(main):004:0> b2.wheat.color
=> "white"