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"

花井 架津彦 庭と住まいの照明手帖 を読んだ

照明の参考に読んでみたら、3分の1が外構、庭の照明について、3分の1が室内照明と庭との調和についてで、3分の1が室内照明についてでちょっと期待と違った。だけど、外構の作り方についてもすごく参考になって、読んでよかった。

外構を照らすことはそんなに考えてないけど、照らした時の映え方とか上から照らすことの価値とかわかりやすかった。

室内照明と庭との調和は、ガラスへの写り込みをどう制御するかがメインと理解。基本的には明暗の差を大きくして、ガラス側に光源や光の反射を向けないのが大切というのがわかった。けど、日本の一般住宅ってみんな夜はカーテン閉めるからそもそもガラスを意識しないよね。なんというか、夜にカーテンを閉めないで済む庭や中庭や眺めを持っている家ってほとんどないし、庭の照明の設置もほとんどないし。贅沢な話だ。

室内照明のパートはすごい。照明の配置を変えた比較の写真があってすごくわかりやすい。集中配灯の効果がよくわかる。廊下の照明が壁へ照り返して、それが建具を照らすと空間が美しくないとか考えたこともなかった。なんというか、照らすなら意図を持ってやれということなんだね。

もともとシーリングライトをつけるつもりもなかったし、ダウンライトつけまくるつもりもなかったけど、この本のおかげで結構良い照明計画が作れるんじゃないかと思う。

荻野寿也の「美しい住まいの緑」85のレシピ を読んだ

家づくりの検討が進んで外構も検討し始めていて、いくつか読んでみた中でこれが一番、素敵な作例があって役に立つ情報が載っている本だった。あんなオシャレな庭にする余裕はないけど、株立ちの並べ方とか木の選び方はすごく参考になった。

これもエクスナレッジの本。非常に助かる。

ブティック社はエクステリア&ガーデンという季刊誌を出しているのでそれのムックをいくつか読んでみたけど、どれも趣味に合わなかった。載っている作例もそもそもの雑誌のレイアウトも全く美しくなくて、全然内容が頭に入ってこない。

以下、眺めた本。