進捗

主にRubyを使用してます。

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

最近よく思うこと

早いもので、新卒としてソフトウェアエンジニアになってから1年と7ヶ月が経ちました。

まだまだ、分からないことばかりで、
日々少しでも進歩しようと精進しています。

そんな中で、最近よく考えることがあります。

「理解しなければならない知識の範囲広すぎない?」

たったの1年7ヶ月で何を。。
と思われる方もいると思うのですが、

勉強すればするほど、わからないことが増える。
あれもやらないとこれもやらないとと無限に勉強すべき範囲がある。

ここ最近ずっとこんな感じです。

決して勉強がつまらない、とかソフトウェアエンジニアとしての仕事が辛いとかではありません。

もちろん辛いこともありますが、それなりにやりがいを持って働けていますし、
勉強も楽しくやれています。

ただ、なんというか、先が見えないトンネルの中でもがいているようなそんな感じです。
そして、どんどん出口が遠くなっているような気がします。

学生時代から、コンピュータサイエンスを学んでいる人、ある程度の下地がある人
このような方々は「わからない」の見え方が違うのかなとも思ったりします。

そんなこんなでお金を貯めて、社会人大学に入ってコンピュータサイエンスを学び直したいと
思い始めました。

CSを学んだから、必ずしも今までモヤがかかっていたものがスッキリするというわけではないと思います。
でも、このトンネルを抜け出すことが出来る、または出口が少し見えてくるような糸口になるのではないかと思っています。

そんなことを考えている今年の11月でした。
「〇〇チョットワカル」エンジニアになれるよう頑張ります。

rails ルーティングの確認について

ルーティングの確認方法について。


結構忘れてしまうので、メモ代わりに。


1、rails routes
ターミナルで

(bundle exec) rails routes

を叩く


2、/rails/info/routes
urlのルートURLの後に

/rails/info/routes

を追加するだけ



個人的にはブラウザで確認できる
2番がおすすめ

Decoratorディレクトリ内でファイルがネストされてる時の呼び出し方法について

railsのdecoratorを使っていたんですが、
ちょいとハマったので、メモとして残します。


Draperというgemを使って、デコレーターを作成し、
使用しようとしていました。

基本的には、app/decorators/ 直下にデコレーターファイルを作成し、
呼び出せば問題ない。


例えば、app/decorators/user_decorator.rbファイルを呼び出す時、

def index
  @user = User.find{params[:id]).decorate
end

これで問題ない。


しかし、今回は、app/decorators/~~/~~/配下にあるデコレーター
を呼び出したかったが、
上記のような方法では、
Could not infer a decorator for
というエラーが出て、呼び出すことができなかった。


そこで、(app/decorators/user/page_decorator.rbを呼び出す時)

def index
  @user = User::PageDecorator.decorate(params[:id])
end

とすることで
無事呼び出すことができた。
nekorails.hatenablog.com

rails kaminaryによるページネーションについて

一覧表示画面において、ページネーションを作成していました。


その際に、kaminariというgemを使用しました。
その際、ページによってページネーションの
スタイルを変える方法でハマったので、
書いておきます。


例えば、kaminariのviewファイルディレクトリが

kaminari
|
|
-----mypage1-----kaminariの各viewファイル
|
|
|
|
-----mypage2 ----kaminariの各viewファイル

のようになっていた場合、

ページネーションを表示するviewファイルで

~~
= paginate(@~~, :theme=>'mypage1') 
#自分が適用したい方のkaminaryのディレクトリ名を第二引数に指定(今回はmypage1を適用)
~~


これで無事適用したいkaminarimのviewファイルを
適用できた。


参考:
blog.sogakudo.com