SlideShare uma empresa Scribd logo
1 de 24
Baixar para ler offline
「Javascript as an Embedded DSL」を
読んで
- ScalaにおけるExpression Problemの解法 -	
Scala基礎勉強会  2012/10/21
前⽥田  康⾏行行  (@maeda_̲)
自己紹介	
¨  前⽥田康⾏行行  (@maeda_̲  )
¨  名古屋在住のフリーランス
http://www.illi-‐‑‒ichi.com
¨  好きな⾔言語
¤  Scala
¤  Smalltalk
¨  DyNagoya  (Dynamic  language  +  Nagoya)
¤  http://dynagoya.info  
¤  @dynagoya_̲info
注意 (2014/6/27 追記)	
最近話題のScala.jsと
本資料料で扱うjs-‐‑‒scalaは別物で、
全く異異なるアプローチです。
JavaScript as an Embedded DSL	
¨  authors
¤  Grzegorz  Kossakowski,  Nada  Amin,  Tiark  
Rompf,  and  Martin  Odersky
¨  published
¤  ECOOP  2012  –  Object-‐‑‒Oriented  
Programming,  vol.  7313,  p.  409-‐‑‒434
  
¨  abstract
¤  Javascriptを出⼒力力するScalaの内部DSLを作った。
¤  「Lightweight  Modular  Staging」の応⽤用
Multi-Staging Programming(MSP)	
¨  段階に分けてコードを変換
¤  例例:
記述性の⾼高いコード  →  効率率率のよいコードに変換  →  実⾏行行
¨  コード⽣生成時をStaging,  ⽣生成後をStagedという
¨  MSPの例例
¤  O.  Kiselyov,  K.  N.  Swadi,  and  W.  Taha.  A  
methodology  for  generating  verified  combinatorial  
circuits.  In  G.  C.  Buttazzo,  editor,  EMSOFT,  pages  
249–258.  ACM,  2004.
¤  MetaOcamlを使⽤用したFFT(⾼高速フーリエ変換)
Lightweight Modular Staging(LMS)	
¨  ScalaのMSPのための枠組み
¤  Lightweight
n  ⾔言語拡張ではなく、ライブラリで実装
(類似研究ではMetaOcamlやTemplate  Haskellを使⽤用)
¤  Modular
n  好きな部品を好きなように追加・取り替え可能
¤  Staging
¨  LMSの応⽤用例例
¤  Delite(並列列計算)
      http://stanford-‐‑‒ppl.github.com/Delite/
¤  JS-‐‑‒Scala  (Scala  →  Javascript)
https://github.com/js-‐‑‒scala/virtualization-‐‑‒lms-‐‑‒core
Scala → Javascriptの利点	
¨  型安全
¨  サーバーサイドとクライアントサイドの⾔言語
を統⼀一
¨  限定継続によるcall  backの排除
¨  ScalaにはObjectもあるし、型が不不要な場合は
Dynamic  Traitも使えるので、JSとの親和性
は⾼高い
¨  DSLで使⽤用できる部品の追加および差し替え
が容易易
            →  Expression  Problemの解決が必須
Expression Problem	
¨  データ構造やその操作を追加した時に、下記
の条件すべてを満たせるか?
¤  Extensibility  in  both  dimensions
(データ構造と操作の両⽅方の意)
¤  Strong  static  type  safety
¤  No  modification  or  duplication
¤  Separate  compilation
¤  Independent  extensibility(Scalaチームにより追加)
Independent extensibility	
¨  独⽴立立した拡張は組み合わせて使⽤用することが
できること
Matthias  Zenger,  Martin  Odersky,  
Independently  Extensible  Solutions  to  the  Expression  
Problem,  I&C  Technical  Report  No.  200433,  March  2004.
主役はTrait	
¨  それぞれの拡張をTraitにして分割
¨  JS  traitはDSL内で何が使えるかの定義をまと
めたもの
¨  ノードの種類ごとにtraitが分割されている。
trait  JS  extends  LiftNumeric  with  NumericOps  with  
OrderingOps  with  Equal  with  IfThenElse  with  
While  with  LiftBoolean  with  BooleanOps  with  
LiftString  with  StringOps  with  DynamicBase  with  
Arrays  with  Variables  with  JSFunctions  with  
JSLiteral
構文木のノードを変換
構文木→JS	
構文木のノードを変換
構文木→JS	
Generator	
Scala → JS 全体像	
DSLの記述	
DSL内で使える部品
(インターフェース)	
部品の実装
(DSL→構文木)	
Javascript
Generator	
mix in	
implement	
mix in	
mix in	
DSL内で使える部品
(インターフェース)	
部品の実装
(DSL→構文木)	
部品の実装
(DSL→構文木)	
DSL内で使える部品
(定義のみ)	
構文木のノードを変換
構文木→JS	
mix in	
Trait	
Instance	
correspond
JS-Scalaでの拡張の例	
¨  以降降はjQueryのための部品を追加する場合を
考える
¨  下記のそれぞれのTraitを作成する
¤  DSL内でjQueryを使うAPI定義
¤  DSL上のjQueryを構⽂文⽊木上のノードへ変換
¤  ノードからJSへの出⼒力力⽅方法の実装
¨  既存の機能と独⽴立立して、この機能の追加をす
る
構文木のノードを変換
構文木→JS	
構文木のノードを変換
構文木→JS	
Generator	
Scala → JS 全体像	
DSLの記述	
DSL内で使える部品
(インターフェース)	
部品の実装
(DSL→構文木)	
Javascript
Generator	
mix in	
implement	
mix in	
mix in	
DSL内で使える部品
(インターフェース)	
部品の実装
(DSL→構文木)	
部品の実装
(DSL→構文木)	
DSL内で使える部品
(定義のみ)	
構文木のノードを変換
構文木→JS	
mix in	
Trait	
Instance	
correspond
DSLを書く	
¨  Rep[T]型の値はJSレベルでT型に評価されるノードを表す
//  DSLの記述
trait  SomeDSL  {  this:  JQuery  with  JS  =>
    def  code  =  $(“#message”).html(“Hello  World”)
}
//  DSLで使⽤用可能な部品の定義
trait  JQuery  extends  JSProxyBase  {
    def  $(selector:  Rep[String]):  Rep[JQElement]
    
    trait  JQElement{
        def  html(html:  Rep[String]):  Rep[JQElement]
    }
    implicit  def  repToJQuery(x:  Rep[JQElement]):  JQElement  =
          repProxy[JQElement](x)
}
構文木のノードを変換
構文木→JS	
構文木のノードを変換
構文木→JS	
Generator	
Scala → JS 全体像	
DSLの記述	
DSL内で使える部品
(インターフェース)	
部品の実装
(DSL→構文木)	
Javascript
Generator	
mix in	
implement	
mix in	
mix in	
DSL内で使える部品
(インターフェース)	
部品の実装
(DSL→構文木)	
部品の実装
(DSL→構文木)	
DSL内で使える部品
(定義のみ)	
構文木のノードを変換
構文木→JS	
mix in	
Trait	
Instance	
correspond
DSLに実装を与える(1)	
//  DSLの表現から構⽂文⽊木のノードへの変換⽅方法の定義
trait  JQueryExp  extends  JQuery  with  JSProxyExp  {
    case  class  JQ(selector:  Exp[String])  extends  Def[JQElement]
    
      def  $(selector:  Exp[String]):  Exp[JQElement]  =  
            reflectEffect(JQ(selector))
}
¨  DSLレベルではRep[T]、実装レベルではExp[T]型を使⽤用す
る
¨  Staging時にreflectEffectがインスタンス変数へノードの登
録して、構⽂文⽊木を組み⽴立立てる
¨  JQElementについての実装はJSProxyExpがリフレクション
で良良きにやってくれる
DSLに実装を与える(2)	
//  新しいノードが不不要な場合の例例
trait  SleepExp  extends  JSLibExp  with  JSFunctionsExp  {
    def  sleep(delay:  Exp[Int])  =  shift  {  
        k:  (Exp[Unit]  =>  Exp[Unit])  =>
            window.setTimeout(fun(k),  delay)
    }
}
¨  既存の種類のノードに置き換えることも可能
¨  この例例では、setTimeoutのCallbackとして継続を渡す
ように構⽂文⽊木を組み⽴立立てる。
(fun  :  Exp[A]  =>  Exp[B]  =>  Exp[A  =>  B])
¨  他にも定数畳み込みなどの最適化なども可能
構文木のノードを変換
構文木→JS	
構文木のノードを変換
構文木→JS	
Generator	
Scala → JS 全体像	
DSLの記述	
DSL内で使える部品
(インターフェース)	
部品の実装
(DSL→構文木)	
Javascript
Generator	
mix in	
implement	
mix in	
mix in	
DSL内で使える部品
(インターフェース)	
部品の実装
(DSL→構文木)	
部品の実装
(DSL→構文木)	
DSL内で使える部品
(定義のみ)	
構文木のノードを変換
構文木→JS	
mix in	
Trait	
Instance	
correspond
JSのコードへ変換	
¨  abstract  valueのIRがTrait合成時に提供されるべき、
ノードを指定している  (IR  =  Intermediate  Representation)
¨  担当のノードの変換をする。それ以外は親Traitにお任せ
//  JQueryのノードをJSのコードへ変換
trait  GenJQuery  extends  JSGenProxy  with  JSGenLib{
    val  IR:  JQueryExp                  //  abstract  value  
    import  IR._̲
    override  def  emitNode(sym:  Sym[Any],  rhs:  Def[Any])(
        implicit  stream:  PrintWriter)  =  rhs  match  {
            case  JQ(s)  =>  emitValDef(sym,  "$("  +  quote(s)  +  ")")
            case  _̲  =>  super.emitNode(sym,  rhs)
    }
}
構文木のノードを変換
構文木→JS	
構文木のノードを変換
構文木→JS	
Generator	
Scala → JS 全体像	
DSLの記述	
DSL内で使える部品
(インターフェース)	
部品の実装
(DSL→構文木)	
Javascript
Generator	
mix in	
implement	
mix in	
mix in	
DSL内で使える部品
(インターフェース)	
部品の実装
(DSL→構文木)	
部品の実装
(DSL→構文木)	
DSL内で使える部品
(定義のみ)	
構文木のノードを変換
構文木→JS	
mix in	
Trait	
Instance	
correspond
DSLをJSに変換	
¨  これまでのTraitを合成して、Generatorを作
る
¨  コード⽣生成⽤用のTraitが要求していたabstract  
valueをこのような形で解決する。
¨  必要なTraitを選んで、機能の拡張をすること
ができる。
new  SomeDSL  with  JQueryExp  with  JSExp  {  self  =>
      val  codegen  =  new  JQueryGen  with  JSGen  {  
            val  IR:  self.type  =  self
      }
}
まとめ	
¨  ScalaのTraitは強⼒力力
¤  モジュールを細かく分割して、実装・テストが可能
¤  任意の組み合わせで合成
¤  self  type  annotationやabstract  type/valueなどの
制約により、不不整合はコンパイルエラー
¨  JS-‐‑‒Scalaのコードは、Cake  Patternや
Expression  Problem解法の好例例
¨  https://github.com/js-‐‑‒scala/js-‐‑‒scala
LMS・JS-Scalaの感想	
¨  課題はJSレベルでのデバッグ
¤  MSP(Multi  Staging  Programming)の課題
¤  ⽣生成されるコードが機械的な感じで読み難い
¨  このDSLは⾃自由に書けない
¤  提供された部品の範囲でのみ書ける
¤  できることを制限させるような使い⽅方
¤  こんな構成↓がやりやすそう
LMS	
独自Parts	
独自DSL	
 ← 人海戦術	
← スキルフルな人が実装
参考文献	
¨  Lightweight  Modular  Staging:  A  Pragmatic  
Approach  to  Runtime  Code  Generation  and  
Compiled  DSLs
by  Tiark  Rompf  and  Martin  Odersky,  EPFL
GPCE  2010,  Eindhoven,  The  Netherlands,  
October  2010
¨  A  Gentle  Introduction  to  Multi-‐‑‒stage  
Programming
by  Walid  Taha
¨  Matthias  Zenger,  Martin  Odersky,  
Independently  Extensible  Solutions  to  the  
Expression  Problem,  I&C  Technical  Report  No.  
200433,  March  2004.

Mais conteúdo relacionado

Mais procurados

Sql server 2017 からはじめる graph データベース
Sql server 2017 からはじめる graph データベースSql server 2017 からはじめる graph データベース
Sql server 2017 からはじめる graph データベースOda Shinsuke
 
20140418 info talkセミナー資料
20140418 info talkセミナー資料20140418 info talkセミナー資料
20140418 info talkセミナー資料Takahiro Iwase
 
NOSQLの基礎知識(講義資料)
NOSQLの基礎知識(講義資料)NOSQLの基礎知識(講義資料)
NOSQLの基礎知識(講義資料)CLOUDIAN KK
 
Cassandra(no sql)によるシステム提案と開発
Cassandra(no sql)によるシステム提案と開発Cassandra(no sql)によるシステム提案と開発
Cassandra(no sql)によるシステム提案と開発kishimotosc
 
ハンズのDynamoDBクラウドパターン
ハンズのDynamoDBクラウドパターンハンズのDynamoDBクラウドパターン
ハンズのDynamoDBクラウドパターンNaoyuki Yamazaki
 

Mais procurados (6)

Sql server 2017 からはじめる graph データベース
Sql server 2017 からはじめる graph データベースSql server 2017 からはじめる graph データベース
Sql server 2017 からはじめる graph データベース
 
20140418 info talkセミナー資料
20140418 info talkセミナー資料20140418 info talkセミナー資料
20140418 info talkセミナー資料
 
NOSQLの基礎知識(講義資料)
NOSQLの基礎知識(講義資料)NOSQLの基礎知識(講義資料)
NOSQLの基礎知識(講義資料)
 
ゼロから始めるBlob
ゼロから始めるBlobゼロから始めるBlob
ゼロから始めるBlob
 
Cassandra(no sql)によるシステム提案と開発
Cassandra(no sql)によるシステム提案と開発Cassandra(no sql)によるシステム提案と開発
Cassandra(no sql)によるシステム提案と開発
 
ハンズのDynamoDBクラウドパターン
ハンズのDynamoDBクラウドパターンハンズのDynamoDBクラウドパターン
ハンズのDynamoDBクラウドパターン
 

Semelhante a Javascript as an Embedded DSL - Expression Problemの解法例

Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22Yohei Sasaki
 
Scala × DDD × 弊社実践例
Scala × DDD × 弊社実践例Scala × DDD × 弊社実践例
Scala × DDD × 弊社実践例侑亮 原田
 
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Ra Zon
 
Aerospike xdr (Cross Datacenter Replication)
Aerospike xdr (Cross Datacenter Replication)Aerospike xdr (Cross Datacenter Replication)
Aerospike xdr (Cross Datacenter Replication)Makoto Uehara
 
S2dao Seminar in tripodworks
S2dao Seminar in tripodworksS2dao Seminar in tripodworks
S2dao Seminar in tripodworkstripodworks
 
Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Taisuke Shiratori
 
Scalaの現状と課題
Scalaの現状と課題Scalaの現状と課題
Scalaの現状と課題Kota Mizushima
 
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標Tomoharu ASAMI
 
C#実装から見るDDD(ドメイン駆動設計)
C#実装から見るDDD(ドメイン駆動設計)C#実装から見るDDD(ドメイン駆動設計)
C#実装から見るDDD(ドメイン駆動設計)Takuya Kawabe
 
めんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scalaめんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scalaKazuhiro Sera
 
並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.jsYoshiiro Ueno
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようAkira Shimosako
 
[db tech showcase Tokyo 2017] E35: 12台でやってみた!DWHソフトウェアアプライアンス Db2 Warehouse ~...
[db tech showcase Tokyo 2017] E35: 12台でやってみた!DWHソフトウェアアプライアンス Db2 Warehouse ~...[db tech showcase Tokyo 2017] E35: 12台でやってみた!DWHソフトウェアアプライアンス Db2 Warehouse ~...
[db tech showcase Tokyo 2017] E35: 12台でやってみた!DWHソフトウェアアプライアンス Db2 Warehouse ~...Insight Technology, Inc.
 
TypeScript0.9
TypeScript0.9TypeScript0.9
TypeScript0.9ukayare
 
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Ra Zon
 

Semelhante a Javascript as an Embedded DSL - Expression Problemの解法例 (20)

Inside of Asakusa DSL
Inside of Asakusa DSLInside of Asakusa DSL
Inside of Asakusa DSL
 
Rpscala2011 0601
Rpscala2011 0601Rpscala2011 0601
Rpscala2011 0601
 
Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22
 
Scala × DDD × 弊社実践例
Scala × DDD × 弊社実践例Scala × DDD × 弊社実践例
Scala × DDD × 弊社実践例
 
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]
 
Aerospike xdr (Cross Datacenter Replication)
Aerospike xdr (Cross Datacenter Replication)Aerospike xdr (Cross Datacenter Replication)
Aerospike xdr (Cross Datacenter Replication)
 
S2dao Seminar in tripodworks
S2dao Seminar in tripodworksS2dao Seminar in tripodworks
S2dao Seminar in tripodworks
 
Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009
 
Scalaの現状と課題
Scalaの現状と課題Scalaの現状と課題
Scalaの現状と課題
 
ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
 
ScalaMatsuri 2016
ScalaMatsuri 2016ScalaMatsuri 2016
ScalaMatsuri 2016
 
C#実装から見るDDD(ドメイン駆動設計)
C#実装から見るDDD(ドメイン駆動設計)C#実装から見るDDD(ドメイン駆動設計)
C#実装から見るDDD(ドメイン駆動設計)
 
めんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scalaめんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scala
 
並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
 
[db tech showcase Tokyo 2017] E35: 12台でやってみた!DWHソフトウェアアプライアンス Db2 Warehouse ~...
[db tech showcase Tokyo 2017] E35: 12台でやってみた!DWHソフトウェアアプライアンス Db2 Warehouse ~...[db tech showcase Tokyo 2017] E35: 12台でやってみた!DWHソフトウェアアプライアンス Db2 Warehouse ~...
[db tech showcase Tokyo 2017] E35: 12台でやってみた!DWHソフトウェアアプライアンス Db2 Warehouse ~...
 
TypeScript0.9
TypeScript0.9TypeScript0.9
TypeScript0.9
 
JSX
JSXJSX
JSX
 
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]
 

Último

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 

Último (9)

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 

Javascript as an Embedded DSL - Expression Problemの解法例