SlideShare a Scribd company logo
1 of 35
Javaにおける
ネイティブコード連携の
各種手法の紹介
NTTレゾナント・テクノロジー(株)
久納 孝治(ひさのう こうじ)
hisano
自己紹介
 久納 孝治 (ひさのう こうじ)
 NTTレゾナント・テクノロジーでRemote TestKitを作っています。
「今まで作ったもの」
 世界初のケータイJava向けGameBoyエミュレータ (2002年のJavaOneで発表)
http://www.itmedia.co.jp/mobile/0209/26/n_game.html
 Skype社の公認のオフィシャルAPIに選定されたSkype4Java
http://www.itmedia.co.jp/enterprise/articles/0710/05/news132.html
 Pure JavaによるDalvik VMインタープリタ
http://code.google.com/p/android-dalvik-vm-on-java/
 MIDP→iアプリ変換ツール (Opera Miniのiアプリ版で採用)
http://www.itmedia.co.jp/mobile/articles/1106/15/news106.html
など
Pure JavaによるDalvik VMインタープリタ
 AndroidのDalvik VMの仕様書から実装
 Java ME上で動作するインタープリタ
(知る限りではクリーンルーム実装では世界初)
 サポートしている機能
Dalvik VMの全命令
Java ME CLDCのAPI群
wait・notify等を含むマルチスレッド関連(グリーンスレッドで実現)
MIDPアプリ→iアプリ変換ツール
 Java MEのMIDPアプリのjarをiアプリのjarに静的変換するツール + MIDP APIのランタイム
から構成
 静的変換ツールはjavassistライブラリを用いて実装
・javax.microeditionのクラス参照をtv.hisano.doja.runtime.midpパッケージに変換
・System#getProperty呼び出しを独自のクラスメソッド呼び出しに変換
・Class#getResourceAsStream呼び出しを独自のクラスメソッド呼び出しに変換
・などなど
 MIDP APIのランタイムをクリーンルーム実装
・ピュアJavaのPNGデコーダを組み込み
・OpenGLを用いた高速な画面描画コンポーネントを組み込み
 Opera社とOpera miniのiアプリ版としてリリース(現在は公開終了)
本編
Javaでネイティブコードを使う意義
 Javaで書かれていない豊富な各種ライブラリの利用
例: TensorFlow、Bonanza
弊社での利用例: コンピュータビジョンライブラリ(OpenCV)、iOS端末管理
(libimobiledevice)、ChromeのPDFエンジン(Pdfium)
 OS特有の機能の利用
例: Windowsのジャンプ・リスト、OS Xの通知センター
弊社での利用例: プロセス情報取得(winp)、UNIXドメインソケット(junixsocket)
 GPU・CPUをフルに使った高速化
例: DirectX、WebRTC
弊社での利用例: 音声・ビデオコーデック(OpenH264)
 既存資産のポーティングの手間の軽減
ネイティブコードを組み込む方法
開発工数 品質 できること
① ラップした既存ライブラリを利用 ◎ ? △
② Javaのみでネイティブ連携を行えるライブラリ
を利用
○ ○ ○
③ JNIを利用 △ △ ◎
ラップした既存ライブラリを利用
GitHubで既存ライブラリを検索
 アドバンスド検索
https://github.com/search/advanced
 プレフィックスを用いた絞り込み
https://help.github.com/categories/search/
他の応用例:
jnrとjnaどちらが使われているか?
jna filename:pom.xml fork:false→3263件
jnr-ffi filename:pom.xml fork:false→47件
利用例: JavaCV
 JavaからOpenCVを使えるライブラリ
 OpenCVにも本家Javaライブラリがあるものの、セットアップの容易さからJavaCV
がオススメ
 Apacheライセンス or クラスパス例外ありのGPLのデュアルライセンス
類似領域検索での利用例
利用例: winp
 JavaからWindowsのプロセス管理を行うためのライブラリ
 Jenkinsを作られている川口さん作でMITライセンス
 サポートしている機能
 プロセス情報の取得
 プロセスの強制終了
 プロセスの優先順位変更
 OSからのログオフ・リブート
など
プロセス一覧を表示するコード
Javaのみでネイティブ連携コードを
書けるライブラリを利用
この手法のメリット
 JNIで連携コードを別途書く必要なし
 OSごとのネイティブライブラリの準備が不要
 Javaのデバッガを用いての開発が可能
com4j
 COMコンポーネントをJavaから使えるようにするライブラリ
 Jenkinsを作られている川口さん作
 BSDライセンス
ライブラリを生成
ライブラリを利用
SWTのinternal API
 EclipseのGUIライブラリのSWTの下回り(org.eclipse.swt.internal)には大量のOS特
有コード
 Windows: Win32/Win64
 OS X: Cocoa
Skype4Javaでの利用例
JNA
 JavaインターフェイスでC関数を定義するとバインドしてくれるライブラリ
 Apacheライセンス or LGPLのデュアルライセンス
 似たライブラリとしてJNRあり
① JavaインターフェイスでC関数を定義
② インターフェイス定義からプロキシを生成
③ 実際の処理で利用
JNAのnativeメソッド定義による利用
 nativeメソッドを定義したクラスをNative#registerメソッドに渡すだけで、JNIラ
イブラリを用意したように呼び出すことが可能に
pdfium4jでのnativeメソッド定義による利用例
JNAでのJavaリスナーの登録
 Javaのリスナーを、Cの関数ポインタのようにコールバックとして登録可能
JNAでのAPI差分の吸収
 JNAの各種処理をフックしてAPI差分を吸収することが可能
・Javaのインスタンス→ネイティブオブジェクトの対応関係変更(TypeMapper)
・Javaのメソッド→C関数名の対応関係変更(FunctionMapper)
・C関数の呼び出し処理の前後に処理を追加(InvocationMapper)
C関数名の変更を吸収する例
JNAerator
 ヘッダーファイルからJNAを用いたコードを生成してくれるツール
 JNAだけでなく、BridJ・Rococoa・node.js向けのコード出力も可能
JavaCPP
 Javaクラス + アノテーションでC++クラスを定義すると、クラス定義を元にJNI
コードを生成して使えるようにしてくれるライブラリ
 JavaCVの下支えのライブラリ
 Apacheライセンス or GPLのデュアルライセンス
 javacpp-presetsリポジトリに豊富な定義が存在(CUDA、FFmpeg等)
 TensorFlowの定義も追加!
おそらく次のバージョンで楽に使えるように。
https://github.com/bytedeco/javacpp-
presets/blob/master/tensorflow/src/main/java/org/bytedeco/javacpp/tensorflo
w.java
今まで紹介した手法の問題点
 不正なポインタを利用するとプロセスごと落ちてしまう問題あり
 各OS・CPUアーキテクチャごとにネイティブライブラリを用意する必要あり
LLVMを調査している時にいい手法を思いついたので、
j2js2nc(Java to JavaScript to Native Code)ライブラリ
を作ってみました!
LLVMの紹介
 コンパイラ開発に必要な各種コンポーネントを提供するコンパイラ基盤
Clang: C/C++/Objective-Cから中間表現のIRを生成するコンポーネント
LLVM Core: IRから各種CPU向けバイナリを生成するための各種コンポーネント
LLDB: ClangやLLVM Coreを使って実装されたデバッガ
 BSDライセンスに似た使いやすいライセンス
 (ユーザ目線では新しいコンパイラと捉えるのがいいかも)
Clang C/C++フロントエンド LLVM Optimizer
x86バックエンド
ARMバックエンド
PowerPCバックエンド
Emscriptenの紹介
 C/C++コードをJavaScriptにコンパイルするツール
Unity等での応用例: https://github.com/kripken/emscripten/wiki/Porting-
Examples-and-Demos
Win 32 APIでの応用例: https://github.com/klutzy/win32.js
MS-DOSゲーム: https://archive.org/details/softwarelibrary_msdos_games
 Windows・OS X・Linux向けに提供
 LLVMのバックエンドでCPU特有のバイナリではなく、JavaScriptコードを生成
 JavaScriptサブセット仕様のasm.jsを用いて高速化
Clang C/C++フロントエンド LLVM Optimizer Emscriptenバックエンド(Fastcomp)
Emscriptenによるwin32.jsの実現方法
JavaScriptコード
Emscriptenで変換
fake-mswin - JavaScriptライブラリ
Win32エミュレーションライブラリ
j2js2ncライブラリの紹介
 j2js2ncはEmscripten版JNA
 Emscriptenを利用するメリット
 ネイティブコードが、マシン語ではなくJavaScriptとなるため、OSやCPUに非依存
 Nashorn上でマシン語相当が動作するため、不正なポインタによってプロセスが終了する
ことがない
 JNA 4.1の下回りを実装し直して実現しているため、JNAの豊富な高度な機能はそ
のまま利用可能
Javaインスタンスの自動マッピング
メソッド→関数のマッピングルール変更
など
C/C++コード JavaScript
Java
Emscriptenで変換
生成されたJavaScriptコードはJava 8から搭載されたNashorn上で実行
Javaインターフェイス + j2js2ncでC関数を自動バインド
j2js2ncの具体的な利用の流れ
#include <stdio.h>
#include <stdlib.h>
void hello(char *name) {
printf("Hello, %s!n", name);
}
$ emcc hello.c -s EXPORTED_FUNCTIONS="['_hello']" -o js/hello.js
package jp.hisano.sample;
import jp.hisano.j2js2nc.Library;
import jp.hisano.j2js2nc.Native;
public class Main {
public interface Hello extends Library {
void hello(String name);
}
public static void main(String[] args) throws Exception {
Hello library = (Hello) Native.loadLibrary("hello", Hello.class);
library.hello("j2js2nc");
}
}
hello.dll等に相当するhello.jsを生成
Libraryインターフェイスを継承してメソッドを定義するだけ
でC関数が利用可能
JNAとj2js2ncの内部処理の違い
JNAでの内部処理
#include <stdio.h>
#include <stdlib.h>
void hello(char *name) {
printf("Hello, %s!n", name);
}
Hello library = (Hello) Native.loadLibrary("hello", Hello.class);
library.hello("j2js2nc");
JNA処理
1. StringインスタンスをJNAオブジェクトに変換(NativeString
インスタンスの生成)
2. JNAオブジェクトからネイティブオブジェクトに変換
(malloc関数でバイト配列を確保)
3. libffi経由でネイティブライブラリの関数を呼び出し
GC実行時
1. finalizeメソッド実行時にfree関数が呼び出されて解放
j2js2ncでの内部処理
#include <stdio.h>
#include <stdlib.h>
void hello(char *name) {
printf("Hello, %s!n", name);
}
Hello library = (Hello) Native.loadLibrary("hello", Hello.class);
library.hello("j2js2nc");
J2js2ncの処理
1. Stringインスタンスをj2js2ncオブジェクトに変換
(NativeStringインスタンスの生成)
2. j2js2ncオブジェクトからネイティブオブジェクトに変換
(_malloc関数でバイト配列を確保)
3. javax.script経由でJavaScript関数を呼び出し
GC実行時
1. finalizeメソッド実行時に_free関数が呼び出されて解放
JNA処理
1. StringインスタンスをJNAオブジェクトに変換(NativeString
インスタンスの生成)
2. JNAオブジェクトからネイティブオブジェクトに変換
(malloc関数でバイト配列を確保)
3. libffi経由でネイティブライブラリの関数を呼び出し
いろいろな問題とその解決方法
ポインタのサポート
ポインタは何バイト?
 Emscriptenでは32-bitマシンとしてコンパイル
 long型・wchar_t型・size_t型も、すべて32-bit
定義の初期化のメソッド
64-bit整数型のサポート
JavaScriptは64-bit浮動小数点型のみ、64-bit整数型の引数や戻り値は?
 一つの64-bit整数引数を、二つの32-bitビット整数(実体は64-bit浮動小数点型)に分割
 戻り値の64-bit整数の上位32-bitはtempRet0というグローバル変数に入れて返却
戻り値の処理
引数の処理
処理速度が遅い
1バイトのメモリアクセスごとにJavaScriptのパース・実行処理が行われて低速
Nashornの内部APIを直接使う形にして高速化
(BufferArgumentsMarshalTestテストの実行時間が20秒から2.5秒に短縮!)
変更後変更前
様々なネイティブ連携手法があるJavaは
最高です!
ご清聴ありがとうございました。

More Related Content

What's hot

What's hot (20)

GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
AS45679 on FreeBSD
AS45679 on FreeBSDAS45679 on FreeBSD
AS45679 on FreeBSD
 
UnboundとDNSSEC(OSC2011 Tokyo/Spring)
UnboundとDNSSEC(OSC2011 Tokyo/Spring)UnboundとDNSSEC(OSC2011 Tokyo/Spring)
UnboundとDNSSEC(OSC2011 Tokyo/Spring)
 
「Neutronになって理解するOpenStack Network」~Neutron/Open vSwitchなどNeutronと周辺技術の解説~ - ...
「Neutronになって理解するOpenStack Network」~Neutron/Open vSwitchなどNeutronと周辺技術の解説~  - ...「Neutronになって理解するOpenStack Network」~Neutron/Open vSwitchなどNeutronと周辺技術の解説~  - ...
「Neutronになって理解するOpenStack Network」~Neutron/Open vSwitchなどNeutronと周辺技術の解説~ - ...
 
IPv4/IPv6 移行・共存技術の動向
IPv4/IPv6 移行・共存技術の動向IPv4/IPv6 移行・共存技術の動向
IPv4/IPv6 移行・共存技術の動向
 
「おうちクラウド」が今熱い!
「おうちクラウド」が今熱い!「おうちクラウド」が今熱い!
「おうちクラウド」が今熱い!
 
Onieで遊んでみようとした話
Onieで遊んでみようとした話Onieで遊んでみようとした話
Onieで遊んでみようとした話
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
 
【Unite Tokyo 2019】大量のアセットも怖くない!~HTTP/2による高速な通信の実装例~
【Unite Tokyo 2019】大量のアセットも怖くない!~HTTP/2による高速な通信の実装例~【Unite Tokyo 2019】大量のアセットも怖くない!~HTTP/2による高速な通信の実装例~
【Unite Tokyo 2019】大量のアセットも怖くない!~HTTP/2による高速な通信の実装例~
 
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
 
Linux女子部 iptables復習編
Linux女子部 iptables復習編Linux女子部 iptables復習編
Linux女子部 iptables復習編
 
ISPネットワーク運用で覗いてるもの
ISPネットワーク運用で覗いてるものISPネットワーク運用で覗いてるもの
ISPネットワーク運用で覗いてるもの
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
 
iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
 
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについて
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについてCentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについて
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについて
 
コンテナを止めるな! PacemakerによるコンテナHAクラスタリングとKubernetesとの違いとは
コンテナを止めるな!  PacemakerによるコンテナHAクラスタリングとKubernetesとの違いとはコンテナを止めるな!  PacemakerによるコンテナHAクラスタリングとKubernetesとの違いとは
コンテナを止めるな! PacemakerによるコンテナHAクラスタリングとKubernetesとの違いとは
 
P4によるデータプレーンプログラミングとユースケースのご紹介
P4によるデータプレーンプログラミングとユースケースのご紹介P4によるデータプレーンプログラミングとユースケースのご紹介
P4によるデータプレーンプログラミングとユースケースのご紹介
 
明日からはじめるネットワーク運用自動化
明日からはじめるネットワーク運用自動化明日からはじめるネットワーク運用自動化
明日からはじめるネットワーク運用自動化
 

Viewers also liked

プログラム初心者がWebサービスをリリースして運営するまで
プログラム初心者がWebサービスをリリースして運営するまでプログラム初心者がWebサービスをリリースして運営するまで
プログラム初心者がWebサービスをリリースして運営するまで
Tomoaki Iwasaki
 
Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3
Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3
Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3
Toshiaki Maki
 

Viewers also liked (20)

Java8 Stream APIとApache SparkとAsakusa Frameworkの類似点・相違点
Java8 Stream APIとApache SparkとAsakusa Frameworkの類似点・相違点Java8 Stream APIとApache SparkとAsakusa Frameworkの類似点・相違点
Java8 Stream APIとApache SparkとAsakusa Frameworkの類似点・相違点
 
【こっそり始める】Javaプログラマコーディングマイグレーション
【こっそり始める】Javaプログラマコーディングマイグレーション【こっそり始める】Javaプログラマコーディングマイグレーション
【こっそり始める】Javaプログラマコーディングマイグレーション
 
よくある業務開発の自動化事情 #jjug_ccc #ccc_cd3
よくある業務開発の自動化事情 #jjug_ccc #ccc_cd3よくある業務開発の自動化事情 #jjug_ccc #ccc_cd3
よくある業務開発の自動化事情 #jjug_ccc #ccc_cd3
 
Real world machine learning with Java for Fumankaitori.com
Real world machine learning with Java for Fumankaitori.comReal world machine learning with Java for Fumankaitori.com
Real world machine learning with Java for Fumankaitori.com
 
日本 Java ユーザーグループ JJUG CCC 2015 Fall by ソラコム 片山
日本 Java ユーザーグループ JJUG CCC 2015 Fall  by ソラコム 片山 日本 Java ユーザーグループ JJUG CCC 2015 Fall  by ソラコム 片山
日本 Java ユーザーグループ JJUG CCC 2015 Fall by ソラコム 片山
 
プログラム初心者がWebサービスをリリースして運営するまで
プログラム初心者がWebサービスをリリースして運営するまでプログラム初心者がWebサービスをリリースして運営するまで
プログラム初心者がWebサービスをリリースして運営するまで
 
デバッガのしくみ(JDI)を学んでみよう
デバッガのしくみ(JDI)を学んでみようデバッガのしくみ(JDI)を学んでみよう
デバッガのしくみ(JDI)を学んでみよう
 
Java8移行から始めた技術的負債との戦い(jjug ccc 2015 fall)
Java8移行から始めた技術的負債との戦い(jjug ccc 2015 fall)Java8移行から始めた技術的負債との戦い(jjug ccc 2015 fall)
Java8移行から始めた技術的負債との戦い(jjug ccc 2015 fall)
 
Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3
Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3
Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3
 
Java EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 FallJava EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 Fall
 
マイクロサービスアーキテクチャ - アーキテクチャ設計の歴史を背景に
マイクロサービスアーキテクチャ - アーキテクチャ設計の歴史を背景にマイクロサービスアーキテクチャ - アーキテクチャ設計の歴史を背景に
マイクロサービスアーキテクチャ - アーキテクチャ設計の歴史を背景に
 
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-
 
Getting start Java EE Action-Based MVC with Thymeleaf
Getting start Java EE Action-Based MVC with ThymeleafGetting start Java EE Action-Based MVC with Thymeleaf
Getting start Java EE Action-Based MVC with Thymeleaf
 
Jjugccc2017spring-postgres-ccc_m1
Jjugccc2017spring-postgres-ccc_m1Jjugccc2017spring-postgres-ccc_m1
Jjugccc2017spring-postgres-ccc_m1
 
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
 
U-NEXT学生インターン、過激なJavaの学び方と過激な要求
U-NEXT学生インターン、過激なJavaの学び方と過激な要求U-NEXT学生インターン、過激なJavaの学び方と過激な要求
U-NEXT学生インターン、過激なJavaの学び方と過激な要求
 
Arachne Unweaved (JP)
Arachne Unweaved (JP)Arachne Unweaved (JP)
Arachne Unweaved (JP)
 
VMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VMVMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VM
 
2017spring jjug ccc_f2
2017spring jjug ccc_f22017spring jjug ccc_f2
2017spring jjug ccc_f2
 
Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.
 

Similar to Javaにおけるネイティブコード連携の各種手法の紹介

福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介
Mori Shingo
 
Jenkinsを使おうよ
Jenkinsを使おうよJenkinsを使おうよ
Jenkinsを使おうよ
Yohei Oda
 

Similar to Javaにおけるネイティブコード連携の各種手法の紹介 (20)

ngCore engine for mobage platform
ngCore engine for mobage platformngCore engine for mobage platform
ngCore engine for mobage platform
 
2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて
 
【16-D-4】3分ではじめるスマホアプリのビジュアル開発
【16-D-4】3分ではじめるスマホアプリのビジュアル開発【16-D-4】3分ではじめるスマホアプリのビジュアル開発
【16-D-4】3分ではじめるスマホアプリのビジュアル開発
 
20140315 JAWS Days OpsWorks
20140315 JAWS Days OpsWorks20140315 JAWS Days OpsWorks
20140315 JAWS Days OpsWorks
 
福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介
 
スマホ(Android・iPhone)でWebRTC
スマホ(Android・iPhone)でWebRTCスマホ(Android・iPhone)でWebRTC
スマホ(Android・iPhone)でWebRTC
 
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
 
Jenkinsを使おうよ
Jenkinsを使おうよJenkinsを使おうよ
Jenkinsを使おうよ
 
5minQues - SWET近況報告
5minQues - SWET近況報告5minQues - SWET近況報告
5minQues - SWET近況報告
 
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
 
PhoneGapでWebアプリをスマホアプリ化
PhoneGapでWebアプリをスマホアプリ化PhoneGapでWebアプリをスマホアプリ化
PhoneGapでWebアプリをスマホアプリ化
 
SkyWay国内唯一のCPaaS
SkyWay国内唯一のCPaaSSkyWay国内唯一のCPaaS
SkyWay国内唯一のCPaaS
 
20150421 Geeks Night @ Money Foward
20150421 Geeks Night @ Money Foward20150421 Geeks Night @ Money Foward
20150421 Geeks Night @ Money Foward
 
福岡開発立ち上げQAメンバーが語るメルカリQAのはじめかた
福岡開発立ち上げQAメンバーが語るメルカリQAのはじめかた福岡開発立ち上げQAメンバーが語るメルカリQAのはじめかた
福岡開発立ち上げQAメンバーが語るメルカリQAのはじめかた
 
Platform io で シュッと arduino 開発を高速化しよう speed up your arduino development with p...
Platform io で シュッと arduino 開発を高速化しよう speed up your arduino development with p...Platform io で シュッと arduino 開発を高速化しよう speed up your arduino development with p...
Platform io で シュッと arduino 開発を高速化しよう speed up your arduino development with p...
 
スマートフォンアプリケーション開発の最新動向
スマートフォンアプリケーション開発の最新動向スマートフォンアプリケーション開発の最新動向
スマートフォンアプリケーション開発の最新動向
 
Open STF Plugin 作ってみた
Open STF Plugin 作ってみたOpen STF Plugin 作ってみた
Open STF Plugin 作ってみた
 
開発技術対決! Dots.カンファレンス エキシビジョン iOS代表
開発技術対決! Dots.カンファレンス エキシビジョン iOS代表開発技術対決! Dots.カンファレンス エキシビジョン iOS代表
開発技術対決! Dots.カンファレンス エキシビジョン iOS代表
 
Unityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechconUnityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechcon
 
.NET Coreから概観する.NETのOSSへの取り組み
.NET Coreから概観する.NETのOSSへの取り組み.NET Coreから概観する.NETのOSSへの取り組み
.NET Coreから概観する.NETのOSSへの取り組み
 

Recently uploaded

Recently uploaded (12)

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

Javaにおけるネイティブコード連携の各種手法の紹介