Tallman

技術とか読書とかいろいろ

N予備校が無料だったのでプログラミングコースをちょっとやってみた

N予備校が世の中のもろもろで無料だったのでプログラミングコースを少し受講してみた。

www.nnn.ed.nico

良かったところ

教材の質が尋常じゃない

本来有償のものなので具体的なリンクは貼れないのだけど、教材一つ一つの質がとんでもなく高い。 「とにかくコードを書かせて体験してもらう」というのが徹底されている。例えば、CSRF対策やセッションハイジャックに対して、再現アプリケーションが公開され具体的な動作を確認でき、対策方法の具体的な内容、実際にコードでどうやって対策するかまで全て解説があった。更にGitHubから問題をフォークしてPRを送るという課題まである。驚くべきはこれらのセキリュティに対しての記事が「プログラミング入門」という「プログラミングとはコンピュターに対して命令を与えるものです」という内容から始まるコースの第三章に掲載されている内容であるということ。この章をやるだけで巷のプログラミングスクール以上の知識がみにつくのではないかと思う。
Scalaについて学ぶコースで「Scala基礎コース」があるのだけれどforとかwhileの説明で転置インデックスやBM法にまで話がすすんでいたり、最短経路問題やbit探索などScalaを通してCSの勉強がきっちり行われている感じだった。実際にアプリケーションを書いてそれをリファクタリングしていく章まである。これらは全て「基礎コース」であり「応用コース」は別にある。「応用コース」では参照透過性とかストリームなんかも扱っていて、Scala以外にも応用がきく概念を習得できると思う。

動画つき

僕はみてないんだけど授業動画もあるようだ。なんかルルーシュのコスプレしてる人が写ってた。

おやと思ったところ

コース間の動線

コースとコースの関連がコース最初の手引きぐらいでしかわからなかった。Scala基礎コースのページで次へを踏んだらScala応用コースに飛ばしてほしい…。僕が見つけてないだけでまとめページみたいなのがあるのかもしれない。

継続率

これは不満というか不安な部分なんだけど最初のプログラミング入門コースでは何百とあった練習問題のPRがScala基礎コースではかなり少なくなっていた。ある程度プログラミング経験のある僕ですら良く出来てるなぁと思うくらいのなので「プログラミング初めて!」みたいな人はなかなかついていくのが難しそう。

まとめ

個人的にはScala完全理解した(この完全理解は全然わかってないの意)ので良かった。これで月額1000円なのは安すぎる。僕自身プログラミングスクールからエンジニアに転職した身だが、スクールに通わなくてもこの教材をやれば仕事がないってことはないんじゃなかろうか。学生達がこれをバンバン進めているかと思うとすごい世の中である。Androidコースなんかもやってみようかな。

League of legendsでダイヤモンドに昇格した。サポートでsoloQを勝ちぬくには

League of legends(以下LOL)で自分語りしていきたい。大学入学から20代前半はずっとこのゲームをやっていた。最後にめっちゃためになるsoloQ tipsも書いたので読んで欲しい。
これがマイOP.GG。
jp.op.gg

シーズン4

f:id:sasa5740:20200308133243j:plain 最初は「簡単、強い」でチャンピオン検索したらmordekaiserが出てきたので200戦ぐらいスパムしてた。ちなみにずっとシルバーだった。 昔のmordeはEがAOEでプッシュとハラスが両立しやすく簡単だったのは間違いない。huehuehue。

シーズン5

f:id:sasa5740:20200308133732j:plain このシーズンで初めてプレシーズンでゴールドになり、シーズン中にプラチナになった。あまりにも嬉しかったことを覚えている。このころからサポートをやるようになった。Jannaがとにかく壊れておりピールという行為をするだけで勝てた。Topヘカリムも好きだったので使っていた記憶がある。ホームガードTP最強!

シーズン6

f:id:sasa5740:20200308151609j:plain スレッシュをやり始める。。NAのサーバーが移動してラグくなったので台湾サーバーでランクを回していた。台湾ではヘカリムとサポートを回してプラチナ2まで上がった。最初にソロQでダイヤ枠と当たったときは興奮したものだ。

シーズン7

f:id:sasa5740:20200308151906j:plain サポートというロールに嫌気が差して色々なチャンピオンを触っていた。そんなに残業があったりするような会社ではなかったのでランクの回数はこなすことができた。しかし、当然付け焼き刃のチャンピオンでは勝てず、シーズン後半にスレッシュで何とかプラチナに上げるような感じのシーズンだった。今見ると思ったよりルシアンを使っていた。なんで?

シーズン8

f:id:sasa5740:20200308155202j:plain 仕事が2年目になり忙しくはないもののメンタル的にキツくなっており、ゲーム内でも暴言を吐いたりAFKするようになった。おかげで勝率も下がり結局プラチナ止まり。

シーズン9

f:id:sasa5740:20200308155258j:plain ラカンわりと使っていた。電撃ラカンをどこかの動画で見て真似してスパムしていた。このシーズンもプラチナにはなった。
転職したのでメンタルは正常になったがゲーム内のメンタルは変わらずTOXICなプレイをし続けシーズン終わりに2週間バンされた。 このとき初めてチャットをミュートしたり暴言を無視することを覚え、何とか2019年中に名誉レベルを2に戻した。

シーズン10

f:id:sasa5740:20200308155337j:plain ひたすらスレッシュをスパムした。ロールも絶対にブレずにサポートだけやり続けて他のロールになったら昇格戦以外は全てドッジするようにした。暴言吐いてきた奴がいたらちゃんとミュートし、マイナスなチャットはしないようにした。そうすると勝率はドンドンあがりシーズン開始一週間でプラチナになり、そのまま勝率58%でダイヤモンドになった。涙が出るほど嬉しかった。勝率は変わらずD3になりD4ゲートキーパー化も回避した。
このままならダイヤ上位も十分なれるしワンチャンマスターにもなれるんじゃないかと思っている。

サポートとしてsoloQで勝つために

少なくとも日本鯖のダイア以下では、

  • メンタルを保つ。このゲームはメンタルが六割であり連勝しているときはなるだけランクを回すべきだし連敗したら大人しく寝たほうがいい。
  • 暴言をはかない。すねない。不貞腐れない。炊いてもそれを画面には出さない。これらの行為は勝率を上げることになにも貢献しないのでする意味がない。ムカついたやつがいたらレポート画面で罵詈雑言思いっきり書いてレポートすれば良い。
  • jgとmidを常にみる。soloQは人数差ゲームであり、人数差を作るのはだいたいmidかjg、相手のjgとmidの位置を常に考え4マンダイブ喰らいそうなら予め下がってランタンを準備するべし(そういう意味でもスレッシュはOP)。味方のjgが相手と川で争いそうならすぐに寄らなくてはならない。
  • ぶれない。絶対に連敗が重なる時期が来るがそこでmidしたりjgしたくなってもやってはならない。どうせ対面には手も足も出ない。
  • ワードを三個おいたらさっさとリコールする。ワードを三個おいたらサポートはファームする必要がない。サポートの4割はワード貯蔵庫。ピンクワードは絶対に二個買え。
  • レーンでは距離感を意識する。例えば相手はソラカならQの射程ギリギリで常にステップすること。相手はスキルを外しやすくなりCDというスキが生まれる。フック系に対してもこちらがフックを当てるのではなく如何に相手のフックを躱すかを意識したほうがいい。こうすると相手もこちらのガンクに気づきにくくなる。
  • 相手がCSを取るタイミングでハラスする。あたり前田のクラッカー。
  • フラッシュはできるかぎりメモる。サポートが一番暇なのでメモるのはサポートの仕事。対面だけでなくTOPやMIDのフラッシュもできるかぎりメモる。チャットでタイムスタンプをオンにしてフラッシュしたことだけメモしておき、リコール後に計算するでも良い。これで味方がガンクにくる確率が上がる。

半分自分に言い聞かせているところがあるがこんなところだろう。

LOLを六年やって

このゲームははっきり言ってあまり人に進められない。かんたんにメンタルを壊しにくるし敷居もめっちゃ高い。しかし、様々な操作感のキャラクターを同じ条件から少しづつ上回っていき相手を叩きのめす感覚は他のゲームではなかなか味わえない。二週間に一度のパッチでメタが変わるので飽きることもない。世界で一番遊ばれていのにはそれなりに理由があるし、いわゆるesportsのイベントも世界的に盛んである。日本でLJLほど成功してるesportsイベントはないんじゃなかろうか。
このゲームで知り合った人や物事で色々な意味で人生が変わったとも言える。エンジニアになったのもこのゲームの影響である。

今後

エンジニアでLOLやってる人の知り合いがほしい。明確にLOLやっていると知っている人はひよこ大佐氏くらいである。RubyistであまりPCゲーをやっている人を知らない。みんな、LOLやろう!!!!!!!!!!!!!!!!!!!!

「UNIXという考え方」を読んだ

電子書籍がなかったので久々に物理で読んだ

UNIXという考え方―その設計思想と哲学

UNIXという考え方―その設計思想と哲学

  • 作者:Mike Gancarz
  • 発売日: 2001/02/01
  • メディア: 単行本

UNIXの定理への感想

小さいものは美しい

小さいとわかりやすく、保守しやすい、組み合わせやすい、計算機のリソースにも優しいということ。僕はプログラム単体でこれを意識していることはないけど、関数単位ではほとんどのプログラマがこの定理は大事だというだろう。

一つのプログラムには一つのことをうまくやらせる

いわく関心の分離。やりたいことの本質のみを行うことが柔軟性につながる。lsコマンドも本来は複数の列に整理して出力すべきではないらしい。 これもプログラマならまず意識していることだと思う。一つの関数、一つのモジュールには一つの機能、わかりやすい変数名と共にコードの基本な気がする(かつ難しい)。

できるだけ早く試作をつくる

これもアジャイル的な言葉で最近のエンジニアは重視している考え方だと思う。ソフトウェアはつくるのではなく育てて行くものだという考え方。 この本ではUNIXの成長過程と共にこの考え方が紹介されていた。ソフトウェアには3つの段階しかなく、若年期、成熟期、老年期しかない。最近だとrailsは老年期にはいってきているのだろうか。
最近、自分の仕事でも早期の試作の利点を体感することがあった。新機能を開発で議論をする時に、チームメンバーがそれぞれの頭の中の機能で話しすぎてそれぞれの議論が噛み合わないという問題があった。けれど、デザイナーの方がモックを作ってくれるようになった途端議論がスムーズになったという体験だ。具体的な図面はチームで議論する上で強力な標識となることをこのとき認識した。
この定理でのドキュメントに関する考え方も面白かった。ドキュメントを詳細に書くことが正義だと思っていたが、ドキュメントも育てるものであり、ちょっとしたことでも芽を残すことを意識して「気楽に」ドキュメントを残したほうが結果的に良いのかなとも考えた。

効率より移植性

ハードウェアは日々移り変わるので移植しにくいソフトウェアは長生きしないというもの。Webで色々やっているとHTTPでソフトウェアを配るのが現実的になってきていると思う。それこそChromeBookが体現していて、HTTPとその解釈ができるブラウザさえあれば他のサービスは全てブラウザを通して使える。サーバー単体のハードウェアではなく通信規格にいかにのっかれるかという時代に突入している気がする。いつかHTTPを超えるなにかが出て人々はそれをつかって情報をやり取りするようになるのだろうか。

数値データはASCIIフラットファイルに保存する。

「効率より移植性」と同様の感想をもった。

ソフトウェアを梃子として扱う

車輪の再発明は良くないというもの。そして人類全体でソフトウェアを複利させていこうとい考え方だと思う。なにも開発にOSSを使っていくだけじゃなく日々の作業で人のソフトウェアを使っていこうという気にさせられた。

シェルスクリプトによって梃子の効果と移植性を高める

「ソフトウェアを梃子として扱う」と同じ

過度の対話的インターフェイスをさける

なるほど言われてみると確かに、という話には感じる。ユーザーを束縛するインターフェイスはソフトウェアを組み合わせにくくし、バックグラウンドで実行させたりもできない。コマンドをつくる側からするとこれも重要な観点の一つなんだろう。RESTがステートレスを基本に作られてなければこれほど世界でWebサービスは流行らなかった気がするし納得。

全てのプログラムをフィルタとして設計する

それはそう。フィルタとしての機能を単独にするべきということにつながる。

まとめ

特に前半の「小さいものは美しい」、「一つのプログラムには一つのことをうまくやらせる」、「できるだけ早く試作をつくる」、「効率より移植性」は全てのソフトウェア開発で役にたつ考え方だと感じた。
あとアジャイル開発で「ユーザーの価値を考える」をそのまま「ユーザーにとっての価値を増やす」にすると機能を増やしすぎてユーザーの価値がぼやけるという問題もこれから起きるのかなぁとか思ったりした。

一人暮らしリモートワークで本当に捗るもの、それは沼

一人暮らしのリモートワークで困るもの、それは食事である。
会社であれば周りのコンビニや社食で買えばいいが、一日家にいるとなると話が違う。
また、出社していれば「通勤のついでに何かを買う」という行為ができたのでコンビニやお店に行くのも対して手間ではなかったが、リモートだと外にでるのすら億劫になる。
全て家の中で解決させたい。そんなあなたにおすすめの食事がある。

沼です


究極の減量食「沼」を大公開!

沼とは色々なものを十合炊き炊飯器にいれて水分量たっぷりでつくるおかゆみたいなものである。 マッスルグリルというYoutubeチャンネルで広まった料理。

必要なものは

  • 鶏肉(ささみ or 胸肉) 754g
  • 生米 277g
  • おくらちゃん 10本
  • 干し椎茸 おもむろ
  • 乾燥わかめ おもむろ
  • カレー粉 適当
  • 塩 適当

だけである。作り方は動画を見てほしい。めちゃめちゃ簡単。 これと卵2個でだいたい2000kcalである。

沼のいいところ

簡単

材料放り込んで炊飯器のスイッチを押すだけである。 これで明日の朝には一日分の食事が炊飯器の中にある。非常に体験が良い。
そして沼の材料はいちいち買いに行かなくてもAmazonで買えるものばかりである。肉、おくら共に冷凍のものがプライムNOWで手に入る。解凍する必要もなく、そのまま炊飯器にほうりこめばOK。その他の材料は普通のAmazonでも買える。
また全ての材料が保存がきくので、材料を腐らせてしまう一人暮らし自炊あるあるも発生しない。

安い

一日分あたり鶏肉がだいたい550円、オクラ100円、その他の材料は多めに見積もっても300円分くらいだろう。これで一日分の食事が出来上がる。水をたっぷり入れるので量もかなり多く、4~5回にわけないと食べきれないくらいである。

美味い

見た目からは想像もできないほど美味しい。干し椎茸とわかめの旨味がたっぷり溶け込んでいる。動画の通りに作ると少し薄めなので塩とカレー粉は多めで良い

栄養バランス

水をたっぷりいれるので低カロリー。カロリー計算もしやすい。タンパク質もしっかり取れる。

可搬性

リモートワーク時には役に立たないかもしれない利点だがこれも沼の強み。なにしろただのお粥なのでタッパーに詰め込めば簡単に持ち運べる。盛り付けなど必要なし。後述するが冷めても美味しいので保温したりする必要はない。

沼の悪いところ

見た目

名は体を表す。

沼ワンポイントアドバイス

もしこの記事を読んで沼を作ってみようと思った方にアドバイスを残したい。

意外と冷めても美味しい

保温して放置することで美味しくなる沼だが、冷める過程でも味が入るのかまた一段と美味くなる。筆者は朝になったら保温を切っている。

卵のとり方

沼だけだと脂肪が足りないので全卵を取ると良い。最初はゆで卵にしていたが、ぶっちゃけ生卵のまま沼に混ぜてしまうのがいちばん簡単なことに気づいたのでおすすめしたい。最近薊さんはオリーブオイル入れているらしい。

鶏肉

冷凍のささみが一番オススメ。本数で考えれば計量の手間もないし皮を剥がす必要もない。だいたい12本で760g。また冷凍なら肉でも日持ちがするので、「明日は会食の予定があるからを作るはやめておこう」に対応しやすい。

炊飯器

できれば十合炊きを買った方が良い。五合だと水の量が足りないし成人男性ならば一日分作るのも難しい。 どうしても五合炊きで作りたいならばマッスルグリルのこの動画を参考にするべし。


【沼】冬の沼!究極のダイエット食!5合炊き版!

まとめ

筆者は沼生活を二ヶ月ほど続けている。朝飯もしっかり食べるようになって体の調子が良くなった。簡単だし安いし美味いし満腹感もあるのでリモートワークで自炊を始めようと思っている方全員におすすめしたい。

Ginza.rb#80でLTをしてきた

 当日の概要

Ginza.rb#80でLTをしてきた

ginzarb.doorkeeper.jp

LT

イベントの空気感的にはかなりカジュアルよりだったけど、社外でのLTは初めてでガチガチに緊張していた。当日のスライドは以下。

speakerdeck.com OSSへのコントリビュートを一年やってきて思ったところを発表した。koicさんが引用してくれたりyagiさんにいい話きけたといってもらったりして嬉しかったです。

他の人の発表も、「2.7からのパターンマッチは実は右辺代入だった!?」とか「同じシステムってなんだ?」とか「rubocop-minitestのリアルタイムリリース」とか「自分の一年間やってきたこと」とか「fill_inがモーダル開閉のfocus()でうまく機能しなくなる」とか「Kaigi on RailsはRubyKaigiと初心者向けの中間くらいの難易度で開催したい」とか色々な話題のLTがあって面白かった。

まとめ

Ginza.rb、毎回willnetさんやy-yagiさんのためになる話がきけるのでRuby好きの人にはオススメの勉強会。

graphql-rubyにコミットした

業務でgraphql-rubyを色々いじってたら「おや?」と思う挙動があった。調べてみると同じ内容でissueを立てている人がいた。

github.com

graphql-rubyでは_idといった引数を受け取った時にloadsオプションを指定しているとHogeSchema.object_from_idを呼んでレコードを取り出す動作を簡潔に書くことができる。 だけど実はこれはinput_object(いくつかの引数の型をまとめて定義したもの)として定義しないと使えなかった。(Mutaionでも引数につかえるのだけれどMutationの引数は実質input_objectの定義なので同じ。)

前回graphql-rubyをふんわり読んで色々脳内地図があり、issue内でもオーナーのrmosolgo氏が修正することに前向きそうだったのでPRを出した。

github.com

内容はinput_type内の処理をそのままfiledの引数の処理に持ってきたのと、内部で使っているload_application_objectが呼び出し元の@contextのリーダーメソッドに依存していたので外部から注入できるように変更したというもの。

rmosolgo氏が色々レビューをしてくれてありがたかった。(最後に氏みずからinput_object内の処理も少し書き換えるコミットを積んでくれた。不要にlodasに対して実行されていたコードが減ったので、PRの主目的以外の恩恵もあると思う)

GraphQLは仕事で使い始めたばかりだけれどテストコードやらみると色々勉強になって良い。

みんなのコンピューターサイエンスとプログラマの数学を読んだ

最近以下の二冊を読んだ

みんなのコンピュータサイエンス

みんなのコンピュータサイエンス

プログラマの数学第2版

プログラマの数学第2版

数学、コンピューターサイエンスに関する本を読んだ。

本を読んだ理由

僕は文系卒であり、新卒で入った組織もソフトウェアエンジニアリングとはあまり関係ない場所だった。
自分がコンピューターサイエンスの基礎がわかっているとは思えないし、アルゴリズムをものにしているとも思えない。実際AtCoderにはちょくちょくでているものの未だレートはこんな感じ。大体ABCのCまでなんとか解いてDには歯が立たない感じだ。

f:id:sasa5740:20200122203533p:plain

だいたい良いプログラマーとは?みたいな記事をみるとコンピューターサイエンスを学ぼう、アルゴリズムを学ぼうと書いてある。
Matzもいってるので多分正しいのだと思う。誰がいっているのかで判断するのは良くない 海外の企業も採用時にはまずアルゴリズムについてしっかり確認する印象がある。
そういった記事を読んでとても不安になり本に助けを求めた。

なんにもわからない

論理、確率、帰納法、動的計画、データ構造は、説明できるほど理解できる時が来るのだろうか、競プロをやっていけば(周りよりスピードはゆっくりだろうけど)ついていくのだろうか。 「再帰はスタックに構造をいれていく」とか「5つのユニークな要素から3つ取り出す順列は5 * 4 * 3で60通りあるとか、順序を考えないと順序考えた分を割って5 * 4 * 3 / 3 * 2 * 1で10通り」とか読んでなんとなく意味はわかっても日本語が少し変わって問題を少しひねられたらなにもできない気がする。
根本は難しいことをできるだけ細分化して考えるということだと思う。しかし与えられた問題に適切なアルゴリズムを出す自信が全く無い。一歩ずつ頑張るしかないのだろう。

その他

「コンピューターサイエンス」と仮想メモリとかレジスタ、スレッド、プロセス、I/O、(メモリの方の)ヒープ、(スレッド毎の)スタック、カーネル、ソケットといった(多分)UNIXからつらなる概念は別扱いなのだろうか? この他にもHTTPだったりRDBMSだったりなんにもわからんなと思った2020年1月22日だった。