【2021年版】俺が耳にした技術

#### あなたはプログラミングの文法を学びました。
では今から作りたいものを作ろうと思い、コンソールアプリ作成を始めます。

しかし、ちょっと待ってください。
それって本当にその方法しかないのでしょうか？もっと効率的で革新的な道具があるのではないでしょうか。

「知る機会」という言葉があるように、その効率的で、革新的で、魅力的で、世界中で議論を巻き起こしているツールは**あなたが自発的に調べる、または他人から聞くまでは存在しないも同然です。**もちろんその世界中の議論も**、あなたの友人がちょっとだけ楽をして良い成績を残している事実も存在しないままなのです。

<br>
情報っておそろしいですよね。今回はそんな知る機会の足しになるように、とこの記事を作らせていただきました。
(年内は俺が耳にする限り随時更新)

と長い前書きでしたが要は流行に乗り遅れないように頑張る凡人のおぼえ書です。いやぁ情報にセンシティブにありたいなぁ、と感じます。ここにない技術をお知りでしたら「〇〇」みたいに簡単にコメントを残してもらえると幸いです。勝手に調べて勝手に足しておきます。
# 構成
技術を大分類に分けています。マジの基本的なことは書いてないのでそこらへんのすごい人が書いた入門記事とかつまんだり、チュートリアルで一杯やってから帰ってきてください。

易しい技術ほど上に来るように配置しています。

必須になる技術は書きません。多分普通に生きてればぶち当たると思うので。

- 基本系：プログラミングするならこれ知っとけ、っていうやつ
- web系
- Unity系
- 人工知能系

## 基本系
- **VScode**：すごい。すごいエディタ。SSHもできるしこれ一本で開発環境は完結しがち。
- **Git**：バージョン管理システム。とりあえずプロジェクト放り込んどけ。個人では保険、チームでは必須。
- **Github**: gitのオンラインバージョン。就活にも必要なので作ったプログラムはとりあえず貯めておくと良い。
- 仮想環境：言語のバージョンを管理してくれる。これを使えばチーム間でのバージョン統一が楽だったり恩恵がすごい。
- cron：定期的にプログラムを動かしてくれるやつ
- 公開鍵・秘密鍵：いつもの認証をなくすことができる。
- bashrc、bash_profile：ログイン時やバッシュ立ち上げ時に自動でいろんなことやるためのもの
- Docker：仮想環境をプロセスごと割り当てれるようにしたもの。
- ソケット通信：世界中の通信の基礎となる通信
- TCP：ネットワークプロトコルの一種。再送や順序保証などがある
- UDP：ネットワークプロトコルの一種。TCPのような機能が無いかわりに必要最低限の機能でデータサイズを節約している。
- WireShark：パケットキャプチャが可能なソフト。デバッグからセキュリティまで幅広く利用可能。
- P2P：トポロジの一種。クライアント同士で通信するためサーバーが無くていいなどの利点がある
- NAT、NAPT：家庭用ルーターに存在する機能。これによる恩恵がある一方、サーバー化やゲーム時のパンチスルーに工夫が必要となる。
- Tab-nine: VScodeの拡張機能。頭のいい補完をしてくれる。
- **Atcoder**: いわゆる競プロ。プログラミングの勉強したけどなにやれば良いか分からん、と言う人はやるのを強くお勧めする。毎週1回開催なので敷居も高くなく、好成績を収めれば就活にも**非常に**役に立つ。 

## Web系
- Node.js：javaの仮想環境。
- React：javaのwebフレームワーク。DMの必要な部分のみを更新できる。しかもサーバー側の変更が勝手に反映される(この仕組みは自分もよくわかってない)
- ElasticSearch：カラムを事前に設定する必要がないデータベース。
- Nginx：なんかめちゃすごいらしい。Apacheの上位互換？
- material-UI：ReactのUI部分をCSSなしでキレイに作ってくれるライブラリ
- React Native：iOS、Android対応のフレームワーク。ブームは去った、らしい。
- TypeScript: 型を決められるJavaScript。
- Next.js: Reactをより便利にしてくれるフレームワーク。こっちの方が主流

クロスプラットフォームフレームワークは色々あるので必要に応じて検索してどれが良いか決めると良いと思います。
AzureやAWSなどは死ぬほどあると思うので自分で決めてください。

## Unity系

- print()：Debug.Log()の省略形。MonoBehaviour継承のクラスのみ呼び出し可能
- Debug.Log(string, GameObject)：コンソールでクリック時にGameObjectをハイライトする。これとprintがあればデバッグは完璧。
- **アセットストア**：ゲームに使える素材を配布または売っている。ゲーム全部作るのは無理。楽できるところは楽しよう。
- PlayMaker：スクリプトが書けなくてもゲームが作れるようにしたもの。使ったことない。
- **TextMeshPro**：正直文字出したいなら使うしかない。
- **uGUI**：俗にUIと言われる部分はこれで作るべき。じゃないとサイズ調整とかが大変。(もちろん例外もある)
- TileMap：特に2Dの俗にいうタイル移動をするゲームで使えるシステム。
- **NavMesh**：簡単に敵AIが作れる機能。
- Chinemachine：アニメや映画のような滑らかなカメラワークを自動で作ってくれる。
- Timeline：動画などキャラクターが順番に動くようなものに使う。
- リグ(Humanoid)：キャラクターを動かすための仕組み。
- Photon：リアルタイム通信ゲームを作ろうと思ったときに一番簡単に導入できる。
- Fungus：ゲームの対話シーンを簡単に作れる。
- **Dotween**：アニメーションのパラメーターをスクリプト内で動的に変化させられる。
- Live2D：2.5次元みたいなやつ。立体的な二次元のキャラクターが作れる。
- ポストプロセッシングエフェクト：カメラをちょっといじっていい感じにする。
- HDRP：UnrealEngineのような、よりリアルなゲームを作るためのUnityの機能。
- Atlas：スプライト(画像)をまとめて一枚の画像にしてサイズを小さく抑える仕組み。
- UniRX：Unityで非同期処理・イベント処理を簡単に書ける。
- シェダー：書ける人すごいよね。動的にオブジェクトの表面を変える技術。
- LINQ：コレクションの中から条件に合うものを取り出しやすくなる。データベースのように扱える。
- ECS：アーキテクチャパターンの一種。考え方や作り方が変わるのかな。
- ThreeDPoseBarracuda: 

### アセット系
- RayFire：有料アセット。物体を粉々に壊してくれる。
- EasyPerformantOutLine：物体の輪郭に光る線を追加してくれる。ゲームの視覚効果の基本が簡単に実現できる。


## 人工知能系
- フォトグラメトリー：写真から3Dモデルを生成する技術。
- スクレイピング：Web上にある情報をボットでとってくる。
- BeautifulSoup：HTMLスクレイピングができるライブラリ。scrapyは.css(文字列)で指定するのに対し、Python本来のメンバー的な表現で参照ができる。
- scrapy：HTMLのパースだけではなくクロールもでき、キャッシュやrobot.txtなどめんどうなことが全部できる。なんならscrapyの中でBeautifulSoupを利用することも可能
- Tensorflow、Keras：言わずと知れた人工知能ライブラリ。
- **PyTorch**：上のをちょっと細かく書かせてくるライブラリ。使いづいわけではない。
- OpenCV：画像認識ならこれ！って言われてる。
- numpy：特に深層学習においてデータを計算可能な配列にするときに使う。
- pandas：いろんなデータを学習で扱いやすい形式にしてくれる。
- 形態素解析：文を意味のある最小単位に切ること。例えば「太郎は花子だ」→「太郎/は/花子/だ」を自動で行う。
- Openpose：画像に写ってる人物の骨格推定に使う。モーションキャプチャに利用可能。
- GPT-3：勝手に文章の続きを書くすごいやつ。自らがAIを説明する精巧な文章を書いたことで有名になった。自然言語生成のみだけではなく画像生成や口語の説明からHTML生成なども行える。
- DeepFake：人の顔を他人の顔で置き換えて表情もつけるすごいやつ。逆に人の顔を自分の顔に連動させて動かすことも可。
- GAN：敵対的生成ネットワーク。実在しない人や物を生成できる。
- Word2Vec：単語の分散表現獲得手法の一つ。単語に対してベクトルを与える
- Doc2Vec：例えば上の方法で文章をベクトルにしても違う意味でも同じ単語が同じ回数出た場合同じベクトルになる。これをなんとかしよう、というのがDoc2Vec。なんとかなったのかは知らん。
- Gensim：Word2Vec、Doc2Vecを簡単に利用できるライブラリ
- SVM：サポートベクターマシン。サポートベクトルと呼ばれる境界線付近の点を用いて識別平面を構成する。今でも使用例が多く、たいていニューラルネットワークよりも精度が良かったりする。
- **Transformer**: 自然言語処理でSOTAを成し遂げたニューラルネットワークの構造。「Attention is All You Need」にて紹介。近年は自然言語処理の分野にとどまらず、音声画像認識、2022年5月に発表された汎用AI「Gato」も用いている、いわゆるデフォルト。
- **BERT**: 2018年にTransfomerを使って作られたSOTAモデル。現在様々な派生モデルが生まれているが根本的なアーキテクチャは変わっていない非常に優れたモデル。
- **T-5**: 
- **プロンプト
- **HuggingFace Transformers**:
- Scikit-learn: 
- Kaggle: 
- **Pytorch-Lightning**
- カリキュラムラーニング: 
-