進捗

主にRubyを使用してます。

OSS Gateワークショップに参加しました。

タイトルの通りで、OSS Gateワークショップに参加しました!



oss-gate.github.io


私は初めての参加だったので、ビギナーとして参加しました。

このようなハンズオンでの勉強会に参加するのは初めてだったので、とても緊張しましたが、サポーターの方々がつきっきりでとても丁寧に教えてくださいました!

コミットするOSSを決める。→issueを立てる。→PRを立てる。
と最後まで行うこともできました!

実際に立てたPRが以下。(無事、後日Mergeされました。)
github.com



今までは、OSSへコミットしてみたいと思っていたものの、
「効果的な提案をしないといけないのではないか?」
「バグを見つけないといけないのではないか?」
という不安があり、中々issueやPRを立てることができずにいました。

しかし、今回のワークショップを通じて、
普段OSSにコミットしている方々がどんなことに着目して、issueやPRを立てているかがわかり、
「自分でも意外とコミットするチャンスはあるかもしれない。」という気持ちになりました!


OSSへのコミットに興味はあるが、一歩踏み出せないという方は一度参加してみると
とても勉強になると思います!

自分もこっからどんどんOSSに貢献していきたいとおもいます!

Webサーバーを自作してみました

シンプルなWebサーバーを作成しました。



制作物を載せようと思ったのですが、勉強用のプライベートリポジトリ内のディレクトリにpushしていたことに8割方終わっている頃に気づきまして、、

おいおい公開できるように移動させようと思っています、、、


下記の記事を参考にRubyで実装しています。


「伸び悩んでいる3年目Webエンジニアのための、Python Webアプリケーション自作入門」
zenn.dev




とても丁寧な説明で、わかりやすく私のような新米エンジニアでも理解しやすかったです。

また、リファクタリングの方法にも触れてあり、とても実践的な内容になってました。
Chapter16のリファクタリングのとことか「なるほど!」となりました。実務でも使えそうですね、、


Webサーバーってなんぞや?って思っている方や、Webサーバー作ってみたい!と思っている人にこの記事はかなりおすすめです!!

AWS SAAに合格しました〜

タイトルにある通りAWS SAAに合格できました。
思ったよりギリギリでした。。。

f:id:masato-kato0604:20220120175442p:plain

取り組んだのは下記のWEB問題集です。
合格するためなら正直これだけで十分です!

SAA | AWS WEB問題集で学習しよう

今年中にはAsociate3冠したいですね、、

CloudTrailのイベント履歴

IAMアクセスキーの棚卸をしていて、アクセスキーの前回の使用日とCloudTrailのイベント履歴が合わないので、ドキュメント確認したところ以下のような記述がありました。

デフォルトでは、CloudTrail は過去 90 日間の S3 バケットレベルの API コールをログに記録しますが、オブジェクトに対して行われたログリクエストは記録しません。バケットレベルの呼び出しには、CreateBucket、DeleteBucket、PutBucketLifeCycle、PutBucketPolicy などのイベントが含まれます。

Amazon S3 CloudTrail イベント - Amazon Simple Storage Service

CloudWatch は、CloudTrail ログファイルのイベントとして以下のアクションを記録します。

DeleteAlarms

DeleteAnomalyDetector

DeleteDashboards

DescribeAlarmHistory

DescribeAlarms

DescribeAlarmsForMetric

DescribeAnomalyDetectors

DisableAlarmActions

EnableAlarmActions

GetDashboard

ListDashboards

PutAnomalyDetector

PutDashboard

PutMetricAlarm

SetAlarmState

AWS CloudTrail を使用した Amazon CloudWatch API コールのログ記録 - Amazon CloudWatch


S3のオブジェクトレベルのAPIコールはもちろん、
CloudWatchのGetMetricDataとかも記録されないんですね、、

S3の方は「証跡」作成して、データイベントの設定を変えれば見れそうですが、CloudWatchの方はそれでも確認できなさそう、、

CloudWatchのAPIコールって監視サーバーによるものが多いイメージなので、確かにイベントログに残ると、ログがえらいことになってしまうのはわかりますが、、、

そもそもCloudWatchのAPIコールをアクセスキーでするなってことなんですかね、、、

参考文献

グラフデータ構造

グラフデータ構造をRubyで作成したいのですが、
どうしても頭に入ってこなかったので、書いておきます。
こんな感じの無向グラフを想定しています。
f:id:masato-kato0604:20211203201600j:plain

# 頂点
class Node
  def initialize(vertex, edge)
    @vertex = vertex
    @edge = edge
  end
end

# グラフ
class Graph
  def initialize(vs, h)
    @vs = vs
    @es = {}
    h.each_key do |k|
      @es[k] = []
      h[k].each { |e| @es[k] << Node.new(k, e) }
    end
  end
end

ヒープソート

問題解決力を鍛える!アルゴリズムとデータ構造 (KS情報科学専門書) | 大槻 兼資, 秋葉 拓哉 |本 | 通販 | Amazon

この本を読んでいて、ヒープソートの実装が割とスッと入ってきたので、メモを残しておく。

ヒープの条件

  • 頂点vの親頂点をpとしたとき、key[p]>=key[v]が成立する。
  • 木の高さをhとしたとき、木の深さh-1以下の部分については、完全二分木を形成している。
  • 木の高さをhとした時、木の深さhの部分については、頂点が左詰めされている。

引用:問題解決力を鍛える!アルゴリズムとデータ構造 (KS情報科学専門書) | 大槻 兼資, 秋葉 拓哉 |本 | 通販 | Amazon


実装(ruby)

class Array
  def heapify!(i, n)
    child1 = i * 2 + 1
    return if child1 >= n

    child1 += 1 if child1 + 1 < n && self[child1 + 1] > self[child1]
    return if self[child1] <= self[i]

    self[i], self[child1] = self[child1], self[i]
    heapify!(child1, n)
  end

  def heap_sort!()
    n = self.size
    (n / 2 - 1).downto(0) do |i|
      heapify!(i, n)
    end

    (n - 1).downto(1) do |i|
      self[0], self[i] = self[i], self[0]
      heapify!(0, i)
    end
  end
end

a = [12, 9, 15, 3, 8, 17, 6, 1]
a.heap_sort!
p a