SlideShare a Scribd company logo
HttpClientModule
移行から新機能まで
自己紹介
● 武田 憲太郎 @KentarouTakeda
● ヒトメボ - ヒトメボレした時、押すスイッチ
○ PostgreSQL,PostGIS, 国土数値情報
● 金持ち父さんのキャッシュフローゲーム
○ AngularJS , PHP, Node
● ソシャゲ・コンシューマーゲーのインフラ
○ ………
○ 管理画面で Angular 大活躍
あくまで本業はサーバサイド
HttpClientModuleへの移行
以下の条件を満たせば
● 正常時のサーバからのレスポンスの形式がjsonであること。
● subscribe()の開始時点でObjectに変換していること。
基本的に移行は簡単!
移行の概要
● Angular 4.3への移行
● HttpClientModuleインポート
● HttpClientの利用
● HttpModuleの削除
Angular 4.3への移行
定期的に npm update していれば既に4.3になっているはず
$ npm list --depth 0 | grep @angular/
├── @angular/animations@4.3.3
├── @angular/cli@1.2.7
├── @angular/common@4.3.3
├── @angular/compiler@4.3.3
├── @angular/compiler-cli@4.3.3
├── @angular/core@4.3.3
...
HttpClientModuleのimport
src/app/app.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { HttpModule } from '@angular/http';
+import { HttpClientModule } from '@angular/common/http';
import { AppComponent } from './app.component';
HttpClientModuleのimports
src/app/app.module.ts
],
imports: [
HttpModule,
+ HttpClientModule,
BrowserModule
],
providers: [],
HttpClientの利用
src/app/app.component.ts
import { Component, OnInit } from '@angular/core';
import { Http } from '@angular/http';
+import { HttpClient } from '@angular/common/http';
HttpClientの利用
src/app/app.component.ts
constructor(
- private http :Http,
+ private http :HttpClient,
) { }
● 上の例ではいきなり差し替えている。
● 段階的に移行する場合はプロパティ名を変えて共存。
HttpClientの利用
src/app/app.component.ts
this.http.get(url)
- .map(res => res.json())
.subscribe( res => {
.....
});
リクエストの返却がResponseからObjectに!
Httpの削除
src/app/app.component.ts
import { Component, OnInit } from '@angular/core';
-import { Http } from '@angular/http';
import { HttpClient } from '@angular/common/http';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
HttpModuleの削除
src/app/app.module.ts
imports: [
- HttpModule,
HttpClientModule,
BrowserModule
],
HttpModuleの削除
src/app/app.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
-import { HttpModule } from '@angular/http';
import { HttpClientModule } from '@angular/common/http';
import { AppComponent } from './app.component';
packageも削除可能
package.json
"dependencies": {
"@angular/core": "^4.0.0",
"@angular/common": "^4.0.0",
- "@angular/http": "^4.0.0",
...
}
default as JSON
型の指定
subscribe()に渡されるレスポンスの型はObject
this.http.get(url).subscribe( res => {
console.log(res['foo']); // OK
// console.log(res.bar); // Property 'bar' does not exist on type 'Object'
});
プロパティを持たないので foo.bar 形式でアクセス出来ない
返却型の指定
HttpClient#get にジェネリクスで型を指定 (取り急ぎanyで対応…)
- this.http.get(url)
+ this.http.get<any>(url).subscribe( res => {
console.log(res['foo']); // OK
- // console.log(res.bar); // Property 'bar' does not exist on type 'Object'
+ console.log(res.bar); // OK!
});
基本的には単純作業
型をどう管理するか?
APIの返却形式と型定義とが一対一で紐づく
● 全APIのレスポンスに対応した型定義を書く?
● サーバ側でも(おそらく)レスポンスのスキーマは管理している。
○ 二重管理するのか?
○ サーバも開発中でAPI仕様も不定期に変わるとしたら?
まずは書く
interface SomeApiResponse {
requiredString : string, // このプロパティは必ず存在する
optionalNumber ?: number, // このプロパティは特定の場合のみ存在する
}
以降strictNullChecksを前提に解説します。
使ってみる
this.http.get<SomeApiResponse>(url).subscribe( res => {
// console.log(res.optionalNumber.toFixed()); // Object is possibly 'undefined'
if(res.optionalNumber) {
// optionalなのでnullチェック必須
console.log(res.optionalNumber.toFixed())
}
// requiredなのでnullチェック不用
console.log(res.requiredString.length);
});
TypeScript最強!
…では済まない
現実1
this.http.get<SomeApiResponse>(url) .subscribe( res => {
console.log(res.requiredString.length);
// Uncaught ReferenceError: requiredString is not defined
});
(サーバの人)あ、ごめん、バグってた…
● 特定条件で代入が漏れる系(自戒)
現実2
this.http.get<SomeApiResponse>(url).subscribe( res => {
if(res.optionalNumber) {
console.log(res.optionalNumber.toFixed());
// Uncaught TypeError: res.optionalNumber.toFixed is not a function
}
});
(サーバの人)す、すみません、すぐ直します!
● PHPerやらかしがち系(自戒)
{"optionalNumber":"3"}
型チェックが必要
人力strictNullChecks
this.http.get<SomeApiResponse>(url).subscribe( res => {
if(res.optionalNumber && res.optionalNumber.toFixed) {
console.log(res.optionalNumber.toFixed());
}
if(res.requiredString) {
console.log(res.requiredString.length);
}
});
チェックが漏れていてもコンパイラは教えてくれない。
粘着strictNullChecks
interface SomeApiResponse {
requiredString : string,
optionalNumber ?: number,
}
type SomeApiResponseCheck = {
[P in keyof SomeApiResponse] ?: SomeApiResponse[P];
}
粘着strictNullChecks
this.http.get<SomeApiResponseCheck>(url).subscribe( res => {
if(typeof res.optionalNumber === 'number') {
console.log(res.optionalNumber.toFixed());
}
// console.log(res.requiredString.length);
// Object is possibly 'undefined'.
});
必須と解っていてもチェックしないとコンパイル通してくれない。
何のためにTypeScript
を使っているか解らない
レベル
問題を整理
● 入力は信頼しない方針。
● TypeScriptの恩恵は受けたい。
● スキーマの二重管理は避けたい。
提案
● JSON Schema
● JSON Schema Validation
● JSON Schema to TypeScript
管理を一本化
SomeApiResponse.yaml
type: "object"
properties:
requiredString:
type: "string"
optionalNumber:
type: "number"
required:
- "requiredString"
additionalProperties: false
JSON Schemaの自動生成
SomeApiResponse.ts
export const SomeApiResponse = {
"type": "object",
"properties": {
"requiredString": { "type": "string" },
"optionalNumber": { "type": "number" }
},
"required": [ "requiredString" ],
"additionalProperties": false
}
型定義の自動生成
SomeApiResponse.ts
export interface SomeApiResponse {
requiredString: string;
optionalNumber?: number;
}
https://github.com/bcherny/json-schema-to-typescript
自動化されたバリデーションの通過までがAPI
import { SomeApiResponse } from './SomeApiResponse';
...
this.http.get<SomeApiResponse>(url)
// 仕様を満たさない返却は棄てる例
.filter( res => jsonschema.validate(res, SomeApiResponse).valid )
.subscribe( res => {
/* ... */
})
;
再掲&提案
● 全APIのレスポンスに対応した型定義を書く?
○ d.tsでなくて良ければ既に誰かが書いてる。利用する。
○ 誰も書いてなかった場合自分が書く。皆と共有する。。
● サーバ側でも(おそらく)レスポンスのスキーマは管理している。
○ *二重管理するのか? *
■ 集中管理
○ *サーバも開発中でAPI仕様も不定期に変わるとしたら? *
■ バリデーションまで含め自動で追従
more validation
サーバ側を巻き込む
サーバ側を巻き込む
http.createServer((req, res)=>{
let body : string;
const errors = jsonschema.validate(body, SomeApiResponse).errors;
if(errors.length) {
res.writeHead(500);
res.write('ごめんバグ!Slackにログ飛ばしたので光の速さで直すよ!')
} else {
....
}
}).listen(8000);
交換条件を提示する
交換条件を提示する
class HttpClientValidation extends HttpClient {
public post<ResponseSchema,RequestSchema>(url: string, body:
RequestSchema, RequestSchema: any) {
const errors = jsonschema.validate(body, RequestSchema).errors
if(errors.length) {
console.warn(errors);
throw new Error('壊れたリクエスト、それは信頼関係をも壊す……');
}
return super.post<RequestSchema>(url, body);
}
}
ベストプラクティス
● サーバとクライアントが同じスキーマを参照
○ 中間形式(今回はyaml)を活用
● スキーマ変更はサーバ・クライアント双方が 自動で 追従する
○ git submodule
● バリデーションは人力では書かない
○ 仕組み化(今回はJSON Schema)が重要
些細なミス撲滅
テスト大幅削減
API統廃合の際の対応漏れ撲滅
more more validation
外部との入出力を行う箇所には全て仕込む
● localStorage / sessionStorage
● KVS / NoSQL
○ 本番はNoSQLを利用するがローカル開発時は localStorage で代用するケース
○ レスポンスを丸ごとKVSにキャッシュするケース
● RDB
○ Table Schema <--> JSON Schema <--> TypeScript
○ WebAPIの型も出自はRDBのカラムの型
■ 書いておけば意外と再利用できる
型安全性の範囲
● 閉じた系の中ではTypeScriptは型安全
● 系を跨いだ安全性は自分達で用意
○ 担当者とか部署とか社内社外とか気にしない
● レイヤーを超えた型安全により TypeScriptがより便利になる
○ JSONがデフォルトとなった HttpClientModuleではより顕著
新機能デモ
HttpProgressEvent New!!
● Sent
New!! リクエストの送信を開始した
● UploadProgress
New!! リクエストを送信中
● ResponseHeader
New!! レスポンスヘッダを受信した
● DownloadProgress
New!! レスポンス受信中
● Response
レスポンス受信完了
● User
New!! カスタムイベント
使えそうなもの
● UploadProgress
● DownloadProgress
○ 進捗に応じて何度も発火される。
○ 途中経過(サイズ・内容)を取得できる .
使いみち
ダウンロード(アップロード)の進捗表示
だけ…?
Long-Polling with XHR
サーバ側
http.createServer((req, res)=>{
// 5秒毎に「hello」と出力
let timer = setInterval( () => { res.write('hello'); }, 5000);
/* res.end(); */ // サーバ側からの切断は行わない。
// クライアントの切断まで動き続ける。
req.on('close', () => { clearTimeout(timer); });
}).listen(8000);
仮ソースです。実際にはヘッダ制御なども必要になります。
クライアント側
const request = new HttpRequest('GET', url, {
reportProgress: true, // HttpProgressEvent を使う。
responseType: 'text' // json(デフォルト)は最後まで受信しないとparse開始出来な
い。
});
this.http.request(request).subscribe(ev => {
if(ev.type === HttpEventType.DownloadProgress) {
console.log(ev.loaded); // これまでに取得したサイズ
console.log(ev.partialText); // これまでに取得した内容
}
});
使いどころ
素直に socket.io を使うのが無難
const socket = io({
transports: ['polling']
});
今回のサンプルソースをきちんと実装した例
https://github.com/socketio/engine.io/blob/master/lib/transports/polling.js
とは言え
High-Level
● HttpModule
○ Responseをsubscribe()
■ httpの存在を意識
● HttpClientModule
○ Objectをsubscribe()
■ httpを隠蔽
Low-Level
● HttpModule
○ 「送信開始」「受信完了」しか制御できない。
● HttpClientModule
○ 途中経過も制御できる
HttpClientModule
● High-Level
○ httpの存在を意識せず利用
● Low-Level
○ XMLHttpRequestで出来ることは全てできる
用途の幅は大幅に広がった
Thank you
Welcome to http

More Related Content

What's hot

歌舞伎座Tech Rx会
歌舞伎座Tech Rx会歌舞伎座Tech Rx会
歌舞伎座Tech Rx会
Kaora Shibacaki
 
Ruby風Swift NSOperation編
Ruby風Swift NSOperation編Ruby風Swift NSOperation編
Ruby風Swift NSOperation編
Hisakuni Fujimoto
 
これからのJavaScriptー関数型プログラミングとECMAScript6
これからのJavaScriptー関数型プログラミングとECMAScript6これからのJavaScriptー関数型プログラミングとECMAScript6
これからのJavaScriptー関数型プログラミングとECMAScript6
TanUkkii
 
モダン JavaScript における非同期処理 - Promise, async/await -
モダン JavaScript における非同期処理 - Promise, async/await -モダン JavaScript における非同期処理 - Promise, async/await -
モダン JavaScript における非同期処理 - Promise, async/await -
Kazunori Hashikuchi
 
キメるClojure
キメるClojureキメるClojure
キメるClojure
Yoshitaka Kawashima
 
An Internal of LINQ to Objects
An Internal of LINQ to ObjectsAn Internal of LINQ to Objects
An Internal of LINQ to Objects
Yoshifumi Kawai
 
C#/.NETがやっていること 第二版
C#/.NETがやっていること 第二版C#/.NETがやっていること 第二版
C#/.NETがやっていること 第二版
信之 岩永
 
知って得するC#
知って得するC#知って得するC#
知って得するC#Shota Baba
 
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃんRetrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
Yukari Sakurai
 
.NET Compiler Platform
.NET Compiler Platform.NET Compiler Platform
.NET Compiler Platform
信之 岩永
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
Takaaki Suzuki
 
OpenJDK HotSpot C1Compiler Overview
OpenJDK HotSpot C1Compiler OverviewOpenJDK HotSpot C1Compiler Overview
OpenJDK HotSpot C1Compiler Overview
nothingcosmos
 
Clean Architectureで設計してRxJSを使った話
Clean Architectureで設計してRxJSを使った話Clean Architectureで設計してRxJSを使った話
Clean Architectureで設計してRxJSを使った話
_kondei
 
jQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハック
jQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハックjQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハック
jQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハック
Jun-ichi Sakamoto
 
111008 silverlight square_datavalidation
111008 silverlight square_datavalidation111008 silverlight square_datavalidation
111008 silverlight square_datavalidationTakayoshi Tanaka
 
Rx java x retrofit
Rx java x retrofitRx java x retrofit
Rx java x retrofit
Shun Nakahara
 
Deep Dive C# 6.0
Deep Dive C# 6.0Deep Dive C# 6.0
Deep Dive C# 6.0
信之 岩永
 
Xamarin で ReactiveUI を使ってみた
Xamarin で ReactiveUI を使ってみたXamarin で ReactiveUI を使ってみた
Xamarin で ReactiveUI を使ってみた
Hironov OKUYAMA
 
Spectron
SpectronSpectron
Spectron
ogawatti
 
C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)
信之 岩永
 

What's hot (20)

歌舞伎座Tech Rx会
歌舞伎座Tech Rx会歌舞伎座Tech Rx会
歌舞伎座Tech Rx会
 
Ruby風Swift NSOperation編
Ruby風Swift NSOperation編Ruby風Swift NSOperation編
Ruby風Swift NSOperation編
 
これからのJavaScriptー関数型プログラミングとECMAScript6
これからのJavaScriptー関数型プログラミングとECMAScript6これからのJavaScriptー関数型プログラミングとECMAScript6
これからのJavaScriptー関数型プログラミングとECMAScript6
 
モダン JavaScript における非同期処理 - Promise, async/await -
モダン JavaScript における非同期処理 - Promise, async/await -モダン JavaScript における非同期処理 - Promise, async/await -
モダン JavaScript における非同期処理 - Promise, async/await -
 
キメるClojure
キメるClojureキメるClojure
キメるClojure
 
An Internal of LINQ to Objects
An Internal of LINQ to ObjectsAn Internal of LINQ to Objects
An Internal of LINQ to Objects
 
C#/.NETがやっていること 第二版
C#/.NETがやっていること 第二版C#/.NETがやっていること 第二版
C#/.NETがやっていること 第二版
 
知って得するC#
知って得するC#知って得するC#
知って得するC#
 
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃんRetrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
 
.NET Compiler Platform
.NET Compiler Platform.NET Compiler Platform
.NET Compiler Platform
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
 
OpenJDK HotSpot C1Compiler Overview
OpenJDK HotSpot C1Compiler OverviewOpenJDK HotSpot C1Compiler Overview
OpenJDK HotSpot C1Compiler Overview
 
Clean Architectureで設計してRxJSを使った話
Clean Architectureで設計してRxJSを使った話Clean Architectureで設計してRxJSを使った話
Clean Architectureで設計してRxJSを使った話
 
jQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハック
jQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハックjQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハック
jQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハック
 
111008 silverlight square_datavalidation
111008 silverlight square_datavalidation111008 silverlight square_datavalidation
111008 silverlight square_datavalidation
 
Rx java x retrofit
Rx java x retrofitRx java x retrofit
Rx java x retrofit
 
Deep Dive C# 6.0
Deep Dive C# 6.0Deep Dive C# 6.0
Deep Dive C# 6.0
 
Xamarin で ReactiveUI を使ってみた
Xamarin で ReactiveUI を使ってみたXamarin で ReactiveUI を使ってみた
Xamarin で ReactiveUI を使ってみた
 
Spectron
SpectronSpectron
Spectron
 
C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)
 

Similar to HttpClientModule

これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fallこれからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
なおき きしだ
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門伸男 伊藤
 
fluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギングfluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギングYuichi Tateno
 
130710 02
130710 02130710 02
130710 02openrtm
 
Azure で Serverless 初心者向けタッチ&トライ
Azure で Serverless 初心者向けタッチ&トライAzure で Serverless 初心者向けタッチ&トライ
Azure で Serverless 初心者向けタッチ&トライ
Masanobu Sato
 
TreeFrog Frameworkの紹介
TreeFrog Frameworkの紹介TreeFrog Frameworkの紹介
TreeFrog Frameworkの紹介
ao27
 
Observability, Service Mesh and Microservices
Observability, Service Mesh and MicroservicesObservability, Service Mesh and Microservices
Observability, Service Mesh and Microservices
Taiki
 
AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計
AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計
AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計
y_taka_23
 
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageTaku Miyakawa
 
AWS Lambda Updates
AWS Lambda UpdatesAWS Lambda Updates
AWS Lambda Updates
Keisuke Nishitani
 
コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道
なおき きしだ
 
serverless framework + AWS Lambda with Python
serverless framework + AWS Lambda with Pythonserverless framework + AWS Lambda with Python
serverless framework + AWS Lambda with Python
masahitojp
 
ApexトリガのBest Practiceを目指して
ApexトリガのBest Practiceを目指してApexトリガのBest Practiceを目指して
ApexトリガのBest Practiceを目指して
Takahiro Yonei
 
Das 2015
Das 2015Das 2015
Python physicalcomputing
Python physicalcomputingPython physicalcomputing
Python physicalcomputing
Noboru Irieda
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platform
Toru Yamaguchi
 
Php in ruby
Php in rubyPhp in ruby
Php in rubydo_aki
 
Jbatch実践入門 #jdt2015
Jbatch実践入門 #jdt2015Jbatch実践入門 #jdt2015
Jbatch実践入門 #jdt2015
Norito Agetsuma
 

Similar to HttpClientModule (20)

これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fallこれからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
 
fluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギングfluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギング
 
130710 02
130710 02130710 02
130710 02
 
Azure で Serverless 初心者向けタッチ&トライ
Azure で Serverless 初心者向けタッチ&トライAzure で Serverless 初心者向けタッチ&トライ
Azure で Serverless 初心者向けタッチ&トライ
 
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
 
TreeFrog Frameworkの紹介
TreeFrog Frameworkの紹介TreeFrog Frameworkの紹介
TreeFrog Frameworkの紹介
 
Observability, Service Mesh and Microservices
Observability, Service Mesh and MicroservicesObservability, Service Mesh and Microservices
Observability, Service Mesh and Microservices
 
AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計
AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計
AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計
 
20120721_ishkawa
20120721_ishkawa20120721_ishkawa
20120721_ishkawa
 
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based language
 
AWS Lambda Updates
AWS Lambda UpdatesAWS Lambda Updates
AWS Lambda Updates
 
コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道
 
serverless framework + AWS Lambda with Python
serverless framework + AWS Lambda with Pythonserverless framework + AWS Lambda with Python
serverless framework + AWS Lambda with Python
 
ApexトリガのBest Practiceを目指して
ApexトリガのBest Practiceを目指してApexトリガのBest Practiceを目指して
ApexトリガのBest Practiceを目指して
 
Das 2015
Das 2015Das 2015
Das 2015
 
Python physicalcomputing
Python physicalcomputingPython physicalcomputing
Python physicalcomputing
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platform
 
Php in ruby
Php in rubyPhp in ruby
Php in ruby
 
Jbatch実践入門 #jdt2015
Jbatch実践入門 #jdt2015Jbatch実践入門 #jdt2015
Jbatch実践入門 #jdt2015
 

More from Kentarou Takeda

コード品質を保つために心がけたいこと
コード品質を保つために心がけたいことコード品質を保つために心がけたいこと
コード品質を保つために心がけたいこと
Kentarou Takeda
 
Composer bin plugin / ツールの依存管理から解放される
Composer bin plugin / ツールの依存管理から解放されるComposer bin plugin / ツールの依存管理から解放される
Composer bin plugin / ツールの依存管理から解放される
Kentarou Takeda
 
Docker friendly PHP / Laravel
Docker friendlyPHP / LaravelDocker friendlyPHP / Laravel
Docker friendly PHP / Laravel
Kentarou Takeda
 
マスタデータの管理と運用について
マスタデータの管理と運用についてマスタデータの管理と運用について
マスタデータの管理と運用について
Kentarou Takeda
 
スモールサービスにおけるCloudFrontの真骨頂
スモールサービスにおけるCloudFrontの真骨頂スモールサービスにおけるCloudFrontの真骨頂
スモールサービスにおけるCloudFrontの真骨頂
Kentarou Takeda
 
バリデーション駆動開発(仮称)で プロジェクトメンバー全員を幸せにした話
バリデーション駆動開発(仮称)で プロジェクトメンバー全員を幸せにした話バリデーション駆動開発(仮称)で プロジェクトメンバー全員を幸せにした話
バリデーション駆動開発(仮称)で プロジェクトメンバー全員を幸せにした話
Kentarou Takeda
 

More from Kentarou Takeda (6)

コード品質を保つために心がけたいこと
コード品質を保つために心がけたいことコード品質を保つために心がけたいこと
コード品質を保つために心がけたいこと
 
Composer bin plugin / ツールの依存管理から解放される
Composer bin plugin / ツールの依存管理から解放されるComposer bin plugin / ツールの依存管理から解放される
Composer bin plugin / ツールの依存管理から解放される
 
Docker friendly PHP / Laravel
Docker friendlyPHP / LaravelDocker friendlyPHP / Laravel
Docker friendly PHP / Laravel
 
マスタデータの管理と運用について
マスタデータの管理と運用についてマスタデータの管理と運用について
マスタデータの管理と運用について
 
スモールサービスにおけるCloudFrontの真骨頂
スモールサービスにおけるCloudFrontの真骨頂スモールサービスにおけるCloudFrontの真骨頂
スモールサービスにおけるCloudFrontの真骨頂
 
バリデーション駆動開発(仮称)で プロジェクトメンバー全員を幸せにした話
バリデーション駆動開発(仮称)で プロジェクトメンバー全員を幸せにした話バリデーション駆動開発(仮称)で プロジェクトメンバー全員を幸せにした話
バリデーション駆動開発(仮称)で プロジェクトメンバー全員を幸せにした話
 

Recently uploaded

Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
harmonylab
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
Toru Tamaki
 
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobodyロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
azuma satoshi
 
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライドHumanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
tazaki1
 
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
Osaka University
 
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
嶋 是一 (Yoshikazu SHIMA)
 
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMMハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
osamut
 

Recently uploaded (7)

Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
 
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobodyロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
 
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライドHumanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
 
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
 
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
 
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMMハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
 

HttpClientModule