SlideShare uma empresa Scribd logo
1 de 72
関数型言語&形式的手法セミナー(3)



       2011年7月19日
    株式会社豆蔵 有限会社ITプランニング
          小笠原 啓




            1
Start F#! 本日の話題


F#のご紹介
関数プログラミングで開発を加速しよう!
応用事例:ここでも使われている関数型言語
形式手法 定理証明支援器Coqとのつながり




           2
まず簡単にF#のご紹介




     3
Microsoft Visual F#


Visual Studio 2010から搭載された.NET新言語。
 2010年4月発売。
 言語の開発自体は2000年頃から行われていた。
OCamlと呼ばれる言語を基礎としている。


               メイン開発者の
               Don Syme(Microsoft Resarch)


                 4
F#の位置づけ




   5
F#の特長


静的型付け関数型言語         非同期/並列ライブラリ
型推論                単位付き浮動小数点
判別共用体とパターン         コード引用符(マクロ)
マッチ                モジュールの容易な拡張
.NET環境で動作          インタラクティブ環境
シーケンス(遅延リスト)       IDEによる支援
コンピュテーション式

               6
今日はF# Interactiveを使います



所謂
REPL




           7
デモ:F# Interactive




        8
関数プログラミングで
 開発を加速しよう!



    9
唐突ですが、
nullチェックって面倒ですよね!?



        10
nullチェックは忘れやすい!


public Double roc(List<Double> values, int param, int offset) {
       if(values == null || offset < 0 ||
          offset >= values.size() - param || param < 1) {
               return null;
       }
       Double c1 = values.get(offset + param);
       Double c2 = values.get(offset);
       return c2 / c1 * 100;         チェック漏れ!
}

                              11
そもそもnullって必要なの?
   nullって何?



       12
nullは値が「ない」状態


1. 変数の未初期化によって起こる。
2. 変数に代入する値をすぐには作れな
   い時に入れる。
3. 適切な値が作れなかった時の関数の
   戻り値。

         13
束縛による未初期化の回避


  変数の考え方                  束縛の考え方
 Integer x; x = 1;         let x = 1




                     14
値が「ない」状態を判別できる
     option型

 type ‘a option =
        None         nullの代わり

      | Some of ‘a
値がない状態のNoneと値がある状態のSome(v)の重ね合
わせ(共用体)。
option型は中身を取り出さない限り具体的に使えない。
これでnullチェックを忘れるという事はなくなる。
F#ではoption型が標準でサポート。
                15
option型で書き直してみる


let roc values param offset =
  option {
     let! v = values
     if offset >= 0 && offset < v.size() - param && param > 0 then
        let! c1 = v.get(offset + param)
        let! c2 = v.get(offset)
        if c1 <> 0 then
           return c2 / c1 * 100
  }
                               16
nullがない世界へようこそ


未初期化変数なんて構文上存在しない。
nullチェックなんて書かなくていい。
option型で「ない」場合を楽々制御。
コンパイラが教えてくれる。
null判定を確認する単体テストは不要。




           17
nullを無くして、

    加速!

        18
問題です


問. 整数のリストを受け取って、隣り合う要素の
差のリストを返す関数を作ってください。
ただし、受け取ったリストが空か1要素なら、空
リストを返します。
例えば、引数が[5, 8, 1]なら[-3, 7]を返します。




               19
Javaで書いてみる


public ArrayList<Integer> subList( ArrayList<Integer> ary ) {
       ArrayList<Integer> result = new ArrayList<Integer>();
       if( ary != null && ary.size() >= 2) {
                for( int i = 0; i < ary.size() – 2; i++ ) {
                       result.add(ary.get(i) – ary.get(i + 1));
                }
       }
       return result;
}

                               20
インデックスアクセスって
 間違いやすいですよね



      21
F#で書き直してみる


let subList xs =
  if Seq.isEmpty xs then
     Seq.empty
  else
     Seq.map2 (-) xs (Seq.skip 1 xs)




                    22
問題です


問. 今月の売上げリスト(商品名と売上高を含む
リスト)から、今月売れた商品名の一覧が欲しい
です。商品名の重複は無くしてください。




           23
Javaで書いてみる



長くなるので省略・・・




     24
F#で書いてみる

let sellProducts xs =
  Seq.fold (fun ps sell ->
    if Seq.exists ((=) sell.name) ps then
      ps
    else
      sell.name :: ps) [] xs




                       25
map, foldはなぜ強力か?


foldは、forループを回しながら元データを変換・
集約する任意のパターンを表現できる。mapはfold
の特殊版で変換に特化したもの。この二つがあれ
ば(ほぼ)事足りる。
高階関数(クロージャー)を手軽に書ける言語な
ら、さらに便利。
関数を合成して関数を作り出す事ができる言語な
ら、既存の関数を組み合わせて複雑なループを素
早く構成可能。

            26
map, foldで

さらに加速!!

             27
こんなプログラムを書いたことは
    ありませんか?


for ( Product product : ps ) {
  ArrayList<Sell> sells = loadMothlySells(product);
  BigDecimal msale = new BigDecimal(0.);
  for( Sell sell : sells ) {
     msale = sell.sale.add(msale);        データベースアクセス

  }
  writeMonthlySales(product, msale);
}

                       28
外部入出力が絡むと
単体テストが面倒



    29
単体テストしやすいように

      let takeMontlySells product sells =
        product,
        Seq.fold (fun msale sell -> sell.sales.add(msale)) 0D) sells
副作用
なし
      let makeMothlySells products loader
        products
        |> Seq.map takeMontlySells (loader product)

      let _ =
                                                         DBアクセス
        makeMontlySells products (LoadMontlySells)       切り出し
        |> Seq.iter writeMontlySells
                                 30
純粋関数で楽々単体テスト


高階関数で副作用(DB読み込みやファイル書き込
み)を分離。
 -> 単体テストが簡単に。
より細かい部品はF# Interactiveで動作チェック。




              31
素早い単体テストで

  加速!!

       32
マウスによる線引き機能


お絵かきツールを作るとします。
キャンバス上でマウスが動いた時には、マウス座
標位置表示を更新します。
キャンバス上でクリックが起きたら、そこを起点
とした線引きモードに移行します。
もう一度クリックされたら、線を確定します。



          33
線引き機能の実装(概略)


enum CampasMouseListenerMode { Normal, Line; }
class CampasMouseListener implements MouseListener {
  CampasMouseListenerMode mode; Lineモードでしか使わな
  CampasPoint startPoint;           い。暗黙のお約束。
  public void mouseMoved( MouseEvent event ) {
  }
  public void mouseClicked( MouseEvent event ) {
  }
}

                        34
こう書けたら便利じゃ?


enum CampasMouseListenerMode {
     Normal,
     Line ( CampasPoint startPoint )
}

 switch( mode ) {
   case Normal:                 startPointは
   case Line ( startPoint ) :   Lineモードでしか
                                使えないようにす
                                る。
                       35
それ何て判別共用体?


      こういうenumの事を
判別共用体(F#)とかケースクラス(Scala)とか
バリアント(OCaml)とかデータ構築子( Haskell)
         と呼びます。




              36
F#で書き直すと


type mode = Normal | Line of campasPoint

 match mode with
   Normal ->
 | Line startPoint ->




                        37
判別共用体のご利益


場合分けとそれに伴う状態を一度に表現できる。
暗黙のお約束が無くなり、コードを書く側と読む
側の双方に優しい。
判別共用体の場合分け処理が足りない場合(例え
ばNormalの場合の分岐が欠けているとか)、コンパ
イラが教えてくれる。(網羅性チェック)



            38
様々な応用例

トランプ
 type mark = Spade | Heart | Diamond | Club
 type card = Joker | Card of mark * int

バイナリツリー構造
 type ‘a tree = Node of ‘a tree * ‘a tree | Leaf of ‘a

整数の足し算、引き算
 type expr = Const of int
           | Add of expr * expr
           | Sub of expr * expr
                           39
暗黙のお約束を減らして、

  加速!!

       40
イベントドリブンな
プログラムって煩雑ですよね?




      41
イベントドリブンプログラミング
     の煩雑さ


1. イベント発生後の処理として直列繋ぎしか想定さ
   れていない。(柔軟性の不足)
2. 引数による値の受け渡しではなく、もっとスコー
   プの広い変数への代入と参照によって繋がりが作
   られていくので、暗黙のお約束が増えていく。
   (モジュラリティの欠如)




            42
どうしろと?




  43
イベントハンドラは
   イベントを受け取ったら
新しいイベントを返せばいいのでは?
  (Observerパターンの連鎖)



         44
例えばこんなイベント処理を
   考えてみます


Request              inside process
                          chain
           Request
            Event

Response
  chain




             45
F#ではこう書けます
同じイベントから派生
した二系統のチェーン
   RequestEvent
   |> Observer.map (fun req -> response1 req)
   |> Observer.choose (fun r1 -> response2 r1)
   |> Observer.choose (fun r2 -> response3 r2)
                                                イベント間で値の
                                                受け渡しができる
   RequestEvent                                 ので、モジュラリ
   |> Observer.map (fun req -> process1 req)    ティアップ。
   |> Observer.choose (fun r1 -> process2 r1)
   |> Observer.choose (fun r2 -> process3 r2)

                         46
概念的には、
イベント発生を一種のストリームと見な
                し、
   map, foldのようなリスト処理と
  同じ考え方を当てはめています。
 (Functional Reactive Programming)

               47
The Reactive Extensions(Rx)


Observerパターンの連鎖を強力に推し進めた.NET
用のライブラリ。(Microsoft謹製)
F#標準ライブラリObserverモジュールよりもリッ
チな関数群。
LINQになぞらえたAPIインターフェイス。
非同期並列処理も一緒に扱える。



             48
例えば




 49
イベント処理をすっきり記述して

    加速!!

        50
関数プログラミングによる
    加速まとめ


nullを無くして煩雑なチェックから解放。
forループの代わりにmap, foldで簡潔に。
副作用のない関数群で簡単単体テスト。
暗黙のお約束を無くして脳の負担を軽減。
イベント処理を関数的にすっきり記述。




              51
Let’s 関数プログラミング!




       52
応用事例について




   53
国外事例


Twitter(Scala)
  分散フレームワークGizzard
Credit Suisse(F#)
  クォンツ。デリバティブ取引。
Grage Insurance(F#)
  格付けエンジン
WebSharper
  F#向けWeb開発フレームワーク製品($595)

                      54
国内事例


タイムインターメディア(Haskell)
 yesodフレームワークによるWebアプリ開発。
㈱パテントビューロ(Scala)
 知的財産・技術情報に関するデータベース事業。
 Scala + LiftによるWebシステム。
フィールドワークス(OCaml)
 OCaml製・LL言語向けPDFライブラリ製品。
某名古屋の会社(F#)
 元々.NETシステムを中心に開発。次の一手としてF#を積極採用。


               55
弊社の事例を具体的に




    56
株価分析サービス


某証券会社のWebサービスの一部を担当。株価を
解析して、その結果をWebAPIとして提供。
元上司からの依頼。「OCaml使うよ」「いいよ」
開発は約1か月。
Webサービス1本とバッチ系3本くらい。
OCaml + MySQL + xml-light。
ウェーブレット変換のためにC言語との連携。

            57
株価分析サービス


関数プログラミングが便利だった点
データベース処理は遅延リストがとても便利。
苦労した点
当時珍しかった64bitサーバー。手元に同じCPUがな
く、コンパイルできなかったので、サーバーでコン
パイルした。(後で少しハックすればクロスコンパ
イルできると知った)。



            58
デモ・FXチャートシステム




      59
FXチャートシステム


クライアントサイド
ocamljsというOCamlコードをjavascriptとして出力す
るコンパイラを利用。
HTML5/CSS3を活用。
サーバーサイド
TICKデータを受け取って、24D/365H稼働するデーモ
ンをOCamlで。
PostgreSQL, MySQL, Oracle, Microsoft SQLなど対応。

                    60
FXチャートシステム


「なるべく納期を早く」が顧客の要望
 早くできます。しかも不具合も少ないです。
 -> OCaml採用
OCaml開発者が私一人ではなく、アルバイト含め
れば3人以上いた。一人倒れたら終わりというリス
クは無く、会社組織として受託できると主張でき
た。


           61
FXチャートシステム


関数プログラミングが便利だった点
判別共用体(バリアント)による暗黙のお約束の低減。
ネットワーク通信のイベント発生後の処理を継続関
数で表現。
苦労した点
ループを伴う特定の代入操作はそのままでは遅かっ
た。部分的に生のjavascriptを呼び出した。



           62
デモ・F#による見積り管理




      63
応用事例まとめ


関数プログラミングを採用する動きは既に始まっ
ている。
国内でもエンタープライズ向け開発の事例がちら
ほら。
安全かつ素早いコーディングが可能な関数プログ
ラミングによる開発体制を築けば、他社との競争
にも有利。



          64
関数プログラミングは
  なぜ重要か?




    65
形式的手法との繋がり




    66
形式的手法とのつながり


関数プログラミングはなるべく副作用を排除し、純粋
関数的にプログラムを記述。
 -> プログラムの数学的な扱いがとても簡単になる。
 -> テストが簡単になる。自動検証が可能になる。
形式的な様々な手法が適用可能になる。
 仕様記述
 プログラム検証
 自動テスト
 性質証明
 コード生成
             67
定理証明支援器Coq


高階論理を扱える定理証明支援器。
Gallinaという言語でプログラムを記述し、その性
質を証明できる。
Coqで書いたプログラムは、Haskell, OCaml, Scheme
に変換可能。
テストでは担保出来ない網羅性と信頼性が得られ
る。


                68
プログラムはテストから証明の時代へ




        69
本日のまとめ


F#はMicrosoftが推奨する関数型言語。過去資産を
継承して関数プログラミングの利点を得られる。
関数プログラミングで開発を加速しよう!
関数プログラミングの適用は既に始まっている。
プログラムはテストから証明へ。




             70
現場で活かす
 関数型プログラミング(F#編)


F#を題材に関数プログラミングの基礎を習得できる
トレーニングコースです。

2011年8月8日(月) 10:00~17:00
at 豆蔵様トレーニングルール




                  71
ご清聴ありがとうございました。




      72

Mais conteúdo relacionado

Mais procurados

組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
kikairoya
 
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]
Ra Zon
 
Sns suite presentation
Sns suite presentationSns suite presentation
Sns suite presentation
Jason Namkung
 
BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdf
Hiroshi Ono
 
C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会
Akihiko Matuura
 

Mais procurados (20)

クロージャデザインパターン
クロージャデザインパターンクロージャデザインパターン
クロージャデザインパターン
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
 
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
 
磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!
 
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
 
あなたのScalaを爆速にする7つの方法(日本語版)
あなたのScalaを爆速にする7つの方法(日本語版)あなたのScalaを爆速にする7つの方法(日本語版)
あなたのScalaを爆速にする7つの方法(日本語版)
 
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]
 
これから Haskell を書くにあたって
これから Haskell を書くにあたってこれから Haskell を書くにあたって
これから Haskell を書くにあたって
 
関数型プログラミング in javascript
関数型プログラミング in javascript関数型プログラミング in javascript
関数型プログラミング in javascript
 
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
 
JavaScript 講習会 #1
JavaScript 講習会 #1JavaScript 講習会 #1
JavaScript 講習会 #1
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
 
Sns suite presentation
Sns suite presentationSns suite presentation
Sns suite presentation
 
C++0x 言語の未来を語る
C++0x 言語の未来を語るC++0x 言語の未来を語る
C++0x 言語の未来を語る
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
 
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術
 
Visual C++で使えるC++11
Visual C++で使えるC++11Visual C++で使えるC++11
Visual C++で使えるC++11
 
BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdf
 
C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会
 

Semelhante a 関数型言語&形式的手法セミナー(3)

Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]
Ra Zon
 
Scalatronで楽しく学ぶ関数型プログラミング
Scalatronで楽しく学ぶ関数型プログラミングScalatronで楽しく学ぶ関数型プログラミング
Scalatronで楽しく学ぶ関数型プログラミング
Jun Saito
 
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)
YoheiOkuyama
 

Semelhante a 関数型言語&形式的手法セミナー(3) (20)

Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]
 
ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
 
Scalatronで楽しく学ぶ関数型プログラミング
Scalatronで楽しく学ぶ関数型プログラミングScalatronで楽しく学ぶ関数型プログラミング
Scalatronで楽しく学ぶ関数型プログラミング
 
ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミングECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミング
 
MoteMote Compiler Plugin
MoteMote Compiler PluginMoteMote Compiler Plugin
MoteMote Compiler Plugin
 
lispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learninglispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learning
 
第1回勉強会スライド
第1回勉強会スライド第1回勉強会スライド
第1回勉強会スライド
 
Rの高速化
Rの高速化Rの高速化
Rの高速化
 
MlnagoyaRx
MlnagoyaRxMlnagoyaRx
MlnagoyaRx
 
マイクロマウスのための MATLAB/Simulink 講座 第1回 - MATLAB入門
マイクロマウスのための MATLAB/Simulink 講座 第1回 - MATLAB入門マイクロマウスのための MATLAB/Simulink 講座 第1回 - MATLAB入門
マイクロマウスのための MATLAB/Simulink 講座 第1回 - MATLAB入門
 
Nds meetup8 lt
Nds meetup8 ltNds meetup8 lt
Nds meetup8 lt
 
Node.jsでつくるNode.js ミニインタープリター&コンパイラー
Node.jsでつくるNode.js ミニインタープリター&コンパイラーNode.jsでつくるNode.js ミニインタープリター&コンパイラー
Node.jsでつくるNode.js ミニインタープリター&コンパイラー
 
15分でざっくり分かるScala入門
15分でざっくり分かるScala入門15分でざっくり分かるScala入門
15分でざっくり分かるScala入門
 
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)
 
プログラミング言語Scala
プログラミング言語Scalaプログラミング言語Scala
プログラミング言語Scala
 
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
 
Python for Data Anaysis第2回勉強会4,5章
Python for Data Anaysis第2回勉強会4,5章Python for Data Anaysis第2回勉強会4,5章
Python for Data Anaysis第2回勉強会4,5章
 
つくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタつくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタ
 

Mais de 啓 小笠原 (9)

自前言語を仕事に使う話
自前言語を仕事に使う話自前言語を仕事に使う話
自前言語を仕事に使う話
 
Alloy論理データモデル
Alloy論理データモデルAlloy論理データモデル
Alloy論理データモデル
 
函数プログラミングの エッセンスと考え方
函数プログラミングのエッセンスと考え方函数プログラミングのエッセンスと考え方
函数プログラミングの エッセンスと考え方
 
線形型のある言語でLEDを光らせる
線形型のある言語でLEDを光らせる線形型のある言語でLEDを光らせる
線形型のある言語でLEDを光らせる
 
Alloy analyzer
Alloy analyzerAlloy analyzer
Alloy analyzer
 
Alloy Analyzer LT
Alloy Analyzer LTAlloy Analyzer LT
Alloy Analyzer LT
 
状態遷移機械を構成するための新しいイベントコンビネーターの提案(PPL2014 カテ3ポスター)
状態遷移機械を構成するための新しいイベントコンビネーターの提案(PPL2014 カテ3ポスター)状態遷移機械を構成するための新しいイベントコンビネーターの提案(PPL2014 カテ3ポスター)
状態遷移機械を構成するための新しいイベントコンビネーターの提案(PPL2014 カテ3ポスター)
 
ぱわわっぷOCaml
ぱわわっぷOCamlぱわわっぷOCaml
ぱわわっぷOCaml
 
GADTブランチの今
GADTブランチの今GADTブランチの今
GADTブランチの今
 

Último

Último (11)

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 

関数型言語&形式的手法セミナー(3)