好奇心の赴くままに

好奇心の赴くままに

やりたいことを書いています。

2022年の目標宣言

今年は昨年よりアウトプットを増やして、興味のあるAIやソフトウェア設計を勉強しつつ、30歳以降の海外就職を視野に入れてCSの勉強や英語を頑張っていきたいです。

なりたい姿

  • 英語での情報収集や技術習得をできるようになりたい
  • TDDやDDDを理解した上で、TDDやDDDを実践してソースコードを書けるようになりたい
  • 基本的なアルゴリズムを理解して実装できるようになりたい

インプット目標

  • なるべく英語で技術習得するようにする
  • TDD,DDDについて書籍で勉強する
  • 基本的なアルゴリズムについて書籍で勉強する
  • CS(CPU,OS,DBなど)について勉強する

アウトプット目標

  • 技術記事 (はてなブログ、Qiita、Zennなど)最低週1本書く
  • LT発表 2ヶ月に1回発表する
  • 個人開発 1個作る
  • AtCoder 緑まで行きたい
  • kaggle等のAIコンペ 銅メダル1つ取る

資格目標

2021年の振り返り

E資格を取ったり、個人開発やったり、手広く色々やった年だった。
プライベートで色々あって忙しかったので、例年に比べてアウトプットが 少なくなってしまったのが残念。

アウトプット

  • ブログ 2本
    必要に駆られて勉強したRailsで1本とAtCoderで1本書いた。

writerman.hatenablog.jp writerman.hatenablog.jp

  • Qiita 2本
    仕事で利用しているC#と個人開発でのVue.jsで計2本

qiita.com qiita.com

  • LT 1回
    社内の制作物発表会でのLT

speakerdeck.com

  • 個人開発 1個
    E資格を受験する際に受講した研修内で開発したもの

github.com

  • OSSコントリビューション 1個
    ずっとOSSコントリビューションしたくてようやく叶った。

github.com

仕事

昨年に引き続き、AWS環境の設計・構築をやっていた。
今年からはC#でのデスクトップアプリ開発もやった。

できるようになったこと

  • AWSのセキュリティ分野について詳しくなった。
  • Swiftで簡単なアプリを作れるようになった。
  • Railsで簡単なアプリを作れるようになった。
  • DeepLearningの仕組みを理解して簡単な画像認識のアプリを作れるようになった。
  • DP,DFS,BFSを理解した。

atcoder-cli,online-judge-toolsを入れてAtCoderのローカル自動テスト環境を構築した

※2022/1/9 ojにPATHが通らない場合の手順追加

きっかけ

最近コーディングテスト対策で毎日AtCoderの問題を解いているのですが、 毎回のサンプルテスト実行が面倒でした。
そこで、ローカル環境で自動テストを実行できるツールを インストールして自動テスト環境を構築してみました。

検証環境

  • WSL2(Ubuntu20.04)

  • VSCode

  • Python 3.8.5

  • pip 20.0.2

  • npm 8.1.4

種類

調べたところどうやら以下の2強みたいです。

これさえインストールすれば、対象の問題情報ダウンロードからSubmitまでやってくれるので便利

github.com

二つ入れる必要があるが、コマンド名も短く、使いやすい

github.com github.com

手順

最初は使うツールの少ないatcoder-toolsを試したのですが、

バグ(https://github.com/kyuridenamida/atcoder-tools/issues/204)でsubmitできなかったのであきらめて atcoder-cli,online-judge-toolsを使って環境構築を進めました。

環境構築

# atcoder-cliのインストール
$ npm install -g atcoder-cli

# online-judge-toolsのインストール
$ pip3 install online-judge-tools

# atcoder-cliのインストール確認(ヘルプ一覧が表示されればOK)
$ acc -h

# online-judge-toolsのインストール確認(ヘルプ一覧が表示されればOK)
※`Command 'oj' not found`と出る場合は以下のサイトの手順7を参照してPATHを通す。
[https://github.com/online-judge-tools/oj/blob/master/docs/INSTALL.ja.md]
$ oj -h

# accとojが連携できているか確認( availableならOK)
$ acc check-oj

# accでatcoderにログイン
$ acc login

? username: xxxxxxx
? password: [hidden]
OK

# ojでatcoderにログイン(Seleniumが入ってない場合、エラーが出ますが、無視してOK)
$ oj login https://beta.atcoder.jp/

(省略)

Username: xxxxxx
Password: 

(省略)

[SUCCESS] You have already signed in.

実際に使ってみる

今回は実際にローカル上で以下の問題をコード作成、テスト実行、提出までやってみます。

atcoder.jp

まず、問題一式をダウンロードします。

f:id:kamada-math:20211216000615p:plain

acc new の後にatcoder.jp/contest/の後にくるコンテストIDを入れて実行してください。(今回だとabs)

acc new abs

※途中ダウンロードする問題を選択場面があるので、今回はPracticeAを選んでください。

次に実際に今回の提出するコードを書きます。

testsディレクトリと同じ階層にpractice.pyとして今回の提出コードを作成します。

# 整数の入力
a = int(input())
# スペース区切りの整数の入力
b, c = map(int, input().split())
# 文字列の入力
s = input()
# 出力
print("{} {}".format(a+b+c, s))

作成後、以下のようなディレクトリ構成になっています。

$ tree

.
└── abs
    ├── contest.acc.json
    └── practicea
        ├── practice.py←今回の提出コード
        └── tests←テストケースの入ったディレクトリ
            ├── sample-1.in
            ├── sample-1.out
            ├── sample-2.in
            └── sample-2.out

ここで、実際にテストを実行してみます。

# 提出コードのある階層まで移動
$ cd ./abs/practicea/

# 実際にテスト実行(cオプションでpython実行のコマンド、dオプションでtestケースディレクトリを指定します。)
$ oj t -c "python3 ./practice.py" -d ./tests/

[INFO] online-judge-tools 11.5.1 (+ online-judge-api-client 10.10.0)
[INFO] 2 cases found

[INFO] sample-1
[INFO] time: 0.047150 sec
[SUCCESS] AC

[INFO] sample-2
[INFO] time: 0.046449 sec
[SUCCESS] AC

[INFO] slowest: 0.047150 sec  (for sample-1)
[INFO] max memory: 9.120000 MB  (for sample-1)
[SUCCESS] test success: 2 cases

問題ないので、実際に提出します。

acc submit (提出ファイル名)で提出できます。

途中で確認のため、typeする必要があるので、言われた通りにtypeします。

$ acc submit practice.py 

(省略)

Are you sure? Please type "pra1" pra1 

(省略)

提出後、自動でブラウザが開いて提出結果を確認できます。

f:id:kamada-math:20211216000650p:plain

参考

hamukichi.hatenablog.jp

atcoder初心者こそ環境構築しよう!(atcoder-cli,online-judge-toolsのインストール、使い方) - Qiita

Hirbを使ってRails Consoleでのコンソール出力を見やすくする

Rails Consoleでのコンソール出力が見ずらい

Rails ConsoleでDBの中身を見る際に、コンソール出力の結果が非常に見ずらい

f:id:kamada-math:20211115220438p:plain

hirbを導入して見やすくしてみた

Gemfileに以下の記述を追加してbundle installを実行

  gem 'hirb' # hirb本体
  gem 'hirb-unicode' 

インストール後、Rails ConsoleでHirb.enableでHirbが有効になり、以下のようにコンソール出力が見やすくなります。

f:id:kamada-math:20211115220832p:plain

毎回Hirb.enableするのは面倒

毎回Hirbを有効化するのは面倒なのでGemfileと同じフォルダ階層に コンソール起動時に読み込まれる.irbrcファイルを作成して以下を追記してやると毎回Hirb.enableしなくて良いので楽

if defined? Rails::Console
  Hirb.enable if defined? Hirb
end

参考

Rails Console がしんどい人への hirb のススメ | Octo's blog

RailsでHirbを使ってコンソールの出力を表形式で表示する | 雑記学習帳

メモリ増設、SSD換装してみた

データ量の多いExcelを開くだけでPCが落ちたりしていて、仕事の生産性が 下がりやすかったので、これを機にメモリ増設・SSD換装してみました。

最初に

以下の検証手順を個人で試される際には一切責任等は負いませんのでご了承ください
あくまで一参考として読んでいただけると幸いです

増設・換装前PCスペック

購入したもの

手順

  1. BitLockerの解除を行う
  2. 変換ケーブルでSSDを接続し、フォーマットを行う
  3. 以下手順を参照し、Samsungのクローンソフト(Samsung data migration)を利用して、HDDからSSDへデータ転送
         Samsung_SSD_Data_Migration_User_Manua     
  4. ACアダプターを外す
  5. PC再起動し、F1ボタンを5回以上連打してBIOS起動
  6. BIOS画面で以下設定を行う
    • セキュアブートの無効化
    • 内臓バッテリー無効化
  7. 6で電源が切れるので外部バッテリー取り外し
  8. 裏側のふた(蓋板)を取り外す
  9. メモリ取り替え
  10. HDDを取り外し、SSD取付
  11. 裏側のふた(蓋板)を取り付け
  12. ACアダプターを挿してPCを起動させる
  13. 状況により個別対応(詰まった部分等) ←ここで多くの時間を費やしましたw 詳細は後述
  14. BitLocker暗号化

詰まった部分

  1. 手順12で起動するも、ブルースクリーン(0xc000000e【エラー】)が表示される
    <解決策> 以下手順を参照することで正常起動できた
    https://freesoft.tvbok.com/tips/efi_installation/uefi_bootrec.html

  2. 起動後、WindowsEnterpriseのライセンスが外れてしまった
    <解決策> 再度ライセンスコード入力

  3. 手順14でBitLockerで暗号化しようとするも「指定されたファイルが見つかりません」エラーが発生
    <解決策> ReAgent.xmlファイルが破損していたので、入れ替えてreagentc /enableを実行

最後に

SSD換装は簡単と聞いてましたが、意外と苦戦してしまいました。 ただ、やはり換装後はPCサクサク動くので換装して良かったです。

mac EC2にWindows10環境からSSH・VNC接続してみた

AWS Late Night Week1」にて発表された何かと話題!?のmac EC2にWindows10環境から接続してみました。

やってみた

検証環境

専有ホストの割り当て

mac EC2は専有ホスト上で稼働するのでEC2コンソール画面から以下のような感じで専有ホストの割り当てを行います。

f:id:kamada-math:20201202150714p:plain

割り当てが上手くいくと、専有ホスト一覧画面に以下のように表示されます。

f:id:kamada-math:20201202133459p:plain

mac EC2起動

EC2コンソールから[インスタンス]>[インスタンスの起動]をクリ ック

AMIの選択

macOS Catalinaを選択します f:id:kamada-math:20201202150836p:plain

インスタンスタイプの選択

mac1.metalが選択されていることを確認して、「次のステップ: インスタンスの詳細の設定」ボタンをクリック f:id:kamada-math:20201202150925p:plain

インスタンスの詳細の設定

配置するVPC、サブネットを選択します。ただし、サブネットは専有ホストで設定したAZにあるものを選択してください。 f:id:kamada-math:20201202145629p:plain

割り当てを行ったホストを選択します f:id:kamada-math:20201202145122p:plain

ストレージの選択

適当に選択、設定します

タグの選択

適当に入力、設定します

セキュリティグループの設定

ローカル環境からのSSHVNC用の通信を許可します。 f:id:kamada-math:20201202145951p:plain

最後に確認ボタンをクリックして、EC2を起動させます。

mac EC2にSSH接続し、VNCサーバ起動

SSH接続します。ちなみにデフォルトのSSHユーザーはec2-userです。 f:id:kamada-math:20201202151904p:plain

接続後、ec2-userのVNC接続用のパスワードをリセットします

sudo dscl . -passwd /Users/ec2-user <Password文字列>

VNCサーバの有効化

sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -activate -configure -access -on -clientopts -setvnclegacy -vnclegacy yes -clientopts -setvncpw -vncpw <Password文字列> -restart -agent -privs -all

mac EC2にVNC接続

以下のVNC クライアントをインストールします。

Download VNC Viewer | VNC® Connect

インストール後、起動し、左上の[File]>[New Connection]をクリックすると、以下のProperties画面が表示されるので VNC Serverにmac EC2のグローバルIPを入力して、OKをクリックします f:id:kamada-math:20201202151550p:plain

接続情報一覧画面に新しく追加されるので選択します f:id:kamada-math:20201202140233p:plain

選択すると、ユーザー名、パスワードを求められるので入力します f:id:kamada-math:20201202140359p:plain

VNC接続が上手くいくとログイン画面が表示されるので再度パスワードを入力してEnterを押下します f:id:kamada-math:20201202134729p:plain

ログインに成功すると、macOSのデスクトップ画面が表示されます。 f:id:kamada-math:20201202134759p:plain

まとめ

まさかのmac EC2とは驚きでした。来年にはM1 Chipなmac EC2も出るみたいなので余裕あればそれも試してみたいですね。

参考

New – Use Amazon EC2 Mac Instances to Build & Test macOS, iOS, ipadOS, tvOS, and watchOS Apps | AWS News Blog Amazon EC2 Mac Instance を早速使ってみました - Qiita

AWS Systems Manager ハンズオンをやってみた

最近業務でWindows serverを扱う必要が出てきてSSMを利用して定期実行タスクを実行・管理したいと思ったので今年のAWSinnovateのSSMのハンズオンをやってみました。

AWS Innovate オンラインカンファレンス | 2020 年 3 月 10 日 (火) 〜 5 月 8 日 (金) 開催

チュートリアル内容

Windows ServerもしくはLinuxに対してSSMを利用して運用の自動化や効率化をするチュートリアルで私はWinsows Serverの方を選択してやりました。

流れ

  1. Systems Manager を管理対象となる EC2 インスタンスに導入し設定する方法
  2. サーバへのリモートアクセスを行う方法(セッションマネージャ)
  3. サーバ群にコマンドを一括して投入する方法(Run Command)
  4. パッチ適用を自動化させる方法(メンテナンスウィンドウ)
  5. OS 上のログやメトリックを CloudWatch で監視、およびその設定を一括して行う方法
  6. 本ハンズオンで作成したリソースのクリーンアップを行う方法

学び

  • ハンズオンでは「AmazonEC2RoleforSSM」ポリシーをロールにアタッチしているが実務ではより権限の狭い「AmazonSSMManagedInstance」をベースに割りあてるほうがよいらしい

https://image.slidesharecdn.com/20200212awsblackbeltsystemsmanager0214-200217024838/95/20200212-aws-black-belt-online-seminar-aws-systems-manager-17-638.jpg?cb=1581907771

  • RDPポートを開ける必要がないだけでなく、keypairも作成不要 (セッションマネージャでnet uer コマンドを使ってパスワード変更できるため)

  • メンテナンスウィンドウを利用してOS上で定期実行できるタスクを管理・運用できる

  • パラメータストアにはRDSの接続情報だけでなく、CloudWatchAgentのログ設定ファイルも保存して参照できる

感想

SSMの全機能を試したわけではないが、主機能は試すことができたので良かった。業務でもうまく生かしたい。