未分類

横浜市統計書によると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 富岡西循環 京急富岡駅 日中のみ

 

Photo

未分類

ノード間のコストが与えられているダイクストラ計算を行うノードのそれぞれに数値が設定されていて、ノードが持っている数値より小さい数値のノードとは繋がることができない、というアルゴリズムをGo言語で作成する

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)を付けています。

未分類

英語論文で、"social capital (hereafter referred to as SC)"と定義した後、social capitalを示す用語は、"the SC" または"SC"のどちらになりますか?
-----
一般的に、"social capital (hereafter referred to as SC)"と定義した後、その後の文脈では"SC"を使用することが一般的です。これにより、読者が簡潔に理解しやすくなります。"the SC" という表現は少なく使用されます。以下は例です:
"Social capital (hereafter referred to as SC) plays a crucial role in building trust within communities. The SC of a community can be measured by..."
"SC is an important factor in the success of collaborative projects. Researchers have developed various methods to assess the impact of SC on..."
"The concept of SC has gained significant attention in recent years. One of the key attributes of SC is its ability to facilitate..."
一度 "social capital" を "SC" と略したら、その後の文章では通常 "SC" を使用し、冠詞 "the" を省略します。

未分類

会社から、セキュリティ対策の指示がでると心底うんざりします。

I am genuinely sick and tired of receiving instructions from the company about security measures.

(1)まず、資料の内容が分からない。一体何を目的に何がしたいのかがさっぱり分かりません。

(1) First of all, I don't understand what the material is about. I have no idea what they want to do for what purpose.

(2)一発で、マニュアル通りに上手く設定できた試しがない。

(2) According to the manual, I have never been able to set it up successfully in one shot.

(3)設定後に、パソコンを再起動を試みると、かなり高い確率で失敗し、最悪の場合、システムが全部壊れることもある。元の状態に戻すことすらできない。

(3) After setting up, attempts to restart the computer fail pretty, and in the worst case, the entire system can be destroyed. It is not even possible to restore the system to its original state.

ちなみに、これは『ITエンジニア』である私の話です。

By the way, this is my story as an 'IT engineer.'

そうでない人にとっては、このような指示は『悪夢』そのものでしょう。

Such instructions would be a 'nightmare' for those who do not.

-----

このような複雑な設定作業を、エンドユーザに押し付ける ―― これは、『エンジニア集団の会社』だからでしょうか?

Is it because this is a "company of engineers" that forces the end user to go through such a complicated setup process?

それなら諦めるしかないと思いますが ―― それでも、私は本当に怖いです。

Then I guess I'll have to give up, but I'm still really scared.

というか、セキュリティ対策のオペレーションに失敗した場合、その日の仕事は止まりますし、下手すると数日から一週間くらい、何もできなくなる可能性があります。

Or rather, if a security operation fails, work stops for the day, and if it is not good, you may not be able to do anything for a few days or a week.

サイバー攻撃より、酷い。

It is worse than a cyber attack.

実際、私、何度か、そういう目に遭遇しています。

Several times, I have encountered that kind of thing.

-----

今後、さらに、サイバー攻撃は巧妙かつ高度になります。そして、多分、私達はそれについて行けなくなります。

In the future, cyber attacks will become even more sophisticated and advanced. And maybe we will not be able to keep up.

攻撃者は、攻撃だけに集中できますが、私たちは、防御だけに一日を費すことは許されません。

An attacker can focus only on the attack, but we cannot allow our day to be spent only on defense.

通常業務に加えて防御もやる、というのは、相当に過酷な労働環境です。

It is a very demanding work environment, doing defense and regular work.

-----

今後、この状態を続き、セキュリティ対策がさらに難しくなり、私たちがそれについていけなくなれば、

If this continues and security measures become even more difficult for us to keep up with in the future,

―― ハッカー(クラッカー)側の一人勝ちとなる世界が到来する

-- A world in which hackers (crackers) will be the sole winners.

ような気がします。

I feel so.

-----

で、対策なんですが、

So, the countermeasure is,

■パソコン、スマホ、インターネットを全て放棄する

- Abandon all computers, smartphones, and the Internet.

というのは無理としても、

Even if it is impossible to say,

■ダイヤルアップ接続の時代まで、時間を遡る

- Tracing back time to the days of dial-up connections

ところまで退行するのは、どうかなぁ、と、かなり真面目に考えています。

I am seriously thinking that we should regress to this point.

これは、密告が奨励されたかつての社会主義国家や現在の独裁国の様ですし

 

未分類

Y: Latitude: Lat :経度:南北 35.3715607
X: Longitude:Lng,Log:経度:東西 139.6268272,

未分類

https://www.kobore.net/thanks.txt.html

江端さんのひとりごと

「Let me say "Thank you"」

2000/10/21

膨大な英文ドキュメント、英語による技術者との議論、開発途上で不完全なライブラリ群に、私が血の涙を流しながら取り組んできた製品、PolicyXpert(PX) Version 2.0の製品リリースの期日が決まりました。

思い返せば、今年の3月、何が何だか分からないうちに米国赴任が決り、いきなり、日立とヒューレットパッカードの技術者たちの日英・英日翻訳ゲートウェイをやらされのたのを最初に、数多のシステムダウンを目の当りにしながら、胃を痛めた日々が、走馬燈のように・・・って、まだ、プロジェクト終っていないんだけど、とにかくリリースまで漕ぎつけたことに、想い浸ること多であります。

ところで、この製品(PX V2)は、インターネットプロバイダや、電話会社のネットワーク管理などを想定していますが、やろうと思えば、自宅のホームLANのネットワークのQoS(*1)管理もできます。

ご興味のあるかたは、是非御購入をご検討下さい。

(*1)Quality of Service ネットワークの通信品質のこと。電話の声がとぎれたりするネットワークは、「QoS管理されていない」などの言い方をする。

-----

先日、日立側のチームメンバであるIさんと、次のバージョンのPXの実装方式に関して議論をしていました。

ネットワーク技術の分野は、非常に進歩が速く、製品の市場投入のタイミングを逃すと、莫大なコストをかけた挙句、まったく役に立たない製品を開発してしまうことになるので、どのような機能を、何時までに完成させるか、ということが大きなポイントになるのです。

その上、標準化の問題(*2)やら、ビックベンダの動向、なにより、我々の技術力が問われます。

(*2)江端さんのひとりごと「IETF惨敗記」シリーズなど

Iさんのパーティションのホワイトボードの前で、我々が話をしているところに、開発チームを統括するジェネラルマネージャのヘンリーさんがやってきました。

ヘンリーさんは、笑顔で私達に語りかけてきました。

「昨日、PX V2のコードのバグが減少方向に転じたと言う報告を受けたよ」

勿論、私達はその報告を、チームミーティングで報されていました。

製品を開発する以上、可能な限りバグを潰し、安定度を高めなければならないのは、システムエンジニアの宿命です。

ヘンリーさんは、「遂に、終りの始まり(start of the end)だね」と言った後で、「君達の多大な努力に、心から感謝している。もう一度、ありがとうと言わせて貰えるかな」と言いながら、私達に握手を求めて来ました。

おどおどと差しだした私の手を、ヘンリーさんの大きな暖かい手が包んでくれたのを、漠然と覚えています。

パーティッションを立ち去るヘンリーさんの後姿を見ながら、私は両手の拳を口のところに持って行って、すんでのところで『ステキ!』と叫んでしまうところでした。

勿論、私だって、ヘンリーさんの言葉が「リップサービス」ということは分かっています。

でも、開発の最前線でコードに埋もれながら、バグと格闘している技術者には、このような、ほんのちょっとしたフォローが、心に染みたりするものなのです。

-----

さて、日本で働いている皆さんに質問です。

最近、大きな仕事を終えた後、「君達の多大な努力に、心から感謝している」と言われながら、部長から握手を求められた人。

いますか ?

(本文章は、全文を掲載し内容を一切変更せず著者を明記する限りにおいて、転載して頂いて構いません。)