「コンピュータ」を学ぶに当たり、自分がたどってきた過程
コンピュータに強くひかれてから6年弱(2018/10 - 2024/04)が経過したわけだが。 自分は、ほぼ手探り状態でコンピュータの知識を身に着けていった。 今となっては知らなくてもよかったと思う知識もおおい。しかし、「ランダムサーチ」的な勉強によって「点」で身に着けていった知識が、少しづつ「線」でつながっていき、結果的にコンピュータ分野における自分の視野を広げてくれているとも思う。
自分がコンピュータを学ぶ時にどんな過程を辿ってきたか、まあ、簡単に書いていきたいと思う。 ただの日記になってるとこもある。
2018/04
サーバーって何?ブラウザって目の前にあるコンピュータのなかに入ってる辞書みたいなものじゃないの?インターネットって、インターネットエクスプローラのことじゃないの?って思ってたところからの成長過程
2018/5
授業でcをやる。正直何が楽しいのかわからなかった。printf()でもじが出力できます。。うんたらかんたら、、、で? でも、レポートとか早くまとめられるようにタイピングは速くなりたかった。適当にwordで日記をつけたりしてた。
2018/08
たけしに勧められ、タイピングバラエティーを始める。
2018/10
なんか、大学って俺が思ってたところと違うな、と思い始める。 機械系に入ったのは、バリバリ機械をいじれるからだと思ってたのに、なんか学校でやるのは線形代数とか、微分とか、は?って感じだった。僕は実用的なことが好きだった。 んで、その時とってた授業で唯一実用的だなって思ったのが、前期はなかったcプログラミングの授業。最近の機械は制御でもcが使われてるらしいし、ちゃんと聞いて損はないなって思った。
##### 2018/11 cの授業が楽しくてはまっていった(そのC言語の授業を担当していた先生が好きで、せっかくなので授業も頑張ろとおもい、それに付随してコンピュータも好きになったと思う。自分にしては珍しく、教室の一番前で授業を受けていた。3年生の時この先生の研究室に入ることになるが、入った年に別の大学に移ってしまったのは本当に残念なことである。)。最終的には7並べのゲームを作るらしい、ということでやる気が出た。 自分のノートpcにMingwとか入れた。windows用のcコンパイラだね。 この時はパスって概念もわからなかったし、コマンドプロンプト上でコンパイルできた時はかなりうれしかった。
##### 2019/01 とりあえずpc極めたいならデスクトップ買うしかなくね?と思って、ドスパラでで現在も愛用しているbtoのpcを買う。ちなみに、一代目にBTOを購入することにしたのは非常にいい選択だったと思う。すぐ動くけど、拡張性にも優れているからね。
2019/02
春休み。なんか、せっかくデスクトップ買ったのにどうやって活用するのかわからない(笑) うーん、デスクトップ買う意味なかったか?(笑)って思ってるうちに、まあとりあえずネットワークについて学ぼう、と思い図書館へ足を運ぶようになる。 このころからマジで図書館にめっちゃ行くようになる。 パソコンに触れ始めた人って結構ハッカーとかにあこがれること多いと思うんだよね(笑)俺もそうだった。んで、最初に借りた本が『ハッカーの教科書』 これ、ネットワークについて何も知らない人が読むものではありませんでした(笑)ARP?ポート?SSH。。。なにそれまったくわからんわ。。。 とか思ってるうちに春休みが終わった。この年は厳冬期の聖岳に行って凍傷になりました。でもマジで楽しかったー。
2019/4
しんがっき。とりあえず、プロコン始めるか!って言ってプロコン始めた。こっから2020/2くらいまで、ほぼ毎週出た。 C言語で出続け、アルゴリズムとデータ構造とかもほとんどわからなかったから、ぶっちゃけレートは全然上がらなかった。が、c言語の基礎は学べたし、後々c++を習得することにつながったと思っている。今思うと、キューもマップも使わずにcで出続けるってかなり無謀だったな…
2019/5
プロコンに興じていたが、なんか、これって結局誰かの掌の上で踊らされてね?って思って、再びハッカーの教科書を読み始めた。しかし、やっぱり何もわからん。。。 唯一わかったのが、kali linuxというosにはハッキングツールがたくさん入っていて、なんかかっこいいといういこと。で、このころ、せっかく買ったデスクトップがマジでただ置いてあっただけになりつつあったので、 こいつ、windows入ってるけど、kali linux新しくいれね?って思って、どうやって入れるのかいろいろ調べていたら、なんとデュアルブートというものがあるじゃない。 dual bootは一つのpcに二つのosが入ってる状態のこと。その当時、結構パソコンに詳しくなってきて、「完全に理化した」状態になっていたけど、まー今の俺から見るとその当時の俺なんてぺーぺーで、kali linuxをdual bootできるようにするまでも結構時間かかったねー。 しかし、ミスったらwindowsが消える可能性もあったが、結構頑張ってとりあえずkali linuxを入れることに成功した。よくあきらめなかったぞ!
2019/7
頑張ってハッカーの学校を読み進めた。理解できた概念は、ポート、ipアドレス、ドメイン、など。 そして、nmapというポートスキャンツールの存在を知った。 こいつにはまった。マジで。ネットでnmapと検索すると、絶対にwanでポートスキャンしちゃいけないとか書いてあるし、中二ごころをくすぐられたね。あーおれハッカーになったんだと錯覚した。実際は全然大したことなく「script kiddy」にも達していなかっただろう。しかし非常に楽しかった。kaliを使って、lan内で、wifiでつながってるノートpcに何回もポートスキャンかけて遊んだ。起きて一番最初にすることは、nmapだった。 でもだんだん出てくるドーパミンの量も減っていくんですよね。。。そして、だんだんと飽きてくるんですねー。ノートpcにnmapをかけるのも。で、やってしまったんですよ。出来心で。 あのg社のdnsサーバにnmapをかけた。 普通のnmapは5秒くらいでスキャンが終わるんですけど、その時は20秒くらいたっても終わらず、なんかだんだん焦ってきて、 とりあえず、ctrl+cでnmapプロセスを停止。んで、ブラウザでnmap についてしらべようとしたら、いつまでたっても検索できなくなったんだよね。 ????ってなって、だんだん焦ってきて、しばらくたったら回復して検索できるようになった。で、どのサイトで見ても、他人のサーバーにnmapしたら犯罪って書いてあったんだよね。 あ、大学退学になるわ、俺の人生終わったわ、っておもって2日くらいびくびくしてた。眠れなかったね。でも結局あれから5年以上たってるけど、G社からやばい手紙とかは来ていないので大丈夫そう。被害妄想が激しかった。
2019/8
10月実施の基本情報技術者試験のための勉強をした。それと、ハッカーの学校のレベルが高すぎるかなと思い、代わりにTcp/ipの絵本を読んだ。こっちはかなり基本から書いてあって読みやすかった。 このころ、資格の勉強って実用的じゃなくて、ほんと資格のための勉強って感じだな、学校の勉強みたいだなて思ったね。でも今思うと、そこで基礎を鍛えられて気もする。まあ、理論と実践はバランスが大事ですよね。
2019/9
ラズパイというものがあると知った。格安コンピュータ6000円?!。しかもosはlinuxだと。即買いしましたね。 パソコン技術を爆上げしてくれるきっかけになったのはやっぱりラズパイ購入だと今でも思ってる。 まずCLIの基礎についてかなり勉強できた。そして、LINUXについて勉強した。 そして、sshを学んだ。生まれて初めて、ネットワークでパソコンがつながっていることを実感した。firelilyから、ラズパイにssh成功した時は震えた。これが「通信」なのか、とね。 朝起きてから最初にやることはsshになった。しかし、これにも飽きて次に進むわけです。
2019/10
とりあえず、基本情報に受かったよね。でもその勉強のせいで、あまりプログラミングはできなかった。 資格は実力で戦えない人のための保険なのかなって思ったよね。学歴と同じでさ。僕もかつては学歴を追い求めたわけだが。 はい、このころからどうやったらサービスを作れるようになるか考え始めた。サービスがあるってことはどこかにサーバがあるわけで。、、 てか、うちに外からアクセスできたりしないのか?おれが使ってるのはsoftbank airなわけだが、、、と思ってね、色々調べたりして、ルータじゃないとポート開放ができないと知った。 すぐにルータの契約をしたよね。でも、工事来るのは12月らしくて、、、。ラズパイの公式ホームページがラズパイ16個のクラスタで動いていると知り、たくさんラズパイあればなんかできるんじゃね?と思い、ラズパイ集めを始めた。 1か月に一個のペースで買った。
2019/11
自分のサイトほしいなって思った。 超絶簡単なwebサーバをたてて、lan内でブラウザからhttpリクエスト送ったりして遊んだが、正直すぐ飽きた。htmlの知識もなかったし。cssもわからなかったし。 手っ取りばやくきれいなサイトが作りたかった僕は、wordpressを使うことにした。一瞬できれいなサイトができたのはうれしかったが、オリジナルじゃないから正直、続かなかったし、 ワードプレスで自分が好きなようにレイアウトできなかったりして、結局htmlの勉強しないとなと思ったね。 これは何にでも通じることだけど、何かを学ぶときはなるべく低レイヤー、つまりベースになってるものから学ぶのがいい。そっちの方が応用が利くからね。
2019/12
武がうちに居候しに来た。のと同時にネット回線の契約をした。グローバルIPの概念はしっていたけど、実際に体感できたよね。 んで、ポート開放して、ポートフォワーディング設定して、外からsshしたとき、この時も結構感動した。家の外から家のサーバにsshできるやん!!ってね。 ついでにうちのグローバルipをドメインと紐づけて、ingenboy.comでアクセスできるようにした。うん、たのしかった。 webサーバも外に公開したよね。 たけしと過ごした3週間で、将来一緒に起業し、めっちゃぎーくな部屋で一緒にコンピュータをカタカタやってる未来が、想像できたね。
2020/1
たけしと上野駅で遊んだとき、djangoでサクッとwebアプリを作る!みたいな本を買った。
2020/2
Djangoの教本に従い、AWSに教本のコードまんまのサービスを作った。正直、まあ、あまり達成感はなかったよね。 なんていうか、フレームワークってプログラミングしている感じがしないんですよ。出来合いのパーツを組み立てるだけのガンプラみたいな感じ。 それがつまらないなー、と思いつつも、自分で何かWebサービスを1からつくる技術もないわけで、もんもんと過ごしていた。
2020/3
L2スイッチを買いラズパイクラスタ(7台)を作った。 このラズパイクラスタ7台を使い、ビットコインのマイニングを始めたが、1ヶ月マイニングしても5円位しかもうからないし、cpuによくないと知りすぐやめた。 コロナが流行する前にオーストラリアに遊びに行って、オーストラリアからでも自宅のサイトがみられることに感動したのを覚えている。
2020/4
コロナでオンライン授業が続く中、研究室選びが始まった。もともと自分は、航空やロボットがやりたくて東北大学に入ったが、コンピュータをやっているうちに完全に興味が移った。 第一希望、第二希望どちらもコンピュータ系の研究室で希望を出した。今後デジタル化が進む予感がしていたので、情報系人気出るかな、と思ったが、まあ、みんな飛行機とか、ロボットとかの方に興味があったのでしょう、GPAがかなり悪かったが、第一希望の研究室に行けることになった。これは運が良かった。今はうちの研究室かなり人気らしいので、ほんと、コロナ前に情報系に滑り込めて万々歳。
また、他の学科のOSの授業をとった。osの理解がかなり深まったね。OSとは、資源の管理、そして、仮想コンピュータの提供の二つの基本思想のもと、cpu、メモリ、デバイスの3つの管理を行う! まだ覚えてるね。Linuxだね。
2020/6
無事に、第一志望情報系にいけることになる。のが決まったのは実は6月。
2020/8
cの低レイヤプログラミング(ソケットプログラミング)でコマンドライン上でのチャットアプリを作った。リアルタイムだね。これ、djangoのwebsocketと同じ仕組みだと思うんだよね。 というか、httpもwebsocketも全部、ソケットを介して、システムコールのwriteを使っている。ソケットディスクリプタに書き込んでいるわけだね。httpとかwebsocketとかのベースになるところから通信の勉強を始められたのは良かった。http,websocket以外に自分で独自のプロトコルを作れるって話。
研究室でvscodeのremote developmentプラグインを教えてもらった。これがかなり便利でね。すべてのコードの集積地となるサーバ、(ファイルサーバ)を作った。これを作ることで 今までバラバラになっていた(いろんなノードで書いた)ソースコードを一か所でまとめられるようになりかなり生産性が上がったと思う。あのコードどこ行ったっけ? っていうのもなくなって、モチベが続くようになったよね。このサイトも、remote development のおかげで続けられていると思う。
あと、この年から、毎年8月の夏休みに自作PCを作るのが恒例になった。 一年目に作ったPCは全部で4万円位の雑魚パーツで組み立てた。名前はHolyshitちゃん。
2020/9
ルータ自作!みたいな本を読み始めた。まーまだ読み中。これ読んで、ファイアウォール作れるなって思った。
2020/10
友人に頼まれた、写真をアップロードするだけのサイトをdjangoで作った。しばらくdjangoから遠ざかっていたけど、またやる気が出てきた。 データベースサーバを立てた(beta0)!リモートでアクセスできるやつ!メールサーバも立てた!んで、simple chat webサイトを作った!djagnoで。 websocketを使って作ったんだけど、今と比べるとあの頃はwebsocketが何なのかもよくわかってなかったなー。
2020/11
firelily1から始まり、インストールし直すたびに数字が一つづつ上がって行ったfirelilyがなんとついにfirelily5まできた。 500gのssdにlinuxだけの、windowsのことなんて考えなくて良くなるように、ハードディスクをゲットした。これでもう容量不足に悩まされることもないだろう!
2020/12
プロコンを再開したね。なんだろう、知識と知恵、というより知識とセンスや思考力は別物で、知識は後からいくらでもつけられるけど、思考力が身につくのは20代前半のうちだと思ってて、そう思っているうちにやっぱり 不変である何か、それは知識じゃなくて知恵だろって思って、思考力を鍛えるためにプロコンを再開したって感じかな。今年の4月からの目標がブルーコーダになるだったんだけど、全然だめで、茶色の500位でさ。気持ちを改めるために新しいアカウントを作った。この月は結構プロコンやった。 んで、知恵と関係しての話なんだけど。不変である言語として上げられるのがやっぱりcだなって思って。いろんな言語があるけどさ、そういう言語は結局内部的にはcが使われていたり、web言語しか扱えなかったりで、一番いいのはやっぱりcだなって。0から作るっていみで最低限の知識があれば何でも作れるから、求められるのは知恵だよね。quoraとかで強そうなエンジニアはやっぱりc/c++を押してる気がする。だから俺も今後c/c++を続けていきたいと思う。 あと、ピアノを始めた。楽譜が読めるようになって、ちょっとづつ引けるようになってきて感動している。 あとはpthreadによるマルチスレッドを勉強し始めたね。pthread_create_thread()とかmutexとか勉強してて、現在どういう風に学んだmultihtreadを活かせばいいのかを考えている。 あと、クリスマスプレゼントにモニターを買いました。現在モニター二台ありまして、いい感じにコーディングがはかどっている。
2021/1
データベースを学ばなければいけないとはわかっていたもののなかなか時間が作れずにいたのだが、冬休みでまとまった時間ができてmysqlを学んでるね。実際にcとかphpから生の文として接続(djangoで接続したことはあったけど、やっぱフレームワークだと内部構造がブラックボックスでなんか気持ち悪いしすぐ飽きる) したりしてかなり楽しませていただいているところです。 create database db1; use db1;show databases;show tables;create table tb1(name kata, name kata,name kata,name int auto_increment primary key);select * from tb1 where 条件;insert into tb1; とかね。 さて、インフラもかなり理解してきて、ネットワークもかなり理解してて、データベースも理解してきた。そろそろ検索エンジンでも作るか?て思って検索エンジン自作入門を買いました。
2021/5
一気に5月まで飛びます。この時期に何があったか、ちょっと思い出せないのだが、4年生になったね。4年生になって、まだ学部の授業全部とり終わってなかったら、授業受けていた気がする。
holyshitに積んであったマザボをぶっ壊した。以下、その報告。
経緯 holyshitがただおいてあるだけの状態になっており、もったいないと思っていた。しかし、やはり部屋の中で24/7動かし続けるのは騒音がきになるということで、 見つけたソリューションが、冷蔵庫部屋にlanケーブル伸ばして、holyshitを置くことだった。加賀屋さんからもらったgpuがあったのでそれを載せてからそっちに移動させることにした。 まず、かがやさんのは外部電源が必要なタイプのgpuだったので、そのための電源を搭載、gpuをつけ、電源をつける。ここで最初の問題が発生。思い返すと、これが不吉な前兆だった。 電源を入れて、sshで操作しようとした。しかし、lanランプが光らないのである。最初の何秒かは光るのだがすぐ消えてしまう。lanケーブルの問題かと思い、違うケーブルに変えて再起動。しかし結果は同じ。すぐ消えてしまう。 原因を探ろうと、とりあえずモニターに画面を移すことにした。今まで見たことのないerror。I2cpci何とか的な。しかも、このときはその前まではなかったことが起きた。gpuがめっちゃファンを鳴らしていた。ちょっと怖くなったので、電源を切ることにした。電源を切る。 続いて、とりあえずgpuを外すことにした。外して電源をつける。しかしつかない。 その後、電源をもとのに変えてもパソコンは起動しなかった。さらに、通電するだけで光るはずのマザボのランプが光らなくなった。しかしlanケーブルはついていた。 原因 原因として考えられるものを以下に示す。 グラフィックボードの不良 持ってきた電源の不良 電源ケーブルの接続ミス マザボを抜くときに何かが起こった 対策 まずは、古いぐらぼを使わないこと。つぎに、エラーが起こっているときにわかるようにスピーカーをつけること。 あとは、電源の接続方法を確認すること。以上かね。まじで、他のパーツにまで被害が及んでいないことを祈るばかりである。
2021/7
ソケットプログラミングを学んで1年たつ。おれはソケットプログラミングはcで頑張っていたんだけど、いちいち全部書くのめんどいなって思って、 c++でクラスとか作ってたんだよね。ソケットクラス。でもね。もう存在していたんですよ。もっと扱いやすいソケットクラスを提供してくれるライブラリが。 そもそも自分でcのソケットから作るのって実はめっちゃ大変なんだよね。なんか、socketってマジで気まぐれで、いつどれくらい送信されるかとかの管理がまじで大変で。 そこでですよ Boost.asioがあったんですよ。asioはかなり扱いやすい。おれが一人でやっていたら3年以上かかったであろう、socketクラスを提供してくれる。。ってことでboost以外のライブラリもいいものがたくさんあるかもしれないので、ここで確認しておきたいんですよね。 ここに有名なライブラリが乗っています。 zetaとalphaにをasioをインストールしたので、これでクライアントサーバアプリを作って遊びましょうってことですよ。 はい、javedex9さんというyoutuberがasioを使ったフレームワークを作ってくれているんですよね。その人の動画がかなりためになった。 ということで、 クライアントとサーバ間でやり取りをするためのフレームワークが完成した。これの動きを完全に理解することをおすすめする。 俺が作りたいのは、そうね、まずは簡単なチャットアプリだね。 あとは、気が付いてしまったんだけど、どのアプリもソースコードは公開しないんだよね基本的には。だから、ユーザを想定する のであれば、インストーラのことも考えないといけないんだけど、それについて少し考えたいんだよね。 あと、もう一つ。入力と出力を同時にやりたいのであれば、もう一つスレッドを作らないといけない。気を付けてくれ。 これが終わったら、それをqtに落とし込みたい。qtはguiアプリケーションなんですよ。 unreal engineによるゲーム開発はまだまだ先だな。あまり調子に乗らずに、まずはqtからいこう。 うーん、何でもc++でやりたいんだよね。難しいということはわかってるけどさ。
2022/8
院試が近いというのにイマイチ身が入らない。というのも、c++でwebsocketを使った通信を低レベルで実装できることが判明したから。去年の11月に、pythonのdjango を使ってできちゃったなんちゃってチャットじゃないんだよ。成長を感じるね。とりあえずwebsocketについて、今わかっていることをまとめておきます ブラウザとサーバでやり取りすときに今まではhttpプロトコルを使ったステートフルなやりとりしかできなかった。つまり、クライアントがサーバ に一方的にアクセスするだけであって、サーバからクライアントには、要求があるまでメッセージが送れなかった。 websocketを使えば双方向の通信が可能。双方向通信が可能な事自体は別にそこまですごくない。コレ自体は、c++やcのコンソールアプリで受信スレッドと送信スレッド をふたつ立てれば簡単にできることは、ずいぶん前にけんしょずみ。何が便利かって、ブラウザとのやり取りが双方向通信でできるんだよね。これってかなりすごくて。 そもそもブラウザってのは、クライアントそのものなんだよね。つまりクライアント側の処理は書かなくていいし(厳密にはjavascriptを書く)、クライアント用のソフトも配布しなくていい。 いいね。ソフトを一本作ればあとはwebアプリのurlを拡散してもらえばok。いいね。 とりあえず今回はgithubからとってきた、c++の第一人者が 作って切れた簡単なチャットサーバをブラウザから使えるようになったです。なったのはいいのですが、これを四六時中実行したいわけなんですよね僕は。つまり、デーモン化したいと。 なんですけど、手こずってまして。デーモン化できないんですよね。なぜでしょう!! とりあえず、下に俺が何がわかっていていて、何がわかっていないかを書いておきます。デーモンが何かはわかってる。 既存のサービス(mysqlやnginx,httpd,sshdなど)の再起動,起動、でーもないず、ストップ方法 systemctl [command] service_name 自作のプログラムのデーモン化の流れ まずは、/lib/systemd/system/の中に登録したいデーモンの.serviceファイルをつくる。 このディレクトリにはsystemctlコマンドで操作できるデーモンがたくさんおいてある。 次に、.serviceの中身を書かないといけないのだが、 デーモン化に成功したのでここに書きます。大事な点は2つかな。 lib/systemd/system/ファイル の中に大事な項目が2つ。 WorkingDirectory と、ExecStart。 俺がうまく行ったのは、 WorkingDirectoryに設定したところに、しぇる.shをおいて、さらに ExecStartは、しぇる.shをフルパスで指定した。 って感じや。Okayここからは、beastのWebsocketの使い方を学んでどんどん実用的なwebappを 作っていこうかしらね。
2021/09
院試に合格しました。試験やらかして、落ちたと思ったときの絶望を忘れないでください。受かったら何でもやるって心に決めたよね。 研究に身をさささげるとね。やるよ。マジで。 と言いながら、研究だけではなく、自分で進めているプロジェクトも結構あるので、そっちのことも軽くかかせてください。 まずは、c++を使ったweb系の処理だよね。レイヤーが高くなればなるほど何となくで、感覚的にいろいろできるようになるんだけど、それじゃあ深い知識は つかないというのが今までの僕の知見で、それは今も変わらず。c++でwebを操作しようとするとhttpを深くまで理解しないといけない。なので今それをやっている ところですね。リクエストとレスポンス。メソッドがあって、ヘッダーフィールドがあって、って感じですよ。んで、結局はビット列の並びなのよ。ってことを強く 意識させられるね。まあ、フツーにboost.beastを使ってこれからもやっていこうかなと思う。 最終的な目標はc++を使って、webとqtどちらでもいけるクロスプラットフォームなチャットルームを作ること。これを9月中にできたら最高だよね。 それと同時並行で、チームでやっていることがあって、競馬必勝システムの作成。思ったよりもスムーズに進んできていて、seleniumサーバを立てて、webdreiverxxから、 web画面を操作するところまでは行きましたね。後は、JV-linkを使ってオッズとかを管理しているサーバから情報をとってくるプログラムを作ること。あとは、 このシステムの肝となる賭け方のストラテジーをシミュレーションするための入力データをじゅんびしないといけないんだけど、これはpythonのクローラを使ってやろうと思います。 それを9/18までにやらないといけません。 あと忘れてた、妹のために文章のアップロードシステムも作って作ってあげないといけないんだった。
2021/10
競馬必勝システムを寮の仲間達と開発しました。自分にとっては初めての本格的な開発経験がこれでした。リアルタイムでオッズのスクレイピングとかもしました。そして、結構楽しかった。といっても、意外と使い勝手が悪く、1年後にもっといいシステムを開発します。
2021/11
kerasを使った深層学習を頑張りましたね。研究ですけどね。 思ったことは、回帰分析でできるような簡単な関係は深層学習を用いてもいいが 中身がブラックボックスになるため、説明がつかないことが増えるということ。 結局深層学習も回帰分析なんだけどね。 あと、機械学習って統計だから、何となくしかわからないっていうのが良くないところだなとも思った。まあ、機械学習のペーペーですけど僕は。
2021/12
研究を尻目に、データベースの勉強をしていました。結局すべてのサービスにデータベースはつきものですからね。 データベース設計で一番大事だと思うのは、カーディナリティの概念だね。一対一とかのやつ。 それさえ理解できていればデータベース設計は可能であるかな、って思った。foreign keyとかそのへん。
2022/1
長年の夢、ルーム型チャットアプリを開発した。 ブラウザで動くやつ。通信にはWebsocketを使った。
2022/2
研究をやっていたねー。なんか知らないけどうまくいくっていう方法がある。なぜうまくいくのかはわからないってときね。そういう時は、その理由を説明するために、原因になりそうな部分を深堀していく。そうしているうちに、説明可能なさらにいい方法が見つかったりする。卒論の研究をやっていた時にそういうことが起こった。何事も基礎が大事だと実感する今日この頃。
2022/4
院に進む。院での目標は、もちろん研究を頑張るってのもあるが、なにかサービスを作るのも目標。Webサービスとして展開したい。
2022/5
意外と授業が忙しい。ローカルゼミの発表は一週間に一回というのは今までと同じだけど、グローバルゼミの発表が、2ヶ月に1回から月一に変わったのが意外と負担がでかい。
2022/6
対外発表に挑戦しないかという提案が先生からあったので、思い切って出てみることにした。 卒論の体裁を整えるのが意外と大変だった。発表のために時間が使われて、やりたい研究がなかなか進められずにもどかしい気持ちになったね。
2022/7
山口県に対外発表しに行った。100人くらいの前で自分の研究の内容を30分にわたり話したが、かなり緊張した。ほかの発表者は意外と質問もらっているのに、自分は一つも質問してもらえず、だれも俺の発表に興味ないんだなって思った。この辺から、その当時やっていた研究にモチベがなくなっていく。先生に決めてもらったテーマだったが、これが社会のためになるのであれば、、、とか、自分の評価が上がるのであれば頑張ろうと思っていたが、全く評価されなかったのは悔しかった。今思うとここでの経験が大きなターニングポイントになっていると思う。 徐々に次の研究のことを考え始める。
2022/8
夏休みに入った。第一志望の企業のインターンに落ちた。他の企業は全く受けていなかったので完全にフリーになった。なので、夏休みでなにか面白いソフトを作ることにした。 今まで自主的に学んできた知識を総動員させ、自分でも満足のいくソフトができた。まあ、これが去年の夏休みの後半から10月にかけて開発していた競馬のソフトなのだが、やっていること自体はほぼ同じだが、ユーザビリティがかなり向上したと思う。せっかくなので改善点を書いていこうと思う。
競馬ソフトの改善点
CLI -> ブラウザベース はい、もともとはコマンドラインで出力させていたものをブラウザで出力させるようにした。 まあ、これがなかなかに大変な作業で。というのもブラウザに表示させるためにはサーバを介してブラウザに情報を送る必要があるのだが、それをやる経験がなかったから。Websocketを使うとデータのやり取りができるってことは知っていたし、JSON形式でデータをやり取りできることも知っていたけど、自分で実装するのは、初めてだったこともあり大変だったね。面白かったけど!
スクレイパーのモジュール化、購入部分のモジュール化(API化)スクレイピングデータの保存、 前回開発した時もオッズデータのスクレイピングは必要だった。しかし、一つのプログラムで逐次的に スクレイピングー>最適化計算ー>購入 をやっていたため、なんというか、うまくうまく言えないのだが、小回りが効かない感じ?のソフトになっていた。スクレイピングで得られたデータがこのパスで通っていくのだが、まあ、ソフトウエアではパイプラインってあんまりよくない。 そこで、データベースを使うことで、スクレイピングと最適化計算を切り離すことにした。 さらに、最適化計算と購入の部分も分けることにした。 OSI参照モデルでもネットワークを5つのレイヤーに分けているよね。分けることで、それぞれの管理をしやすくするっていう。それと同じ事をしたという感じ。
まとめ システムを作るときはできるだけモジュール化するのがいい。モジュールを一つのサーバとして実現し、モジュール間を通信させるように開発をするとかなりうまくいく。モジュールを作るときはモジュール間のインターフェースを規定しないといけない。JSONでどういうデータをやり取りすればいいかを考えるって話(インターフェースを規定してモノリシックから、マイクロサービスへ!!)。 そして、サービスってものは基本的にデータをやり取りするもの。ということは、データをサービスの中心に据えるのが良くて、そのためにはデータベースを使おうよって話。
## 競馬のシステムに関する感想
今まで置物になっていたサーバが数台あったが、すべて稼働させられるようなシステムを作れて大満足です。システムが連携して動いているのは見ていて気持ちいですね。しかも、そのシステムが物理的に複数のサーバにまたがって稼働している、というのも、かなり萌えるポイントです。 モジュール一つ一つが頑張って自分に与えられた役割をこなしている感じです。楽しいです!
###### 2022/10 夏休みは開発に没頭しすぎてしまった。また研究を再開させないといけない。まあ、自分は意外と切り替えがうまい方なので、やると決めたら一気にやれそう。 あと、嬉しいことが一つあって、卒論の時の研究内容が盛り込まれた論文がそこそこな難化な国際会議に通ったってこと (山口の学会で発表して誰も質問してくれなかったやつ)。自分の名前が論文に載りまーす。まあ、ファーストオーサーではないのですけどね、、、、卒業までに2本くらいファーストオーサで通したいかな、っていのが目標。おそらく博士課程も行くことになるのでね。いやどうなんだ?就活の結果次第じゃないか?某Yに入社できれば会社のお金で博士が取れるんだよね。これはいい話だと思うんだけど。
2022/11
就活がぼちぼち始まってきた。ってのと、学校のTAとかあって色々と忙しくしていたら、あまり研究が進まず一瞬で11月が終わった。就活はメンタル的に圧迫されるので、研究とか、やりたいこととかあっても自分の将来が気になってあまり集中できなかったりするね。日本の悪しき文化だと思うよ、新卒一括採用。研究は安心感がある環境でないと進められない。今の日本の研究者の不遇がなんとなくわかった気がする。任期雇用とか最悪でしょ。
2022/12
やはりデータベースに興味が戻ってくるわけです。トランザクションとリアルタイムでの解析を可能にするデータベースを作りたいのです。そのため、まずはデータベースの基礎を学ぶ必要があることがわかりました。ので、そこをやっていくことにした。就活が終わった。が、エンジニアは一生学び続けないといけないなとひしひしと感じている。新卒の時点で少しだけアドバンテージを得ただけだな。まったく浮かれてはいられない。むしろここからが本当の勝負といった感じ。
2023/1
研究の進みが微妙すぎる。で、一旦手を動かせそうな課題を先生に与えてもらって、やってみることになったんですよ。で、手が動く動く。たのちい。が、簡単すぎますね、こういうのは。手を動かせば達成可能な課題ってのは、まあ、手を動かせるってのは楽しいんだけど、結果はつまらないものなんですね。そう思います。もう見えますからね、先が。 んで、
あと、ちあきの本を買ったね。ダークウェブの本。なかなか面白かった。torとかね。torルータのしくみはめっちゃ気になるし、自分もtorネットワークにサーバを提供したいと思った。 んで本当に研究が微妙すぎる感じになってきた。
2023/2
フロントエンドとバックエンドの垣根がだんだんとなくなっていているのはわかりますね。はい、わかります。でだ、バックエンドといえどもフロントエンドができないと仕事がもらえないのではないかと考えているのですよ。ということで、ts + react + next.jsでフロントエンドの開発をやる本を買いました。まったく進まないですが、フロントエンドも頑張っていきたいなという感じ。そうね、バックエンドはマジで複雑なロジックとかを考えるのが仕事になりそうだね。ハードウェア構成とか、ロードバランシングとかを考慮してシステム全体の設計とかしたり、そういうのがバックエンドの仕事になるのかな?わからんが!! あとは、大規模なシステム運用を念頭に置いて、例の競馬システムをk8s上で稼働させたいと考えているんですね。が、ラズパイでk8sを稼働させるのがむずかしい!!うーー!!難しい!!
2023/3
このころ何してたっけなー、わすれちゃったな。今年の春休み。ああ!そうだ! 分野横断セミナーなるものがあった。ほかの研究室の学生と合同でポスター発表をやる会だね。そうね、この時思ったのは、ほかの研究室の学生は、「背景ー>課題ー>提案手法ー>結果ー>結論」がいい感じにつながっていないのが多いなって感じたね。あとは、「こういう課題があって、それを解決するためにモデル化が必要で、こういいうモデルを考えて、そのモデルを評価すると意外と正しいですよ」とかね。まあそれはいいのか。
2023/4
M2になって、ついに卒業のとしということで、研究についてまじめに考えないとな、って感じでした。 ただね、まじで、あの研究にモチベがなさ過ぎてね。なんていうか、特定の事象に対する研究過ぎて。つまり、ドメインスペシフィック過ぎるということ。それは誰も興味わかないわ。。って感じで。 例えば、「IKEAのコップに200mlの水を入れて、ガスバーなで2分あっためたら、水の温度は納戸になるか?」みたいな、そういう感じに近い。それで、本当にモチベがなかった。 で、思い切って研究を変えることにした。この時、変えることにたいして弱気でいた自分の背中を押してくれたけいち先生には感謝しかない。本当にありがとうございます。
2023/4-7
研究を変えたはいいけど、知識ゼロだったし、まだ授業もたくさん残っているし、でなかなかかつかつの生活だった。ただでさえ引っ越しして生活様式が変わったのに。 案の定研究はまったく進まなかったね。迷走状態、って感じで。 前提知識もないのに論文紹介とかも回ってきて、でもどうしようもないから、リスケしてもらったりもけっこうした。まあなんていうか、もう少しうまくやれよ、と今になって思うけど (形式的なものが嫌いという自分のいいところ?のせい) 、 当時の自分は頑張ていたなとも思う。そもそもこの時期に研究を変更したのは それだけでナイスチャレンジ!!とか思って自分を慰めていたっけ。 研究の進捗は悪かったが、非常に地に足がついている感じの研究内容で、自分としてもだいぶやりがいを感じるものだった。
2023/8
会社でお客さんに使ってもらうwebシステムを作った。まあ、これが人生で初めて 人に使ってもらうために作ったサービスだね。 だいぶしょぼいけど、やっと人に使ってもらえるシステムを自分一人で全部開発できたのは自信につながった。まあ、しょぼいけど、なんやかんや学んだことが全部活かされているな、 Dockerも、スクレイピングも、ネットワーク関係も全部。 委託費で5マンしかもらえなかったのはちょっと悔やまれるけどね。もう少し ぶんどってもよかったかもね。 ついでにgoogleアナリティクスとかもちょっと入れたりした。
2023/9
研究がやばみを帯びてくる。ボスからは論文投稿をせかされて、来週には何かしら結果が、、、と言い続け、結局何も結果が出ずに、、ってのが続いて。って感じだな。 まあ、ブレイクスルーはやっぱりc++のライブラリをpythonで使えるようにpybindしてくれた師匠のおかげですね。 ここら辺から一気に開発が進んだ。つまり研究が進んだって話だな。
2023/10
研究の傍ら、例の競馬システムでも大きな進捗があった。 何をしたか?って話だけど、だいぶ複雑なHTTPのAPIの解析をして、 ブラウザを介さず、本当に純粋なhttpだけで馬券が買えるようになった、という。 これは、なかなかいいことで、サービスとして提供するときも、 ユーザがipatに飛べるようになるってことだからな。
それと、修論の審査員の副審査員を某先生にお願いした。これもなかなかいい選択だったと今思うね。企業で研究していた方だから、かなり実用を重視していて、俺の研究刺さると思ったからお願いしたわけだけど。
2023/11
研究がやばい!!頑張った!!だいぶがんばった!! そして、一応研究としてはまとまった感が!! だいぶ粗削りだけど、磨けば光る!!と某先生にはいってもらった。 マジで救われた。。。。ありがとうございます。。。。 でも、肝心なところで頑張れず、ボスにはめちゃめちゃ切れられた!! すみません、見捨てないでください。。。内定取り消しになったら困ります!! って言ってはいるんだけど、なんていうか、 新卒にこだわってる時点で資本主義のラットレースに巻き込まれているな、という感じはする。とか思ったりして過ごしたね。
自由に生きたい。お金の心配をせずに。 だが、資本主義のラットレースから抜け出す方法はもう一つあるのだ!!それは、 他者からの評価を気にしないだな。これはもう、正直できている。たしかに、嫌われる勇気に出会ってから7年 8年。自分が生きてきた時間の半分を要す、と書いてあったが、本当にそれくらいかかったな。 おれもここまで来たか。 でも金はほしいな。そうね、別に地位も名誉もいらない。が、金は欲しい。なぜか? 生きないといけないからだね。海外にも行きたい。キャンピングカーを買って日本一周したい。 じゃあ、どうやって金を稼ぐんだ!? 。。。。。。。。。。 。。。。。 うん。。。。とりあえず。。。 研究頑張って卒業して、就職しよ。。。
2023/12
かなり研究がしんどくて、こんなことを思っていた。 「いまの研究はだいぶ粗削りだと思うけど、幅もあるし、ある程度一般的なテーマなので今後も続いていくものだと思う。話は変わるが、研究ってのはこういうものだと思う。一つのテーマを代々と受け継いで行ったりするものではないだろうか?」 自分の研究がボスからはあまり評価されなくて、でも自分では実用的だし、地に足がついている感じで、机上の空論でもないし、かなりいい研究である、と言い聞かせていたね。
2024/1
年が明けた。帰省のために12/31に千葉に帰った。 が、1/3にはもう仙台にいた。どれだけ研究に追い込まれていたかがわかるだろう。 だいぶ頑張ったね、1月の終わりには名古屋である学会でポスター発表した。
2024/2
修論の第一稿をボスに提出して、添削していただいた。この時に帰ってきた反応が意外とよく、この時点で卒業ができると確信。んで、少し手を緩めた。これがよくなかった。修論締め切りの前日にだい二稿を提出した。しかし、前回指摘していないところが修正されていないなど、めっちゃ厳しく言われ、挙句の果てには、このままでは卒業できないかもね、。。。きびしいね、、、っといわれた。ってことで、修論の締め切り前日はマジで徹夜した。 って感じで何とか修論を提出し、本審査も通り、無事に卒業が決まったわけですわ。 卒業がほぼ決まったことに安心し、修論の内容をただただ英語に直しただけ、みたいな論文を書き、これをipdpsの学会に投稿する。これがのちに最優秀論文となり、だいぶ自信がついた。
2024/3
引っ越しで忙しすぎてコンピュータにはほぼ触れなかった。今思うと本当にもったいないことをしたと思う。 というのも、引っ越し代を節約するために、仙台ー千葉間を5往復ほどしたのだ。しかも下道で。実際これで10万円ほど節約できたが、社会人になった今思うのは、あんなにまとまった時間が取れるのはあれが最後だったので、お金など気にせずに安孫べばよかった、ということ。
2024/4
入社。 自分は優秀な方だと思っていたが、さすが日本を代表するIT企業だけあって、新卒のやつらはめちゃんこ優秀で少しビビった。しかし、思ったのが、意外とみんな各レイヤーについては詳しいが、上から下にかけてすべてのレイヤーにそこそこ詳しい人はそんなにいないということ。一方自分は抜きんでるものはないが、上から下までそこそこわかっている。これは自分が独学で下から積み上げていく方式の勉強方法をとったからで、まあ大学時代もがき苦しんでよかったなと。
2024/5
給料ももらえるし、責任は小さいし、負荷も大学院ほど大きくないし、 社会人マジで神。って感じです。