手紙社さんが主催している東京蚤の市に行ってきた。





すごい広い会場でいろんなものが見れて楽しかった。
戦利品
欲しいものいっぱいで財布が危なかったけど、今回買ってきたのはこんな感じ。

かなり厳選して本当に気に入ったのだけ買ってきた。
いい買い物ができたので、次回開催も楽しみ。
手紙社さんが主催している東京蚤の市に行ってきた。





すごい広い会場でいろんなものが見れて楽しかった。
欲しいものいっぱいで財布が危なかったけど、今回買ってきたのはこんな感じ。

かなり厳選して本当に気に入ったのだけ買ってきた。
いい買い物ができたので、次回開催も楽しみ。
ライブラリを導入すると、そのライブラリが依存しているライブラリも全部入ってきます。時には「このライブラリはなに経由で入ってきてるんだ?」と調べたいことがあります。
そこで Package.swift のdependencies内に書かれているそれぞれのライブラリが、どんなライブラリに依存しているかを調べます。
Package.swiftがあるディレクトリで次のコマンドを実行します。
swift package show-dependencies --format json -o dependencies.json
これによって dependencies.json に依存関係がまとまったJSONファイルが書き出されます。
こんな感じで表示されます。
便利。
吉祥寺を散策してきたのでその記録。
ブルースカイコーヒーのねこドーナツとケーニッヒのホットドッグとフランクフルト。

井の頭公園は結構人がいた。あひるさんボートも人気で大行列だった。結構暖かい日だったので、ボート乗るのも気持ちよさそうだったけど流石に混みすぎててやめておいた。
古道具屋と日用雑貨屋とカフェが一緒になったお店、四歩(しっぽ)へ

売っている雑貨もいい感じだし、店内も落ち着いていて良かった。 いちごのミニパフェといちごのアールグレイティーを注文。いちご祭り。ミニパフェ、ちょうどいい量だし中のアイスも卵感の強いミルクセーキ的な味で美味しかった。甘いものは大量に食べられないので、ミニパフェがあるの助かる。

夜はハモニカ横丁へ。すごい久しぶりに来たので、知ってる店がなくなってる。
一軒目はダパイダン105へ。焼き小籠包が有名なお店。

焼き小籠包は「小皿にとって、スープを出してから食べてね」と最初に注意される。それをしてもスープが飛びがちなので、紙エプロンはつけておいたほうが吉。
ザーサイが食べ放題なのも嬉しい。
締めに寿司。

生さばがあって、脂がのってて美味かった。飲んだあとのあさり汁も美味しい。

めちゃくちゃかわいい。
電源はUSB-Cなので、コンセント経由でもモバイルバッテリー経由でもつながれば光る。でも光ってなくても存在感があってかわいい。

近くで見ると「溝が掘ってあるだけだな」という感じだけど、ちょっとはなれるといい感じにドット感を感じるようになっている。趣味のインテリアとしてちょうどよい。
プレミアムバンダイで買える。
iOS 17+で使えるSwiftUI用のAPIに .contentTransition(.numericText()) というのがある。
使い方は簡単で
Text("\(value)") .contentTransition(.numericText(value: value))
こうやって書けば、Textの中身が変わる時にアニメーションしてくれる。withAnimation {} 経由でStateは変えないといけないことに注意。
でっかい乱数を生成して4桁ずつスペースで区切って表示する。
struct ContentView: View { @State private var number: Int = 0 var body: some View { VStack { Text(format(number: number)) .font(Font(UIFont.monospacedDigitSystemFont(ofSize: 32, weight: .bold))) .contentTransition(.numericText(countsDown: true)) Button("Random") { withAnimation { number = Int.random(in: 1...10000000000000000) } } .buttonStyle(.borderedProminent) } } func format(number: Int) -> String { let formatter = NumberFormatter() formatter.groupingSeparator = " " formatter.groupingSize = 4 formatter.usesGroupingSeparator = true formatter.minimumIntegerDigits = 16 return formatter.string(from: NSNumber(value: number)) ?? "" } }

カウンターを実装すれば早いけど、すぐできちゃうので別の実装をしてみる。
struct CreditCardView: View { @State private var cardNumber: String = "4111 1111 1111 1111" @State private var show: Bool = false var body: some View { ZStack { RoundedRectangle(cornerRadius: 8) .fill(Color(.lightGray).shadow(.drop(color: .black.opacity(0.2), radius: 4, x: 0, y: 0))) .stroke(Color(.border), style: StrokeStyle(lineWidth: 1)) HStack { HStack(spacing: 16) { Image(systemName: "creditcard") .resizable() .scaledToFit() .frame(width: 20) .foregroundStyle(Color(.border)) Text(cardNumber) .font(Font(UIFont.monospacedSystemFont(ofSize: 16, weight: .bold))) .contentTransition(.numericText(countsDown: show)) } Spacer() Button(action: { withAnimation { show.toggle() if show { cardNumber = "4111 1111 1111 1111" } else { cardNumber = "**** **** **** 1111" } } }, label: { if show { Image(systemName: "eye.fill") .resizable() .scaledToFit() .frame(width: 20) .foregroundStyle(Color.gray) } else { Image(systemName: "eye.slash.fill") .resizable() .scaledToFit() .frame(width: 20) .foregroundStyle(Color.gray) } }) } .padding([.leading, .trailing], 16) } .frame(height: 60) .padding([.leading, .trailing], 16) } }
これを実行するとこうなる

いい感じにアニメーションする処理が簡単なコードでかけてめでたい。
.numericText(countsDown: show) でshowの値をみることで下がるアニメーションと上がるアニメーションをトグルできるようにしているので、隠す時と表示する時で対応した動きができるようになっている。
RICOH GR IIIxを買った。
いわゆるコンデジ。
プログラムオートやネガフィルムフィルタで撮った写真たち。全部現像せずにJPEG撮って出ししたものを、ブログ用に縮小だけしている。







買ってよかった。ちょっとしたお出かけでも常に持ち運んでいる。「1日中観光して写真を撮りまくる」という日でもなければ電池も余裕で持つ。とにかく撮れる画がいい。