江端智一のホームページ
先日、消火器を調べていたところ、耐用年数を超えていることが分かったので、交換することにしました。
思ったよりお高くて、驚いたのですが、火災のコストに比べれば安いものです。
で、古い消火器を玄関の外で試したのですが、
(1)消火器は一度放射を始めると止まりません(レバーを元に戻しても噴射が続く)
(2)消火器の消火用噴粒で、我が家の玄関と車庫は、ピンク色に染まっています。
以上
https://www.apc.com/jp/ja/faqs/FA53474/
APC RS 550VA Sinewave Battery Backup 100Vのマニュアル
https://www.apc.com/jp/ja/product/BR550S-JP/apc-rs-550va-sinewave-battery-backup-100v/
スプリングコードの終端が切れてしまった場合
結束バンドで閉じることができます。
特定時間の同じ部屋、喋りやすさ、子供(幼児、乳児)をきっかけに会話スタート、年代別他人へのアクセス(要先行研究)
地図を複数用意して、そこにエージェントをランダムウォークさせれば良い。
エージェントは、一日単位で滞留・移動を計算して、また複数の地図に展開すれば良い。
選択される地図は、エージェントの戦略となり、戦略は常時変更しても良い。
SCのコストは原則移動距離。あとは年齢によるコスト変化とか入れても良いかも。
横浜市統計書によると2022年度の1日平均乗降人員は18,339人(乗車人員:9,255人、降車人員:9,084人)である[3]。2020年度の1日平均乗降人員は16,535人であり[4]、京急線全72駅中30位。1988年をピークに乗降客数は減少し続けている。
https://ja.wikipedia.org/wiki/%E4%BA%AC%E6%80%A5%E5%AF%8C%E5%B2%A1%E9%A7%85
乗り場 系統 経由 行先 備考
富1 富岡西四丁目 横浜氷取沢高校 平日は朝夜のみ
富2 横浜氷取沢高校 能見台車庫前
富3 氷取沢 金沢文庫駅西口
富5 富岡西四丁目 富岡9期ニュータウン 朝夕のみ
富6 富岡西循環 京急富岡駅 日中のみ
main2.goで、ノードのコストが分からない場合でも対応できるように改良したもの。
package main
import (
"fmt"
"math"
)
type Node struct {
Name string
Value float64 // 各ノードに設定された数値 (負数の場合、この数値を無視する)
}
type Edge struct {
From *Node
To *Node
Weight float64
}
func main() {
/*
// ノードとエッジを初期化
nodeA := &Node{Name: "A", Value: 5}
nodeB := &Node{Name: "B", Value: 8}
nodeC := &Node{Name: "C", Value: 6}
nodeD := &Node{Name: "D", Value: 2}
nodeE := &Node{Name: "E", Value: 4}
*/
// ノードとエッジを初期化
nodeA := &Node{Name: "A", Value: 3}
nodeB := &Node{Name: "B", Value: -1} // 負数の場合無視
nodeC := &Node{Name: "C", Value: -1} // 負数の場合無視
nodeD := &Node{Name: "D", Value: 2}
nodeE := &Node{Name: "E", Value: -1} // 負数の場合無視
nodeF := &Node{Name: "F", Value: -1} // 負数の場合無視
nodeG := &Node{Name: "G", Value: 1}
/*
edges := []Edge{
{nodeA, nodeB, 2},
{nodeA, nodeC, 4},
{nodeB, nodeC, 1},
{nodeB, nodeD, 7},
{nodeC, nodeD, 3},
{nodeC, nodeE, 5},
{nodeE, nodeD, 2},
}
*/
edges := []Edge{ // A,B,C,D,E,Fの順で双方向をしてい
{nodeA, nodeB, 1},
{nodeB, nodeA, 1},
{nodeB, nodeC, 1},
{nodeC, nodeB, 1},
{nodeC, nodeD, 1},
{nodeD, nodeC, 1},
{nodeD, nodeE, 1},
{nodeE, nodeD, 1},
{nodeE, nodeF, 1},
{nodeF, nodeE, 1},
{nodeF, nodeG, 1},
{nodeG, nodeF, 1},
}
startNode := nodeG
targetNode := nodeA
// ダイクストラアルゴリズムを実行
shortestPath, totalWeight := dijkstra(startNode, targetNode, edges)
if shortestPath == nil {
fmt.Println("最短経路が見つかりませんでした。")
} else {
fmt.Printf("最短経路: %v\n", getNodeNames(shortestPath))
fmt.Printf("最短経路の総重み: %.2f\n", totalWeight)
}
fmt.Println(nodeA.Value)
fmt.Println(nodeB.Value)
fmt.Println(nodeC.Value)
fmt.Println(nodeD.Value)
fmt.Println(nodeE.Value)
fmt.Println(nodeF.Value)
fmt.Println(nodeG.Value)
}
func dijkstra(startNode, targetNode *Node, edges []Edge) ([]*Node, float64) {
// ノード間の最短距離を格納するマップを初期化
shortestDistances := make(map[*Node]float64)
// 各ノードの前のノードを格納するマップを初期化
predecessors := make(map[*Node]*Node)
// 最短距離を無限大で初期化し、開始ノードの最短距離を0に設定
for _, edge := range edges {
shortestDistances[edge.From] = math.Inf(1)
shortestDistances[edge.To] = math.Inf(1)
}
shortestDistances[startNode] = 0
// 訪問済みのノードを格納するセットを初期化
visitedNodes := make(map[*Node]bool)
// まだ訪問していないノードが残っている間ループ
for len(visitedNodes) < len(shortestDistances) {
// 未訪問のノードの中から最短距離のノードを選択
currentNode := getClosestUnvisitedNode(shortestDistances, visitedNodes)
// ノードがない場合やターゲットノードに到達した場合は終了
if currentNode == nil || currentNode == targetNode {
break
}
for _, edge := range edges {
if edge.From == currentNode {
if edge.To.Value < 0 { // -1などの負数が入っていたら、更新してしまう
edge.To.Value = currentNode.Value // 下のif文を通す為の手続(書き換えても大丈夫かな(今のところ大丈夫そうだけど))
}
if edge.To.Value >= currentNode.Value { //
distance := shortestDistances[currentNode] + edge.Weight
if distance < shortestDistances[edge.To] {
shortestDistances[edge.To] = distance
predecessors[edge.To] = currentNode
}
}
}
}
// このノードを訪問済みとしてマーク
visitedNodes[currentNode] = true
}
// 最短経路を復元
shortestPath := make([]*Node, 0)
currentNode := targetNode
for currentNode != nil {
shortestPath = append([]*Node{currentNode}, shortestPath...)
currentNode = predecessors[currentNode]
}
// 最短経路の総重みを計算
totalWeight := shortestDistances[targetNode]
return shortestPath, totalWeight
}
func getClosestUnvisitedNode(distances map[*Node]float64, visitedNodes map[*Node]bool) *Node {
minDistance := math.Inf(1)
var closestNode *Node
for node, distance := range distances {
if !visitedNodes[node] && distance < minDistance {
minDistance = distance
closestNode = node
}
}
return closestNode
}
func getNodeNames(nodes []*Node) []string {
names := make([]string, len(nodes))
for i, node := range nodes {
names[i] = node.Name
}
return names
}
昨夜の大掃除で、長女に使っていたiPod(×iPhone, ×iPad)がでてきました。
実験用として使えるかなぁ、とか考えて、最充電してみたら動くことは確認してみたのですが、『アクティベーションロックの解除』でハマりました。
そこで、家族全員に協力を要請することになりました。
まず、長女本人が覚えていないAppleのアカウントをハックする為に、過去に作った家族全員用の暗号表を解読して、アカウントの解除(他人がやれば、"アカウントの乗っ取り"という)というところまで持ち込んだのですが、別アカウントであるらしいことが分かりました(ここまでのハッキングの努力が水の泡)
この別アカウントについて、長女に問い合わせたのですが「分からん」と言われ、仕方がないのでカスタマーセンターに連絡しました。
シリアル番号は分からないか、と言われて、iPod本体を探してみたところ、『もの凄い小さな文字』のシリアル番号を見つけました。
拡大鏡のメガネでも視認できなかったので、iPhoneで撮影したものを拡大して確認できました。
(言うまでもありませんが、表示したシリアル番号は改竄済みです)
これでシリアル番号は確認できたのですが、今度は「購入店の購入履歴はあるか」と言われました。
もちろん、そんなものあるわけないと思いましたので「それでは、このアクティベーションは不可能、ということですね」と諦めたように呟いて電話を切りました。
『やれやれ、ここまでか』と、iPodを廃棄物用のバスケットに放り込もうとしたところで、嫁さんが、2010年のレシート持って私の部屋にやってきました。
再度、カスタマセンタに電話して、オペレータのタケダさんと協力しながら、情報の入力を続けました。
購入日、購入金額、店舗名、店舗の住所、電話番号、領収書と保証書の写真撮影と送付・・・
先程、申請処理を完了しました。
私、別段、このiPodがどうしても必要という訳ではなく、今、本当に忙しくて死ねるというくらいの状況なのですが ――なんと言うんですねえ、これがダンジョンRPGゲームのようなものでしょうか(私、ゲームやったことないので知らないのですが)。
オペレータさんと会話続けながら、この画面が出てきた時に、思わずガッツポーズしてしまいました。
いえ、本当に忙しいんです。こんなことやっている場合じゃないんです。
あ、今、Amazonから、時計交換用の電池が届いたみたいです・・・仕方ないなぁ・・・
「そこに怪我人がいれば、助けるのが医者だ」と「そこに動かない時計があれば、動かすのがエンジニアだ」というセリフが等価なのかは分かりませんが ――
階段に時計が落ちていました。少なくとも私のものではありません。
次女が、面接の直前に、100均で購入したとかいう話を聞いていたので、多分「それ」だろうと思います。
見たところ、どうやら電池切れのようです。
「そこに怪我人がいれば、助けるのが医者だ」と「そこに動かない時計があれば、動かすのがエンジニアだ」というセリフが等価なのかは分かりませんが ――
ともあれ、今の私は、私は、1/5日の発表資料の作成と、本日届いた重さ5kgのブリの解体で疲れ果てていたのです。
やらなければならない作業は、山ほどありますが、ちょっとだけ・・・といいながら、時計の解体をやっていました。
時計の裏の金属には、とっかかりがなく、明らかに「使い捨て」と割りきった商品であることは分かりましたが、精密ドライバーの一番小さなマイナスドライバーを使って抉じ開けました(傷くらいはついても良かろう、と割りきって)。
電池が小さい ―― 型式が視認できないので、iPhoneで拡大して撮影しました。
この電池(SR626)の在庫はない ―― 仕方がないので、Amazonで発注しました。
明日届く電池を1個だけで、一番安いものは、これでした。
この時計、明日には再起動するだろうと思います。
-----
動き出しました。
左は4000円の私の愛用の時計、右が今回電池交換をして動きだしたダイソーの900円の時計です。
(900円時計は、次女が、面接の時に時計を忘れて、あわてて購入したもの、だそうです)
腕時計は、その人の「格」を示すものだそうですが ―― まさに、これらの時計は、私の「格」を示していると思います。
『時計バンドが安っぽい』と言われましたので、バンドも交換しました(16mm)。
もう一つのクロック(CASIO Wave Ceptor)も同じもの(18mm)を付けています。