SlideShare a Scribd company logo
1 of 28
Download to read offline
3
Bytecode DSL
& Indy
& Brainf*ck
G*Workshop Z 2013/09/20
上原潤二(NTTソフトウェア株式会社)
13年9月20日金曜日
JGGUG G*Workshop Z Copyright(C) NTT Software.
自己紹介
上原潤二(@uehaj)
NTTソフトウェア(株)Grails推進室
JGGUG(日本Grails/Groovyユーザグループ)運営委員
書籍:
プログラミングGROOVY(技術評論社)
Grails徹底入門(翔泳社)
ブログ「Grな日々」
GroovyServ, LispBuilder, GVM(JVM
written in Groovy)開発者
2
13年9月20日金曜日
JGGUG G*Workshop Z Copyright(C) NTT Software.
今日の内容
Indyの基礎
Bytecode DSL
Brainf*ckを実装してみた
G*Magazine Vol.7の宣伝
3
13年9月20日金曜日
JGGUG G*Workshop Z Copyright(C) NTT Software.
テーマ:Indyで遊びたい
Indy: Java VM上での動的言語の実行を効
率化することを目的とした一連の機能拡張
(JSR 292)
気軽でない
ASM面倒くさい
ByteCode DSLを使おう!
4
13年9月20日金曜日
35
Bytecode DSL
13年9月20日金曜日
JGGUG G*Workshop Z Copyright(C) NTT Software.
ByteCode DSL
Groovyの内部DSLで実現されたJava
バイトコードのアセンブラ
ASMのラッパー
Indy対応! (重要)
6
@groovyx.ast.bytecode.Bytecode
int	
  fib(int	
  i)	
  {
	
  	
  	
  	
  iload	
  1
	
  	
  	
  	
  iconst_2
	
  	
  	
  	
  if_icmpge	
  l1
	
  	
  	
  	
  iload	
  1
	
  	
  	
  	
  _goto	
  l2
	
  	
  	
  l1
	
  	
  	
  	
  aload	
  0
	
  	
  	
  	
  iload	
  1
	
  	
  	
  	
  iconst_2
	
  	
  	
  	
  isub
	
  	
  	
  	
  invokevirtual	
  '.fib',	
  '(I)I'
	
  	
  	
  	
  aload	
  0
	
  	
  	
  	
  iload	
  1
	
  	
  	
  	
  iconst_1
	
  	
  	
  	
  isub
	
  	
  	
  	
  invokevirtual	
  '.fib'	
  ,'(I)I'
	
  	
  	
  	
  iadd
	
  	
  	
  l2
	
  	
  	
  	
  ireturn
}
13年9月20日金曜日
JGGUG G*Workshop Z Copyright(C) NTT Software.
BytecodeDSL
以下で@Grab可
groovyによる実行
7
@GrabResolver(name="maven-­‐repox",	
  root	
  =	
  "https://
raw.github.com/uehaj/maven-­‐repo/gh-­‐pages/snapshot")
@Grab('groovyx.ast.bytecode:groovy-­‐bytecode-­‐ast:0.2.0-­‐
separate-­‐asm')
import	
  groovyx.ast.bytecode.Bytecode
$ groovy fib.groovy
102334155
13年9月20日金曜日
3
BytecodeDSLでHello Indy!
8
@GrabResolver(name="maven-­‐repo",	
  root="https://raw.github.com/uehaj/maven-­‐repo/gh-­‐pages/snapshot")
@Grab("groovyx.ast.bytecode:groovy-­‐bytecode-­‐ast:0.2.0-­‐separate-­‐asm")
import	
  groovyx.ast.bytecode.Bytecode
import	
  java.lang.invoke.*
import	
  java.lang.invoke.MethodHandles.Lookup
import	
  static	
  org.objectweb.asm.Opcodes.H_INVOKESTATIC
class	
  HelloIndy	
  {
	
  	
  	
  	
  public	
  static	
  CallSite	
  bootstrap(Lookup	
  lookup,	
  String	
  
methodName,	
  MethodType	
  type)	
  {
	
  	
  	
  	
  	
  	
  	
  	
  assert	
  methodName	
  ==	
  'xx'
	
  	
  	
  	
  	
  	
  	
  	
  MethodHandle	
  mh	
  =	
  lookup.findVirtual(java.io.PrintStream,	
  
"println",	
  MethodType.methodType(void,[String]))
	
  	
  	
  	
  	
  	
  	
  	
  return	
  new	
  ConstantCallSite(mh)
	
  	
  	
  	
  }
	
  	
  	
  	
  @Bytecode
	
  	
  	
  	
  static	
  main(args)	
  {
	
  	
  	
  	
  	
  	
  	
  	
  getstatic	
  	
  	
  	
  	
  'java/lang/System.out','Ljava/io/PrintStream;'
	
  	
  	
  	
  	
  	
  	
  	
  ldc	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'Hello	
  Indy'
	
  	
  	
  	
  	
  	
  	
  	
  invokedynamic	
  'xx',	
  '(Ljava/io/PrintStream;Ljava/lang/
String;)V',	
  [H_INVOKESTATIC,	
  'HelloIndy','bootstrap',	
  [CallSite,	
  
Lookup,	
  String,	
  MethodType]]
	
  	
  	
  	
  	
  	
  	
  	
  vreturn
	
  	
  	
  	
  }
}
13年9月20日金曜日
3
実行
9
$ groovy -Dgroovy.target.bytecode=1.7 HelloIndy.groovy
Hello Indy
13年9月20日金曜日
310
Indy!!
13年9月20日金曜日
JGGUG G*Workshop Z Copyright(C) NTT Software.
Indy
Indyの動作は知ってますよね??
11
13年9月20日金曜日
3
従来のinvoke系命令のイメージ
バイトコード命令
バイトコード命令
Invokestatic/virtual/interface命令
メソッド
バイトコード命令
return命令
バイトコード命令
(1)Java VMによって解決さ
れて呼び出される
:
13年9月20日金曜日
3
invokedynamic命令のイメージ
バイトコード命令
バイトコード命令
Invokedynamic命令
メソッド
バイトコード命令
return命令
バイトコード命令
(1)Java以外の言語処理系
ランタイムによって解決
される
:
13年9月20日金曜日
3
invokedynamicのイメージ(2)
バイトコード命令
バイトコード命令
Invokedynamic命令
バイトコード命令
:
?
(2)クラスファイル上はブートスト
ラップメソッドというメソッドに
紐付けられている
Bootstarpメソッド
バイトコード命令
return命令
(1)クラスロード時には未定
13年9月20日金曜日
3
invokedynamicのイメージ(3)
バイトコード命令
バイトコード命令
Invokedynamic命令
バイトコード命令
:
呼び出し先決定メソッド
バイトコード命令
return命令
BootStrapメソッドを指すMH
(2)BootstrapメソッドはCallSiteオブジ
ェクトを返す
CallSite
呼び出し先メソッ
ドを参照するMH
(1)BootStrapメソッドを示す
MH(MethodHandle)で表現されている
13年9月20日金曜日
3
invokedynamicのイメージ(5)
バイトコード命令
バイトコード命令
Invokedynamic命令
バイトコード命令
:
CallSite
(1)invokedyamic命令にCallSiteが紐付
けられる
この結び付きはJVMの実行を通じて以後不可逆、不変なので、以下のようにinvokedynamic
がCallSiteに置き変わると考えても良いかも知れない。 (※CallSiteオブジェクトは複数の
invokedynamic命令でシェアされ得る点でこのイメージは正確ではない。)
バイトコード命令
バイトコード命令
CallSite
バイトコード命令
呼び出し先メソッドを参照するMH
呼び出し先メソッ
ドを参照するMH
13年9月20日金曜日
3
CallSite 呼び出し先メソッドを参照するMH
invokedynamicの最終形
バイトコード命令
バイトコード命令
メソッド
バイトコード命令
return命令
バイトコード命令
MHによるメソッド参照
:
13年9月20日金曜日
3
CallSite 呼び出し先メソッドを参照するMH
(Mutable¦Volatile)CallSite
バイトコード命令
バイトコード命令
バイトコード命令
:
(1)
メソッド1
メソッド2
×
Groovyで言うところのmetaClassの変更のタイミングで実際のメソッドの差し替え
を行なうことができるCallSiteもある。(これがキモ)
結局、「ポインタを解した呼び出し先アドレスの間接参照」を
オブジェクト指向的に、型安全に行なっている。
13年9月20日金曜日
3
Indyって結局何?
メソッド呼び出し先を間接参照を使って書き換える
しくみ
他言語メソッドの呼び出しが想定ユースケースだが技術
的にはそれに限らない(Java 8 Lambdaとか)
他言語だから、環境を持ち回したり引数をラップ・アン
ラップする処理が必要になる場合がある
メソッド呼び出しに伴なう前後処理(MHに対する高階
操作:後述)をJVM管理下で構成・実行するしくみがあ
ることがメリット
➡最適化(インライン展開)期待
➡そういう前後処理が不要な場合、速度メリットがあるかは??
※ 「MH呼び出しは速い」は都市伝説
19
13年9月20日金曜日
3
MHに対する高階操作
20
13年9月20日金曜日
321
Brainf*ck
13年9月20日金曜日
3
Brainf*ckをindyで実装してみた :
構成図
22
Brainf*ckソース
>+++++++++[<++++
++++>-]<.>+++++++
[<++++>-]<+.++++++
+..+++.[-]>++++++++
[<++++>-]<.>++++++
+++++[<+++++>-]<.>
++++++++[<+++>-]<.
+++.------.--------.[-]>+
+++++++[<++++>-]<
+.[-]++++++++++.
compile.
groovy
https://gist.github.com/uehaj/6614136
https://gist.github.com/uehaj/6614447
Brainf*ckコンパイラ
生成コード(Bytecode
DSL/indyを使用)
groovy
groovy
“hello
world”
JVM
JVM(Java7)
a.groovy
13年9月20日金曜日
3
Brainf*ckとindy
静的言語だからIndyの意味ない
(MutableCallSite出番なし)
invokedynamicの引数文字列から
一連のMHを連接させたものを
BootStrapメソッドで生成してみる
23
invokedynamic 'dummy', '()V', [H_INVOKESTATIC, 'Brainfuck',
'bootstrap', [CallSite, Lookup, String, MethodType,
String]], '>++++++++'
13年9月20日金曜日
3
MHを連接
MethodHandles#filterReturnValu
e(MH target, MH filter)
「filter(target())」を表現するMHを返す。
targetの戻り値の型がvoid、
filterの引数が無しであれば、単にtarget,
filterの順にMHを呼び出す
filterReternValueの結果を
filterReturnValueに与えることで任意個数
のMHを逐次実行できる
24
13年9月20日金曜日
3
CallSite 呼び出し先メソッドを参照するMH
MHを連接
バイトコード命令
バイトコード命令
メソッド(+)
バイトコード命令
return命令
バイトコード命令
:
filterReturlValueの結果得られ
る、2つのMHを呼ぶMH
filterReturlValueの結果得られ
る、2つのMHを呼ぶMH
メソッド(+)
バイトコード命令
return命令
メソッド(>)
バイトコード命令
return命令
13年9月20日金曜日
3
生成コード
26
	
  static	
  void	
  main(String[]	
  args)	
  throws	
  Exception	
  {
	
  	
  	
  	
  	
  	
  	
  	
  //	
  Brainfuckからコンバートされたコード
	
  	
  	
  	
  	
  	
  	
  	
  invokedynamic	
  'dummy',	
  '()V',	
  ...	
  '>+++++++++'
	
  	
  	
  	
  	
  	
  	
  	
  _GOTO	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  tmp1
	
  	
  	
  	
  lab1:
	
  	
  	
  	
  	
  	
  	
  	
  invokedynamic	
  'dummy',	
  '()V',	
  ...	
  '<++++++++>-­‐'
	
  	
  	
  	
  tmp1:
	
  	
  	
  	
  	
  	
  	
  	
  getstatic	
  	
  	
  	
  	
  '.data','[B'
	
  	
  	
  	
  	
  	
  	
  	
  getstatic	
  	
  	
  	
  	
  '.dp','I'
	
  	
  	
  	
  	
  	
  	
  	
  baload	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  ifne	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  lab1
	
  	
  	
  	
  	
  	
  	
  	
  invokedynamic	
  'dummy',	
  '()V',	
  ...	
  '<.>+++++++'
	
  	
  	
  	
  	
  	
  	
  	
  _GOTO	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  tmp2
	
  	
  	
  	
  lab2:
	
  	
  	
  	
  	
  	
  	
  	
  invokedynamic	
  'dummy',	
  '()V',	
  ....	
  '<++++>-­‐'
	
  	
  	
  	
  tmp2:
	
  	
  	
  	
  	
  	
  	
  	
  getstatic	
  	
  	
  	
  	
  '.data','[B'
	
  	
  	
  	
  	
  	
  	
  	
  getstatic	
  	
  	
  	
  	
  '.dp','I'
	
  	
  	
  	
  	
  	
  	
  	
  baload	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  ifne	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  lab2
	
  	
  	
  	
  	
  	
  	
  	
  invokedynamic	
  'dummy',	
  '()V',	
  ....	
  '<+.+++++++..+
++.'
	
  	
  	
  	
  	
  	
  	
  	
  _GOTO	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  tmp3
	
  	
  	
  	
  lab3:
:
>+++++++++
[
<++++++++>-
]
<.>+++++++
[
<++++>-
]
<+.+++++++..+++.
13年9月20日金曜日
3
実行
27
% cat hello.bf
>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.
[-]>++++++++[<++++>-]<.>+++++++++++[<+++++>-]<.>++++++++[<+
++>-]<.+++.------.--------.[-]>++++++++[<++++>-]<+.[-]+++++
+++++.
% groovy compile.groovy hello.bf > a.groovy
% groovy -Dgroovy.target.bytecode=1.7 a.groovy
Hello World!
13年9月20日金曜日
3
まとめ
Indyは面白い
G*Magazine Vol7乞う期待!
28
13年9月20日金曜日

More Related Content

What's hot

Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)Uehara Junji
 
Groovy Shell Scripting 2015
Groovy Shell Scripting 2015Groovy Shell Scripting 2015
Groovy Shell Scripting 2015Uehara Junji
 
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUse JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUehara Junji
 
New features of Groovy 2.0 and 2.1
New features of Groovy 2.0 and 2.1New features of Groovy 2.0 and 2.1
New features of Groovy 2.0 and 2.1Uehara Junji
 
C#でOpenCL with OpenTK + Cloo
C#でOpenCL with OpenTK + ClooC#でOpenCL with OpenTK + Cloo
C#でOpenCL with OpenTK + Clooaokomoriuta
 
Groovy base gradle_20130309
Groovy base gradle_20130309Groovy base gradle_20130309
Groovy base gradle_20130309Nobuhiro Sue
 
Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)Uehara Junji
 
Gws 20130315 gradle_handson
Gws 20130315 gradle_handsonGws 20130315 gradle_handson
Gws 20130315 gradle_handsonNobuhiro Sue
 
Groovy indy 20120222
Groovy indy 20120222Groovy indy 20120222
Groovy indy 20120222Nobuhiro Sue
 
Perlワンライナーで全てのモジュールにuse v5.8.0つける!
Perlワンライナーで全てのモジュールにuse v5.8.0つける!Perlワンライナーで全てのモジュールにuse v5.8.0つける!
Perlワンライナーで全てのモジュールにuse v5.8.0つける!debug-ito
 
The History of Groovy #GroovyBase
The History of Groovy #GroovyBaseThe History of Groovy #GroovyBase
The History of Groovy #GroovyBasekyon mm
 
Synthesijer jjug 201504_01
Synthesijer jjug 201504_01Synthesijer jjug 201504_01
Synthesijer jjug 201504_01Takefumi MIYOSHI
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Taku Miyakawa
 
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
 
WebRTCがよく分からないから調べて試してみた
WebRTCがよく分からないから調べて試してみたWebRTCがよく分からないから調べて試してみた
WebRTCがよく分からないから調べて試してみたtoru tom
 
Kink: プロトタイプベースの俺々 JVM 言語
Kink: プロトタイプベースの俺々 JVM 言語Kink: プロトタイプベースの俺々 JVM 言語
Kink: プロトタイプベースの俺々 JVM 言語Taku Miyakawa
 

What's hot (20)

Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
 
Groovy Shell Scripting 2015
Groovy Shell Scripting 2015Groovy Shell Scripting 2015
Groovy Shell Scripting 2015
 
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUse JWT access-token on Grails REST API
Use JWT access-token on Grails REST API
 
New features of Groovy 2.0 and 2.1
New features of Groovy 2.0 and 2.1New features of Groovy 2.0 and 2.1
New features of Groovy 2.0 and 2.1
 
C#でOpenCL with OpenTK + Cloo
C#でOpenCL with OpenTK + ClooC#でOpenCL with OpenTK + Cloo
C#でOpenCL with OpenTK + Cloo
 
Groovy base gradle_20130309
Groovy base gradle_20130309Groovy base gradle_20130309
Groovy base gradle_20130309
 
Groovyの紹介20130323
Groovyの紹介20130323Groovyの紹介20130323
Groovyの紹介20130323
 
Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)
 
Gws 20130315 gradle_handson
Gws 20130315 gradle_handsonGws 20130315 gradle_handson
Gws 20130315 gradle_handson
 
GContractsの基礎
GContractsの基礎GContractsの基礎
GContractsの基礎
 
Groovy indy 20120222
Groovy indy 20120222Groovy indy 20120222
Groovy indy 20120222
 
Perlワンライナーで全てのモジュールにuse v5.8.0つける!
Perlワンライナーで全てのモジュールにuse v5.8.0つける!Perlワンライナーで全てのモジュールにuse v5.8.0つける!
Perlワンライナーで全てのモジュールにuse v5.8.0つける!
 
ZynqMPのQEMU
ZynqMPのQEMUZynqMPのQEMU
ZynqMPのQEMU
 
The History of Groovy #GroovyBase
The History of Groovy #GroovyBaseThe History of Groovy #GroovyBase
The History of Groovy #GroovyBase
 
Synthesijer jjug 201504_01
Synthesijer jjug 201504_01Synthesijer jjug 201504_01
Synthesijer jjug 201504_01
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
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)
 
WebRTCがよく分からないから調べて試してみた
WebRTCがよく分からないから調べて試してみたWebRTCがよく分からないから調べて試してみた
WebRTCがよく分からないから調べて試してみた
 
Grailsのススメ(仮)
Grailsのススメ(仮)Grailsのススメ(仮)
Grailsのススメ(仮)
 
Kink: プロトタイプベースの俺々 JVM 言語
Kink: プロトタイプベースの俺々 JVM 言語Kink: プロトタイプベースの俺々 JVM 言語
Kink: プロトタイプベースの俺々 JVM 言語
 

Similar to Indy(Invokedynamic) and Bytecode DSL and Brainf*ck

Zend Frameworkで始める携帯サイト
Zend Frameworkで始める携帯サイトZend Frameworkで始める携帯サイト
Zend Frameworkで始める携帯サイト清水樹
 
2012-09-09.nagoyapm07
2012-09-09.nagoyapm072012-09-09.nagoyapm07
2012-09-09.nagoyapm07IWATA Susumu
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようAkira Shimosako
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDEdcubeio
 
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with KarateTakanori Suzuki
 
[Tokyo NodeFest 2015] Hardware Hacking for Javascript Developers
[Tokyo NodeFest 2015] Hardware Hacking for Javascript Developers[Tokyo NodeFest 2015] Hardware Hacking for Javascript Developers
[Tokyo NodeFest 2015] Hardware Hacking for Javascript DevelopersTomomi Imura
 
Djangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込むDjangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込む2bo 2bo
 
Building Static Website With Github And Jekyll
Building Static Website With Github And JekyllBuilding Static Website With Github And Jekyll
Building Static Website With Github And JekyllYoji Shidara
 
Node-RED のフローを isaax で配信してみた
Node-RED のフローを isaax で配信してみたNode-RED のフローを isaax で配信してみた
Node-RED のフローを isaax で配信してみたTomoyuki Sugita
 
memcached proxy server development and operation
memcached proxy server development and operationmemcached proxy server development and operation
memcached proxy server development and operationTatsuhiko Kubo
 
こんにちはGroovy
こんにちはGroovyこんにちはGroovy
こんにちはGroovyirof N
 
Power Assert and perl.js
Power Assert and perl.jsPower Assert and perl.js
Power Assert and perl.jsGoro Fuji
 
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016Takayuki Shimizukawa
 
SEAndroid -AndroidのアーキテクチャとSE化について-
SEAndroid -AndroidのアーキテクチャとSE化について-SEAndroid -AndroidのアーキテクチャとSE化について-
SEAndroid -AndroidのアーキテクチャとSE化について-Hiromu Yakura
 
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機Tetsuyuki Kobayashi
 
20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう
20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう
20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼうYasuhiro Ishii
 

Similar to Indy(Invokedynamic) and Bytecode DSL and Brainf*ck (20)

Zend Frameworkで始める携帯サイト
Zend Frameworkで始める携帯サイトZend Frameworkで始める携帯サイト
Zend Frameworkで始める携帯サイト
 
2012-09-09.nagoyapm07
2012-09-09.nagoyapm072012-09-09.nagoyapm07
2012-09-09.nagoyapm07
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
 
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate
 
[Tokyo NodeFest 2015] Hardware Hacking for Javascript Developers
[Tokyo NodeFest 2015] Hardware Hacking for Javascript Developers[Tokyo NodeFest 2015] Hardware Hacking for Javascript Developers
[Tokyo NodeFest 2015] Hardware Hacking for Javascript Developers
 
Djangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込むDjangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込む
 
Building Static Website With Github And Jekyll
Building Static Website With Github And JekyllBuilding Static Website With Github And Jekyll
Building Static Website With Github And Jekyll
 
Node-RED のフローを isaax で配信してみた
Node-RED のフローを isaax で配信してみたNode-RED のフローを isaax で配信してみた
Node-RED のフローを isaax で配信してみた
 
memcached proxy server development and operation
memcached proxy server development and operationmemcached proxy server development and operation
memcached proxy server development and operation
 
RGtk2入門
RGtk2入門RGtk2入門
RGtk2入門
 
こんにちはGroovy
こんにちはGroovyこんにちはGroovy
こんにちはGroovy
 
Power Assert and perl.js
Power Assert and perl.jsPower Assert and perl.js
Power Assert and perl.js
 
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
 
Rx java x retrofit
Rx java x retrofitRx java x retrofit
Rx java x retrofit
 
SEAndroid -AndroidのアーキテクチャとSE化について-
SEAndroid -AndroidのアーキテクチャとSE化について-SEAndroid -AndroidのアーキテクチャとSE化について-
SEAndroid -AndroidのアーキテクチャとSE化について-
 
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
 
20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう
20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう
20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう
 
Sinatra and heroku for mac
Sinatra and heroku for macSinatra and heroku for mac
Sinatra and heroku for mac
 
Hadoop-3.2.0の新機能の紹介とJava9+対応のコミュニティ動向
Hadoop-3.2.0の新機能の紹介とJava9+対応のコミュニティ動向Hadoop-3.2.0の新機能の紹介とJava9+対応のコミュニティ動向
Hadoop-3.2.0の新機能の紹介とJava9+対応のコミュニティ動向
 

More from Uehara Junji

Shibuya JVM Groovy 20150418
Shibuya JVM Groovy 20150418Shibuya JVM Groovy 20150418
Shibuya JVM Groovy 20150418Uehara Junji
 
Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309Uehara Junji
 
JJUG CCC 2012 Real World Groovy/Grails
JJUG CCC 2012 Real World Groovy/GrailsJJUG CCC 2012 Real World Groovy/Grails
JJUG CCC 2012 Real World Groovy/GrailsUehara Junji
 
Java x Groovy: improve your java development life
Java x Groovy: improve your java development lifeJava x Groovy: improve your java development life
Java x Groovy: improve your java development lifeUehara Junji
 
Groovy 1.8の新機能について
Groovy 1.8の新機能についてGroovy 1.8の新機能について
Groovy 1.8の新機能についてUehara Junji
 
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...Uehara Junji
 
Jggug ws 15th LT 20110224
Jggug ws 15th LT 20110224Jggug ws 15th LT 20110224
Jggug ws 15th LT 20110224Uehara Junji
 
Easy Going Groovy 2nd season on DevLOVE
Easy Going Groovy 2nd season on DevLOVEEasy Going Groovy 2nd season on DevLOVE
Easy Going Groovy 2nd season on DevLOVEUehara Junji
 
Easy Going Groovy(Groovyを気軽に使いこなそう)
Easy Going Groovy(Groovyを気軽に使いこなそう)Easy Going Groovy(Groovyを気軽に使いこなそう)
Easy Going Groovy(Groovyを気軽に使いこなそう)Uehara Junji
 
Groovy, Transforming Language
Groovy, Transforming LanguageGroovy, Transforming Language
Groovy, Transforming LanguageUehara Junji
 
Jggug Nagoya 20090925 Groovy
Jggug Nagoya 20090925 GroovyJggug Nagoya 20090925 Groovy
Jggug Nagoya 20090925 GroovyUehara Junji
 
G*WS 3rd Lightning talk
G*WS 3rd Lightning talkG*WS 3rd Lightning talk
G*WS 3rd Lightning talkUehara Junji
 
Groovy Now And Future
Groovy Now And FutureGroovy Now And Future
Groovy Now And FutureUehara Junji
 
Seasar Conference2008 Grails(Final)
Seasar Conference2008 Grails(Final)Seasar Conference2008 Grails(Final)
Seasar Conference2008 Grails(Final)Uehara Junji
 
Groovy Conference2008 Nttsoft
Groovy Conference2008 NttsoftGroovy Conference2008 Nttsoft
Groovy Conference2008 NttsoftUehara Junji
 

More from Uehara Junji (17)

Shibuya JVM Groovy 20150418
Shibuya JVM Groovy 20150418Shibuya JVM Groovy 20150418
Shibuya JVM Groovy 20150418
 
Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309
 
JJUG CCC 2012 Real World Groovy/Grails
JJUG CCC 2012 Real World Groovy/GrailsJJUG CCC 2012 Real World Groovy/Grails
JJUG CCC 2012 Real World Groovy/Grails
 
Java x Groovy: improve your java development life
Java x Groovy: improve your java development lifeJava x Groovy: improve your java development life
Java x Groovy: improve your java development life
 
Groovy 1.8の新機能について
Groovy 1.8の新機能についてGroovy 1.8の新機能について
Groovy 1.8の新機能について
 
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
 
Jggug ws 15th LT 20110224
Jggug ws 15th LT 20110224Jggug ws 15th LT 20110224
Jggug ws 15th LT 20110224
 
Easy Going Groovy 2nd season on DevLOVE
Easy Going Groovy 2nd season on DevLOVEEasy Going Groovy 2nd season on DevLOVE
Easy Going Groovy 2nd season on DevLOVE
 
Easy Going Groovy(Groovyを気軽に使いこなそう)
Easy Going Groovy(Groovyを気軽に使いこなそう)Easy Going Groovy(Groovyを気軽に使いこなそう)
Easy Going Groovy(Groovyを気軽に使いこなそう)
 
Clojure
ClojureClojure
Clojure
 
Groovy, Transforming Language
Groovy, Transforming LanguageGroovy, Transforming Language
Groovy, Transforming Language
 
Jggug Nagoya 20090925 Groovy
Jggug Nagoya 20090925 GroovyJggug Nagoya 20090925 Groovy
Jggug Nagoya 20090925 Groovy
 
Lisp Builder
Lisp BuilderLisp Builder
Lisp Builder
 
G*WS 3rd Lightning talk
G*WS 3rd Lightning talkG*WS 3rd Lightning talk
G*WS 3rd Lightning talk
 
Groovy Now And Future
Groovy Now And FutureGroovy Now And Future
Groovy Now And Future
 
Seasar Conference2008 Grails(Final)
Seasar Conference2008 Grails(Final)Seasar Conference2008 Grails(Final)
Seasar Conference2008 Grails(Final)
 
Groovy Conference2008 Nttsoft
Groovy Conference2008 NttsoftGroovy Conference2008 Nttsoft
Groovy Conference2008 Nttsoft
 

Recently uploaded

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
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
論文紹介: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
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
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
 
論文紹介: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
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
論文紹介: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
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 

Recently uploaded (14)

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」の紹介
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
論文紹介: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
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
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
 
論文紹介: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...
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.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
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 

Indy(Invokedynamic) and Bytecode DSL and Brainf*ck