SlideShare una empresa de Scribd logo
1 de 28
Descargar para leer sin conexión
Scala DSL

                2010 5       18
                         (    Lab)




2010   5   18
Scala

       •


       •


       •


       •


       • JVM          Java


       • Scalable ≒ DSL


2010   5   18
DSL

       • Domain Specific Language


       •


       •


       •


       • OSMU (One Source Multi Use)




2010   5   18
Scala DSL




2010   5   18
Specs

   object CsvEntityTest extends Specification {                                        • BDD
    val TestReadDir = "/tmp/goldenport.d/read"
    val TestCreateDir = "/tmp/goldenport.d/create/CsvEntity"                             • Behavior Driven
    val readonlyCsvFileName = GoldenportTestUtility.readonlyCsvFileName                    Development
       "CsvEntity    Read" should {
        "CsvEntity DefaultEntitySpace         FileDataSource     open" in {              •
            val space = new DefaultEntitySpace
            space.addEntityClass(new CsvEntityClass())
            val datasource = new FileDataSource(readonlyCsvFileName, space.context)
            val mayCsv: Option[GEntity] = space.reconstitute(datasource)
            mayCsv must beSome[GEntity]
            val csv = mayCsv.get.asInstanceOf[CsvEntity]
            csv.open()
            csv.width must be(3)
            csv.height must be(2)
            csv.get(0, 0) must be_==("A")                                             • Specs
            csv.get(1, 0) must be_==("B")
            csv.get(2, 0) must be_==("C")
            csv.get(0, 1) must be_==("X")
            csv.get(1, 1) must be_==("Y")                                                • Scala
            csv.get(2, 1) must be_==("Z")
            csv.close()
        }


2010    5    18
SimpleModeler

           case class DER                 extends DomainResource {    •                 DSL
               term = "      "
               caption = "         "
               brief = <t></t>
               description = <text></text>
                                                                      • Scala DSL
               id("    Id", DVI           Id())
               attribute("       Name", DVN          Name())
           }                                                                    Google App
           case class DVI                Id extends DomainValueId {       Engine Java
               term = "      Id"
               caption = "         Id"
               brief = <t></t>
               description = <text></text>

               attribute("value", XString)
           }




2010   5       18
SimpleModeler




2010   5   18
g3

                                                           •
           class Join extends G3Application {
            agent('compute) {
              case x: Int => x + 100
                                                           • Scala DSL
            }


               start(List(1, 2, 3, 4, 5)) split() publish("compute") join() aggregate()
           }




2010   5       18
class MyTodo extends Todo {                          • TODO
        name = "         "                                   Scala DSL

           "                            " until 20100505
                                                            • Scala DSL   HTML
           "                            " until 20100606
           "                      " until 20100707

           task("                     ") {
               until = 20100808
               todo("PC                      ")
               "IDE                      " until 20100707
           }
       }




2010   5   18
DSL                 HTML

       <html>
       <head>
        <title>TODO   </title>
       </head>
       <body>

       <ul>
        <li>                           (20100505)</li>
           <li>                        (20100606)</li>
           <li>                  (20100707)</li>
           <li>PC                    (20100808) [        ]</li>
           <li>IDE                    (20100808) [       ]</li>
       </ul>

       </body>
       </html>



2010   5    18
DSL




2010   5   18
class MyTodo extends Todo {
             name = "         "
            }



           abstract class Todo {
             var name: String = _
           }



2010   5   18
class MyTodo extends Todo {
            name = "         "
                                               import scala.collection.mutable.ArrayBuffer
               todo("                     ")
               todo("                     ")   abstract class Todo {
                                                var name: String = _
               todo("                ")         val items = new ArrayBuffer[TodoItem]
           }
                                                   def todo(title: String) {
                                                     val item = new TodoItem(title)
                                                     items += item
                                                   }
                                               }

                                               class TodoItem(val title: String) {
                                               }




2010   5       18
import scala.collection.mutable.ArrayBuffer
  class MyTodo extends Todo {
   name = "         "                                 abstract class Todo {
                                                       var name: String = _
                                                       val items = new ArrayBuffer[TodoItem]
      todo("                      ") until 20100505
                                                          def todo(title: String): TodoItem = {
      todo("                      ") until 20100606         val item = new TodoItem(title)
      todo("                ") until 20100707               items += item
                                                            item
  }                                                       }
                                                      }

                                                      class TodoItem(val title: String) {
                                                       var untilDate: Int = _

                                                          def until(date: Int): TodoItem = {
                                                            untilDate = date
                                                            this
                                                          }
                                                      }




2010    5   18
                         (fluent interface)
import scala.collection.mutable.ArrayBuffer
   class MyTodo extends Todo {
    name = "         "                              abstract class Todo {
                                                     var name: String = _
                                                     val items = new ArrayBuffer[TodoItem]
       "                         " until 20100505
                                                        def todo(title: String): TodoItem = {
       "                         " until 20100606         val item = new TodoItem(title)
                                                          items += item
       "                " until 20100707                  item
                                                        }
   }
                                                      implicit def todoWrapper(title: String): TodoItem =
                                                    todo(title)
                                                    }

                                                    class TodoItem(val title: String) {
                                                     var untilDate: Int = _

                                                        def until(date: Int): TodoItem = {
                                                          untilDate = date
                                                          this
                                                        }
                                                    }



2010       5   18
class MyTodo extends Todo {
        name = "         "

           "                         " until 20100505
           "                         " until 20100606
           "                " until 20100707

           task("               ") {
               todo("PC                  ")
               "IDE                  " until 20100707
           }
       }




2010   5       18
import scala.collection.mutable.ArrayBuffer
                                                                             class TodoItem(var title: String) {
       abstract class Todo {                                                  var untilDate: Int = _
        var name: String = _
        val items = new ArrayBuffer[TodoItem]                                    def until(date: Int): TodoItem = {
        val tasks = new ArrayBuffer[Task]                                          untilDate = date
        private[this] var currentTask: Option[Task] = None                         this
                                                                                 }
           def todo(title: String): TodoItem = {                             }
             val item = new TodoItem(title)
             currentTask match {                                             class Task(var title: String) {
               case Some(tk) => tk.items += item                               val items = new ArrayBuffer[TodoItem]
               case None => items += item                                      var untilDate: Int = _
             }                                                               }
             item
           }

           def task(title: String)(p: => Unit): Task = {
             val tk = new Task(title)
             tasks += tk
             currentTask = Some(tk)
             p
             currentTask = None
             tk
           }

           implicit def todoWrapper(title: String): TodoItem = todo(title)
       }



2010   5     18
           Stack
class MyTodo extends Todo {
            name = "         "

               "                            " until 20100505
               "                            " until 20100606
               "                      " until 20100707

               task("                     ") {
                   until = 20100808
                   todo("PC                      ")
                   "IDE                      " until 20100707
               }
           }




2010   5       18
import scala.collection.mutable.ArrayBuffer
                                                                     def until: Int = {
           abstract class Todo {                                       currentTask.get.untilDate
            var name: String = _                                     }
            val items = new ArrayBuffer[TodoItem]
            val tasks = new ArrayBuffer[Task]                        def until_=(value: Int) {
            private[this] var currentTask: Option[Task] = None         currentTask.get.untilDate = value
                                                                     }
               def todo(title: String): TodoItem = {
                 val item = new TodoItem(title)                      implicit def todoWrapper(title: String): TodoItem = todo(title)
                 currentTask match {                             }
                   case Some(tk) => tk.items += item
                   case None => items += item                    class TodoItem(var title: String) {
                 }                                                var untilDate: Int = _
                 item
               }                                                     def until(date: Int): TodoItem = {
                                                                       untilDate = date
               def task(title: String)(p: => Unit): Task = {           this
                 val tk = new Task(title)                            }
                 tasks += tk                                     }
                 currentTask = Some(tk)
                 p                                               class Task(var title: String) {
                 currentTask = None                                val items = new ArrayBuffer[TodoItem]
                 tk                                                var untilDate: Int = _
               }                                                 }
                 this
               }
           }

2010   5       18
2010   5   18
MakeTodoDsl
       import scala.xml.{XML, Node}
                                                                     private def makeList(todo: Todo): List[Node] = {
       object MakeTodoDsl {                                            (for (item <- todo.items) yield <li>{
        def main(args: Array[String]) {                                   "%s(%s)".format(item.title, item.untilDate)
         val input = args(0)                                           }</li>).toList :::
         val output = args(1)                                          (for (task <- todo.tasks; item <- task.items) yield <li>{
                                                                          "%s(%s) [%s]".format(item.title, task.untilDate, task.title)
            val appClass = Class.forName(input)                        }</li>).toList
            val todo = appClass.newInstance.asInstanceOf[Todo]       }
                                                                 }
         val html = <html>
       <head>
        <title>TODO      </title>
       </head>
       <body>

       <ul>
        { makeList(todo) }
       </ul>

       </body>
       </html>

            XML.save(output, html, "utf-8")
        }


2010    5    18
def main(args: Array[String]) {
             val input = args(0)
             val output = args(1)

                val appClass = Class.forName(input)
                val todo = appClass.newInstance.asInstanceOf[Todo]




2010   5   18
XML
           val html = <html>
           <head>
            <title>TODO      </title>
           </head>
           <body>

           <ul>
            { makeList(todo) }
           </ul>

           </body>
           </html>

                XML.save(output, html, "utf-8")
           }
2010   5   18
private def makeList(todo: Todo): List[Node] = {
          (for (item <- todo.items) yield <li>{
              "%s(%s)".format(item.title, item.untilDate)
          }</li>).toList :::
          (for (task <- todo.tasks; item <- task.items) yield <li>{
              "%s(%s) [%s]".format(item.title, task.untilDate, task.title)}</li>
          ).toList
        }




2010   5   18
DSL                           HTML

       <html>                                            •
       <head>
        <title>TODO   </title>
       </head>
       <body>

       <ul>
        <li>                           (20100505)</li>
           <li>                        (20100606)</li>
           <li>                  (20100707)</li>
           <li>PC                    (20100808) [            ]</li>
           <li>IDE                    (20100808) [           ]</li>
       </ul>

       </body>
       </html>


2010   5   18
•          •


       •          •


           •      • XML


           •      •


       • apply    •       (2.8)


       • update   •         (2.8)



2010   5   18
• DSL              Scala


       • Scala     Java           …


           •


       • Scala DSL


           •


       •         Scala



2010   5   18
End




2010   5   18

Más contenido relacionado

La actualidad más candente

OpenStackでも重要な役割を果たすPacemakerを知ろう!
OpenStackでも重要な役割を果たすPacemakerを知ろう!OpenStackでも重要な役割を果たすPacemakerを知ろう!
OpenStackでも重要な役割を果たすPacemakerを知ろう!ksk_ha
 
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~ CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~ SEGADevTech
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較Akihiro Suda
 
Pod Security AdmissionによるKubernetesのポリシー制御(Kubernetes Novice Tokyo #21 発表資料)
Pod Security AdmissionによるKubernetesのポリシー制御(Kubernetes Novice Tokyo #21 発表資料)Pod Security AdmissionによるKubernetesのポリシー制御(Kubernetes Novice Tokyo #21 発表資料)
Pod Security AdmissionによるKubernetesのポリシー制御(Kubernetes Novice Tokyo #21 発表資料)NTT DATA Technology & Innovation
 
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践Yoshifumi Kawai
 
【解説】IKE(IIJ Kubernetes Engine):= Vanilla Kubernetes + 何?
【解説】IKE(IIJ Kubernetes Engine):= Vanilla Kubernetes + 何?【解説】IKE(IIJ Kubernetes Engine):= Vanilla Kubernetes + 何?
【解説】IKE(IIJ Kubernetes Engine):= Vanilla Kubernetes + 何?IIJ
 
Istioサービスメッシュ入門
Istioサービスメッシュ入門Istioサービスメッシュ入門
Istioサービスメッシュ入門Yoichi Kawasaki
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線Motonori Shindo
 
DeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
DeNAオリジナル ゲーム専用プラットフォーム SakashoについてDeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
DeNAオリジナル ゲーム専用プラットフォーム SakashoについてMakoto Haruyama
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Masahito Zembutsu
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Taku Miyakawa
 
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)NTT DATA Technology & Innovation
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能BuildKitの概要と最近の機能
BuildKitの概要と最近の機能Kohei Tokunaga
 
NAND Flash から InnoDB にかけての話(仮)
NAND Flash から InnoDB にかけての話(仮)NAND Flash から InnoDB にかけての話(仮)
NAND Flash から InnoDB にかけての話(仮)Takanori Sejima
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みChihiro Ito
 
大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌LINE Corporation
 
Google Cloud Game Servers 徹底入門 | 第 10 回 Google Cloud INSIDE Games & Apps Online
Google Cloud Game Servers 徹底入門 | 第 10 回 Google Cloud INSIDE Games & Apps OnlineGoogle Cloud Game Servers 徹底入門 | 第 10 回 Google Cloud INSIDE Games & Apps Online
Google Cloud Game Servers 徹底入門 | 第 10 回 Google Cloud INSIDE Games & Apps OnlineGoogle Cloud Platform - Japan
 
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...Google Cloud Platform - Japan
 
[社内勉強会]ELBとALBと数万スパイク負荷テスト
[社内勉強会]ELBとALBと数万スパイク負荷テスト[社内勉強会]ELBとALBと数万スパイク負荷テスト
[社内勉強会]ELBとALBと数万スパイク負荷テストTakahiro Moteki
 
Anthos を使ったエンタープライズ向けクラスタの設計とアップグレード戦略のススメ(CloudNative Days Tokyo 2021 発表資料)
Anthos を使ったエンタープライズ向けクラスタの設計とアップグレード戦略のススメ(CloudNative Days Tokyo 2021 発表資料)Anthos を使ったエンタープライズ向けクラスタの設計とアップグレード戦略のススメ(CloudNative Days Tokyo 2021 発表資料)
Anthos を使ったエンタープライズ向けクラスタの設計とアップグレード戦略のススメ(CloudNative Days Tokyo 2021 発表資料)NTT DATA Technology & Innovation
 

La actualidad más candente (20)

OpenStackでも重要な役割を果たすPacemakerを知ろう!
OpenStackでも重要な役割を果たすPacemakerを知ろう!OpenStackでも重要な役割を果たすPacemakerを知ろう!
OpenStackでも重要な役割を果たすPacemakerを知ろう!
 
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~ CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
Pod Security AdmissionによるKubernetesのポリシー制御(Kubernetes Novice Tokyo #21 発表資料)
Pod Security AdmissionによるKubernetesのポリシー制御(Kubernetes Novice Tokyo #21 発表資料)Pod Security AdmissionによるKubernetesのポリシー制御(Kubernetes Novice Tokyo #21 発表資料)
Pod Security AdmissionによるKubernetesのポリシー制御(Kubernetes Novice Tokyo #21 発表資料)
 
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
 
【解説】IKE(IIJ Kubernetes Engine):= Vanilla Kubernetes + 何?
【解説】IKE(IIJ Kubernetes Engine):= Vanilla Kubernetes + 何?【解説】IKE(IIJ Kubernetes Engine):= Vanilla Kubernetes + 何?
【解説】IKE(IIJ Kubernetes Engine):= Vanilla Kubernetes + 何?
 
Istioサービスメッシュ入門
Istioサービスメッシュ入門Istioサービスメッシュ入門
Istioサービスメッシュ入門
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
 
DeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
DeNAオリジナル ゲーム専用プラットフォーム SakashoについてDeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
DeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
 
NAND Flash から InnoDB にかけての話(仮)
NAND Flash から InnoDB にかけての話(仮)NAND Flash から InnoDB にかけての話(仮)
NAND Flash から InnoDB にかけての話(仮)
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
 
大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌
 
Google Cloud Game Servers 徹底入門 | 第 10 回 Google Cloud INSIDE Games & Apps Online
Google Cloud Game Servers 徹底入門 | 第 10 回 Google Cloud INSIDE Games & Apps OnlineGoogle Cloud Game Servers 徹底入門 | 第 10 回 Google Cloud INSIDE Games & Apps Online
Google Cloud Game Servers 徹底入門 | 第 10 回 Google Cloud INSIDE Games & Apps Online
 
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
 
[社内勉強会]ELBとALBと数万スパイク負荷テスト
[社内勉強会]ELBとALBと数万スパイク負荷テスト[社内勉強会]ELBとALBと数万スパイク負荷テスト
[社内勉強会]ELBとALBと数万スパイク負荷テスト
 
Anthos を使ったエンタープライズ向けクラスタの設計とアップグレード戦略のススメ(CloudNative Days Tokyo 2021 発表資料)
Anthos を使ったエンタープライズ向けクラスタの設計とアップグレード戦略のススメ(CloudNative Days Tokyo 2021 発表資料)Anthos を使ったエンタープライズ向けクラスタの設計とアップグレード戦略のススメ(CloudNative Days Tokyo 2021 発表資料)
Anthos を使ったエンタープライズ向けクラスタの設計とアップグレード戦略のススメ(CloudNative Days Tokyo 2021 発表資料)
 

Similar a Scala DSLの作り方

Ikenna Okpala: London Java Community: Wicket and Scala - 27/07/2010.
Ikenna Okpala: London Java Community: Wicket and Scala - 27/07/2010.Ikenna Okpala: London Java Community: Wicket and Scala - 27/07/2010.
Ikenna Okpala: London Java Community: Wicket and Scala - 27/07/2010.Skills Matter
 
Short Lightening Talk
Short Lightening TalkShort Lightening Talk
Short Lightening TalkIkenna Okpala
 
Starting with Scala : Frontier Developer's Meetup December 2010
Starting with Scala : Frontier Developer's Meetup December 2010Starting with Scala : Frontier Developer's Meetup December 2010
Starting with Scala : Frontier Developer's Meetup December 2010Derek Chen-Becker
 
Why Scala is the better Java
Why Scala is the better JavaWhy Scala is the better Java
Why Scala is the better JavaThomas Kaiser
 
Scala - en bedre og mere effektiv Java?
Scala - en bedre og mere effektiv Java?Scala - en bedre og mere effektiv Java?
Scala - en bedre og mere effektiv Java?Jesper Kamstrup Linnet
 
NoSQL Endgame Percona Live Online 2020
NoSQL Endgame Percona Live Online 2020NoSQL Endgame Percona Live Online 2020
NoSQL Endgame Percona Live Online 2020Thodoris Bais
 
Scala @ TechMeetup Edinburgh
Scala @ TechMeetup EdinburghScala @ TechMeetup Edinburgh
Scala @ TechMeetup EdinburghStuart Roebuck
 
比XML更好用的Java Annotation
比XML更好用的Java Annotation比XML更好用的Java Annotation
比XML更好用的Java Annotationjavatwo2011
 
Scala in practice
Scala in practiceScala in practice
Scala in practicepatforna
 
TDC218SP | Trilha Kotlin - DSLs in a Kotlin Way
TDC218SP | Trilha Kotlin - DSLs in a Kotlin WayTDC218SP | Trilha Kotlin - DSLs in a Kotlin Way
TDC218SP | Trilha Kotlin - DSLs in a Kotlin Waytdc-globalcode
 
Oop2010 Scala Presentation Stal
Oop2010 Scala Presentation StalOop2010 Scala Presentation Stal
Oop2010 Scala Presentation StalMichael Stal
 
JavaScript - Chapter 12 - Document Object Model
  JavaScript - Chapter 12 - Document Object Model  JavaScript - Chapter 12 - Document Object Model
JavaScript - Chapter 12 - Document Object ModelWebStackAcademy
 
Rich Internet Applications con JavaFX e NetBeans
Rich Internet Applications  con JavaFX e NetBeans Rich Internet Applications  con JavaFX e NetBeans
Rich Internet Applications con JavaFX e NetBeans Fabrizio Giudici
 

Similar a Scala DSLの作り方 (20)

Kotlin talk
Kotlin talkKotlin talk
Kotlin talk
 
Ikenna Okpala: London Java Community: Wicket and Scala - 27/07/2010.
Ikenna Okpala: London Java Community: Wicket and Scala - 27/07/2010.Ikenna Okpala: London Java Community: Wicket and Scala - 27/07/2010.
Ikenna Okpala: London Java Community: Wicket and Scala - 27/07/2010.
 
Short Lightening Talk
Short Lightening TalkShort Lightening Talk
Short Lightening Talk
 
Starting with Scala : Frontier Developer's Meetup December 2010
Starting with Scala : Frontier Developer's Meetup December 2010Starting with Scala : Frontier Developer's Meetup December 2010
Starting with Scala : Frontier Developer's Meetup December 2010
 
Why Scala is the better Java
Why Scala is the better JavaWhy Scala is the better Java
Why Scala is the better Java
 
mobl
moblmobl
mobl
 
Scala - en bedre og mere effektiv Java?
Scala - en bedre og mere effektiv Java?Scala - en bedre og mere effektiv Java?
Scala - en bedre og mere effektiv Java?
 
Developing a new Epsilon EMC driver
Developing a new Epsilon EMC driverDeveloping a new Epsilon EMC driver
Developing a new Epsilon EMC driver
 
An introduction to scala
An introduction to scalaAn introduction to scala
An introduction to scala
 
NoSQL Endgame Percona Live Online 2020
NoSQL Endgame Percona Live Online 2020NoSQL Endgame Percona Live Online 2020
NoSQL Endgame Percona Live Online 2020
 
Scala @ TechMeetup Edinburgh
Scala @ TechMeetup EdinburghScala @ TechMeetup Edinburgh
Scala @ TechMeetup Edinburgh
 
比XML更好用的Java Annotation
比XML更好用的Java Annotation比XML更好用的Java Annotation
比XML更好用的Java Annotation
 
Object calisthenics
Object calisthenicsObject calisthenics
Object calisthenics
 
Scala in practice
Scala in practiceScala in practice
Scala in practice
 
TDC218SP | Trilha Kotlin - DSLs in a Kotlin Way
TDC218SP | Trilha Kotlin - DSLs in a Kotlin WayTDC218SP | Trilha Kotlin - DSLs in a Kotlin Way
TDC218SP | Trilha Kotlin - DSLs in a Kotlin Way
 
Oop2010 Scala Presentation Stal
Oop2010 Scala Presentation StalOop2010 Scala Presentation Stal
Oop2010 Scala Presentation Stal
 
WebDSL
WebDSLWebDSL
WebDSL
 
Scala - en bedre Java?
Scala - en bedre Java?Scala - en bedre Java?
Scala - en bedre Java?
 
JavaScript - Chapter 12 - Document Object Model
  JavaScript - Chapter 12 - Document Object Model  JavaScript - Chapter 12 - Document Object Model
JavaScript - Chapter 12 - Document Object Model
 
Rich Internet Applications con JavaFX e NetBeans
Rich Internet Applications  con JavaFX e NetBeans Rich Internet Applications  con JavaFX e NetBeans
Rich Internet Applications con JavaFX e NetBeans
 

Más de Tomoharu ASAMI

アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】
アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】
アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】Tomoharu ASAMI
 
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】Tomoharu ASAMI
 
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】Tomoharu ASAMI
 
実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】
実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】
実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】Tomoharu ASAMI
 
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】Tomoharu ASAMI
 
設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】
設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】
設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】Tomoharu ASAMI
 
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】Tomoharu ASAMI
 
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】Tomoharu ASAMI
 
設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】
設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】
設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】Tomoharu ASAMI
 
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】Tomoharu ASAMI
 
設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】
設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】
設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】Tomoharu ASAMI
 
設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】
設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】
設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】Tomoharu ASAMI
 
設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】
設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】
設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】Tomoharu ASAMI
 
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】Tomoharu ASAMI
 
設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】
設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】
設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】Tomoharu ASAMI
 
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】Tomoharu ASAMI
 
設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】
設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】
設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】Tomoharu ASAMI
 
分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】
分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】
分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】Tomoharu ASAMI
 
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】Tomoharu ASAMI
 
分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】
分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】
分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】Tomoharu ASAMI
 

Más de Tomoharu ASAMI (20)

アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】
アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】
アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】
 
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
 
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】
 
実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】
実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】
実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】
 
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】
 
設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】
設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】
設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】
 
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】
 
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
 
設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】
設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】
設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】
 
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
 
設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】
設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】
設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】
 
設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】
設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】
設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】
 
設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】
設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】
設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】
 
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
 
設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】
設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】
設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】
 
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】
 
設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】
設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】
設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】
 
分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】
分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】
分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】
 
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】
 
分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】
分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】
分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】
 

Último

The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 

Último (20)

The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 

Scala DSLの作り方

  • 1. Scala DSL 2010 5 18 ( Lab) 2010 5 18
  • 2. Scala • • • • • JVM Java • Scalable ≒ DSL 2010 5 18
  • 3. DSL • Domain Specific Language • • • • OSMU (One Source Multi Use) 2010 5 18
  • 5. Specs object CsvEntityTest extends Specification { • BDD val TestReadDir = "/tmp/goldenport.d/read" val TestCreateDir = "/tmp/goldenport.d/create/CsvEntity" • Behavior Driven val readonlyCsvFileName = GoldenportTestUtility.readonlyCsvFileName Development "CsvEntity Read" should { "CsvEntity DefaultEntitySpace FileDataSource open" in { • val space = new DefaultEntitySpace space.addEntityClass(new CsvEntityClass()) val datasource = new FileDataSource(readonlyCsvFileName, space.context) val mayCsv: Option[GEntity] = space.reconstitute(datasource) mayCsv must beSome[GEntity] val csv = mayCsv.get.asInstanceOf[CsvEntity] csv.open() csv.width must be(3) csv.height must be(2) csv.get(0, 0) must be_==("A") • Specs csv.get(1, 0) must be_==("B") csv.get(2, 0) must be_==("C") csv.get(0, 1) must be_==("X") csv.get(1, 1) must be_==("Y") • Scala csv.get(2, 1) must be_==("Z") csv.close() } 2010 5 18
  • 6. SimpleModeler case class DER extends DomainResource { • DSL term = " " caption = " " brief = <t></t> description = <text></text> • Scala DSL id(" Id", DVI Id()) attribute(" Name", DVN Name()) } Google App case class DVI Id extends DomainValueId { Engine Java term = " Id" caption = " Id" brief = <t></t> description = <text></text> attribute("value", XString) } 2010 5 18
  • 8. g3 • class Join extends G3Application { agent('compute) { case x: Int => x + 100 • Scala DSL } start(List(1, 2, 3, 4, 5)) split() publish("compute") join() aggregate() } 2010 5 18
  • 9. class MyTodo extends Todo { • TODO name = " " Scala DSL " " until 20100505 • Scala DSL HTML " " until 20100606 " " until 20100707 task(" ") { until = 20100808 todo("PC ") "IDE " until 20100707 } } 2010 5 18
  • 10. DSL HTML <html> <head> <title>TODO </title> </head> <body> <ul> <li> (20100505)</li> <li> (20100606)</li> <li> (20100707)</li> <li>PC (20100808) [ ]</li> <li>IDE (20100808) [ ]</li> </ul> </body> </html> 2010 5 18
  • 11. DSL 2010 5 18
  • 12. class MyTodo extends Todo { name = " " } abstract class Todo { var name: String = _ } 2010 5 18
  • 13. class MyTodo extends Todo { name = " " import scala.collection.mutable.ArrayBuffer todo(" ") todo(" ") abstract class Todo { var name: String = _ todo(" ") val items = new ArrayBuffer[TodoItem] } def todo(title: String) { val item = new TodoItem(title) items += item } } class TodoItem(val title: String) { } 2010 5 18
  • 14. import scala.collection.mutable.ArrayBuffer class MyTodo extends Todo { name = " " abstract class Todo { var name: String = _ val items = new ArrayBuffer[TodoItem] todo(" ") until 20100505 def todo(title: String): TodoItem = { todo(" ") until 20100606 val item = new TodoItem(title) todo(" ") until 20100707 items += item item } } } class TodoItem(val title: String) { var untilDate: Int = _ def until(date: Int): TodoItem = { untilDate = date this } } 2010 5 18 (fluent interface)
  • 15. import scala.collection.mutable.ArrayBuffer class MyTodo extends Todo { name = " " abstract class Todo { var name: String = _ val items = new ArrayBuffer[TodoItem] " " until 20100505 def todo(title: String): TodoItem = { " " until 20100606 val item = new TodoItem(title) items += item " " until 20100707 item } } implicit def todoWrapper(title: String): TodoItem = todo(title) } class TodoItem(val title: String) { var untilDate: Int = _ def until(date: Int): TodoItem = { untilDate = date this } } 2010 5 18
  • 16. class MyTodo extends Todo { name = " " " " until 20100505 " " until 20100606 " " until 20100707 task(" ") { todo("PC ") "IDE " until 20100707 } } 2010 5 18
  • 17. import scala.collection.mutable.ArrayBuffer class TodoItem(var title: String) { abstract class Todo { var untilDate: Int = _ var name: String = _ val items = new ArrayBuffer[TodoItem] def until(date: Int): TodoItem = { val tasks = new ArrayBuffer[Task] untilDate = date private[this] var currentTask: Option[Task] = None this } def todo(title: String): TodoItem = { } val item = new TodoItem(title) currentTask match { class Task(var title: String) { case Some(tk) => tk.items += item val items = new ArrayBuffer[TodoItem] case None => items += item var untilDate: Int = _ } } item } def task(title: String)(p: => Unit): Task = { val tk = new Task(title) tasks += tk currentTask = Some(tk) p currentTask = None tk } implicit def todoWrapper(title: String): TodoItem = todo(title) } 2010 5 18 Stack
  • 18. class MyTodo extends Todo { name = " " " " until 20100505 " " until 20100606 " " until 20100707 task(" ") { until = 20100808 todo("PC ") "IDE " until 20100707 } } 2010 5 18
  • 19. import scala.collection.mutable.ArrayBuffer def until: Int = { abstract class Todo { currentTask.get.untilDate var name: String = _ } val items = new ArrayBuffer[TodoItem] val tasks = new ArrayBuffer[Task] def until_=(value: Int) { private[this] var currentTask: Option[Task] = None currentTask.get.untilDate = value } def todo(title: String): TodoItem = { val item = new TodoItem(title) implicit def todoWrapper(title: String): TodoItem = todo(title) currentTask match { } case Some(tk) => tk.items += item case None => items += item class TodoItem(var title: String) { } var untilDate: Int = _ item } def until(date: Int): TodoItem = { untilDate = date def task(title: String)(p: => Unit): Task = { this val tk = new Task(title) } tasks += tk } currentTask = Some(tk) p class Task(var title: String) { currentTask = None val items = new ArrayBuffer[TodoItem] tk var untilDate: Int = _ } } this } } 2010 5 18
  • 20. 2010 5 18
  • 21. MakeTodoDsl import scala.xml.{XML, Node} private def makeList(todo: Todo): List[Node] = { object MakeTodoDsl { (for (item <- todo.items) yield <li>{ def main(args: Array[String]) { "%s(%s)".format(item.title, item.untilDate) val input = args(0) }</li>).toList ::: val output = args(1) (for (task <- todo.tasks; item <- task.items) yield <li>{ "%s(%s) [%s]".format(item.title, task.untilDate, task.title) val appClass = Class.forName(input) }</li>).toList val todo = appClass.newInstance.asInstanceOf[Todo] } } val html = <html> <head> <title>TODO </title> </head> <body> <ul> { makeList(todo) } </ul> </body> </html> XML.save(output, html, "utf-8") } 2010 5 18
  • 22. def main(args: Array[String]) { val input = args(0) val output = args(1) val appClass = Class.forName(input) val todo = appClass.newInstance.asInstanceOf[Todo] 2010 5 18
  • 23. XML val html = <html> <head> <title>TODO </title> </head> <body> <ul> { makeList(todo) } </ul> </body> </html> XML.save(output, html, "utf-8") } 2010 5 18
  • 24. private def makeList(todo: Todo): List[Node] = { (for (item <- todo.items) yield <li>{ "%s(%s)".format(item.title, item.untilDate) }</li>).toList ::: (for (task <- todo.tasks; item <- task.items) yield <li>{ "%s(%s) [%s]".format(item.title, task.untilDate, task.title)}</li> ).toList } 2010 5 18
  • 25. DSL HTML <html> • <head> <title>TODO </title> </head> <body> <ul> <li> (20100505)</li> <li> (20100606)</li> <li> (20100707)</li> <li>PC (20100808) [ ]</li> <li>IDE (20100808) [ ]</li> </ul> </body> </html> 2010 5 18
  • 26. • • • • • XML • • • apply • (2.8) • update • (2.8) 2010 5 18
  • 27. • DSL Scala • Scala Java … • • Scala DSL • • Scala 2010 5 18
  • 28. End 2010 5 18