SlideShare ist ein Scribd-Unternehmen logo
1 von 31
Downloaden Sie, um offline zu lesen
Hitokuse Inc.©
ネイティブアドを支えるPhantomJS
株式会社ヒトクセ フルスタックエンジニア 島田賢悟
1
Hitokuse Inc.© 2
第1部 リッチメディア広告とJavaScript(長尾・25分)
 - ヒトクセの紹介
 - 第3者配信とは?3rd Party JavaScriptについて
 - 実践テクニック① パッケージ化
 - 実践テクニック② クロスドメイン対策
 - 実践テクニック③ デバイス対応ケーススタディ
第2部 JavaScriptで実現するインバナー動画広告(長尾・10分)
 - インバナー動画広告とは?
 - 実践テクニック④ CSSスプライト
第3部 ネイティブアドを支えるPhantomJS(島田・20分)
 - ネイティブアドとデザイン自動最適化について
 - PhantomJSの仕組み(基礎編)
 - PhantomJSの仕組み(スクレイピング編)
 - CasperJSについて
第4部 クリエイティブ最適化アルゴリズム(濁沼・15分)
Hitokuse Inc.© 3
自己紹介
【名前】島田 賢悟
【出身】東京
【趣味】最近はジャニーズコンサートによく
    行きます。
【経歴】2011年   東京大学 教養学部 卒業
    2013年   東京大学大学院 総合文化研究科 卒業
    2013年   某システム会社にシステムコンサルとして入社
    2014年9月 株式会社ヒトクセにフルスタックエンジニア
           として入社
Hitokuse Inc.© 4
ネイティブアドとは(弊社の定義)
ユーザーが使用しているメディア、もしくはサービスに、	
  
自然になじむデザインで表示される広告です。
300x250	
  のバナーをネイティブ化 320x50	
  のバナーをネイティブ化
Hitokuse Inc.© 5
ネイティブアドの効果
ユーザーにとっては親密さを感じられるデザインで、自然にメッセージが
届きます。結果として、高い効果が得られます。
Hitokuse Inc.© 6
カメレオンによる自動最適化
PhantomJS(CasperJS)
弊社ではPantomJSを利用することで、広告表示のされるWebサイトを解析
し、汎用的にレイアウトをネイティブアド化することに成功しています。
(特許申請中)
Hitokuse Inc.©
PhantomJSとは?
Webブラウザを使わずに、コンソール上からブラウザ操作できるツー
ルです。
【特徴】
・Webページ内のDOMの取得ができる。
・Webページ内でイベントを発火させることができる。
・UserAgentやCookieなどの設定ができ、実利用とほぼ同じ環境
 でのブラウザ操作ができる。
・WebKitブラウザを前提としたブラウザ
 操作である。
7
Hitokuse Inc.©
PhantomJSの仕組み(基礎編)
ここでは一般的な利用方法(Webサイトのスクリーンショットを撮影
するPhantomJS)に則って、PhantomJSの仕組みを説明します。
8
var webpage = require("webpage").create();
webpage.open('http://smartcanvas.net', function() {
webpage.render('test.png');
phantom.exit();
});
screen_shot.js
test.png
Hitokuse Inc.©
PhantomJSの仕組み(基礎編)
○ PhantomJSは公式サイトにて配布されています。
○ PhantomJSはコンソール上で以下の様に起動します。
9
$ phantomjs screen_shot.js
http://phantomjs.org/
Hitokuse Inc.©
PhantomJSの仕組み(基礎編)
○ PhantomJSでは、主に以下の2つのオブジェクトを利用して、Web
ページ操作等を行なっていきます。
・Web Pageオブジェクト
 …対象の1つのWebページに対応するオブジェクト
・Phantomオブジェクト
 …起動しているプロセスに対応するオブジェクト
10
Hitokuse Inc.©
PhantomJSの仕組み(基礎編)
① Web Pageオブジェクトを利用する際には、最初にWeb Page
  モジュールを読み込む必要があります。
  その後、.create()によって、1つのWeb Pageオブジェクトを
  生成させます。
11
var webpage = require("webpage").create();
webpage.open('http://smartcanvas.net', function() {
webpage.render('test.png');
phantom.exit();
});
screen_shot.js
Hitokuse Inc.©
PhantomJSの仕組み(基礎編)
② Web Pageオブジェクトの.open()によって、対象のWebページ
  の情報を抽出します。
  その後の処理内容に関しては、Callback関数の中に定義します。
12
var webpage = require("webpage").create();
webpage.open('http://smartcanvas.net', function() {
webpage.render('test.png');
phantom.exit();
});
screen_shot.js
Hitokuse Inc.©
PhantomJSの仕組み(基礎編)
③ .render()は対象のWebページをレンダリングし、Imageファイ
  ルにする関数です。
  引数にパスとファイル名を指定することで、指定したパスにファイ
  ルが保存されます。
13
var webpage = require("webpage").create();
webpage.open('http://smartcanvas.net', function() {
webpage.render('test.png');
phantom.exit();
});
screen_shot.js
Hitokuse Inc.©
PhantomJSの仕組み(基礎編)
④ 最後にPhantomオブジェクトの.exit()により、全体のプロセスを
  終了させます。
14
var webpage = require("webpage").create();
webpage.open('http://smartcanvas.net', function() {
webpage.render('test.png');
phantom.exit();
});
screen_shot.js
Hitokuse Inc.©
PhantomJSの仕組み(スクレイピング編)
少し応用した使い方として、対象サイトにログインしてスクレイピン
グする(文字情報をすべて取得しカウントする)PhantomJSを元に、詳
細な使い方について説明したいと思います。
15
$ phantomjs --ssl-protocol=tlsv1 facebook_scrape.js
-————【result】—————-
いいね!:14
モバイル:13
島田 賢悟:11
削除:8
…
Hitokuse Inc.©
PhantomJSの仕組み(スクレイピング編)
実際のコードは以下のようになります。
16
1 var page = require('webpage').create();
2 page.settings.UserAgent = 'Mozilla/5.0 (Windows NT 6.1) …'
3 page.settings.loadImages = false;
4 page.onConsoleMessage = function (msg){ console.log(msg); };
5 page.includeJQuery = function (callback) { this.includeJs('//ajax.googleapis.com/ajax/
libs/jquery/1.7.2/jquery.min.js', callback)};
6 page.open('http://www.facebook.com/', function() {
7 page.includeJQuery(function() {
8 page.evaluate(function() { //フォームを埋めてログイン
9 $('#email').val('***');
10 $('#pass').val('***');
11 $('#login_form').submit();
12 });
13 page.onLoadFinished = function(){
14 page.includeJQuery(function() {
15 page.evaluate(function() { //ページ遷移
16 location.href = $('._2dpe._1ayn').prop('href');
17 });
18 page.onLoadFinished = function(){
19 page.includeJQuery(function() {
20 var result = page.evaluate( //text解析処理 );
21 console.log(result); //解析結果を表示
22 phantom.exit();
23 };
24 });
25 });
Hitokuse Inc.©
PhantomJSの仕組み(スクレイピング編)
Web Pageオブジェクトのプロパティ一覧
17
objectName:WebPage
title:
frameTitle:
content:<html><head></head><body></body></html>
frameContent:<html><head></head><body></body></html>
url:about:blank
frameUrl:about:blank
loading:false
loadingProgress:0
canGoBack:false
canGoForward:false
plainText:
framePlainText:
libraryPath:/Users/KengoShimada/work/phantomjs
offlineStoragePath:/Users/KengoShimada/Library/Application Support/Ofi
Labs/PhantomJS
offlineStorageQuota:5242880
viewportSize:[object Object]
…
Hitokuse Inc.©
PhantomJSの仕組み(スクレイピング編)
Web Pageオブジェクトの主要プロパティ(関数)①
⚪ title
⚪ content
 - WebページのHTML。
⚪ frame…(ex. frameContent)
 - Activeなframeのみの情報。
⚪ paperSize
 - PDF形式でファイル出力する際のサイズ。
⚪ offlineStoragePath, offlineStorageQuota
 - localで利用する際のストレージのパスと利用上限容量。
18
Hitokuse Inc.©
PhantomJSの仕組み(スクレイピング編)
Web Pageオブジェクトの主要プロパティ(関数)②
⚪ settings
 - 基礎情報系の設定されているプロパティ。
 ・UserAgent
 ・loadImages
  - 画像を読み込むかどうかのBoolean値。
⚪ viewportSize
⚪ onLoadFinished
 - ページ遷移後の動作を関数で定義するプロパティ。
⚪ onConsoleMessage
19
Hitokuse Inc.©
PhantomJSの仕組み(スクレイピング編)
Web Pageオブジェクトの主要プロパティ(関数)③
⚪ .injectJs(QString, function() { });
 - 他のjsファイルを読み込む関数。
⚪ .evaluate(function() { })
 - Callback関数内で、Webページ上のDOMを扱うことができる関数。
⚪ .sendEvent(Event,…)
 - DOMの位置を直接指定して、イベントを発生させる関数。
20
Hitokuse Inc.©
PhantomJSの仕組み(スクレイピング編)
Phantomオブジェクトの主要プロパティ(関数)
⚪ args
⚪ outputEncoding
 - ファイル出力に利用する文字コード。
⚪ cookies
⚪ .addCookies()
 - cookiesプロパティに値を設定する関数。
21
Hitokuse Inc.©
PhantomJSの仕組み(スクレイピング編)
22
1 var page = require('webpage').create();
2 page.settings.UserAgent = 'Mozilla/5.0 (Windows NT 6.1) …'
3 page.settings.loadImages = false;
4 page.onConsoleMessage = function (msg){ console.log(msg); };
5 page.includeJQuery = function (callback) { this.includeJs(
'//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js',
callback)};
6 page.open('https://www.facebook.com/', function() {
7 page.includeJQuery(function() {
8 page.evaluate(function() { //フォームを埋めてログイン
9 $('#email').val('***');
10 $('#pass').val('***');
11 $('#login_form').submit();
12 });
13 page.onLoadFinished = function(){
14 page.includeJQuery(function() {
15 page.evaluate(function() {
16 location.href = $('._2dpe._1ayn').prop('href'); //ページ遷移
17 });
18 page.onLoadFinished = function(){
まずUserAgentをPC用に設定します。	
  
また今回はText解析のみなので、処理速度向上の
ためにImageの読み込みはしないように
loadImagesを設定します。
Hitokuse Inc.©
PhantomJSの仕組み(スクレイピング編)
23
1 var page = require('webpage').create();
2 page.settings.UserAgent = 'Mozilla/5.0 (Windows NT 6.1) …'
3 page.settings.loadImages = false;
4 page.onConsoleMessage = function (msg){ console.log(msg); };
5 page.includeJQuery = function (callback) { this.includeJs(
'//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js',
callback)};
6 page.open('http://www.facebook.com/', function() {
7 page.includeJQuery(function() {
8 page.evaluate(function() { //フォームを埋めてログイン
9 $('#email’).val(‘***’);
10 $('#pass’).val('***');
11 $('#login_form').submit();
12 });
13 page.onLoadFinished = function(){
14 page.includeJQuery(function() {
15 page.evaluate(function() {
16 location.href = $('._2dpe._1ayn').prop('href'); //ページ遷移
17 });
18 page.onLoadFinished = function(){
今回は、コンソール上で文字解析の結果を確認します。	
  
page.evaluate(func;on()	
  {…});の「…」内ではpage内のDOMのconsoleオブ
ジェクトを参照してしまうので、コンソール上には出力されません。	
  
そのため最初に	
  
page.onConsoleMessage	
  =	
  func;on	
  (msg){console.log(msg);	
  };	
  
の様に、参照するconsoleオブジェクトを指定する必要があります。
Hitokuse Inc.©
PhantomJSの仕組み(スクレイピング編)
24
1 var page = require('webpage').create();
2 page.settings.UserAgent = 'Mozilla/5.0 (Windows NT 6.1) …'
3 page.settings.loadImages = false;
4 page.onConsoleMessage = function (msg){ console.log(msg); };
5 page.includeJQuery = function (callback) { this.includeJs(
'//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js',
callback)};
6 page.open('https://www.facebook.com/', function() {
7 page.includeJQuery(function() {
8 page.evaluate(function() { //フォームを埋めてログイン
9 $('#email').val(‘***’);
10 $('#pass').val('***');
11 $('#login_form').submit();
12 });
13 page.onLoadFinished = function(){
14 page.includeJQuery(function() {
15 page.evaluate(function() {
16 location.href = $('._2dpe._1ayn’).prop('href'); //ページ遷移
17 });
18 page.onLoadFinished = function(){
facebookページ内では、jQueryが読み込まれていま
せん。今回はjQueryを利用したいので、includeJs()	
  
によって、jQueryを読み込みます。	
  
今回はページ遷移の度に読み込む必要があるので、
コード簡略化のためにincludeJQuery()という関数を
pageオブジェクト内に予め定義します。
Hitokuse Inc.©
PhantomJSの仕組み(スクレイピング編)
25
5 page.includeJQuery = function (callback) { this.includeJs(
'//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js',
callback)};
6 page.open('https://www.facebook.com/', function() {
7 page.includeJQuery(function() {
8 page.evaluate(function() { //フォームを埋めてログイン
9 $('#email').val('***');
10 $('#pass').val('***');
11 $('#login_form').submit();
12 });
13 page.onLoadFinished = function(){
14 page.includeJQuery(function() {
15 page.evaluate(function() {
16 location.href = $('._2dpe._1ayn’).prop('href'); //ページ遷移
17 });
18 page.onLoadFinished = function(){
19 page.includeJQuery(function() {
20 var result = page.evaluate( //text解析処理 );
21 console.log(result); //解析結果を表示
pageをopenし、jQueryを読み込んだ後に.evaluate()
によってWebページのDOMにアクセスします。	
  
callback関数の中で「Emailアドレス」「パスワー
ド」を入力しsubmitします。
Hitokuse Inc.©
PhantomJSの仕組み(スクレイピング編)
26
5 page.includeJQuery = function (callback) { this.includeJs(
'//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js',
callback)};
6 page.open('https://www.facebook.com/', function() {
7 page.includeJQuery(function() {
8 page.evaluate(function() { //フォームを埋めてログイン
9 $('#email').val('***');
10 $('#pass’).val('***');
11 $('#login_form').submit();
12 });
13 page.onLoadFinished = function(){
14 page.includeJQuery(function() {
15 page.evaluate(function() {
16 location.href = $(‘._2dpe._1ayn’).prop('href'); //ページ遷移
17 });
18 page.onLoadFinished = function(){
19 page.includeJQuery(function() {
20 var result = page.evaluate( //text解析処理 );
21 console.log(result); //解析結果を表示
ログインに関してはログイン情報をCookieに埋め込む方法で
もできます。	
  
この場合、例えば	
  
phantom.addCookie({	
  'act':’***','c_user':'***','locale':'ja_JP',…});	
  
のように記述することでcookieを埋め込むことができます。	
  
Hitokuse Inc.©
PhantomJSの仕組み(スクレイピング編)
27
$ phantomjs --ssl-protocol=tlsv1 facebook_scrape.js
.d8888b. 888 888
d88P Y88b 888 888
Y88b. 888 888
"Y888b. 888888 .d88b. 88888b. 888
"Y88b. 888 d88""88b 888 "88b 888 これは開発者向けのブラウザ機能です。Facebook機能を
有効にするためまたは誰かのアカウントをハッキングするために、ここに何かをコピー・貼り付けするように言われ
た場合、それは第三者があなたのFacebookアカウントへのアクセスを得るための詐欺・不正行為です。
"888 888 888 888 888 888 Y8P
Y88b d88P Y88b. Y88..88P 888 d88P
"Y8888P" "Y888 "Y88P" 88888P" 888
888
888
888
詳細はhttps://www.facebook.com/selfxssをご覧ください。
PhantomJSでfacebookにログインすると、上記のよ
うな警告メッセージが表示されます。
※コンソール上で起動した際の表示
Hitokuse Inc.©
PhantomJSの仕組み(スクレイピング編)
28
8 page.evaluate(function() { //フォームを埋めてログイン
9 $('#email').val('***');
10 $('#pass’).val('***');
11 $('#login_form').submit();
12 });
13 page.onLoadFinished = function(){
14 page.includeJQuery(function() {
15 page.evaluate(function() {
16 location.href = $('._2dpe._1ayn').prop('href'); //ページ遷移
17 });
18 page.onLoadFinished = function(){
19 page.includeJQuery(function() {
20 var result = page.evaluate( //text解析処理 );
21 console.log(result); //解析結果を表示
22 phantom.exit();
23 });
24 };
25 });
26 };
27 });
ページ遷移が完了すると、OnLoadFinishedに定義し
た関数が実行されます。
Hitokuse Inc.©
PhantomJSの仕組み(スクレイピング編)
29
13 page.onLoadFinished = function(){
14 page.includeJQuery(function() {
15 page.evaluate(function() {
16 location.href = $('._2dpe._1ayn').prop('href'); //ページ遷移
17 });
18 page.onLoadFinished = function(){
19 page.includeJQuery(function() {
20 var result = page.evaluate( //text解析処理 );
21 console.log(result); //解析結果を表示
22 phantom.exit();
23 });
24 };
25 });
26 };
27 });
28 });
今回対象となるページまで遷移するためには、メニュー
を選択して、もう一度遷移する必要があります。	
  
その際には、先ほど同様にevaluate()のCallback関数に
遷移するまでの処理を定義し、onLoadFinishedに遷移
後の処理を再定義することで可能です。
Hitokuse Inc.©
CasperJSについて
CasperJSはPhantomJSから拡張したユーティリティです。
カメレオンではCasperJSを利用して、メディア解析を行っています。
【特徴】
・WebKitだけでなく、Geckoにも対応している。
 (通常だと、Geckoでのブラウザ操作はSlimerJSを利用する必要がある。)
・CoffeeScriptでの記述ができる。
・イベント系の処理が記述しやすい。
30
Hitokuse Inc.©
最後に
弊社では、PhantomJS(CasperJS)をWebサイト解析に利用していますが、
PhantomJSのユーティリティを考えれば、今後、様々なサービスが生まれてく
ると思います。
本講演が、少しでも皆様の技術習得の参考になっていただけたら幸いです。
内容的に、話しきれない部分も多かったのですし、
私自身も今後、技術者問わず、多くの方々と触れて成長していきたいと考えてお
りますので、交流会では是非話しかけていただければと思います。
株式会社ヒトクセ フルスタックエンジニア 島田
31

Weitere ähnliche Inhalte

Ähnlich wie 【ネイティブアドを支えるPhantomJS】

ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用Yatabe Terumasa
 
かんたん Twitter アプリをつくろう
かんたん Twitter アプリをつくろう かんたん Twitter アプリをつくろう
かんたん Twitter アプリをつくろう Shuhei Iitsuka
 
Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界Yuji Takayama
 
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Akira Inoue
 
初めての Data api cms どうでしょう - 大阪夏の陣
初めての Data api   cms どうでしょう - 大阪夏の陣初めての Data api   cms どうでしょう - 大阪夏の陣
初めての Data api cms どうでしょう - 大阪夏の陣Yuji Takayama
 
20130924 Picomon CRH勉強会
20130924 Picomon CRH勉強会20130924 Picomon CRH勉強会
20130924 Picomon CRH勉強会Yukihiro Kitazawa
 
CodeIgniterによるPhwittr
CodeIgniterによるPhwittrCodeIgniterによるPhwittr
CodeIgniterによるPhwittrkenjis
 
-入門- enchant.js でゲームを作ろう
-入門- enchant.js でゲームを作ろう-入門- enchant.js でゲームを作ろう
-入門- enchant.js でゲームを作ろうnico0927
 
うちのRedmineの使い方(2)
うちのRedmineの使い方(2)うちのRedmineの使い方(2)
うちのRedmineの使い方(2)Tomohisa Kusukawa
 
React を導入した フロントエンド開発
React を導入したフロントエンド開発React を導入したフロントエンド開発
React を導入した フロントエンド開発 daisuke-a-matsui
 
Flex with Google App Engine for Java
Flex with Google App Engine for JavaFlex with Google App Engine for Java
Flex with Google App Engine for JavaTakeya Waki
 
GruntでJavaScript 前作業の自動化!
GruntでJavaScript 前作業の自動化!GruntでJavaScript 前作業の自動化!
GruntでJavaScript 前作業の自動化!leverages_event
 
Express Web Application Framework
Express Web Application FrameworkExpress Web Application Framework
Express Web Application FrameworkLearningTech
 
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発Akira Inoue
 
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~normalian
 
jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -Hayato Mizuno
 
Spring BootでHello Worldのその先へ
Spring BootでHello Worldのその先へSpring BootでHello Worldのその先へ
Spring BootでHello Worldのその先へMasatoshi Fujino
 

Ähnlich wie 【ネイティブアドを支えるPhantomJS】 (20)

ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用
 
かんたん Twitter アプリをつくろう
かんたん Twitter アプリをつくろう かんたん Twitter アプリをつくろう
かんたん Twitter アプリをつくろう
 
Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界
 
Visualforce + jQuery
Visualforce + jQueryVisualforce + jQuery
Visualforce + jQuery
 
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
 
Vue.js で XSS
Vue.js で XSSVue.js で XSS
Vue.js で XSS
 
初めての Data api cms どうでしょう - 大阪夏の陣
初めての Data api   cms どうでしょう - 大阪夏の陣初めての Data api   cms どうでしょう - 大阪夏の陣
初めての Data api cms どうでしょう - 大阪夏の陣
 
20130924 Picomon CRH勉強会
20130924 Picomon CRH勉強会20130924 Picomon CRH勉強会
20130924 Picomon CRH勉強会
 
CodeIgniterによるPhwittr
CodeIgniterによるPhwittrCodeIgniterによるPhwittr
CodeIgniterによるPhwittr
 
-入門- enchant.js でゲームを作ろう
-入門- enchant.js でゲームを作ろう-入門- enchant.js でゲームを作ろう
-入門- enchant.js でゲームを作ろう
 
うちのRedmineの使い方(2)
うちのRedmineの使い方(2)うちのRedmineの使い方(2)
うちのRedmineの使い方(2)
 
React を導入した フロントエンド開発
React を導入したフロントエンド開発React を導入したフロントエンド開発
React を導入した フロントエンド開発
 
Flex with Google App Engine for Java
Flex with Google App Engine for JavaFlex with Google App Engine for Java
Flex with Google App Engine for Java
 
GruntでJavaScript 前作業の自動化!
GruntでJavaScript 前作業の自動化!GruntでJavaScript 前作業の自動化!
GruntでJavaScript 前作業の自動化!
 
Express Web Application Framework
Express Web Application FrameworkExpress Web Application Framework
Express Web Application Framework
 
JavaScript 実践講座 Framework, Tool, Performance
JavaScript 実践講座 Framework, Tool, PerformanceJavaScript 実践講座 Framework, Tool, Performance
JavaScript 実践講座 Framework, Tool, Performance
 
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発
 
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
 
jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -
 
Spring BootでHello Worldのその先へ
Spring BootでHello Worldのその先へSpring BootでHello Worldのその先へ
Spring BootでHello Worldのその先へ
 

Kürzlich hochgeladen

Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
論文紹介: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 UnderstandingToru Tamaki
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介: 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 Gamesatsushi061452
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
論文紹介: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...Toru Tamaki
 

Kürzlich hochgeladen (11)

Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介: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
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介: 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
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
新人研修 後半 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日発表)
 
論文紹介: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...
 

【ネイティブアドを支えるPhantomJS】