SlideShare a Scribd company logo
1 of 92
#ccc_i3 1
阪田 浩一 (さかた こういち)
@jyukutyo じゅくちょー
フリュー株式会社
元塾講師アルバイト
関西Javaエンジニアの会(関ジャバ) 会長
2009年 発足 / メンバー数 500人以上
SIでの客先常駐 9年 / 自社サービス 5年目
blog : Fight the Future http://jyukutyo.hatenablog.com
JJUG CCCでは2016 Spring、2015 Springで登壇
今日のゴール
みなさんがバイトコードと
トモダチになること!!
#ccc_i61 2
具体的には
#ccc_j3 3
今日のゴール
#ccc_j3 4
対象
Javaプログラマかつ
バイトコード操作?な方
提供したい
こと
バイトコード操作ライブラリ
を使ってJavaエージェントを
実装する方法
まずはJavaにおける
バイトコードとは、
について
#ccc_j3 5
バイトコードって?
バイトコード (bytecode)は、
仮想マシンによる実行のために
設計された、実行可能なプログラムの
バイナリ表現である。
https://ja.wikipedia.org/wiki/バイトコード
#ccc_j3 6
#ccc_j3 7
Java
Scala
JRuby
Groovy
C
o
m
p
i
l
e
r
Class
file
cafe babe
0000 0032
0017 0100
JVM
Class
file
Class
file
Class
file
Class
file
Class
file
 実行
 インタープリタ
 バイトコードを
ネイティブ
マシンコードに
コンパイル
(JITコンパイル)
大雑把に言うと、
Javaにおける
バイトコードは、
クラスファイルにある
#ccc_j3 8
クラスファイルを
読んだことが
ある人!
#ccc_j3 9
#ccc_j3 10
cafe babe 0000 0032 0017 0100 0a48 656c
6c6f 576f 726c 6407 0001 0100 106a 6176
612f 6c61 6e67 2f4f 626a 6563 7407 0003
0100 1048 656c 6c6f 576f 726c 642e 7363
616c 6101 001e 4c73 6361 6c61 2f72 6566
6c65 6374 2f53 6361 6c61 5369 676e 6174
7572 653b 0100 0562 7974 6573 0100 ef06
0115 3a51 2101 0209 0215 0921 0253 336d
593e 3c76 4e1d 3765 1505 1911 6102 1f66
5b42 2418 5050 0201 2109 3171 2144 0103
0d15 4121 0123 010a 0529 4155 0d1c 3770
...(Emacsのhexl-find-fileなどで開く)
これ、HelloWorldの
クラスファイルです
#ccc_j3 11
ここにはクラスの
さまざまな情報が
含まれます
#ccc_j3 12
このバイナリを
正しく書き換えれば、
処理を変えらえる
#ccc_j3 13
ソースコードを
変えることなく
処理を変えられる
#ccc_j3 14
#ccc_j3 15
cafe babe 0000 0032 0017 0100 0a48 656c
6c6f 576f 726c 6407 0001 0100 106a 6176
612f 6c61 6e67 2f4f 626a 6563 7407 0003
0100 1048 656c 6c6f 576f 726c 642e 7363
616c 6101 001e 4c73 6361 6c61 2f72 6566
6c65 6374 2f53 6361 6c61 5369 676e 6174
7572 653b 0100 0562 7974 6573 0100 ef06
0115 3a51 2101 0209 0215 0921 0253 336d
593e 3c76 4e1d 3765 1505 1911 6102 1f66
5b42 2418 5050 0201 2109 3171 2144 0103
0d15 4121 0123 010a 0529 4155 0d1c 3770
...
さあ
1つずつ手で書き換えて、
温かみのある
バイトコードを作ろう!
#ccc_j3 16
書き換えるプログラム
を自分で書くことすら
困難…
#ccc_j3 17
ライブラリがあります
Javassist – Seasar2やHibernate
Byteman – JBossやHibernate
cglib – SpringやMockito
Byte Buddy – MockitoやSpock
ObjectWeb ASM – GuiceやSpock
BCEL – 最近は使われていない?
などなどたくさん
#ccc_j3 18
後ほど
詳しく説明します
#ccc_j3 19
補足:javapコマンド
javap
Javaクラスファイル逆アセンブラ
JDKに含まれる
`javap -v [完全修飾クラス名]`
#ccc_j3 20
javap -v HelloWorld
#ccc_j3 21
#ccc_j3 22
public class HelloWorld
minor version: 0
major version: 52
Constant pool:
#1 = Methodref #6.#15 //
java/lang/Object."<init>":()V
#2 = Fieldref #16.#17 //
java/lang/System.out:Ljava/io/PrintStream;
#3 = String #18 //
Hello, world!
#4 = Methodref #19.#20 //
java/io/PrintStream.println:(Ljava/lang/Strin
g;)V
...
#ccc_j3 23
...
public static void
main(java.lang.String[]);
Code:
0: getstatic #2
3: ldc #3
5: invokevirtual #4
8: return
-- #0 = index of Constant pool
...
人に優しい表現で
バイトコードを
見れます
#ccc_j3 24
さて、バイトコードの
書き換えに戻ります
#ccc_j3 25
いつバイトコードを
書き換える?
実行時
たとえばJava Agentで
ビルド時
たとえばMavenやGradleのプラグイン、
Antタスクで
#ccc_j3 26
Java Agent
#ccc_j3 27
“「エージェント」は、
Javaのアプリケーション
とは独立して動作する
コンポーネント”
#ccc_j3 28
http://itpro.nikkeibp.co.jp/article/COLUMN/20061208/256
374/
Java Agent
#ccc_j3 29
まず
エージェント
クラス
#ccc_j3 30
#ccc_j3 31
import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.Instrumentation;
public class Agent {
public static void premain(String agentArgs,
Instrumentation inst) {
inst.addTransformer(new ClassFileTransformer() {
@Override
public byte[] transform(ClassLoader loader,
String className,
Class<?> classBeingRedefined,
ProtectionDomain protectionDomain,
byte[] classfileBuffer)
throws IllegalClassFormatException {
// ライブラリを使ってクラスの処理を変更する!
}
});
}
}
premain()は
main()の前に
呼び出される
#ccc_j3 32
ClassFile
Transformerを
実装して
変換処理を書く
#ccc_j3 33
Instrument API
で定義されている
#ccc_j3 34
https://docs.oracle.com/javase/jp/7/api/java/lang/instr
ument/package-summary.html
Java Agent
#ccc_j3 35
MANIFEST.MF
#ccc_j3 36
MANIFEST.MF
Premain-Class
premain()メソッドを実装したクラスを
指定する
#ccc_j3 37
MANIFEST.MF
Boot-Class-Path
ブートストラップクラスローダーで
検索されるパスのリスト
エージェントが他のライブラリのクラスを使う
ときに、JARファイルを指定する
相対パスはエージェントのJARがある
ディレクトリが起点となる
#ccc_j3 38
#ccc_j3 39
META-INF/MANIFEST.MF
Manifest-Version: 1.0
Premain-Class: com.jyukutyo.Agent
Boot-Class-Path: javassist-3.21.0-GA.jar
Created-By: Apache Maven 3.2.2
Build-Jdk: 1.8.0_102
今まで学んだことを
試してみる
#ccc_j3 40
#ccc_j3 41
public class Agent {
public static void premain(String agentArgs,
Instrumentation inst) {
inst.addTransformer(new ClassFileTransformer() {
@Override
public byte[] transform(..,
String className,..)
{
System.out.println(className);
...
}
});
}
}
MANIFEST.MFを
作成して、
エージェントを
JARに固める
#ccc_j3 42
HelloWorldに
エージェントを適用
java -javaagent:
agent.jar
example.HelloWorld
#ccc_j3 43
#ccc_j3 44
java/lang/invoke/MethodHandleImpl
...
java/lang/invoke/MemberName$Factory
java/lang/invoke/MethodHandleStatics
java/lang/invoke/MethodHandleStatics$1
sun/misc/PostVMInitHook
sun/usagetracker/UsageTrackerClient
java/util/concurrent/atomic/AtomicBoolean
...
sun/launcher/LauncherHelper
example/HelloWorld
sun/launcher/LauncherHelper$FXHelper
java/lang/Class$MethodArray
java/lang/Void
Hello World!
...
あとは
ライブラリを使って
クラスを変更する!
(ClassFile
Transformer内)
#ccc_j3 45
Javassistを
使ってみよう
#ccc_j3 46
メソッドの引数と
戻り値の型を
出力する処理を
追加する
#ccc_j3 47
#ccc_j3 48
public class Agent {
public static void premain(...) {
inst.addTransformer(new ClassFileTransformer() {
public byte[] transform(...,
byte[] classfile) {
...
ClassPool cp = ClassPool.getDefault();
try {
CtClass ct = cp.makeClass(
new ByteArrayInputStream(classfile));
for (CtMethod cm: ct.getDeclaredMethods()) {
cm.insertBefore("System.out.println($args);
System.out.println($type);");
}
return ct.toBytecode();
} catch (IOException | CannotCompileException
e) {
...
HelloWorldに
エージェントを適用
java -javaagent:
agent.jar
example.HelloWorld
#ccc_j3 49
#ccc_j3 50
[Ljava.lang.Object;@754ba872
void
Hello World!
Javassistを
かじって解説
#ccc_j3 51
Javassit
#ccc_j3 52
#ccc_j3 53
ClassPool cp = ClassPool.getDefault();
try {
CtClass ct = cp.makeClass(
new ByteArrayInputStream(classfile));
クラスファイルの
バイトコードを表す
バイト配列から
CtClassを生成
#ccc_j3 54
for (CtMethod cm: ct.getDeclaredMethods()) {
cm.insertBefore("System.out.println($args);
System.out.println($type);");
}
CtClassからCtMethodを
取得して、
処理の前にprintln()を
2行挿入
$始まりは特別な意味がある
#ccc_j3 55
$args パラメータのObject配列
$type
戻り値のjava.lang.Class
オブジェクト
$class
編集しているクラスの
Classオブジェクト
$_ 結果となる値
など https://jboss-
javassist.github.io/javassist/tutorial/tutorial2.
html
Javassitを
利用しているOSS
#ccc_j3 56
Hibernate
#ccc_j3 57
public synchronized byte[] enhance(String className,
byte[] originalBytes) throws EnhancementException {
try {
final CtClass managedCtClass =
classPool.makeClassIfNew(
new ByteArrayInputStream(originalBytes));
if (enhance(managedCtClass)) {
return getByteCode(managedCtClass);
} else {
return null;
}
} catch (IOException e) {
log.unableToBuildEnhancementMetamodel(className);
return null;
}
}
org.hibernate.bytecode.enhance.internal.javassist.EnhancerImpl
なんとなく
読めるようになる
#ccc_j3 58
Javaエージェントを
利用しているOSS
#ccc_j3 59
JMockit
#ccc_j3 60
public static void premain(String agentArgs,
@Nonnull Instrumentation inst) throws IOException
{
initialize(true, inst);
}
mockit.internal.startup.Startup
その他のバイトコード
操作ライブラリを解説
#ccc_j3 61
ライブラリ
Byteman
cglib
Byte Buddy
ObjectWeb ASM
BCEL
などなどたくさん
#ccc_j3 62
(Javassitで
見たように)
バイトコード操作の
プログラミングは
面倒
#ccc_j3 63
Byteman
変更内容をファイルに書く(Rule)
Ruleは独自の構文で書く
#ccc_j3 64
BytemanのRule
#ccc_j3 65
RULE hello world
CLASS com.jyukutyo.Main
METHOD main
AT ENTRY
IF TRUE
DO traceStack()
ENDRULE
任意のRule名
スタックトレースを出力する
#ccc_j3 66
$ java
-javaagent:byteman-3.0.6.jar=script:rule.btm
com.jyukutyo.Main
(実際は1行)
Stack trace for thread main
com.jyukutyo.Main.main(Main.java:-1)
Hello World!
Ruleファイル
Byte Buddy
2015 Duke’s Choice Award
使いやすい
流れるようにバイトコードを
変更できる
#ccc_j3 67
エージェントの実装
#ccc_j3 68
public class Agent {
public static void premain(String agentArgs,
Instrumentation inst) {
new AgentBuilder.Default()
.type(ElementMatchers.any())
.transform(new AgentBuilder.Transformer() {
@Override
public DynamicType.Builder
transform(DynamicType.Builder builder,
TypeDescription typeDescription,
ClassLoader classloader) {
return builder.method(
ElementMatchers.named("toString"))
.intercept(
FixedValue.value("transformed"));
}
}).installOn(inst);
}
}
すべてのクラスの
toString()を
インターセプト。
transformという
文字列にする
#ccc_j3 69
#ccc_j3 70
$ java com.jyukutyo.Main
toString() is called.
$ java -javaagent:agent.jar com.jyukutyo.Main
transformed
エージェントの実装(再掲)
#ccc_j3 71
public class Agent {
public static void premain(String agentArgs,
Instrumentation inst) {
new AgentBuilder.Default()
.type(ElementMatchers.any())
.transform(new AgentBuilder.Transformer() {
@Override
public DynamicType.Builder
transform(DynamicType.Builder builder,
TypeDescription typeDescription,
ClassLoader classloader) {
return builder.method(
ElementMatchers.named("toString"))
.intercept(
FixedValue.value("transformed"));
}
}).installOn(inst);
}
}
応用編
実行中の
Webアプリケーションで
クラスを変更する
デモ
#ccc_j3 72
Attach APIを
組み合わせれば、
実行中のプログラムも
変更できる
#ccc_j3 73
Attach API
起動中のJVMに接続するためのAPI
com.sun.tools.attach
com.sun.tools.attach.spi
なのでHotSpot VMのみ
#ccc_j3 74
使うもの
Byte Buddy
Javaエージェント
Attach API
#ccc_j3 75
Byte Buddyには
ByteBuddyAgent
という用意された
クラスがありますが、
#ccc_j3 76
ここでは学習のため
自作します
#ccc_j3 77
まずAttach APIに
ついて
#ccc_j3 78
#ccc_j3 79
VirtualMachine vm =
VirtualMachine.attach(”9999");
vm.loadAgent(“agent.jar");
vm.detach();
pidを指定する
これでエージェントが
ロードされる
エージェントの
ロードは
同一マシンかつ
同一ユーザの場合のみ
#ccc_j3 80
注:
Attach APIを使うには、
コンパイル/実行時
クラスパスに
tools.jarが必要
#ccc_j3 81
デモ内容
Spring Boot Webアプリケーション
/testで”hello”を出力するだけの
アプリケーション
エージェントで出力を”transformed”に
変更する
#ccc_j3 82
SpringのController
#ccc_j3 83
@Controller
public class TestController {
@ResponseBody
@RequestMapping(value = "test",
method = RequestMethod.GET)
public String index() {
return "hello";
}
}
エージェントの実装
#ccc_j3 84
public static void agentmain(... inst) {
...
String target = "com.jyukutyo.TestController”;
ByteBuddy byteBuddy = new ByteBuddy();
byteBuddy.redefine(TypePool.Default.of(classLoader)
.describe(target).resolve(),
ClassFileLocator.ForClassLoader.of(classLoader))
.method(ElementMatchers.named("index"))
.intercept(FixedValue.value("transformed"))
.make()
.load(classLoader,
ClassReloadingStrategy.of(inst));
new AgentBuilder.Default().with(byteBuddy)
.installOn(inst);
}
#ccc_j3 85
public static void agentmain(
String agentArgs, Instrumentation inst) throws Exception {
VM起動中にエージェントを
ロードさせたい場合は
premain()ではなく
agentmain()を定義する
#ccc_j3 86
.method(ElementMatchers.named("index"))
.intercept(FixedValue.value("transformed"))
index()の戻り値を
“transformed”に
変える
#ccc_j3 87
MANIFEST.MF
...
Agent-Class: com.jyukutyo.Agent
Can-Retransform-Classes: true
クラスローダにすでに
ロードされたクラスを
変更するので、
上記設定を追加する
#ccc_j3 88
1. mvn spring-boot:run
2. http://localhost:8080/test
3. java -cp
/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Conte
nts/Home/lib/tools.jar:. com.jyukutyo.Main [pid]
4. http://localhost:8080/test
デモ
まとめ
バイトコードを書き換えることで
処理を変えられる
バイトコードを操作するライブラリ
がある - Byte Buddy便利
Javaエージェントを使うと書き換える
のによいタイミングがある
Attach APIを使えば実行中でも
書き換えられる
#ccc_j3 89
ご清聴
ありがとうございました!
#ccc_j3 90
Q&A
#ccc_j3 91

More Related Content

What's hot

ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところY Watanabe
 
20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介
20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介
20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介Yuki Fujisawa
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Tokuhiro Matsuno
 
Spring Bootでチャットツールを作りながらWebの仕組みを理解しよう!
Spring Bootでチャットツールを作りながらWebの仕組みを理解しよう!Spring Bootでチャットツールを作りながらWebの仕組みを理解しよう!
Spring Bootでチャットツールを作りながらWebの仕組みを理解しよう!Java女子部
 
ES6で始めるNode.js / Starting NodeJS Development with ES6
ES6で始めるNode.js / Starting NodeJS Development with ES6ES6で始めるNode.js / Starting NodeJS Development with ES6
ES6で始めるNode.js / Starting NodeJS Development with ES6Taro Odashima
 
Web技術勉強会 第31回
Web技術勉強会 第31回Web技術勉強会 第31回
Web技術勉強会 第31回龍一 田中
 
Java初心者がJava8のラムダ式をやってみた
Java初心者がJava8のラムダ式をやってみたJava初心者がJava8のラムダ式をやってみた
Java初心者がJava8のラムダ式をやってみたAya Ebata
 
AngularJS2でつまづいたこと
AngularJS2でつまづいたことAngularJS2でつまづいたこと
AngularJS2でつまづいたことTakehiro Takahashi
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011Hiroh Satoh
 
Java web application testing
Java web application testingJava web application testing
Java web application testingTokuhiro Matsuno
 
JavaEE7徹底入門 プレゼンテーション層の開発 JSF
JavaEE7徹底入門 プレゼンテーション層の開発 JSFJavaEE7徹底入門 プレゼンテーション層の開発 JSF
JavaEE7徹底入門 プレゼンテーション層の開発 JSFMasuji Katoda
 
Java デバッガ活用術 ~勘デバッグ・print デバッグから抜けだそう~ #jjug_ccc #ccc_h4
Java デバッガ活用術 ~勘デバッグ・print デバッグから抜けだそう~ #jjug_ccc #ccc_h4Java デバッガ活用術 ~勘デバッグ・print デバッグから抜けだそう~ #jjug_ccc #ccc_h4
Java デバッガ活用術 ~勘デバッグ・print デバッグから抜けだそう~ #jjug_ccc #ccc_h4Yusuke Yamamoto
 
大規模なJavaScript開発の話
大規模なJavaScript開発の話大規模なJavaScript開発の話
大規模なJavaScript開発の話terurou
 
TypeScriptへの入口
TypeScriptへの入口TypeScriptへの入口
TypeScriptへの入口Sunao Tomita
 
Mavenへのはじめの一歩
Mavenへのはじめの一歩Mavenへのはじめの一歩
Mavenへのはじめの一歩祐理 大野
 
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみるづや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみるzuya
 
映画にでてくるハッカーになりたい - YAPC Asia 2010
映画にでてくるハッカーになりたい - YAPC Asia 2010映画にでてくるハッカーになりたい - YAPC Asia 2010
映画にでてくるハッカーになりたい - YAPC Asia 2010Hiroh Satoh
 
Seasar2で作った俺たちのサービスの今
Seasar2で作った俺たちのサービスの今Seasar2で作った俺たちのサービスの今
Seasar2で作った俺たちのサービスの今Koichi Sakata
 
JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介Yusuke Hirao
 

What's hot (20)

ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
 
20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介
20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介
20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
 
Spring Bootでチャットツールを作りながらWebの仕組みを理解しよう!
Spring Bootでチャットツールを作りながらWebの仕組みを理解しよう!Spring Bootでチャットツールを作りながらWebの仕組みを理解しよう!
Spring Bootでチャットツールを作りながらWebの仕組みを理解しよう!
 
ES6で始めるNode.js / Starting NodeJS Development with ES6
ES6で始めるNode.js / Starting NodeJS Development with ES6ES6で始めるNode.js / Starting NodeJS Development with ES6
ES6で始めるNode.js / Starting NodeJS Development with ES6
 
Web技術勉強会 第31回
Web技術勉強会 第31回Web技術勉強会 第31回
Web技術勉強会 第31回
 
Java初心者がJava8のラムダ式をやってみた
Java初心者がJava8のラムダ式をやってみたJava初心者がJava8のラムダ式をやってみた
Java初心者がJava8のラムダ式をやってみた
 
AngularJS2でつまづいたこと
AngularJS2でつまづいたことAngularJS2でつまづいたこと
AngularJS2でつまづいたこと
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
 
Java web application testing
Java web application testingJava web application testing
Java web application testing
 
JavaEE7徹底入門 プレゼンテーション層の開発 JSF
JavaEE7徹底入門 プレゼンテーション層の開発 JSFJavaEE7徹底入門 プレゼンテーション層の開発 JSF
JavaEE7徹底入門 プレゼンテーション層の開発 JSF
 
Java デバッガ活用術 ~勘デバッグ・print デバッグから抜けだそう~ #jjug_ccc #ccc_h4
Java デバッガ活用術 ~勘デバッグ・print デバッグから抜けだそう~ #jjug_ccc #ccc_h4Java デバッガ活用術 ~勘デバッグ・print デバッグから抜けだそう~ #jjug_ccc #ccc_h4
Java デバッガ活用術 ~勘デバッグ・print デバッグから抜けだそう~ #jjug_ccc #ccc_h4
 
大規模なJavaScript開発の話
大規模なJavaScript開発の話大規模なJavaScript開発の話
大規模なJavaScript開発の話
 
TypeScriptへの入口
TypeScriptへの入口TypeScriptへの入口
TypeScriptへの入口
 
Mavenへのはじめの一歩
Mavenへのはじめの一歩Mavenへのはじめの一歩
Mavenへのはじめの一歩
 
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみるづや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
 
映画にでてくるハッカーになりたい - YAPC Asia 2010
映画にでてくるハッカーになりたい - YAPC Asia 2010映画にでてくるハッカーになりたい - YAPC Asia 2010
映画にでてくるハッカーになりたい - YAPC Asia 2010
 
Maven基礎
Maven基礎Maven基礎
Maven基礎
 
Seasar2で作った俺たちのサービスの今
Seasar2で作った俺たちのサービスの今Seasar2で作った俺たちのサービスの今
Seasar2で作った俺たちのサービスの今
 
JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介
 

Viewers also liked

Pragmatic extreme programming
Pragmatic extreme programmingPragmatic extreme programming
Pragmatic extreme programmingjuvenxu
 
Central Dogma LINE's Git-backed highly-available service configuration reposi...
Central Dogma LINE's Git-backed highly-available service configuration reposi...Central Dogma LINE's Git-backed highly-available service configuration reposi...
Central Dogma LINE's Git-backed highly-available service configuration reposi...LINE Corporation
 
Parallel Selenium Test With Docker
Parallel Selenium Test With DockerParallel Selenium Test With Docker
Parallel Selenium Test With DockerLINE Corporation
 
AliExpress’ Way to Microservices - microXchg 2017
AliExpress’ Way to Microservices  - microXchg 2017AliExpress’ Way to Microservices  - microXchg 2017
AliExpress’ Way to Microservices - microXchg 2017juvenxu
 
A 9 line shop powered by armeria
A 9 line shop powered by armeriaA 9 line shop powered by armeria
A 9 line shop powered by armeriaLINE Corporation
 
A 3 difficult challenges that line has overcome
A 3 difficult challenges that line has overcomeA 3 difficult challenges that line has overcome
A 3 difficult challenges that line has overcomeLINE Corporation
 
LINE Login - new features and mechanism
LINE Login - new features and mechanismLINE Login - new features and mechanism
LINE Login - new features and mechanismLINE Corporation
 
Creators Studio Trimming Tool
Creators Studio Trimming ToolCreators Studio Trimming Tool
Creators Studio Trimming ToolLINE Corporation
 
Data Processing behind LINE Game Platform
Data Processing behind LINE Game PlatformData Processing behind LINE Game Platform
Data Processing behind LINE Game PlatformLINE Corporation
 
Zookeeper In Action
Zookeeper In ActionZookeeper In Action
Zookeeper In Actionjuvenxu
 
Data analysis for security The log analysis platform Monolith and spam count...
Data analysis for security  The log analysis platform Monolith and spam count...Data analysis for security  The log analysis platform Monolith and spam count...
Data analysis for security The log analysis platform Monolith and spam count...LINE Corporation
 
Paying back technical debt - A case study of LINE Android client -
Paying back technical debt - A case study of LINE Android client -Paying back technical debt - A case study of LINE Android client -
Paying back technical debt - A case study of LINE Android client -LINE Corporation
 
Kafka Summit SF 2017 - One Day, One Data Hub, 100 Billion Messages: Kafka at ...
Kafka Summit SF 2017 - One Day, One Data Hub, 100 Billion Messages: Kafka at ...Kafka Summit SF 2017 - One Day, One Data Hub, 100 Billion Messages: Kafka at ...
Kafka Summit SF 2017 - One Day, One Data Hub, 100 Billion Messages: Kafka at ...confluent
 
開発チームが安定したプロダクトマネジメントを実現するための7つのルール
開発チームが安定したプロダクトマネジメントを実現するための7つのルール開発チームが安定したプロダクトマネジメントを実現するための7つのルール
開発チームが安定したプロダクトマネジメントを実現するための7つのルールLINE Corporation
 
LINE Ads PlatformのCTRを2倍にした開発手法
LINE Ads PlatformのCTRを2倍にした開発手法LINE Ads PlatformのCTRを2倍にした開発手法
LINE Ads PlatformのCTRを2倍にした開発手法LINE Corporation
 

Viewers also liked (20)

Pragmatic extreme programming
Pragmatic extreme programmingPragmatic extreme programming
Pragmatic extreme programming
 
Central Dogma LINE's Git-backed highly-available service configuration reposi...
Central Dogma LINE's Git-backed highly-available service configuration reposi...Central Dogma LINE's Git-backed highly-available service configuration reposi...
Central Dogma LINE's Git-backed highly-available service configuration reposi...
 
Parallel Selenium Test With Docker
Parallel Selenium Test With DockerParallel Selenium Test With Docker
Parallel Selenium Test With Docker
 
AliExpress’ Way to Microservices - microXchg 2017
AliExpress’ Way to Microservices  - microXchg 2017AliExpress’ Way to Microservices  - microXchg 2017
AliExpress’ Way to Microservices - microXchg 2017
 
Verda Cloud Family
Verda Cloud FamilyVerda Cloud Family
Verda Cloud Family
 
A 9 line shop powered by armeria
A 9 line shop powered by armeriaA 9 line shop powered by armeria
A 9 line shop powered by armeria
 
A 3 difficult challenges that line has overcome
A 3 difficult challenges that line has overcomeA 3 difficult challenges that line has overcome
A 3 difficult challenges that line has overcome
 
LINE Login - new features and mechanism
LINE Login - new features and mechanismLINE Login - new features and mechanism
LINE Login - new features and mechanism
 
Creators Studio Trimming Tool
Creators Studio Trimming ToolCreators Studio Trimming Tool
Creators Studio Trimming Tool
 
Data Processing behind LINE Game Platform
Data Processing behind LINE Game PlatformData Processing behind LINE Game Platform
Data Processing behind LINE Game Platform
 
Zookeeper In Action
Zookeeper In ActionZookeeper In Action
Zookeeper In Action
 
PIP in LINE iOS
PIP in LINE iOSPIP in LINE iOS
PIP in LINE iOS
 
Data analysis for security The log analysis platform Monolith and spam count...
Data analysis for security  The log analysis platform Monolith and spam count...Data analysis for security  The log analysis platform Monolith and spam count...
Data analysis for security The log analysis platform Monolith and spam count...
 
Paying back technical debt - A case study of LINE Android client -
Paying back technical debt - A case study of LINE Android client -Paying back technical debt - A case study of LINE Android client -
Paying back technical debt - A case study of LINE Android client -
 
Kafka Summit SF 2017 - One Day, One Data Hub, 100 Billion Messages: Kafka at ...
Kafka Summit SF 2017 - One Day, One Data Hub, 100 Billion Messages: Kafka at ...Kafka Summit SF 2017 - One Day, One Data Hub, 100 Billion Messages: Kafka at ...
Kafka Summit SF 2017 - One Day, One Data Hub, 100 Billion Messages: Kafka at ...
 
LINE Things
LINE ThingsLINE Things
LINE Things
 
LINE Square & Chatapp
LINE Square & ChatappLINE Square & Chatapp
LINE Square & Chatapp
 
In-app Web Framework
In-app Web FrameworkIn-app Web Framework
In-app Web Framework
 
開発チームが安定したプロダクトマネジメントを実現するための7つのルール
開発チームが安定したプロダクトマネジメントを実現するための7つのルール開発チームが安定したプロダクトマネジメントを実現するための7つのルール
開発チームが安定したプロダクトマネジメントを実現するための7つのルール
 
LINE Ads PlatformのCTRを2倍にした開発手法
LINE Ads PlatformのCTRを2倍にした開発手法LINE Ads PlatformのCTRを2倍にした開発手法
LINE Ads PlatformのCTRを2倍にした開発手法
 

Similar to JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている

JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1Y Watanabe
 
Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)Yuji Kubota
 
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
AngularとSpring Bootで作るSPA + RESTful Web ServiceアプリケーションAngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーションssuser070fa9
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門伸男 伊藤
 
EmitJSの環境をちょこっと調べた
EmitJSの環境をちょこっと調べたEmitJSの環境をちょこっと調べた
EmitJSの環境をちょこっと調べたkyon mm
 
20140517 knockoutjs hands-on
20140517 knockoutjs hands-on20140517 knockoutjs hands-on
20140517 knockoutjs hands-onSeiji Noro
 
JobStreamerではじめるJavaBatchのクラウド分散実行
JobStreamerではじめるJavaBatchのクラウド分散実行JobStreamerではじめるJavaBatchのクラウド分散実行
JobStreamerではじめるJavaBatchのクラウド分散実行Yoshitaka Kawashima
 
20140712 knockoutjs-hands-on-in-osaka
20140712 knockoutjs-hands-on-in-osaka20140712 knockoutjs-hands-on-in-osaka
20140712 knockoutjs-hands-on-in-osakaSeiji Noro
 
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にJava SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にTaku Miyakawa
 
VMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VMVMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VMyy yank
 
Assembly Tanka on Web - Aiko Kenji
Assembly Tanka on Web - Aiko KenjiAssembly Tanka on Web - Aiko Kenji
Assembly Tanka on Web - Aiko Kenjiasmtanka
 
20141017 introduce razor
20141017 introduce razor20141017 introduce razor
20141017 introduce razordo_aki
 
関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会Koichi Sakata
 
js-ctypes - ネイティブコードを呼び出す新しいカタチ
js-ctypes - ネイティブコードを呼び出す新しいカタチjs-ctypes - ネイティブコードを呼び出す新しいカタチ
js-ctypes - ネイティブコードを呼び出す新しいカタチMakoto Kato
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようAkira Shimosako
 
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発Yuta Matsumura
 
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜JustSystems Corporation
 
覚醒JavaScript -ES6で作るIsomophicアプリケーション-
覚醒JavaScript  -ES6で作るIsomophicアプリケーション-覚醒JavaScript  -ES6で作るIsomophicアプリケーション-
覚醒JavaScript -ES6で作るIsomophicアプリケーション-Oonishi Keitarou
 

Similar to JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている (20)

JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
 
Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)
 
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
AngularとSpring Bootで作るSPA + RESTful Web ServiceアプリケーションAngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
 
EmitJSの環境をちょこっと調べた
EmitJSの環境をちょこっと調べたEmitJSの環境をちょこっと調べた
EmitJSの環境をちょこっと調べた
 
20140517 knockoutjs hands-on
20140517 knockoutjs hands-on20140517 knockoutjs hands-on
20140517 knockoutjs hands-on
 
JobStreamerではじめるJavaBatchのクラウド分散実行
JobStreamerではじめるJavaBatchのクラウド分散実行JobStreamerではじめるJavaBatchのクラウド分散実行
JobStreamerではじめるJavaBatchのクラウド分散実行
 
20140712 knockoutjs-hands-on-in-osaka
20140712 knockoutjs-hands-on-in-osaka20140712 knockoutjs-hands-on-in-osaka
20140712 knockoutjs-hands-on-in-osaka
 
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にJava SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心に
 
VMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VMVMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VM
 
Assembly Tanka on Web - Aiko Kenji
Assembly Tanka on Web - Aiko KenjiAssembly Tanka on Web - Aiko Kenji
Assembly Tanka on Web - Aiko Kenji
 
20141017 introduce razor
20141017 introduce razor20141017 introduce razor
20141017 introduce razor
 
関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会
 
ゆるかわPhp
ゆるかわPhpゆるかわPhp
ゆるかわPhp
 
Embulk 20150411
Embulk 20150411Embulk 20150411
Embulk 20150411
 
js-ctypes - ネイティブコードを呼び出す新しいカタチ
js-ctypes - ネイティブコードを呼び出す新しいカタチjs-ctypes - ネイティブコードを呼び出す新しいカタチ
js-ctypes - ネイティブコードを呼び出す新しいカタチ
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
 
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
 
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
 
覚醒JavaScript -ES6で作るIsomophicアプリケーション-
覚醒JavaScript  -ES6で作るIsomophicアプリケーション-覚醒JavaScript  -ES6で作るIsomophicアプリケーション-
覚醒JavaScript -ES6で作るIsomophicアプリケーション-
 

More from Koichi Sakata

Introduction to JIT Compiler in JVM
Introduction to JIT Compiler in JVMIntroduction to JIT Compiler in JVM
Introduction to JIT Compiler in JVMKoichi Sakata
 
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)Koichi Sakata
 
Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)Koichi Sakata
 
Introduction to GraalVM and Native Image
Introduction to GraalVM and Native ImageIntroduction to GraalVM and Native Image
Introduction to GraalVM and Native ImageKoichi Sakata
 
Introduction to GraalVM
Introduction to GraalVMIntroduction to GraalVM
Introduction to GraalVMKoichi Sakata
 
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼうGraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼうKoichi Sakata
 
Bytecode Manipulation with a Java Agent and Byte Buddy
Bytecode Manipulation with a Java Agent and Byte BuddyBytecode Manipulation with a Java Agent and Byte Buddy
Bytecode Manipulation with a Java Agent and Byte BuddyKoichi Sakata
 
Great Ideas in GraalVM
Great Ideas in GraalVMGreat Ideas in GraalVM
Great Ideas in GraalVMKoichi Sakata
 
Graal in GraalVM - A New JIT Compiler
Graal in GraalVM - A New JIT CompilerGraal in GraalVM - A New JIT Compiler
Graal in GraalVM - A New JIT CompilerKoichi Sakata
 
Kanjava 201804 Java News
Kanjava 201804 Java NewsKanjava 201804 Java News
Kanjava 201804 Java NewsKoichi Sakata
 
KanJava 201804 Career 思い込みから逃れた先には、可能性がある
KanJava 201804 Career 思い込みから逃れた先には、可能性があるKanJava 201804 Career 思い込みから逃れた先には、可能性がある
KanJava 201804 Career 思い込みから逃れた先には、可能性があるKoichi Sakata
 
from Java EE to Jakarta EE
from Java EE to Jakarta EEfrom Java EE to Jakarta EE
from Java EE to Jakarta EEKoichi Sakata
 
Java release cadence has been changed and about Project Amber
Java release cadence has been changed and about Project AmberJava release cadence has been changed and about Project Amber
Java release cadence has been changed and about Project AmberKoichi Sakata
 
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみるJJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみるKoichi Sakata
 
KANJAVA PARTY 2017 前説
KANJAVA PARTY 2017 前説KANJAVA PARTY 2017 前説
KANJAVA PARTY 2017 前説Koichi Sakata
 
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めたJJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めたKoichi Sakata
 
“Purikura” culture in Japan and our web application architecture
“Purikura” culturein Japan andour web application architecture“Purikura” culturein Japan andour web application architecture
“Purikura” culture in Japan and our web application architectureKoichi Sakata
 
デブサミ2017 Javaコミュニティ作ったら人生変わった
デブサミ2017 Javaコミュニティ作ったら人生変わったデブサミ2017 Javaコミュニティ作ったら人生変わった
デブサミ2017 Javaコミュニティ作ったら人生変わったKoichi Sakata
 
日本からJavaOneに行こう!
日本からJavaOneに行こう!日本からJavaOneに行こう!
日本からJavaOneに行こう!Koichi Sakata
 
How Scala code is expressed in the JVM
How Scala code is expressed in the JVMHow Scala code is expressed in the JVM
How Scala code is expressed in the JVMKoichi Sakata
 

More from Koichi Sakata (20)

Introduction to JIT Compiler in JVM
Introduction to JIT Compiler in JVMIntroduction to JIT Compiler in JVM
Introduction to JIT Compiler in JVM
 
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
 
Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)
 
Introduction to GraalVM and Native Image
Introduction to GraalVM and Native ImageIntroduction to GraalVM and Native Image
Introduction to GraalVM and Native Image
 
Introduction to GraalVM
Introduction to GraalVMIntroduction to GraalVM
Introduction to GraalVM
 
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼうGraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
 
Bytecode Manipulation with a Java Agent and Byte Buddy
Bytecode Manipulation with a Java Agent and Byte BuddyBytecode Manipulation with a Java Agent and Byte Buddy
Bytecode Manipulation with a Java Agent and Byte Buddy
 
Great Ideas in GraalVM
Great Ideas in GraalVMGreat Ideas in GraalVM
Great Ideas in GraalVM
 
Graal in GraalVM - A New JIT Compiler
Graal in GraalVM - A New JIT CompilerGraal in GraalVM - A New JIT Compiler
Graal in GraalVM - A New JIT Compiler
 
Kanjava 201804 Java News
Kanjava 201804 Java NewsKanjava 201804 Java News
Kanjava 201804 Java News
 
KanJava 201804 Career 思い込みから逃れた先には、可能性がある
KanJava 201804 Career 思い込みから逃れた先には、可能性があるKanJava 201804 Career 思い込みから逃れた先には、可能性がある
KanJava 201804 Career 思い込みから逃れた先には、可能性がある
 
from Java EE to Jakarta EE
from Java EE to Jakarta EEfrom Java EE to Jakarta EE
from Java EE to Jakarta EE
 
Java release cadence has been changed and about Project Amber
Java release cadence has been changed and about Project AmberJava release cadence has been changed and about Project Amber
Java release cadence has been changed and about Project Amber
 
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみるJJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
 
KANJAVA PARTY 2017 前説
KANJAVA PARTY 2017 前説KANJAVA PARTY 2017 前説
KANJAVA PARTY 2017 前説
 
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めたJJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
 
“Purikura” culture in Japan and our web application architecture
“Purikura” culturein Japan andour web application architecture“Purikura” culturein Japan andour web application architecture
“Purikura” culture in Japan and our web application architecture
 
デブサミ2017 Javaコミュニティ作ったら人生変わった
デブサミ2017 Javaコミュニティ作ったら人生変わったデブサミ2017 Javaコミュニティ作ったら人生変わった
デブサミ2017 Javaコミュニティ作ったら人生変わった
 
日本からJavaOneに行こう!
日本からJavaOneに行こう!日本からJavaOneに行こう!
日本からJavaOneに行こう!
 
How Scala code is expressed in the JVM
How Scala code is expressed in the JVMHow Scala code is expressed in the JVM
How Scala code is expressed in the JVM
 

Recently uploaded

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 

Recently uploaded (9)

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 

JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている