SlideShare a Scribd company logo
1 of 78
Download to read offline
Djangoの深〜いパーミッシ
ョン管理の話
@hirokiky
http://slides.hirokiky.org/pyconjp2017.html
対象の方
Pythonを使う人
Djangoを使う人
チュートリアルやった
自分でアプリ作った
権限管理の悩み
Viewのif文で権限の判定つらい
Templateでも判定必要
自前のデコレーターで管理が破綻
DjangoのPermissionは使わない
Agenda
第1部: Djangoでの権限管理の定石紹介
第2部: 検討したライブラリー
第3部: こんなライブラリー作った
自己紹介
@hirokiky
BeProud Inc でPyQを作っています
PyQという製品作っています
PyQは本気でプログラミングを
学べる
Pythonをブラウザだけで動かして学ぶ
プロフェッショナルになれるレベルで学ぶ
Webや機械学習、データ分析も学べる
PyQリリースと成長
2017年4月にリリースして順調に成長
コンテンツ拡充(機械学習など)
機能拡張
JupyterNotebook対応
他色々な対応
製品の成長と設計
製品の成長と設計
まずは作ることが大切
初期は小さい設計で良い
成長に合わせて設計も成長させる
設計の是正
第一部
Djangoでの権限管理の定石
紹介
Lv1 Viewでif文
def premium_articles(request):
if request.user.plan.code != PREMIUM:
return HttpResponseForbidden(
"プレミアム会員限定です",
)
...
Lv1 プロパティを使う
class User(AbstructUser):
...
@cached_property
def is_premius(self):
return self.plan.code != PREMIUM
Lv1 Viewでif文
def premium_articles(request):
if not request.user.is_premium:
return HttpResponseForbidden(
"プレミアム会員限定です",
)
...
Lv2 デコレーターでやる場合
def premium_required(f):
@wraps(f)
def _wrapped(request, *args, **kwargs):
if not request.user.is_premium:
return HttpResponseForbidden(
"プレミアム会員限定です"
)
return f(request, *args, **kwargs)
return _wrapped
デコレーターを適用
@premium_required
def premium_articles(request):
...
変わる問題
プレミアム会員専用だった機能が、スタンダ
ード会員でも見れるように
# @is_premium もう使えない
def premium_articles(self):
...
Lv2 凝ったデコレータ
def subscription_required(*plan_codes):
def _dec(f):
@wraps(f)
def _wrapped(request, *args, **kwargs):
if request.user.plan.code not in plan_code
return HttpResponseForbidden(...)
return f(request, *args, **kwargs)
return _wrapped
return _dec
Lv2 凝ったデコレータ
@subscription_required(PREMIUM_PLAN, STANDARD_PLAN)
def premium_articles(request):
...
Lv2までの自作の問題
仕様の変更で壊れやすい
デコレーターが肥大化する、増える
結局View、Templateにも処理書いちゃう
「リクエストの情報」と「権限」
が密結合なのが問題
「リクエストの情報」
ユーザー user である
プレミアムプランに契約している
「権限」
プレミアム記事を見れる
チームを管理できる
パーミッション作るお!
「パーミッション」を文字列で
Set[str]
プレミアム記事を読める ==
"view_premius_article"
Lv3 パーミッションでやる
class User(AbstractUser):
def get_permissions():
permissions = set()
if user.is_premium():
permissions.add("view_premium_articles")
permissions.add("view_special_feature")
return permissions
def has_permission(permission):
return permission in self.get_permissions()
Lv3 パーミッションでやる場合
@user_permission_required("view_premium_articles")
def premium_articles(request):
...
Lv3 オブジェクトは?
記事 Articleがあるとき
Article.premium: プレミアム会員用
not .premium: スタンダード、プレミアム
会員用
無料会員はすべて読めない
Lv3 許可設定
class Article(models.Model):
def has_permission(self, user, permission):
permissions = set()
if self.premium and user.is_premium:
permissions.add("view")
if not self.premium:
if user.is_premium or user.is_standard:
permissions.add("view")
return permission in permissions
Lv3 View内で使う
def premium_article_detail(request, id):
article = get_object_or_404(Article, id=id)
if not article.has_permission(user, "view"):
return HttpResponseForbidden(...)
パーミッションで扱う利点
仕様の変更に強くなる
「お試しユーザー」ができた
「キャンペーン利用ユーザー」ができた
「未ログインも読める記事」ができた
Modelだけ変える
def get_permissions(user):
...
if user.during_campain:
permissions.remove("...")
...
自作パーミッション問題
独自パーミッション管理部分の仕様が複
雑になる
おさらい
Lv1: Viewでif文
Lv2: デコレータを作って使う
Lv3: パーミッション管理する仕組み
でも複雑なまま。。。
うまいことやってくれるライブラ
リーはよ。。。
第2部
ライブラリーでやろう
検討したライブラリー
DjangoのPermission
django-guardian
django-rules
https://djangopackages.org/grids/g/perms/
DjangoのPermission
content_type = ContentType.objects.get_for_model(BlogP
permission = Permission.objects.get(
codename='change_blogpost',
content_type=content_type,
)
user.user_permissions.add(permission)
DjangoのPermission
@permission_required('myapp.change_blogpost')
def change_blog_post(request, blog_id):
...
DjangoのPermissionがあわ
なかった点
DBで管理したくない
User <-> Modelのパーミッションだけ
パーミッションを持つ条件変えたら??
django-guardian
一番人気らしい。
DjangoのPermissionベース。
django-guardian
from guardian.shortcuts import assign_perm
assign_perm('view_task', joe, task)
joe.has_perm('view_task', task) # True
django-guardian良さそうな
点
シンプルに書けそう
イケてる機能
Modelが持てるパーミッション一覧
権限持ってるデータだけfilter
guardian合わなかった点
イケてる版DjangoのPermissionだったこと
DBで管理したくない
User <-> Modelのパーミッションだけ
パーミッションを持つ条件変えたら??
django-rules
>>> @rules.predicate
>>> def is_book_author(user, book):
... return book.author == user
...
>>> rules.add_rule('can_edit_book', is_book_author)
>>> rules.add_rule('can_delete_book', is_book_author)
<Predicate:is_book_author object at 0x10eeaa490>
django-rulesで権限チェック
>>> adrian = User.objects.get(username='adrian')
>>> rules.test_rule('can_edit_book', adrian, guidetodj
django-rules良さそうな点
DB使わずにできる
デコレータ、Templateもある
predicate & predicateなどで新しい
predicateを作れる
django-rulesは良さそう
かなり良さそう。
権限の一覧性が悪そう? (あんまりちゃんと
試せていない)
でももっとうまくできそう
ライブラリー作ろう!
良いアイディアがあったのでライブラリーも作
ってみた。
PyQ向けに色々設計考える => ライブラリー
だこれ
第3部
ライブラリー作った
求めていたもの
「リクエストの情報」と「権限」分離
DBで管理しない
User<->Model以外のグローバルな権限
View、Templateどこでも使える
作ったもの
django-keeper
例えば記事の著者しか編集で
きないView
from keeper.security import Allow
from keeper.operators import Everyone
from keeper.operators import IsUser
class Article:
author = models.ForeginKey("myapp.User")
def __acl__(self):
return [
(Allow, Everyone, 'view'),
(Allow, IsUser(self.author), 'edit'),
]
keeperを使った解法
from keeper.views import keeper
@keeper(
'edit'
Article,
lambda request, article_id: {'id': article_id}
)
def article_edit(request, article_id):
article = request.k_context
...
keeperを使った解法
ACLを設定する
アクション・誰に・どの権限
Viewには @keeper をつけるだけ
オブジェクトの取得もできる
OperatorsとPermissions
「リクエストの情報」と「権限」の分離
Operatorって?
Callable[[HttpRequest], bool] です。
Permissionって?
str です。
デフォルトのOperators
keeper.operators.Everyone
keeper.operators.Authenticated
keeper.operators.IsUser
keeper.operators.Staff
デフォルトのOperatros
return [
(Allow, Everyone, "view"),
(Allow, Authenticated, "comment"),
(Allow, IsUser(self.author), ("edit", "delete")),
(Allow, IsStaff, ("edit", "delete")),
]
追加のOperatorを作る
class IsPlan(Authenticated):
def __init__(self, plan_code):
self.plan_code = plan_code
def __call__(self, request):
if not super().__call__(request):
return False
return (
request.user.plan.code ==
self.plan_code
)
追加のOperatorを使う
from myapp.operators import IsPlan
class Article(models.Model):
def __acl__(self):
return [
(Allow, IsPlan(PLAN_PREMIUM), 'view'),
(Allow, IsPlan(PLAN_STANDARD), 'view'),
]
from myapp.operators import IsPlan
class Article(models.Model):
premium = models.BooleanField()
def __acl__(self):
if self.premium:
return [
(Allow, IsPlan(PLAN_PREMIUM), 'view'
]
else:
return [
(Allow, IsPlan(PLAN_PREMIUM), 'view'
(Allow, IsPlan(PLAN_STANDARD), 'view'
]
ACLの利点
権限をもつ場合を俯瞰しやすい
「リクエストの情報」判定のロジックは
Operator
「権限」はPermission
テンプレートでの利用方法
{% load keeper %}
{% has_permission article 'edit' as can_edit %}
{% if can_edit %}
<a href="{% url ... %}">編集</a>
{% endif %}
<h1>{{ article.title }}</h1>
<p>{{ article.body }}</p>
グローバルのACL設定
class Root:
def __acl__(self):
return [
(Allow, Authenticated, 'post_article'),
]
グローバル権限を使う
@keeper('post_article')
def article_post(request):
pass
デモアプリ紹介
ユーザー、契約、チームなど含むアプリで
django-keeperを使ったデモ。
https://github.com/hirokiky/django-
keeper/tree/master/demo/
django-keeperの良い所
DBを使わない
ACLを使うので見通しが良い
User<->Modelに依存しないこと
「リクエストの情報」「権限」を分離する
django-keeperの悪い所
まだまだベータ感があります。。
全体のまとめ
Djangoでの権限管理の定石
検討したライブラリー
作ったライブラリー
PyQブース出展中です
CC BY 2.0 PyConJP
おわり

More Related Content

What's hot

イベント・ソーシングを知る
イベント・ソーシングを知るイベント・ソーシングを知る
イベント・ソーシングを知る
Shuhei Fujita
 

What's hot (20)

Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
 
30分で分かる!OSの作り方
30分で分かる!OSの作り方30分で分かる!OSの作り方
30分で分かる!OSの作り方
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターン
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
 
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
RLSを用いたマルチテナント実装 for Django
RLSを用いたマルチテナント実装 for DjangoRLSを用いたマルチテナント実装 for Django
RLSを用いたマルチテナント実装 for Django
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
 
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
BigQueryの課金、節約しませんか
BigQueryの課金、節約しませんかBigQueryの課金、節約しませんか
BigQueryの課金、節約しませんか
 
イベント・ソーシングを知る
イベント・ソーシングを知るイベント・ソーシングを知る
イベント・ソーシングを知る
 
こわくない Git
こわくない Gitこわくない Git
こわくない Git
 
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
 
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
 
外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話外部キー制約に伴うロックの小話
外部キー制約に伴うロックの小話
 

Viewers also liked

Viewers also liked (13)

ドローンのフライトコントローラをPythonで制御してみた話
ドローンのフライトコントローラをPythonで制御してみた話ドローンのフライトコントローラをPythonで制御してみた話
ドローンのフライトコントローラをPythonで制御してみた話
 
Pycon jp2017 20170908_ota
Pycon jp2017 20170908_otaPycon jp2017 20170908_ota
Pycon jp2017 20170908_ota
 
Pythonとパッケージングと私
Pythonとパッケージングと私Pythonとパッケージングと私
Pythonとパッケージングと私
 
Introducing wsgi_lineprof / PyCon JP 2017 LT
Introducing wsgi_lineprof / PyCon JP 2017 LTIntroducing wsgi_lineprof / PyCon JP 2017 LT
Introducing wsgi_lineprof / PyCon JP 2017 LT
 
Pythonistaで始めるiOSプロトタイプ開発
Pythonistaで始めるiOSプロトタイプ開発Pythonistaで始めるiOSプロトタイプ開発
Pythonistaで始めるiOSプロトタイプ開発
 
OpenAPIを利用したPythonWebアプリケーション開発
OpenAPIを利用したPythonWebアプリケーション開発OpenAPIを利用したPythonWebアプリケーション開発
OpenAPIを利用したPythonWebアプリケーション開発
 
Pythonが動く仕組み(の概要)
Pythonが動く仕組み(の概要)Pythonが動く仕組み(の概要)
Pythonが動く仕組み(の概要)
 
PyCon JP 2017Yuta Kitagami
PyCon JP 2017Yuta KitagamiPyCon JP 2017Yuta Kitagami
PyCon JP 2017Yuta Kitagami
 
Python におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころPython におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころ
 
PyconJP2017 Kivyによるアプリケーション開発のすすめ
PyconJP2017 Kivyによるアプリケーション開発のすすめPyconJP2017 Kivyによるアプリケーション開発のすすめ
PyconJP2017 Kivyによるアプリケーション開発のすすめ
 
Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?
 
Pycon2017
Pycon2017Pycon2017
Pycon2017
 
Pythonと機械学習によるWebセキュリティの自動化
Pythonと機械学習によるWebセキュリティの自動化Pythonと機械学習によるWebセキュリティの自動化
Pythonと機械学習によるWebセキュリティの自動化
 

Similar to プロダクト開発してわかったDjangoの深〜いパーミッション管理の話 @ PyconJP2017

Pythonで検索エンジン2
Pythonで検索エンジン2Pythonで検索エンジン2
Pythonで検索エンジン2
Yasukazu Kawasaki
 

Similar to プロダクト開発してわかったDjangoの深〜いパーミッション管理の話 @ PyconJP2017 (20)

jp IT Django project jp.pptx
jp IT Django project jp.pptxjp IT Django project jp.pptx
jp IT Django project jp.pptx
 
Django最速デバッグ指南 PyConAPAC 2013
Django最速デバッグ指南 PyConAPAC 2013Django最速デバッグ指南 PyConAPAC 2013
Django最速デバッグ指南 PyConAPAC 2013
 
Django で始める PyCharm 入門
Django で始める PyCharm 入門Django で始める PyCharm 入門
Django で始める PyCharm 入門
 
Elasticsearch 変わり種プラグインの作り方
Elasticsearch 変わり種プラグインの作り方Elasticsearch 変わり種プラグインの作り方
Elasticsearch 変わり種プラグインの作り方
 
Django 1.5 における効果的な MTV 設計 & ネイティブApp
Django 1.5 における効果的な MTV 設計 & ネイティブAppDjango 1.5 における効果的な MTV 設計 & ネイティブApp
Django 1.5 における効果的な MTV 設計 & ネイティブApp
 
Python × Herokuで作る 雑談slack bot
Python × Herokuで作る 雑談slack botPython × Herokuで作る 雑談slack bot
Python × Herokuで作る 雑談slack bot
 
DjangoでさくっとWeb アプリケーション開発をする話
DjangoでさくっとWeb アプリケーション開発をする話DjangoでさくっとWeb アプリケーション開発をする話
DjangoでさくっとWeb アプリケーション開発をする話
 
はじめての Rails アプリ開発
はじめての Rails アプリ開発はじめての Rails アプリ開発
はじめての Rails アプリ開発
 
Redash pythonで業務分析
Redash pythonで業務分析Redash pythonで業務分析
Redash pythonで業務分析
 
deviseを利用した認証について@Minamirb
deviseを利用した認証について@Minamirbdeviseを利用した認証について@Minamirb
deviseを利用した認証について@Minamirb
 
210630 python
210630 python210630 python
210630 python
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介
 
勉強会 Cvml python基礎
勉強会 Cvml python基礎勉強会 Cvml python基礎
勉強会 Cvml python基礎
 
[Okta x Jamf合同新年会] Okta Workflowsによるノーコード業務改善 〜Jamf APIを使ってMac端末情報を自動収集してみよう〜
[Okta x Jamf合同新年会] Okta Workflowsによるノーコード業務改善 〜Jamf APIを使ってMac端末情報を自動収集してみよう〜[Okta x Jamf合同新年会] Okta Workflowsによるノーコード業務改善 〜Jamf APIを使ってMac端末情報を自動収集してみよう〜
[Okta x Jamf合同新年会] Okta Workflowsによるノーコード業務改善 〜Jamf APIを使ってMac端末情報を自動収集してみよう〜
 
恋するJenkins
恋するJenkins恋するJenkins
恋するJenkins
 
第39回日本基礎心理学会シンポジウム発表資料
第39回日本基礎心理学会シンポジウム発表資料第39回日本基礎心理学会シンポジウム発表資料
第39回日本基礎心理学会シンポジウム発表資料
 
Pythonで検索エンジン2
Pythonで検索エンジン2Pythonで検索エンジン2
Pythonで検索エンジン2
 
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
 
AngularJSでwebアプリを作ってみた!(2014/6/8 GDGKobe)
AngularJSでwebアプリを作ってみた!(2014/6/8 GDGKobe)AngularJSでwebアプリを作ってみた!(2014/6/8 GDGKobe)
AngularJSでwebアプリを作ってみた!(2014/6/8 GDGKobe)
 
Bracketsを使おう
Bracketsを使おうBracketsを使おう
Bracketsを使おう
 

More from hirokiky

My pyhack 1301
My pyhack 1301My pyhack 1301
My pyhack 1301
hirokiky
 

More from hirokiky (17)

簡単な算数でできる文章校正
簡単な算数でできる文章校正簡単な算数でできる文章校正
簡単な算数でできる文章校正
 
エンジニアが起業のアイディアを見つける方法
エンジニアが起業のアイディアを見つける方法エンジニアが起業のアイディアを見つける方法
エンジニアが起業のアイディアを見つける方法
 
それ、公開しちゃおうよ - みんなのPython勉強会63登壇
それ、公開しちゃおうよ - みんなのPython勉強会63登壇それ、公開しちゃおうよ - みんなのPython勉強会63登壇
それ、公開しちゃおうよ - みんなのPython勉強会63登壇
 
営業も広報もいない僕たちが11年間やってきたこと
営業も広報もいない僕たちが11年間やってきたこと営業も広報もいない僕たちが11年間やってきたこと
営業も広報もいない僕たちが11年間やってきたこと
 
LLoT ランゲージアップデート Python
LLoT ランゲージアップデート PythonLLoT ランゲージアップデート Python
LLoT ランゲージアップデート Python
 
How we realized SOA by Python at PyCon JP 2015
How we realized SOA by Python at PyCon JP 2015How we realized SOA by Python at PyCon JP 2015
How we realized SOA by Python at PyCon JP 2015
 
価値を届ける技術 #bpstudy 96
価値を届ける技術 #bpstudy 96価値を届ける技術 #bpstudy 96
価値を届ける技術 #bpstudy 96
 
Pycon2014 django performance
Pycon2014 django performancePycon2014 django performance
Pycon2014 django performance
 
gargant.dispatch, a flexible dispatcher for WSGI
gargant.dispatch, a flexible dispatcher for WSGIgargant.dispatch, a flexible dispatcher for WSGI
gargant.dispatch, a flexible dispatcher for WSGI
 
軽量のススメ
軽量のススメ軽量のススメ
軽量のススメ
 
django-websettingsの紹介
django-websettingsの紹介django-websettingsの紹介
django-websettingsの紹介
 
pyramid_layoutと僕と、ときどきzope.interface
pyramid_layoutと僕と、ときどきzope.interfacepyramid_layoutと僕と、ときどきzope.interface
pyramid_layoutと僕と、ときどきzope.interface
 
My pyhack 1301
My pyhack 1301My pyhack 1301
My pyhack 1301
 
Useful Django 1.4
Useful Django 1.4Useful Django 1.4
Useful Django 1.4
 
使えるDjango1.4
使えるDjango1.4使えるDjango1.4
使えるDjango1.4
 
個人の嗜好を学習し記事を推奨するフィードリーダ
個人の嗜好を学習し記事を推奨するフィードリーダ個人の嗜好を学習し記事を推奨するフィードリーダ
個人の嗜好を学習し記事を推奨するフィードリーダ
 
卒研中間発表資料:個人に最適化したフィードリーダの構築
卒研中間発表資料:個人に最適化したフィードリーダの構築卒研中間発表資料:個人に最適化したフィードリーダの構築
卒研中間発表資料:個人に最適化したフィードリーダの構築
 

Recently uploaded

Recently uploaded (11)

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

プロダクト開発してわかったDjangoの深〜いパーミッション管理の話 @ PyconJP2017