第十三話「競プロ、電子回路、セキュリティについて学んだよ」
こんちくわ!
どうも、金欠で翼の生えそうなチンパンジーのおがたです。
今、結構金欠で、来月の収益もいまのところ微妙で、かなり低迷期に入りました。
新作の同人を出すので、それで何とか上振れしてくれないかなと思います。
今日は、いろんな勉強をしました。
鉄則、デザインパターン、電子回路……。
鉄則というのは、『競技プログラミングの鉄則』という名著がありまして、それを読んでおりました。
累積和の部分を読んでおりました。累積和というのは、計算量を低くするテクニックで、部分和系で使える技です。
全部足し合わせて全部for文で回して……とやると、計算量が大きくなり、時間が超過し、TLEになります。
なので、この区間を足したり引いたりをやる系は全部部分和なので、累積和で求めることができます。
だから、この区間にいますという情報だけで、累積和を求めると、そのときの合計人数とかが逆に求まります。これが割とすごい話で。
たとえば、この区間、監督をしますと。それだけの情報だけで、ある日の監督者の人数を求めなさいというのは、区間の最初に1を足す、終わりに−1するということで、累積和をとってみると、その日の人数がわかるようになります。
これは何で?
+1というのは、区間ずっと+1です。それで終わると、消えるので、-1しないといけません。
というのを累積和をとると、特定の日の値を、累積和の公式から簡単に求まるので、わかると。
これが本来の累積和の使い方で、ただ区間和を求めましょうというものはあまりないと思います。
この累積和がこういう和になるよねという考えをしないといけませんね。
そうしないと、これが累積和で求まるのかどうかということがわからないからです。
今日は、探索の話を読んでしまって、明日は、動的計画法を絶対に読破したいと思います。
デザインパターンの本も読んでおりました。
ストラテジパターンとオブザーバーパターンを読みました。
OOPのよさというのは、何度も書いてますが、表と裏で処理をわけられるということにあります。
ただの関数の羅列で書いてしまうこともできます。
これは、保守性を欠いていて、どういうことかというと、一個直したら、全部直さないといけないことになるのが関数の羅列のOOP全く意識しない書き方となります。
だから、抽象クラスとか、インターフェースをかまして、やるのですね。
だけど、これに変わる強力な方法が、コンポジションです。
is-aとhas-aというのがあって。
そのままいくのが、is-aです。〇〇は〇〇である。に、変な感想を持たないときのことです。
has-aというのは、包括しているという意味です。
継承せず、型として持ってくるのが、コンポジションです。
差し替えが容易、テストしやすい、再利用性が高い、継承より柔軟。
これがコンポジションの特徴です。
よって、継承よりいいんじゃね?と言われております。
だけど、これって結構難しくて。
型をコンポジションしたい関数のものにすると、できるのですが、それを頭の中で理解しないといけないので、結構頭が初期はこんがらがります。笑
まあ、そういうのもあるよ的に覚えておけばいいと思います。
オブザーバーパターンというのは、裏と表の実装があって、裏の機能をモリモリにできるよ、というパターンです。
面白いですよね。
GoFのパターンは、23個ですけど、いろんなパターンがそのあと作られているので、ぜひ調べてみてください。Qiitaとかに載ってると思います。
ぼくはオライリーのデザインパターンを読んで勉強しております。
そのあと、アナログ電子回路を勉強してました。
まず、受動素子とかの話から、電磁気学の話、交流の話、トランスとかの話、抵抗の話とかやってました。懐かしかったですね。
何で、こんなものを自然対数の底で考えるの?というと、微分・積分がしやすいから以外にないですね。しかも、実部が実際の値にできるということからです。
これを電子情報の学生は受動的に、へえそういうするのは何でかわからないけど、学んでおくか!という感じで勝手に学ぶと思いますが、そういう背景があるよという話です。
だから、どこの教科書にも、どうして複素数を使うのかが書かれておりませんが、そういう理由からです。
普通に利便性を求めた結果だったという……。
物理学ではこうやって都合の良いように直す、もしくは近似させることが多いので、気をつけてください。
たとえば、相対性理論でも、1/(1+a)^nというのをマクローリン展開の第二項くらいまでをとって、近似させるということをしていたりします。普通にします。aがxという感じにして、やっております。
何のこと?という人は、ぜひ、アインシュタインの相対性理論について調べてみてください。
意外にも、いろんな場所で、マクローリン展開の近似方法は物理で使われるので、あ、これもしかして…と思ってください。
マクローリン展開というのは、テイラー展開の0の近傍での近似方法です。
テイラー展開は、線形的に関数をすべて表せられる無限遠の近似方法です。
その定数aの値を0にしたのが、0の近傍でのということですが、それが、マクローリン展開です。
それがあると、オイラーの公式が理解できます。世界で最も美しい数式と言われますね。
正確には、美しいのは、オイラーの等式のほうですけどね。ただの、iπにしただけですけど。
こういうごまかし?が物理学では多発してあるので、ふーん、またか、くらいに思っておくと良いと思います。
だから、ぼくは、量子力学以外は、あまり好きではないです。
根底にはそういうこともあるんですけどね。
量子力学では、そういうふわっとしたことは何でなのかが、わかるようになってます。
そう。確率にしてしまっています。
だから、これは確率で状態が変わるんだということを、定義しているから、ニュートン力学でよくある近似とかのふわっとした話は、すべて確率ということになっております。
面白いと思ったら、ぜひ量子論の眠れなくなるとかの本を読んでみるといいと思います。
まずは相対性理論の特殊相対性理論のほうからですね。
天才物理学者列伝?というやつのブルーバックスの第二巻が実は、量子力学オンリーなので、それがかなり勉強になると思います。ぼくも買い直そうと思っております。
あれはまず、マックス・プランクの黒体の実験の話から始まります。
ボーアが実は本質的に優秀ではなく、仲間といろいろやることが秀でてたとかわかります。
ぼくがたまにマックス・プランクの黒体の実験から、E=mc^2というのを使って、物質波の式の導出をやったりしますが、実はこの本の数式を見て思いついたので、やったら導けたという経験からいつも使ってしまいます。
ぼくをウォッチしてくれている方は、導けるはずです。何度も書いているので。
ブルーバックスは、講談社の理系向け新書ですね。
ぜひコーナーに立ち寄って、見てみてください。いつか。
ぼくは高校のころから愛読者です。
高校生が読むものは、だいたい月刊の大学への数学と、ブルーバックス、ファインマンとかでしょうね。
あとは、東大志望だったら、鉄壁ですね。
鉄壁は東大志望でなくてもおすすめの英語の単語帳なので、買ってみてください。
ぼくはそれしかやってないレベルです。
ここ十年くらいはそれしか読んでないですね。
月刊の大学への数学は面白いのでおすすめです。
物理が好きで、電気系だったら、トランジスタ技術ですね。
物理の理学的な部分が好きなら、ニュートンですね。
ぼくはトランジスタ技術を読んでおります。
電気電子系の話の雑誌です。
で…………何の話でしたっけ?笑
あ。回路の勉強をしてたと。そういう話でしたね。
それで今日は勉強は、あとは鉄則をもう少し読んでいこうと思います。
それから、夜は開発をします。
JavaとC++のプロジェクトというか、リポジトリで放置してたものがあるので、それらを進めますというか、再開します!
プライベートにしてましたが、公開にします。
AIを開発から省くことはできないので、コードベルグかなとか言ってましたが、AIによるプルリクがくるのであれば、それをAIに捌かせればいいじゃないということで、気にせず、GitHubを今後も利用したいと思います。最悪、ブロックもできますからね。
ちょっと、最近、そういうAI関連で来ちゃった人たちが多い印象だったので、少し嫌でした。
GitHubがぐちゃぐちゃになってきた気がして、嫌でした。
AIでバグを見つけて、言ってくるのは、別にいいんですよ。
それを、DDoS攻撃みたいにやってくるのは違うだろと。もうそれ、DDoSだよという話です。
セキュリティというのはもう必須になりつつありますね。
たとえば、攻撃をされて、それをリバースエンジニアリングして、対策をしますが、じゃあ、事前に防ぐことはできないの?という話ですが、できないでしょうね。
なので、日にちをもたせて、対策が組まれてからインストールするとか、紐付けるとかしないといけません。
むやみに、入れるのは、NGです。
セキュリティソフトを入れているからいい。
これは、ワームとかウィルスなどの不正の動きを知るだけで、意味ないです。
わかりますよね?
だから、どこでどうなってるかということです。
最近のサプライチェーン攻撃の特徴は、いかに、設定をちょっといじって、ポイズニングし、強制的にpushさせて、それによってパソコンの中身を知るという手法になってます。
前は透明の文字による設定があって、pushでパソコン情報が……とかもありました。
最強なのは、別のLinuxサーバに重要情報は置いて、普段使いするPCは、pushしてもなんにもならない設定にすることです。そもそもパソコンに重要情報を置かないでおくということですね。
難しいとは思います。
DMZにLinuxのサーバを置いて、ファイアウォールを設置し、push前に通知するというシステムを構築すれば、最強ですが……。
個人でそこまでやる人はいないでしょう。
その情報を使って、ブルートフォース攻撃をし、クレカ情報を盗むということが考えられますね。
ぼくはクレカ決済はほぼプリペイド型のクレカにしております。
あまり高い買い物をクレカ決済ではしないので、そうしております。
そうすると、入れた以上のものができないので、いいですね。
おすすめです。
というセキュリティ知識をつけないと、今後かなりやばいことになります。
あれ?やばくね?ということがわかるようになります。
ただ、この前にあった某飲食店のやつですが、言及はしないつもりでしたが、どっちも微妙という話ですね。
これ以上は言いません。どっちの言い分もわかるが、さすがにZennに書いたのは意味がわからんw
と思って、見てました。笑
みんなブーメラン大好きかよと思いました。
はい、これ以上は言いません。
セキュリティは今後、かなり大事になるというか、ほぼ必須の知識になりそうですね。
せめて、一回本腰入れて学んだほうがいいですね。倫理観の育成にも繋がりますし。
倫理観がない人がAI文脈で多い気がします。
まず、AIにこれって大丈夫?くらいは聞きましょう。
別のAIに聞いてもいいです。
そのくらいはやりましょう。
BaaSがいけないわけではなく、理解してない人が使うからだめなだけです。
これってこのままでいいの?くらいは聞きましょう。めんどくさくても。
あれ?これって、この設定のままでいいの?――と。
今日はいろいろと学ぶことの多かった一日でした。
設定で、三日とか四日とか依存させるのにインターバルおけるということがわかったのでよかったです。
それしかないかなと思います。
それでリバースエンジニアリングしていくしか今のところ、最強なのはないですね。
本当に最強なのは、さっきも言った別サーバに置いておくというものですね。
結局、pushして情報が漏洩し、そこからブルートフォースでサーバへ対して行われ、それをファイアウォールがあれば防ぐことができて、なければ、その間に、不正検知で、撥ね返すという話になります。
ただ、サーバ代が……という人は、パソコンでもいいと思います。
フラッシュメモリでもいいと思います。重要情報を置くのを。
いろいろあると思いますので、ぜひ考えてみてください。
ぼくはそのうち、セキュリティをしっかり学ぶ予定です!
ではでは〜。このあとは鉄則をやり、PyTorchと開発をします!!




