【メモ】proconioでデバッグ方法【Rust】

例題ABC081 B

atcoder.jp

入力例1

3
8 12 40
use proconio::input;
use proconio::source::auto::AutoSource;

fn main() {
    // デバッグ方法
    let source = AutoSource::from("3
      8 12 40");

    input! {
        from source,
        n: i32,
        a: [i32; n] // 数が変わる
    };
        println!("{}, {:?}", n, a); // 3 [8, 12, 40]
}

所感

困ったときはやっぱりドキュメントを見るべき。。。コード例はあっても入力のデバックってなかなか見つけられなくて苦しんだけど普通に公式に書いてた(泣)

【メモ】RustでAtCorder入門してみた

入力

https://zenn.dev/toga/books/rust-atcoder/viewer/07-input

use proconio::input;

fn main() {
    input! {
        n: i32,
        a: i32,
        b: i32,
    }
    println!("{}", a + b + n);
}

数字が大きい場合

以下のように使うらしい

input! {
    n: String,
};
let n: Vec<u32> = n.chars().map(|&x| x.to_digit(10).unwrap()).collect();

所感

まじで数字の入力もStringで受け取るの分からなくて3時間位消えた(泣) 小さい数字ならu64でいいっぽいけど競プロでは許されない。。。200桁の数字とかあるから〜

【メモ】AWS SAA

  • ベアメタルインスタンスで通常のクラウドでは不可能な、ホストコンピューターのOSなどにアクセス可
  • Dedicated Hostは物理的にサーバーを占有するインスタンスタイプ、別のIAMグループとは物理サーバを共有しない
  • Elastic IPアドレスをスタンバイEC2インスタンスにきりかえられる
  • lambdaの連携はRDSのプロキシ経由で可能
    • lambdaからRDSへのアクセスを実施するため、RDS側のセキュリティグループを許可する設定を行う
    • RDS Proxyは、RDSに対応するデータベースプロキシ、アプリケーションがデータベースと確立した接続の再利用や共有を可能
  • Amazon Kinesis Data Streamでメッセージが失われず、重複されず、到着順にストリーミング
  • Step function で順次ステップを持つバックグラウンドジョブの構築、実行、スケーリング
  • lambda layerは複数のLambda関数でライブラリを共有できる仕組み
    • 重複部分を共有化することが可能
  • SQSのデフォルトのメッセージ保持期間は4日間
  • CloudFrontはデータベースの読み取りクエリ処理を分散させられない
  • EMRはビックデータフレームワークAWS上で実行して大量のデータを処理、分析プロセスを構築できるプラットフォーム
    • S3、DynamoDBなどのデータストアやデータベースとの間で大量のデータを変換、解析可
  • ElastiCacheは高速の管理されたインメモリデータストアから情報を取得できるようにする
    • ランキングやレコメンドの実装
  • CloudTrailイベントのCloudWatchアラームを作成できる
  • AWS CloudTrail による AWS KMS API 呼び出しのログ記録
  • CloudTrail によってバケットに配信されるログファイルは、Amazon S3 で管理された暗号化キーによるサーバー側の暗号化 (SSE-S3) によって暗号化
  • RedshiftはマルチAZ構成をとることが出来ず、クラスターは1つのAZの中だけで構成する
  • AWS EMRはビッグデータの分析が可能なAWSのサービス
  • EFSへのアクセス制御にはセキュリティグループが必須
  • CloudTrail
  • ELBには送信されるリクエストに関するログを収集できる、S3に保存
  • フェイルオーバー機能が確実に動作するにはネットワークの受信トラフィックに対して、セカンダリプライベートIPを使用
  • RDSは頻繁に、同時に上書き、削除されるデータに適する
  • スポットブロックは中断されず、選択した期間継続して実行できる
  • Elastic IPアドレスをアタッチするとパブリックな設定になる
  • Auto Scalingのインスタンス起動/破棄時に初期処理/終了処理を追加できる
  • AWS ストレージゲートウェイ
    • 保管型ボリュームは新規にアップロードされたデータをローカルのディスクに保存した上で、非同期的にAWSへとバックアップを行う
    • キャッシュ型ボリュームはすべてのデータが Amazon S3 に保存され、頻繁にアクセスするデータのコピーがローカルに保存される
  • Glacier Deep アーカイブは取り出しに12時間かかる
  • インスタンスの休止を有効にしておくと、インスタンスを起動するとき、データが保持される

【資格】AWSソリューションアーキテクトアソシエイトに合格した話

前提

  • AWS未経験

  • インフラ知識なし

  • フロントエンドエンジニア

使用したもの

やったこと

まず、AWSのサービスに関する知識がまったくなかったので、サービスの概要を覚えるために黒本の章末問題を解いて用語を覚えました。 次に、udemyのハンズオンを視聴しつつ(ハンズオンはほぼやっていません)、同様に章末問題を解きつづけました。一通り解き終わった頃にはサービスについて覚えてきたため、WEB問題集の#80〜#147を3週ときました。その後、模擬試験で8割をとれるようになったため、一度本試験を受けてみましたが一度目はぎりぎり落ちてしまったため、Udemyの問題集を追加で解きましたが、これは聞かれる知識が細かすぎるため4回目で解くのを辞めました。再度、WEB問題集を解き、一度目より細かな部分まで覚えました。

所感

本試験は正直かなり難しく、1回目も2回目も試験中はずっと落ちたかもと思っていました。WEB問題集が一番本試験に近いと思いますが、本試験の方が圧倒的に難しいです。また、本試験は翻訳がおかしいものが多く、英語の問題文を何度も見ました。困ったときは見るといいと思います。 実務で全くAWSを触ったことがなく、クラウドの知識や設計に関して全くわからない状態だったので、2ヶ月もかかってしまいました。一度目に受験したとき、未経験じゃ絶対に受からないと思っていましたが、 twitterで頑張っている方を見て励みにしていました。 AWSに関して体系的に知れてとてもよかったですし、今後、SAPも取りたいとは思っていますが、もう少しハンズオンや実務でサービスをしっかり使いこなせるようになってから、また勉強しようと思います。

【備忘録】React環境構築まとめ

メモ

Node.jsの環境

  • nvmでのnodeバージョン切り替え
  • yarn.lockではpackage自体の依存の管理
  • 開発するときのみ必要なライブラリは -D で
  • global installしたときのみ yarn なしでinstall可
  • .binについて

Babelでのトランスパイル

  • Babel : ブラウザがサポートするJavaScriptに変換できる
  • @babel/cli: コマンドで。babel.config.jsを作成
  • pluginをセットにしたpresetを利用

TypeScriptでのコンパイル

  • tsconfig,jsonに記述
  • module -- common.js
  • lib -- コンパイルに含めるライブラリのファイル一覧を指定、targetなどに依存

webpackでのバンドルとビルド

  • webpack: 単体で実行可能なファイルを生成するファイルを生成するもの
  • webpack.config.jsに記述
  • loader -- bundle前にソースコードになんらかの処理を行う(Babel, tscコンパイル)
  • html-webpack-pluginでhtmlファイルの変換

ESLint

Prettier

所感

友達に「CRAだとejectが〜」と言われたので、気になってCRAを使わずに環境構築する方法を学んでみました。(個人的にはCRAでもそんなに困ってなかった)(細かい違いのわかる女になりたい) 結果的に、Babel, Webpackの理解が深まって良かったと思います。webpackすごい。縁の下の力持ち。

今までCRAでしれっと開発してきましたが、フロントエンドの依存沼を垣間見ました。。。 また、index.htmlファイルの作成し忘れで1日溶けたのもいい思い出ということにしておきます。脳死でCRAよくない。

2020年やりたいこと

健康

  1. ジムに通う
  2. 野菜を食べる
  3. 一日8時間睡眠
  4. 猫背に気をつける
  5. 果物を食べる
  6. 砂糖を控える

開発

  1. 丁寧にコードを書く
  2. JavaScriptの基礎を復習する
  3. React HooksとFirebaseのアウトプット
  4. TypeScript実践をやる
  5. Vimが好きになる本をやる
  6. クリーンアーキテクチャについて学ぶ
  7. カンファレンスに参加する
  8. ハッカソンに出る
  9. 誰かとアプリを作る
  10. N予備校を始める
  11. 勉強会に参加する
  12. AtCoderの過去問を一日3問進める
  13. AtCoderで水色を目指す

ご飯

  1. 好きなものばかり食べないようにする
  2. お気に入りの食べ物を開拓する
  3. 自炊する

家族

  1. 実家にたくさん帰る
  2. 家族でおいしいものを食べに行く
  3. ショコラとたくさん遊ぶ

美容

  1. お気に入りの化粧品を見つける
  2. お風呂にたくさん浸かる
  3. ボディケアを丁寧にする
  4. 爪を綺麗にする
  5. お気に入りのフレグランスを見つける
  6. 服を買いすぎない

  1. ものを減らす
  2. ルンバを買う
  3. 部屋を綺麗に維持
  4. 家に引きこもらない
  5. ストックを買わない
  6. 開発環境を整える
  7. カーペットをかえる

経験

  1. たくさん映画を見る
  2. たくさん本を読む
  3. 海外旅行に行く
  4. 新しい趣味を見つける
  5. 人と会う機会を増やす
  6. 一人で旅行する
  7. 一人で何かに挑戦する
  8. 温泉巡りをする
  9. なんでもとりあえずやってみる

全然思いつかない!!!

2019年の振り返り

2019年は自分のやりたいことが見つかったり、それに向かって日々頑張ることができて、ここ数年で一番充実した1年でした。 初心に帰る意味も込めて、エンジニアとしてこの1年でやってきたことを振り返ろうと思います。

1-3月 就活不安

大学2年でした。3年から就活が始まるのに、やりたい事が見つからず、焦っていました。大学での専攻が生物だったので、もう何も考えずに、みんな食品や製薬系に就職するし、それでいいかなと思っていましたが、やりたいことではなかったので、ただただ不安でした。

2年の授業でPythonをやったのが楽しかったことを思い出しました。 (「せっかく理系に来たのだから、専門性を生かさなければ」と考えてしまっていて、PythonやRを分析で使うデータサイエンティストを目指そうとして、挫折したこともありました。(2年の夏)2ヶ月ほど、大学院で解析について学ばせていただきましたが、そこでデータサイエンティストもなんか違うなあとなり。。。)

色々調べているうちに、WEBエンジニアについて知りました。 初心者が学習しやすいのと、何ができるかイメージしやすかったこともあり、WEBエンジニアを目指すことにしました。

4-5月 プログラミング開始

動画教材で、WEBの基礎固めを行っていました。大学が終わったら速攻図書館に行き、毎日8時間ほどHTML, CSS, JavaScript, PHPの基礎をひたすらやっていました。孤独でしたが、コードを書くのが楽しくて、あっという間の日々でした。デザインの本を買って、模写をするのがメインでした。 夏にインターンに参加したかったので、何かアウトプットもしなければ、ということでフレームワークを用いず、Instagramを作ったり、それを Laravelで作り直したり、Herokuにデプロイしたりしました。これがめちゃめちゃ難しくて、挫折しそうになった記憶があります。

6月 WEBサービス開発、インターン面接

インターンの面接に2社申し込みました。IT系は予想以上にカジュアルで、せっかく買ったスーツを一回も来ませんでした(笑)面接もオンラインだったので、色々びっくりしました。

未経験で、しかもプログラミングを始めて2ヶ月でしたが、

  • 一人でコツコツ勉強していること(自走力)

  • アウトプットをしている点

が評価されて、1ヶ月のインターンをさせていただけることになりました。 2社目では選考課題が課されましたが、以前作ったInstagramと似たような制作物を作るというものだったので、復習も兼ねて作ることにしました。2社目のインターンも決まりました。 今思えば、私は自分の技術力に自信がなかったため、絶対に落ちない企業ばかり受けてしまっていたので、そこは後悔しています。もっといろんな企業に挑戦するべきだったと思います。 この当時はサーバーサイド( Laravel)が楽しく、サーバーサイドエンジニアを目指していました。

7月 WEBサービス開発

2社目のインターン先で課された選考課題をやっていました。 LaravelだけでなくフロントはVueを使ってみることにしたものの、初めてVueを触ったこともあり、JSやフレームワーク特有の状態管理に苦しんで、再び挫折しそうになっていました。今思えば、大したことないですが、ajaxで詰まっていたようで、成長したなあと感じています。 こちらが完成したものです。いや、画像表示されてないし、パンくずリストないし、レイアウトずれてるし、画像の画質最悪だし、色々やばいですが、頑張ってたなあ、自分ということでOKとします。

8月 インターン(1ヶ月)

1社目のインターンでした! 毎日10:00-19:00で開発させていただけ、本当に幸せでした。。。この時「コードだけ書く人生」を今後の目標に決めたような気がします。詳しくは書けませんが、社内ツールの開発をしていました。他のインターン生がいなかったため、一人で開発をすることになりましたが、担当のエンジニアの方から、欲しい機能を提案していただいて、 欲しい機能(「ここに一覧表示欲しいな」)→(自由に)作る→プルリク→マージ→次の欲しい機能、、、 という感じで、開発してしていました。最高。 この時初めてGitHubを使って開発しました。gitは当時の私は怖くて、commitとかmergeとかなに・・・・って感じだった記憶があります。懐かしい。それもすぐ慣れましたが!知らないことばかりで毎日吸収することばかりでした。 それに、ここで内定をいただけたのもうれしかったですね!ベンチャーってゆるい!笑

9月 インターン(2週間)

4月からひたすらにプログラミングに捧げてきたこともあって、ちょっとお休みしようということで、2週間コードを書かない日々を送りました。友達と遊んだり、研究室を決めたり、夏休みを満喫していました。 9月の下旬からは2社目のインターンでした。人生2回目の東京で、知らない人ばかりなのに、エンジニアは男子ばかりで、孤独死しかけていました。(東京まで遊びにきてくれた友達に1週間でやつれたね・・と言われてしまいました笑) 地元で就職する予定でしたが、私が思っていた以上に東京はいい街で、東京で就職したい欲が増してしまって。技術を追うなら絶対に東京に来なきゃダメだなあと、身をもって感じました。この時東京に来れて本当に良かったです。

10月 Reactの勉強

Twitter経由でインターンのお誘いを受けました(驚き) Twitterで自分がやってきたことを毎日記録していたのを見ていてくださった、つよつよエンジニアの方が声をかけてくださいました。こんな素晴らしい縁があるんだなと。 自分が頑張ってきた事が誰かに認めてもらえるのって、生きてて良かったなと思える最高の瞬間だと思います。 そしてReactの勉強を始めました。これおすすめです! また、WEBの基礎を勉強しなおしていました。

11月 フロントエンドに転向

フロントエンドカンファレンスに参加しました。初めてのカンファレンス参加で、エンジニアの人たちのノリや技術の話、難しくて全然わからなかったのに、ひたすらに楽しくて。運営をやっている友達が羨ましかったです。この時次は運営やろう!と思いました。 また、サーバーサイドエンジニアではなく、フロントエンドエンジニアを目指すことにしました。インターンでfirebaseはいいぞ、といろんな方から聞き、サーバーサイドいらないじゃん・・・と思ったり、このままLaravelで開発していていいのかな。と不安に思っていたこともあり、このタイミングで完全にフロントエンドに決めました。

12月 インターン(React)

ReactとFirebaseでアウトプットをしていました。ドキュメントを見れば簡単かなと、なめていました。Firebaseより、JavaScriptのできなさに直面して、素のJavaScriptを勉強し直さなければ・・・と思っていたら、TypeScripやりな、Hooksはいいぞ、とReactは奥が深いようで、やる事がたくさん見つかりました。幸せすぎ・・・

また、12月の後半から、Reactでの開発が始まりました。 大学があるときは、日中コードを書く事ができないので、実家で1日中コードが書ける冬休みって最高すぎます。こんなに幸せな人生があったなんて・・・生きてて良かったと思う毎日です。自分の未熟さを知るのは辛いですが、周囲の方々の人としてはもちろん、エンジニアとしての素晴らしさに触れる事ができる最高の機会を無駄にしないように、できる限り学ばせていただいています。

最後に

私のエンジニアとしての目標は「コードだけを書く人生」です。 エンジニアは、技術の記事を書いたり、カンファレンスで登壇したり、色々エンジニアとしてのアウトプットも重視すべきであることは理解しています。でも、今の私はコードを書くのが楽しくて、今の最新のベストな技術、設計を学び、開発をできる事が何より幸せだということに気がついてしまいました。 10月、11月は研究室が忙しく、開発もできず、物理的にやりたくないことをやる時間が多くなってしまい、ひたすらフラストレーションが溜まっていました。また、どれだけインプットをしても、インターンで開発ができなければ、自分の成長が止まってしまったような感覚に襲われました。

今の私にとっての幸せは、

  • 自分が極めたい言語、技術を使えること

  • 尊敬できるエンジニアの方と働けること

  • たくさんコードが書けること

です。

本当に4月の私からは想像できないほど、素晴らしい1年でした。 感謝の気持ちを忘れず、2020年も努力を惜しまず、日々成長していければ、と思います。 2020年もよろしくお願いします。