SlideShare ist ein Scribd-Unternehmen logo
1 von 43
Downloaden Sie, um offline zu lesen
GCP Storage とcarrierwave
その先にあるのは
TGIF 2017-10-06 @zaru
@zaru
raysCI のファイルアップロードの歴史
初期
google-cloud-storage
GCP だしストレージはStorage 一択
公式のgem が google-cloud-storage
レポートファイルのアーカイブ目的だから
雑に公式gem だけでやろう
require "google/cloud/storage"
storage = Google::Cloud::Storage.new
bucket = storage.bucket "my-bucket"
bucket.create_file "path/to/local.file.ext",
"destination/path/file.ext"
Pros
簡単に実装できて、シンプルで良い
Cons
GCP への依存
モデルに関連付けるコードを書く必要あり
画像リサイズやURL生成は自前でやる必要あり
中期
carrierwave + fog-google
画像も表示したいし、アップロード処理
も増えてきたから、ライブラリを使う
使い方は簡単。
class User < ActiveRecord::Base
mount_uploader :avatar, AvatarUploader
end
user = User.find 1
user.avatar
#=>
<AvatarUploader:0x0055883db34618
@model=#<User id: nil, name: nil, avatar: nil, created_at: nil, updated_at: nil>,
@mounted_as=:avatar>
user.avatar.url
#=> '/url/to/file.png'
fog-google
gem "fog-google"
gem "google-api-client", "> 0.8.5", "< 0.9"
gem "mime-types"
"> 0.8.5", "< 0.9"
嫌な予感
該当バージョン
最新バージョン
実際に導入してみると…
user = User.find 1
user.avatar.read
Excon::Error::Socket: end of file
reached (EOFError)
ファイルをダウンロードして読み込もうとすると死。
再現したりしなかったり、不安定。
Pros
設定だけで実装がほぼ必要ない
画像リサイズ・URLの取得などができる
Cons
古いgoogle-api-client に依存している
不安定
よろしい、ならば独自Classだ
後期
独自Class + google-cloud-storage
carrierwave に戻る可能性もある
最低限の互換性を保ちたい
アプリが全体的にGCPに依存している
google-api-client は最新を使いたい
carrierwave 互換ポイント
class User < ActiveRecord::Base
mount_uploader :avatar, AvatarUploader
end
mount_uploader でフィールドを指定できる
user = User.find 1
user.avatar
#=> <AvatarUploader>
対象フィールドを参照するとアップロードクラスが返ってくる
つまり .url や .read などのメソッドを生やせる
まずは、最低限ということでこの2つを満たすような形で実装を行う。
クラスメソッドとインスタンスメソッド
クラスメソッドを提供するmodule が必要
class Photo
include Uploader
mount_uploader :foo
end
module Uploader
def self.included base
p "included by #{base}"
base.extend ClassMethods
end
module ClassMethods
def mount_uploader field
p "setting #{field}"
end
end
end
面倒なので ActiveSupport::Concern 使う
module Uploader
extend ActiveSupport::Concern
included do
class << self
def mount_uploader field
p "setting #{field}"
end
end
end
end
AcriveRecord のフィールド参照メソッドをオーバーライド
user.avatar
user.avatar =
この2つのメソッドを独自Classの処理に置き換えたい。
def mount_uploader field
set_name = "#{field}=".to_sym
class_eval <<-EOS
def #{field}
end
def #{set_name} file
end
EOS
end
class_eval を使ってオーバーライド
独自Classを雑に用意して carrierwave の代表的なメソッドを作る
class BaseUploader
def initialize model, field
@model = model
@field = field
end
def exists?
end
def read
end
def download local_path
end
def path
end
def url
独自Classインスタンスを参照するようにする
都度生成されないようにインスタンス変数に格納
class_eval <<-EOS
def #{field}
@uploaders = {} unless defined? @uploaders
@uploaders[__method__] ||= BaseUploader.new self, __method__
end
EOS
ファイルアップロードの処理を独自Classに任せる
Railsだと ActionDispatch::Http::UploadedFile のはず
class_eval <<-EOS
def #{set_name} file
return unless file.is_a? ActionDispatch::Http::UploadedFile
uploader_name = __method__.to_s.gsub "=", ""
send(uploader_name).set_file file.path, file.original_filename
end
EOS
今のままだと user.avatar = file とやったタイミングでアップロード
されてしまう。とても嫌な気持ち
user.save した時にアップロードしたい
after_save を使う
included do
after_save :file_upload_callback
def file_upload_callback
# ファイルアップロードする処理
end
end
アップロードフィールドを知る必要がある
クラス変数に格納してみる
module Uploader
extend ActiveSupport::Concern
included do
class << self
@@uploaders = []
end
end
end
class Photo
include Uploader
def self.uploaders
@@uploaders
end
end
クラス変数?
module Uploader
extend ActiveSupport::Concern
included do
class << self
@@uploaders = []
def mount_uploader field
@@uploaders << field
end
end
end
end
class Photo
include Uploader
mount_uploader :foo
mount_uploader :bar
end
Photo.class_variable_get(:@@uploaders)
#=> [:foo, :bar]
取れてます
じゃあ、別のクラスを作ってみます
class Movie
include Uploader
mount_uploader :hoge
mount_uploader :piyo
end
それぞれ、呼び出します
Photo.class_variable_get(:@@uploaders)
#=> [:hoge, :piyo]
Movie.class_variable_get(:@@uploaders)
#=> [:hoge, :piyo]
上書きされてる
ActiveSupport の class_attribute を使う
module Uploader
extend ActiveSupport::Concern
included do
class_attribute :uploaders
self.uploaders = []
class << self
def mount_uploader field
uploaders << field
end
end
end
end
Photo.uploaders
#=> [:foo, :bar]
Movie.uploaders
#=> [:hoge, :piyo]
めでたい
おわり

Weitere ähnliche Inhalte

Was ist angesagt?

Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)
Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)
Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)
kojiokb
 
Google Cloud Messaging for Android ことはじめ(もっと簡単に動かしてみる編)
Google Cloud Messaging for Android ことはじめ(もっと簡単に動かしてみる編)Google Cloud Messaging for Android ことはじめ(もっと簡単に動かしてみる編)
Google Cloud Messaging for Android ことはじめ(もっと簡単に動かしてみる編)
kojiokb
 

Was ist angesagt? (20)

1113 map
1113 map1113 map
1113 map
 
Google Cloud のネットワークとロードバランサ
Google Cloud のネットワークとロードバランサGoogle Cloud のネットワークとロードバランサ
Google Cloud のネットワークとロードバランサ
 
[Cloud OnAir] 安心して GCP を使うための処方箋 ~ 実際のインシデントをもとに ~ 2019年11月14日 放送
[Cloud OnAir] 安心して GCP を使うための処方箋 ~ 実際のインシデントをもとに ~ 2019年11月14日 放送[Cloud OnAir] 安心して GCP を使うための処方箋 ~ 実際のインシデントをもとに ~ 2019年11月14日 放送
[Cloud OnAir] 安心して GCP を使うための処方箋 ~ 実際のインシデントをもとに ~ 2019年11月14日 放送
 
[Cloud OnAir] Google Cloud へのデータ移行 2019年1月24日 放送
[Cloud OnAir] Google Cloud へのデータ移行 2019年1月24日 放送[Cloud OnAir] Google Cloud へのデータ移行 2019年1月24日 放送
[Cloud OnAir] Google Cloud へのデータ移行 2019年1月24日 放送
 
Google Cloud Dataflow を理解する - #bq_sushi
Google Cloud Dataflow を理解する - #bq_sushiGoogle Cloud Dataflow を理解する - #bq_sushi
Google Cloud Dataflow を理解する - #bq_sushi
 
キャバァーン! サツバツエアアイオー弐〇壱弐
キャバァーン! サツバツエアアイオー弐〇壱弐キャバァーン! サツバツエアアイオー弐〇壱弐
キャバァーン! サツバツエアアイオー弐〇壱弐
 
Google BigQuery クエリの処理の流れ - #bq_sushi
Google BigQuery クエリの処理の流れ - #bq_sushi Google BigQuery クエリの処理の流れ - #bq_sushi
Google BigQuery クエリの処理の流れ - #bq_sushi
 
Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)
Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)
Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)
 
元OracleMasterPlatinumがCloudSpanner触ってみた
元OracleMasterPlatinumがCloudSpanner触ってみた元OracleMasterPlatinumがCloudSpanner触ってみた
元OracleMasterPlatinumがCloudSpanner触ってみた
 
[Cloud OnAir] GCP 上でストリーミングデータ処理基盤を構築してみよう! 2018年9月13日 放送
[Cloud OnAir] GCP 上でストリーミングデータ処理基盤を構築してみよう! 2018年9月13日 放送[Cloud OnAir] GCP 上でストリーミングデータ処理基盤を構築してみよう! 2018年9月13日 放送
[Cloud OnAir] GCP 上でストリーミングデータ処理基盤を構築してみよう! 2018年9月13日 放送
 
[Cloud OnAir ] #03 No-ops で大量データ処理基盤を簡単に構築する
[Cloud OnAir ] #03 No-ops で大量データ処理基盤を簡単に構築する[Cloud OnAir ] #03 No-ops で大量データ処理基盤を簡単に構築する
[Cloud OnAir ] #03 No-ops で大量データ処理基盤を簡単に構築する
 
[Cloud OnAir] クラウド移行後の最適化方法を伝授。でも最適化ってなんですか? (LIVE) 2018年2月8日 放送
[Cloud OnAir] クラウド移行後の最適化方法を伝授。でも最適化ってなんですか? (LIVE) 2018年2月8日 放送[Cloud OnAir] クラウド移行後の最適化方法を伝授。でも最適化ってなんですか? (LIVE) 2018年2月8日 放送
[Cloud OnAir] クラウド移行後の最適化方法を伝授。でも最適化ってなんですか? (LIVE) 2018年2月8日 放送
 
[Cloud OnAir] Google Cloud Next '20: OnAir 特別編 〜世界で人気のあったセッション特集〜 2020年9月24日 放送
[Cloud OnAir] Google Cloud Next '20: OnAir 特別編 〜世界で人気のあったセッション特集〜 2020年9月24日 放送[Cloud OnAir] Google Cloud Next '20: OnAir 特別編 〜世界で人気のあったセッション特集〜 2020年9月24日 放送
[Cloud OnAir] Google Cloud Next '20: OnAir 特別編 〜世界で人気のあったセッション特集〜 2020年9月24日 放送
 
No-Ops で大量データ処理基盤を簡単に実現する
No-Ops で大量データ処理基盤を簡単に実現するNo-Ops で大量データ処理基盤を簡単に実現する
No-Ops で大量データ処理基盤を簡単に実現する
 
Google Cloud Messaging for Android ことはじめ(もっと簡単に動かしてみる編)
Google Cloud Messaging for Android ことはじめ(もっと簡単に動かしてみる編)Google Cloud Messaging for Android ことはじめ(もっと簡単に動かしてみる編)
Google Cloud Messaging for Android ことはじめ(もっと簡単に動かしてみる編)
 
Google Cloud ベストプラクティス:Google BigQuery 編 - 01 : BigQuery とは?
Google Cloud ベストプラクティス:Google BigQuery 編 - 01 : BigQuery とは?Google Cloud ベストプラクティス:Google BigQuery 編 - 01 : BigQuery とは?
Google Cloud ベストプラクティス:Google BigQuery 編 - 01 : BigQuery とは?
 
[Cloud OnAir] Google Networking Deep Dive ! その技術と設計の紹介 2018年8月9日 放送
[Cloud OnAir] Google Networking Deep Dive ! その技術と設計の紹介 2018年8月9日 放送[Cloud OnAir] Google Networking Deep Dive ! その技術と設計の紹介 2018年8月9日 放送
[Cloud OnAir] Google Networking Deep Dive ! その技術と設計の紹介 2018年8月9日 放送
 
RDBのDBAから見た GCP Managed Database
RDBのDBAから見た GCP Managed Database RDBのDBAから見た GCP Managed Database
RDBのDBAから見た GCP Managed Database
 
[Cloud OnAir] GCP で誰でも始められる HPC 2019年5月9日 放送
[Cloud OnAir] GCP で誰でも始められる HPC 2019年5月9日 放送[Cloud OnAir] GCP で誰でも始められる HPC 2019年5月9日 放送
[Cloud OnAir] GCP で誰でも始められる HPC 2019年5月9日 放送
 
20151114 drupal温泉合宿 成果
20151114 drupal温泉合宿 成果20151114 drupal温泉合宿 成果
20151114 drupal温泉合宿 成果
 

Ähnlich wie CarrierWaveにちょっと互換あるGCP Storage対応クラス

明日から使えるgradle
明日から使えるgradle明日から使えるgradle
明日から使えるgradle
kimukou_26 Kimukou
 
Gcpトレーニング フィードバック(公開用)
Gcpトレーニング フィードバック(公開用)Gcpトレーニング フィードバック(公開用)
Gcpトレーニング フィードバック(公開用)
Makoto Komiya
 
Groovy base gradle_20130309
Groovy base gradle_20130309Groovy base gradle_20130309
Groovy base gradle_20130309
Nobuhiro Sue
 
gulp + sass で目指せ倍速コーディング(第2回 gulpfile.jsの分割管理と画像作成の効率化)
gulp + sass で目指せ倍速コーディング(第2回 gulpfile.jsの分割管理と画像作成の効率化)gulp + sass で目指せ倍速コーディング(第2回 gulpfile.jsの分割管理と画像作成の効率化)
gulp + sass で目指せ倍速コーディング(第2回 gulpfile.jsの分割管理と画像作成の効率化)
Toshimichi Suekane
 
[External] 2021.12.15 コンテナ移行の前に知っておきたいこと @ gcpug 湘南
[External] 2021.12.15 コンテナ移行の前に知っておきたいこと  @ gcpug 湘南[External] 2021.12.15 コンテナ移行の前に知っておきたいこと  @ gcpug 湘南
[External] 2021.12.15 コンテナ移行の前に知っておきたいこと @ gcpug 湘南
Google Cloud Platform - Japan
 
What makes pyramid unique
What makes pyramid uniqueWhat makes pyramid unique
What makes pyramid unique
Atsushi Odagiri
 
TDC20111031_Groovy_Geb
TDC20111031_Groovy_GebTDC20111031_Groovy_Geb
TDC20111031_Groovy_Geb
Nobuhiro Sue
 
Fluentdでログを集めてGlusterFSに保存してMapReduceで集計
Fluentdでログを集めてGlusterFSに保存してMapReduceで集計Fluentdでログを集めてGlusterFSに保存してMapReduceで集計
Fluentdでログを集めてGlusterFSに保存してMapReduceで集計
maebashi
 

Ähnlich wie CarrierWaveにちょっと互換あるGCP Storage対応クラス (20)

今すぐブラウザでES6を使おう
今すぐブラウザでES6を使おう今すぐブラウザでES6を使おう
今すぐブラウザでES6を使おう
 
明日から使えるgradle
明日から使えるgradle明日から使えるgradle
明日から使えるgradle
 
Gcpトレーニング フィードバック(公開用)
Gcpトレーニング フィードバック(公開用)Gcpトレーニング フィードバック(公開用)
Gcpトレーニング フィードバック(公開用)
 
App engine admin apiを利用したgae%2 f go環境へのデプロイとgcp東京リージョンの性能評価
App engine admin apiを利用したgae%2 f go環境へのデプロイとgcp東京リージョンの性能評価App engine admin apiを利用したgae%2 f go環境へのデプロイとgcp東京リージョンの性能評価
App engine admin apiを利用したgae%2 f go環境へのデプロイとgcp東京リージョンの性能評価
 
Groovy base gradle_20130309
Groovy base gradle_20130309Groovy base gradle_20130309
Groovy base gradle_20130309
 
G * magazine 0
G * magazine 0G * magazine 0
G * magazine 0
 
gulp + sass で目指せ倍速コーディング(第2回 gulpfile.jsの分割管理と画像作成の効率化)
gulp + sass で目指せ倍速コーディング(第2回 gulpfile.jsの分割管理と画像作成の効率化)gulp + sass で目指せ倍速コーディング(第2回 gulpfile.jsの分割管理と画像作成の効率化)
gulp + sass で目指せ倍速コーディング(第2回 gulpfile.jsの分割管理と画像作成の効率化)
 
[External] 2021.12.15 コンテナ移行の前に知っておきたいこと @ gcpug 湘南
[External] 2021.12.15 コンテナ移行の前に知っておきたいこと  @ gcpug 湘南[External] 2021.12.15 コンテナ移行の前に知っておきたいこと  @ gcpug 湘南
[External] 2021.12.15 コンテナ移行の前に知っておきたいこと @ gcpug 湘南
 
What makes pyramid unique
What makes pyramid uniqueWhat makes pyramid unique
What makes pyramid unique
 
Hadoopデータ基盤とMulti-CloudなML基盤への取り組みの紹介
Hadoopデータ基盤とMulti-CloudなML基盤への取り組みの紹介Hadoopデータ基盤とMulti-CloudなML基盤への取り組みの紹介
Hadoopデータ基盤とMulti-CloudなML基盤への取り組みの紹介
 
TDC20111031_Groovy_Geb
TDC20111031_Groovy_GebTDC20111031_Groovy_Geb
TDC20111031_Groovy_Geb
 
Wordpress案件にgkeを採用してみた(短縮版)
Wordpress案件にgkeを採用してみた(短縮版)Wordpress案件にgkeを採用してみた(短縮版)
Wordpress案件にgkeを採用してみた(短縮版)
 
Cloud Foundry Cli Plugin入門
Cloud Foundry Cli Plugin入門Cloud Foundry Cli Plugin入門
Cloud Foundry Cli Plugin入門
 
Grailsのススメ(仮)
Grailsのススメ(仮)Grailsのススメ(仮)
Grailsのススメ(仮)
 
[Cloud OnAir] Google Cloud 主催イベント Anthos Day 情報 2020 年 2 月 13 日放送
[Cloud OnAir] Google Cloud 主催イベント Anthos Day 情報 2020 年 2 月 13 日放送[Cloud OnAir] Google Cloud 主催イベント Anthos Day 情報 2020 年 2 月 13 日放送
[Cloud OnAir] Google Cloud 主催イベント Anthos Day 情報 2020 年 2 月 13 日放送
 
Jjug 20140430 gradle_basic
Jjug 20140430 gradle_basicJjug 20140430 gradle_basic
Jjug 20140430 gradle_basic
 
Fluentdでログを集めてGlusterFSに保存してMapReduceで集計
Fluentdでログを集めてGlusterFSに保存してMapReduceで集計Fluentdでログを集めてGlusterFSに保存してMapReduceで集計
Fluentdでログを集めてGlusterFSに保存してMapReduceで集計
 
Gradleどうでしょう
GradleどうでしょうGradleどうでしょう
Gradleどうでしょう
 
ライブラリにあらず! 〜Google Closure Toolsの事始め〜
ライブラリにあらず! 〜Google Closure Toolsの事始め〜ライブラリにあらず! 〜Google Closure Toolsの事始め〜
ライブラリにあらず! 〜Google Closure Toolsの事始め〜
 
Google BigQueryのターゲットエンドポイントとしての利用
Google BigQueryのターゲットエンドポイントとしての利用Google BigQueryのターゲットエンドポイントとしての利用
Google BigQueryのターゲットエンドポイントとしての利用
 

Mehr von zaru sakuraba

パフォーマンス計測Ciサービスを作って得た知見を共有したい
パフォーマンス計測Ciサービスを作って得た知見を共有したいパフォーマンス計測Ciサービスを作って得た知見を共有したい
パフォーマンス計測Ciサービスを作って得た知見を共有したい
zaru sakuraba
 

Mehr von zaru sakuraba (14)

WebAssembly と Rust の入口の向かいにある道路のベンチに腰掛けるレベルのさわってみた感想を共有
WebAssembly と Rust の入口の向かいにある道路のベンチに腰掛けるレベルのさわってみた感想を共有WebAssembly と Rust の入口の向かいにある道路のベンチに腰掛けるレベルのさわってみた感想を共有
WebAssembly と Rust の入口の向かいにある道路のベンチに腰掛けるレベルのさわってみた感想を共有
 
Goでこれどうやるの? 入門
Goでこれどうやるの? 入門Goでこれどうやるの? 入門
Goでこれどうやるの? 入門
 
パフォーマンス計測Ciサービスを作って得た知見を共有したい
パフォーマンス計測Ciサービスを作って得た知見を共有したいパフォーマンス計測Ciサービスを作って得た知見を共有したい
パフォーマンス計測Ciサービスを作って得た知見を共有したい
 
普通のRailsアプリをdockerで本番運用する知見
普通のRailsアプリをdockerで本番運用する知見普通のRailsアプリをdockerで本番運用する知見
普通のRailsアプリをdockerで本番運用する知見
 
スクラム導入に向けて:スクラムは救世主となるのか?
スクラム導入に向けて:スクラムは救世主となるのか?スクラム導入に向けて:スクラムは救世主となるのか?
スクラム導入に向けて:スクラムは救世主となるのか?
 
GitHub Appsの作り方
GitHub Appsの作り方GitHub Appsの作り方
GitHub Appsの作り方
 
Railsモデル設計ケーススタディ
Railsモデル設計ケーススタディRailsモデル設計ケーススタディ
Railsモデル設計ケーススタディ
 
社内ネットワーク改善の過程で分かった物理ゆえの闇と脆弱性そしてネットワークの基礎入門
社内ネットワーク改善の過程で分かった物理ゆえの闇と脆弱性そしてネットワークの基礎入門社内ネットワーク改善の過程で分かった物理ゆえの闇と脆弱性そしてネットワークの基礎入門
社内ネットワーク改善の過程で分かった物理ゆえの闇と脆弱性そしてネットワークの基礎入門
 
Service workerとwebプッシュ通知
Service workerとwebプッシュ通知Service workerとwebプッシュ通知
Service workerとwebプッシュ通知
 
良いプログラマーとは
良いプログラマーとは良いプログラマーとは
良いプログラマーとは
 
スマホフロントエンド最速化手法
スマホフロントエンド最速化手法スマホフロントエンド最速化手法
スマホフロントエンド最速化手法
 
正規表現勉強会
正規表現勉強会正規表現勉強会
正規表現勉強会
 
今さらながらRSpecに入門してみた
今さらながらRSpecに入門してみた今さらながらRSpecに入門してみた
今さらながらRSpecに入門してみた
 
少し未来のコードレビュー
少し未来のコードレビュー少し未来のコードレビュー
少し未来のコードレビュー
 

Kürzlich hochgeladen

Kürzlich hochgeladen (11)

Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 

CarrierWaveにちょっと互換あるGCP Storage対応クラス