SlideShare a Scribd company logo
1 of 85
Download to read offline
Phoenix + React
2018/6/16
PHP 2018
•
• Fusic
• PHPer
• Twitter : @kobatako_
• Qiita : @kobatako
•
•
•
•
•
•
•
•
DB
React Redux Elixir Phoenix
DB
LDAPGraphQL
React Redux Elixir Phoenix
DB
LDAPGraphQL
• React
• JSX JS
• Component
• Redux
•
•
Redux
1.view
2. Reducers
3.Reducers
4.Store View
• GraphQL Apollo
• React React Native Angular Vue
• Android Swift
• Component Query React
•Query Component
•Component load
• {} return component
<Query query={ query }>
{ ({loading, error, data}) => {
return (
<Card fluid>
</Card>
)
}
}
</Query>
React Redux Elixir Phoenix
DB
LDAPGraphQL
• Elixir
•
• Erlang VM
• Phoenix
• Web Framework
• Rails
• v1.4 webpack
• GraphQL API
• absinthe
• Elixir GraphQL
•
scope "/api" do
pipe_through :api
forward "/graphiql", Absinthe.Plug.GraphiQL,
schema: ResourceNote.Schema
forward "/", Absinthe.Plug,
schema: ResourceNote.Schema
end
http://localhost/api
• DB
• Erlang eldap
React Redux Elixir Phoenix
DB
LDAPGraphQL
• GraphQL
• Web API
• Query
• Mutaion
•
•
•
React Redux Elixir Phoenix
DB
LDAPGraphQL
DB
• LDAP Lightweight Directory Access Protocol
•
• Lightweight
• Active Directory
LDAP
• DB
• Redux Store
• GraphQL
• View
• DB
• Redux Store
• GraphQL
• View
DB
dc=corporation,dc=home,dc=local
ou=Peopleou=Serverou=Productou=Accountou=Group
cn=Group01 cn=User01cn=Product01
cn=Project01
DB
• Root DN : dc=corporation,dc=home,dc=local
• Root OU
• DN: ou=People,dc=corporation,dc=home,dc=local
• DN: ou=Product,dc=corporation,dc=home,dc=local
• Group Project User
• cn=User01,cn=Group01,ou=Group,dc=corporation,

dc=home,dc=local
•
cn=User01,ou=People,dc=corporation,dc=home,dc=local
• DB
• Redux Store
• GraphQL
• View
Redux Store
•
• Store
• Immutable
LDAP Store
Redux Store
• DB Store
Redux Store
• DB Store
Redux Store
• Store
• DB
• Redux Store
• GraphQL
• View
• Container Pattern
• Container
• Container
• Presentation
• Container
View
View
Header Container
Content Container
DirectoryTree Container
View
View
• View
<Query query={ query }>
{ ({loading, error, data}) => {
return (
<Card fluid>
</Card>
)
}
}
</Query>
• View
• View
View
• Redux-saga
•
•
•
•
• action 

dispatch
import { take, put, call, fork } from 'redux-saga/effects'
export function* callSearchUsers() {
while (true) {
const action = yield take(SEARCH_USERS);
const res = yield call(searchUsers, action);
yield put({
type: SUCCESS_SEARCH_USERS,
entity: res
});
}
}
export default function* rootSaga() {
yield fork(callSearchUsers);
}
callSearchUsers
View
import { take, put, call, fork } from 'redux-saga/effects'
export function* callSearchUsers() {
while (true) {
const action = yield take(SEARCH_USERS);
const res = yield call(searchUsers, action);
yield put({
type: SUCCESS_SEARCH_USERS,
entity: res
});
}
}
export default function* rootSaga() {
yield fork(callSearchUsers);
}
SEARCH_USERS dispatch
View
searchUsers
import { take, put, call, fork } from 'redux-saga/effects'
export function* callSearchUsers() {
while (true) {
const action = yield take(SEARCH_USERS);
const res = yield call(searchUsers, action);
yield put({
type: SUCCESS_SEARCH_USERS,
entity: res
});
}
}
export default function* rootSaga() {
yield fork(callSearchUsers);
}
searchUsers
promise
action
View
import { take, put, call, fork } from 'redux-saga/effects'
export function* callSearchUsers() {
while (true) {
const action = yield take(SEARCH_USERS);
const res = yield call(searchUsers, action);
yield put({
type: SUCCESS_SEARCH_USERS,
entity: res
});
}
}
export default function* rootSaga() {
yield fork(callSearchUsers);
}
dispatch
View
• DB
• Redux Store
• GraphQL
• View
GraphQL
•
• Input
• Output
• Schema
GraphQL
•
• Input
• Output
• Schema
GraphQL
query searchUsers(
$user: TargetUser!, $isProject: Boolean, $isGroup: Boolean
) {
searchUsers(
targetUser: $user, isProject: $isProject, isGroup: $isGroup
) {
}
• Schema
•
•
Schema
GraphQL
const typeDefs = `
type TargetUser {
uid: String,
sn: String,
password: String,
mail: String,
extensionNumber: String,
githubAccount: String,
slackMention: String
}
`;
•
input_object :target_user do
field :uid, :string
field :sn, :string
field :mail, :string
field :password, :string
field :extension_number, :string
field :github_account, :string
field :slack_mention, :string
end
GraphQL
enum Status {
SALES
DEVELOPMENT
OPERATION
}
• Enum
enum :status do
value :sales
value :development
value :operation
end
GraphQL
•
• Input
• Output
• Schema
GraphQL
• Phoenix
• Apollo
{
id
name
dn
attributes {
name
values
}
dnArray {
name
value
}
}
GraphQL
object :dn do
field :name, :string
field :value, :string
end
object :attribute do
field :name, :string
field :values, list_of(:string)
end
object :entity do
field :id, :id
field :name, :string
field :dn, :string
field :dn_array, list_of(:dn)
field :object_class, list_of(:string)
field :attributes, list_of(:attribute)
end
{
id
name
dn
attributes {
name
values
}
dnArray {
name
value
}
}
• list_of
GraphQL
•
• Input
• Output
• Schema
GraphQL
• Query SELECT
•
• Mutation INSERT UPDATE DELETE
•
GraphQL
• Schema 

RESTFul API
field :search_user_attribute, list_of(:attribute)
field :search_user_dn, :user
field :search_project_users, list_of(:users)
Field :search_project, list_of(:project)
GraphQL
• Schema
• 

field :search_users, list_of(:user)
field :search_project, list_of(:project)
field :search_product, list_of(:product)
field :create_user, :user
GraphQL
•
query($username: Stirng!) {
searchProject {
name
}
users(username: $username) {
id
name
}
}
SPA
🤔
Token
JWT
• Json
• RFC 7519
•
JWT
•
• Token
• Token
• Token
JWT
•
• Token
• Token
• Token
JWT
mutation($username: String!, $password: String!) {
createToken(username: $username, password: $password) {
id,
name,
token
}
}`;
•
• Token Mutation
JWT
•
def login_by_name_pass(name, given_pass, opts) do
user = Repo.get_by(User, username: name)
cond do
user && checkpw(given_pass, user.password) ->
JWT
• Token
Guardian.encode_and_sign(user, %{}, ttl: {1, :hour})
1
JWT
• localStorage
successLogin: (user) => {
localStorage.setItem("authorization", user.token)
dispatch(successLogin(user))
},
JWT
•
• Token
• Token
• Token
JWT
• Header Token
• authLink
•const authLink = setContext((_, { headers }) => {
const token = localStorage.getItem('authorization');
return {
headers: {
headers,
authorization: token ? `Bearer ${token}` : ""
}
}
});
JWT
• Header Token
def build_context(conn) do
with ["Bearer " <> token]

<- get_req_header(conn, "authorization"),
JWT
• Token decode Json
{:ok, c} = Guardian.decode_and_verify(authorization)
# c = %{
# "aud" => "guardian",
# "exp" => 1529031364, # Unix
# "iat" => 1529027764,
# "iss" => "guardian",
# "jti" => "9627ea1e-569b-4e00-840b-f9315b197296",
# "nbf" => 1529027763, # Unix
# "sub" => “3", # ID
# "typ" => "access"
# }
%{"exp" => exp, "nbf" => nbf, "sub" => sub} = c
now = Timex.Timezone.convert(Timex.now(), "Asia/Tokyo")
after_date = Timex.Timezone.convert(Timex.from_unix(exp), "Asia/Tokyo")
before_date Timex.Timezone.convert(Timex.from_unix(nbf), "Asia/Tokyo")
if Timex.between?(now, before_date, after_date) do
JWT
• exp nbf 

if Timex.between?(now, before_date, after_date) do
user = Repo.get_by(User, id: sub)
{:ok, user}
else
{:error, "invalid authorization token"}
end
JWT
• {:ok,user}
• {:error, “invalid authorization token”}
def call(resolution, _config) do
case resolution.context do
%{current_user: _} ->
resolution
_ ->
resolution
|> Absinthe.Resolution.put_result({:error, "invalidAuthorizeToken"})
end
end
JWT
• {:ok,user} current_user
resolution
• {:error, “invalid authorization token”} 

{:error, “unauthenticated”}
JWT
•
• dispatch
import { onError } from 'apollo-link-error';
const logoutLink = onError(({ networkError, response, graphQLErrors, operation }) => {
graphQLErrors.forEach((error, index) => {
switch(error.message) {
case "invalidAuthorizeToken":
localStorage.removeItem('authorization');
store.dispatch(invalidAuthorizeToken());
break;
}
});
});
• 

• SPA
• Elixir
•
• React View 

• GraphQL RPC
• session
Phoenix + Reactで 社内システムを 密かに作ってる

More Related Content

What's hot

Web весна 2013 лекция 6
Web весна 2013 лекция 6Web весна 2013 лекция 6
Web весна 2013 лекция 6Technopark
 
Min-Maxing Software Costs - Laracon EU 2015
Min-Maxing Software Costs - Laracon EU 2015Min-Maxing Software Costs - Laracon EU 2015
Min-Maxing Software Costs - Laracon EU 2015Konstantin Kudryashov
 
Web осень 2012 лекция 6
Web осень 2012 лекция 6Web осень 2012 лекция 6
Web осень 2012 лекция 6Technopark
 
Decoupling with Design Patterns and Symfony2 DIC
Decoupling with Design Patterns and Symfony2 DICDecoupling with Design Patterns and Symfony2 DIC
Decoupling with Design Patterns and Symfony2 DICKonstantin Kudryashov
 
Silex meets SOAP & REST
Silex meets SOAP & RESTSilex meets SOAP & REST
Silex meets SOAP & RESTHugo Hamon
 
Zepto.js, a jQuery-compatible mobile JavaScript framework in 2K
Zepto.js, a jQuery-compatible mobile JavaScript framework in 2KZepto.js, a jQuery-compatible mobile JavaScript framework in 2K
Zepto.js, a jQuery-compatible mobile JavaScript framework in 2KThomas Fuchs
 
Xlab #1: Advantages of functional programming in Java 8
Xlab #1: Advantages of functional programming in Java 8Xlab #1: Advantages of functional programming in Java 8
Xlab #1: Advantages of functional programming in Java 8XSolve
 
PHPUnit elevato alla Symfony2
PHPUnit elevato alla Symfony2PHPUnit elevato alla Symfony2
PHPUnit elevato alla Symfony2eugenio pombi
 
Dutch PHP Conference - PHPSpec 2 - The only Design Tool you need
Dutch PHP Conference - PHPSpec 2 - The only Design Tool you needDutch PHP Conference - PHPSpec 2 - The only Design Tool you need
Dutch PHP Conference - PHPSpec 2 - The only Design Tool you needKacper Gunia
 
Dealing with Legacy PHP Applications
Dealing with Legacy PHP ApplicationsDealing with Legacy PHP Applications
Dealing with Legacy PHP ApplicationsClinton Dreisbach
 
Design Patterns avec PHP 5.3, Symfony et Pimple
Design Patterns avec PHP 5.3, Symfony et PimpleDesign Patterns avec PHP 5.3, Symfony et Pimple
Design Patterns avec PHP 5.3, Symfony et PimpleHugo Hamon
 
Testing Backbone applications with Jasmine
Testing Backbone applications with JasmineTesting Backbone applications with Jasmine
Testing Backbone applications with JasmineLeon van der Grient
 
The History of PHPersistence
The History of PHPersistenceThe History of PHPersistence
The History of PHPersistenceHugo Hamon
 
Testing Web Applications with GEB
Testing Web Applications with GEBTesting Web Applications with GEB
Testing Web Applications with GEBHoward Lewis Ship
 
Models and Service Layers, Hemoglobin and Hobgoblins
Models and Service Layers, Hemoglobin and HobgoblinsModels and Service Layers, Hemoglobin and Hobgoblins
Models and Service Layers, Hemoglobin and HobgoblinsRoss Tuck
 
The IoC Hydra - Dutch PHP Conference 2016
The IoC Hydra - Dutch PHP Conference 2016The IoC Hydra - Dutch PHP Conference 2016
The IoC Hydra - Dutch PHP Conference 2016Kacper Gunia
 
Symfony without the framework
Symfony without the frameworkSymfony without the framework
Symfony without the frameworkGOG.com dev team
 

What's hot (20)

Web весна 2013 лекция 6
Web весна 2013 лекция 6Web весна 2013 лекция 6
Web весна 2013 лекция 6
 
Min-Maxing Software Costs - Laracon EU 2015
Min-Maxing Software Costs - Laracon EU 2015Min-Maxing Software Costs - Laracon EU 2015
Min-Maxing Software Costs - Laracon EU 2015
 
Web осень 2012 лекция 6
Web осень 2012 лекция 6Web осень 2012 лекция 6
Web осень 2012 лекция 6
 
Decoupling with Design Patterns and Symfony2 DIC
Decoupling with Design Patterns and Symfony2 DICDecoupling with Design Patterns and Symfony2 DIC
Decoupling with Design Patterns and Symfony2 DIC
 
XQuery Rocks
XQuery RocksXQuery Rocks
XQuery Rocks
 
Not your Grandma's XQuery
Not your Grandma's XQueryNot your Grandma's XQuery
Not your Grandma's XQuery
 
Silex meets SOAP & REST
Silex meets SOAP & RESTSilex meets SOAP & REST
Silex meets SOAP & REST
 
Zepto.js, a jQuery-compatible mobile JavaScript framework in 2K
Zepto.js, a jQuery-compatible mobile JavaScript framework in 2KZepto.js, a jQuery-compatible mobile JavaScript framework in 2K
Zepto.js, a jQuery-compatible mobile JavaScript framework in 2K
 
Xlab #1: Advantages of functional programming in Java 8
Xlab #1: Advantages of functional programming in Java 8Xlab #1: Advantages of functional programming in Java 8
Xlab #1: Advantages of functional programming in Java 8
 
The IoC Hydra
The IoC HydraThe IoC Hydra
The IoC Hydra
 
PHPUnit elevato alla Symfony2
PHPUnit elevato alla Symfony2PHPUnit elevato alla Symfony2
PHPUnit elevato alla Symfony2
 
Dutch PHP Conference - PHPSpec 2 - The only Design Tool you need
Dutch PHP Conference - PHPSpec 2 - The only Design Tool you needDutch PHP Conference - PHPSpec 2 - The only Design Tool you need
Dutch PHP Conference - PHPSpec 2 - The only Design Tool you need
 
Dealing with Legacy PHP Applications
Dealing with Legacy PHP ApplicationsDealing with Legacy PHP Applications
Dealing with Legacy PHP Applications
 
Design Patterns avec PHP 5.3, Symfony et Pimple
Design Patterns avec PHP 5.3, Symfony et PimpleDesign Patterns avec PHP 5.3, Symfony et Pimple
Design Patterns avec PHP 5.3, Symfony et Pimple
 
Testing Backbone applications with Jasmine
Testing Backbone applications with JasmineTesting Backbone applications with Jasmine
Testing Backbone applications with Jasmine
 
The History of PHPersistence
The History of PHPersistenceThe History of PHPersistence
The History of PHPersistence
 
Testing Web Applications with GEB
Testing Web Applications with GEBTesting Web Applications with GEB
Testing Web Applications with GEB
 
Models and Service Layers, Hemoglobin and Hobgoblins
Models and Service Layers, Hemoglobin and HobgoblinsModels and Service Layers, Hemoglobin and Hobgoblins
Models and Service Layers, Hemoglobin and Hobgoblins
 
The IoC Hydra - Dutch PHP Conference 2016
The IoC Hydra - Dutch PHP Conference 2016The IoC Hydra - Dutch PHP Conference 2016
The IoC Hydra - Dutch PHP Conference 2016
 
Symfony without the framework
Symfony without the frameworkSymfony without the framework
Symfony without the framework
 

Similar to Phoenix + Reactで 社内システムを 密かに作ってる

ReactでGraphQLを使っている
ReactでGraphQLを使っているReactでGraphQLを使っている
ReactでGraphQLを使っているTakahiro Kobaru
 
async/await in Swift
async/await in Swiftasync/await in Swift
async/await in SwiftPeter Friese
 
Understanding backbonejs
Understanding backbonejsUnderstanding backbonejs
Understanding backbonejsNick Lee
 
Rich Portlet Development in uPortal
Rich Portlet Development in uPortalRich Portlet Development in uPortal
Rich Portlet Development in uPortalJennifer Bourey
 
Primefaces Nextgen Lju
Primefaces Nextgen LjuPrimefaces Nextgen Lju
Primefaces Nextgen LjuSkills Matter
 
Primefaces Nextgen Lju
Primefaces Nextgen LjuPrimefaces Nextgen Lju
Primefaces Nextgen LjuSkills Matter
 
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6Dmitry Soshnikov
 
API Days Paris - Automatic Testing of (RESTful) API Documentation
API Days Paris - Automatic Testing of (RESTful) API DocumentationAPI Days Paris - Automatic Testing of (RESTful) API Documentation
API Days Paris - Automatic Testing of (RESTful) API DocumentationRouven Weßling
 
WordPress Realtime - WordCamp São Paulo 2015
WordPress Realtime - WordCamp São Paulo 2015WordPress Realtime - WordCamp São Paulo 2015
WordPress Realtime - WordCamp São Paulo 2015Fernando Daciuk
 
Universal JavaScript
Universal JavaScriptUniversal JavaScript
Universal JavaScript名辰 洪
 
Intro to Asynchronous Javascript
Intro to Asynchronous JavascriptIntro to Asynchronous Javascript
Intro to Asynchronous JavascriptGarrett Welson
 
Spark IT 2011 - Simplified Web Development using Java Server Faces 2.0
Spark IT 2011 - Simplified Web Development using Java Server Faces 2.0Spark IT 2011 - Simplified Web Development using Java Server Faces 2.0
Spark IT 2011 - Simplified Web Development using Java Server Faces 2.0Arun Gupta
 
Async Redux Actions With RxJS - React Rally 2016
Async Redux Actions With RxJS - React Rally 2016Async Redux Actions With RxJS - React Rally 2016
Async Redux Actions With RxJS - React Rally 2016Ben Lesh
 
Matthew Eernisse, NodeJs, .toster {webdev}
Matthew Eernisse, NodeJs, .toster {webdev}Matthew Eernisse, NodeJs, .toster {webdev}
Matthew Eernisse, NodeJs, .toster {webdev}.toster
 
How to perform debounce in react
How to perform debounce in reactHow to perform debounce in react
How to perform debounce in reactBOSC Tech Labs
 
Open Source Ajax Solution @OSDC.tw 2009
Open Source Ajax  Solution @OSDC.tw 2009Open Source Ajax  Solution @OSDC.tw 2009
Open Source Ajax Solution @OSDC.tw 2009Robbie Cheng
 

Similar to Phoenix + Reactで 社内システムを 密かに作ってる (20)

ReactでGraphQLを使っている
ReactでGraphQLを使っているReactでGraphQLを使っている
ReactでGraphQLを使っている
 
async/await in Swift
async/await in Swiftasync/await in Swift
async/await in Swift
 
JavaScript JQUERY AJAX
JavaScript JQUERY AJAXJavaScript JQUERY AJAX
JavaScript JQUERY AJAX
 
Understanding backbonejs
Understanding backbonejsUnderstanding backbonejs
Understanding backbonejs
 
Rich Portlet Development in uPortal
Rich Portlet Development in uPortalRich Portlet Development in uPortal
Rich Portlet Development in uPortal
 
Primefaces Nextgen Lju
Primefaces Nextgen LjuPrimefaces Nextgen Lju
Primefaces Nextgen Lju
 
Primefaces Nextgen Lju
Primefaces Nextgen LjuPrimefaces Nextgen Lju
Primefaces Nextgen Lju
 
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6
 
API Days Paris - Automatic Testing of (RESTful) API Documentation
API Days Paris - Automatic Testing of (RESTful) API DocumentationAPI Days Paris - Automatic Testing of (RESTful) API Documentation
API Days Paris - Automatic Testing of (RESTful) API Documentation
 
WordPress Realtime - WordCamp São Paulo 2015
WordPress Realtime - WordCamp São Paulo 2015WordPress Realtime - WordCamp São Paulo 2015
WordPress Realtime - WordCamp São Paulo 2015
 
Universal JavaScript
Universal JavaScriptUniversal JavaScript
Universal JavaScript
 
Rails is not just Ruby
Rails is not just RubyRails is not just Ruby
Rails is not just Ruby
 
Android and REST
Android and RESTAndroid and REST
Android and REST
 
Intro to Asynchronous Javascript
Intro to Asynchronous JavascriptIntro to Asynchronous Javascript
Intro to Asynchronous Javascript
 
Spark IT 2011 - Simplified Web Development using Java Server Faces 2.0
Spark IT 2011 - Simplified Web Development using Java Server Faces 2.0Spark IT 2011 - Simplified Web Development using Java Server Faces 2.0
Spark IT 2011 - Simplified Web Development using Java Server Faces 2.0
 
Async Redux Actions With RxJS - React Rally 2016
Async Redux Actions With RxJS - React Rally 2016Async Redux Actions With RxJS - React Rally 2016
Async Redux Actions With RxJS - React Rally 2016
 
Matthew Eernisse, NodeJs, .toster {webdev}
Matthew Eernisse, NodeJs, .toster {webdev}Matthew Eernisse, NodeJs, .toster {webdev}
Matthew Eernisse, NodeJs, .toster {webdev}
 
How to perform debounce in react
How to perform debounce in reactHow to perform debounce in react
How to perform debounce in react
 
Open Source Ajax Solution @OSDC.tw 2009
Open Source Ajax  Solution @OSDC.tw 2009Open Source Ajax  Solution @OSDC.tw 2009
Open Source Ajax Solution @OSDC.tw 2009
 
How to React Native
How to React NativeHow to React Native
How to React Native
 

More from Takahiro Kobaru

Erlangでソフトウェアルータを作ってる話
Erlangでソフトウェアルータを作ってる話Erlangでソフトウェアルータを作ってる話
Erlangでソフトウェアルータを作ってる話Takahiro Kobaru
 
AppSyncをReactで使ってみた
AppSyncをReactで使ってみたAppSyncをReactで使ってみた
AppSyncをReactで使ってみたTakahiro Kobaru
 
SSOとか、SAMLとか、認証してみる
SSOとか、SAMLとか、認証してみるSSOとか、SAMLとか、認証してみる
SSOとか、SAMLとか、認証してみるTakahiro Kobaru
 
Mnesiaで分散ノードに入門してみた
Mnesiaで分散ノードに入門してみたMnesiaで分散ノードに入門してみた
Mnesiaで分散ノードに入門してみたTakahiro Kobaru
 
GoとElixir、同時開発した時の気づき
GoとElixir、同時開発した時の気づきGoとElixir、同時開発した時の気づき
GoとElixir、同時開発した時の気づきTakahiro Kobaru
 
Elixir ライブラリ 「absinthe」でGraphQLに入門
Elixir ライブラリ 「absinthe」でGraphQLに入門Elixir ライブラリ 「absinthe」でGraphQLに入門
Elixir ライブラリ 「absinthe」でGraphQLに入門Takahiro Kobaru
 

More from Takahiro Kobaru (6)

Erlangでソフトウェアルータを作ってる話
Erlangでソフトウェアルータを作ってる話Erlangでソフトウェアルータを作ってる話
Erlangでソフトウェアルータを作ってる話
 
AppSyncをReactで使ってみた
AppSyncをReactで使ってみたAppSyncをReactで使ってみた
AppSyncをReactで使ってみた
 
SSOとか、SAMLとか、認証してみる
SSOとか、SAMLとか、認証してみるSSOとか、SAMLとか、認証してみる
SSOとか、SAMLとか、認証してみる
 
Mnesiaで分散ノードに入門してみた
Mnesiaで分散ノードに入門してみたMnesiaで分散ノードに入門してみた
Mnesiaで分散ノードに入門してみた
 
GoとElixir、同時開発した時の気づき
GoとElixir、同時開発した時の気づきGoとElixir、同時開発した時の気づき
GoとElixir、同時開発した時の気づき
 
Elixir ライブラリ 「absinthe」でGraphQLに入門
Elixir ライブラリ 「absinthe」でGraphQLに入門Elixir ライブラリ 「absinthe」でGraphQLに入門
Elixir ライブラリ 「absinthe」でGraphQLに入門
 

Recently uploaded

EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 

Recently uploaded (20)

EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 

Phoenix + Reactで 社内システムを 密かに作ってる