SlideShare une entreprise Scribd logo
1  sur  27
Télécharger pour lire hors ligne
Persistent の使い方
 ∼ Yesod で使っている Persistent を単体で使う話 ∼


                                  rf
自己紹介
rf
                                        @rf0444
最近ホットな言語

                                         Haskell
今読んでいる本

     「Learn You a Haskell for Great Good!」 (10章)
Persistent


 Yesod を入れると一緒に入ってくるやつ

 DB 部分をやってくれる

 型安全
Persistent

 使えるDB

  SQLite
  MongoDB
  PostgreSQL
  MySQL    (experimental)
インストール
共通

           cabal install persistent-template
SQLite
              cabal install persistent-sqlite
MongoDB
          cabal install persistent-mongoDB
インストール
共通

              cabal install persistent-template
PostgreSQL
             cabal install persistent-postgresql
MySQL
                 cabal install persistent-mysql
つないでみる
つないでみる
SQLite

   {-# LANGUAGE OverloadedStrings #-}

   import Database.Persist.Sqlite

   main = withSqliteConn path $ runSqlConn $ do
    return ()
   where
    path = "hogesql.sqlite3"
つないでみる
MongoDB

{-# LANGUAGE OverloadedStrings #-}

import Database.Persist.MongoDB

main = withMongoDBConn dbname hostname $ runMongoDBConn master $ do
 return ()
where
 hostname = "localhost"
 dbname = "test"
つないでみる
PostgreSQL

{-# LANGUAGE OverloadedStrings #-}

import Database.Persist.Postgresql

main = withPostgresqlConn conf $ runSqlConn $ do
 return ()
where
 conf = "host=localhost port=5432 user=hoge dbname=hoge password=hoge"
つないでみる
MySQL

  import Database.Persist.MySQL

  main = withMySQLConn conf $ runSqlConn $ do
   return ()
  where
   conf = defaultConnectInfo {
     connectHost = "localhost" -- default
     connectPort = 3306 -- default
     connectUser = "hoge" -- default : “root”
     connectPassword = "hoge" -- default : no password
     connectDatabase = "hoge" -- default : “test”
   }
Model の定義

Yesod の Model を使いたい

 import 部分に Yesod に依存する部分があるので、

 そこだけ切り離す

 言語拡張をコード側へ
Model の定義
Yesod の Model.hs           (SQLite)


   model Model where

   import Prelude
   import Yesod
   import Data.Text (Text)
   import Database.Persist.Quasi

   share [mkPersist sqlSettings, mkMigrate "migrateAll"]
     $(persistFileWith lowerCaseSettings "config/models")
Model の定義
Model.hs        (SQLite)

{-# LANGUAGE TypeFamilies, TemplateHaskell, FlexibleContexts, GADTs #-}

model Model where

import Data.Text (Text)
import Database.Persist.Quasi
import Database.Persist.Sqlite
import Database.Persist.TH

share [mkPersist sqlSettings, mkMigrate "migrateAll"]
  $(persistFileWith lowerCaseSettings "config/models")
Model の定義
      Yesod の Model.hs                (MongoDB)


model Model where

import Prelude
import Yesod
import Data.Text (Text)
import Database.Persist.Quasi
import Database.Persist.MongoDB
import Language.Haskell.TH.Syntax

share [mkPersist MkPersistSettings { mpsBackend = ConT ''Action }, mkMigrate "migrateAll"]
  $(persistFileWith lowerCaseSettings "config/models")
Model の定義
      Model.hs         (MongoDB)


{-# LANGUAGE TypeFamilies, TemplateHaskell, FlexibleContexts, GADTs #-}

model Model where

import Data.Text (Text)
import Database.Persist.Quasi
import Database.Persist.MongoDB
import Database.Persist.TH
import Language.Haskell.TH.Syntax

share [mkPersist MkPersistSettings { mpsBackend = ConT ''Action }, mkMigrate "migrateAll"]
  $(persistFileWith lowerCaseSettings "config/models")
Model の定義
config/model

              User
                email Text
                password Text Maybe
                UniqueUser email
マイグレーション

実行時に、テーブルがなかったら作ったりしてくれる
やつ

RDB 系で使える

 MongoDB も unique index とかやってくれればいい
 のに・・・
マイグレーション
SQLite
   {-# LANGUAGE OverloadedStrings #-}

   import Database.Persist.Sqlite
   import Model

   main = withSqliteConn path $ runSqlConn $ do
    runMigration migrateAll
    return ()
   where
    path = "hogesql.sqlite3"
マイグレーション
SQLite
 $ ls -F
 Model.hs	   config/	 	   main.hs
マイグレーション
SQLite
 $ ls -F
 Model.hs	 config/	 	    main.hs
 $ runhaskell main.hs
マイグレーション
SQLite
 $ ls -F
 Model.hs	 config/	 	     main.hs
 $ runhaskell main.hs
 Migrating: CREATE TABLE "user"("id" INTEGER PRIMARY KEY,"email"
 VARCHAR NOT NULL,"password" VARCHAR NULL,CONSTRAINT
 "unique_user" UNIQUE ("email"))
マイグレーション
SQLite
 $ ls -F
 Model.hs	 config/	 	       main.hs
 $ runhaskell main.hs
 Migrating: CREATE TABLE "user"("id" INTEGER PRIMARY KEY,"email"
 VARCHAR NOT NULL,"password" VARCHAR NULL,CONSTRAINT
 "unique_user" UNIQUE ("email"))
 $ ls -F
 Model.hs	 	       config/	 	   	   hogesql.sqlite3	 	 main.hs
マイグレーション
SQLite
 $ ls -F
 Model.hs	 config/	 	         main.hs
 $ runhaskell main.hs
 Migrating: CREATE TABLE "user"("id" INTEGER PRIMARY KEY,"email"
 VARCHAR NOT NULL,"password" VARCHAR NULL,CONSTRAINT
 "unique_user" UNIQUE ("email"))
 $ ls -F
 Model.hs	 	       config/	 	      	  hogesql.sqlite3	 	 main.hs
 $ sqlite3 hogesql.sqlite3 .table
 user
あとは
 {-# LANGUAGE OverloadedStrings #-}

 import Database.Persist.Sqlite
 import Model

 main = withSqliteConn path $ runSqlConn $ do
  runMigration migrateAll
  insert $ User {
    userEmail = "hoge@hoge.jp",
    userPassword = Just "hoge"
  }
  return ()
 where
  path = "hogesql.sqlite3"
あとは

$ runhaskell main.hs

$ sqlite3 hogesql.sqlite3 "select * from user"
1|hoge@hoge.jp|hoge
Haskellday rf

Contenu connexe

Tendances

Offline Hoogleで何処でもはすはす
Offline Hoogleで何処でもはすはすOffline Hoogleで何処でもはすはす
Offline Hoogleで何処でもはすはすKiwamu Okabe
 
Rails3.1rc4を試してみた
Rails3.1rc4を試してみたRails3.1rc4を試してみた
Rails3.1rc4を試してみたTakahiro Hidaka
 
Web API デザインの鉄則 第2章
Web API デザインの鉄則 第2章Web API デザインの鉄則 第2章
Web API デザインの鉄則 第2章Taichi Watanabe
 
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」Tsuyoshi Yamamoto
 
カジュアルにソースコードリーディング
カジュアルにソースコードリーディングカジュアルにソースコードリーディング
カジュアルにソースコードリーディングAkihiro Okuno
 
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2Atsuo Yamasaki
 
Shibuya Perl Mongers#12 No Sql Couch Db
Shibuya Perl Mongers#12 No Sql Couch DbShibuya Perl Mongers#12 No Sql Couch Db
Shibuya Perl Mongers#12 No Sql Couch DbMakoto Ohnami
 
Chiba.pm #1 lt @studio3104
Chiba.pm #1 lt @studio3104Chiba.pm #1 lt @studio3104
Chiba.pm #1 lt @studio3104Satoshi Suzuki
 
Redis Intro Osc2010 Tokyo Spring
Redis Intro Osc2010 Tokyo SpringRedis Intro Osc2010 Tokyo Spring
Redis Intro Osc2010 Tokyo SpringMakoto Ohnami
 
Yapc -asia 2012 lt @studio3104
Yapc -asia 2012 lt @studio3104Yapc -asia 2012 lt @studio3104
Yapc -asia 2012 lt @studio3104Satoshi Suzuki
 
System4 detail for_h
System4 detail for_hSystem4 detail for_h
System4 detail for_hJun Chiba
 
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用純生 野田
 
GradleによるG*なビルドシステムの構築
GradleによるG*なビルドシステムの構築GradleによるG*なビルドシステムの構築
GradleによるG*なビルドシステムの構築Masatoshi Hayashi
 
Log analysis by using elasticsearch,kibana and fluentd.
Log analysis by using elasticsearch,kibana and fluentd.Log analysis by using elasticsearch,kibana and fluentd.
Log analysis by using elasticsearch,kibana and fluentd.Tadayasu Yotsu
 
Next-L Enju 開発WS #03 Ruby on Railsの使い方
Next-L Enju 開発WS #03 Ruby on Railsの使い方Next-L Enju 開発WS #03 Ruby on Railsの使い方
Next-L Enju 開発WS #03 Ruby on Railsの使い方Kosuke Tanabe
 
Mac_Terminal_ver1.0
Mac_Terminal_ver1.0Mac_Terminal_ver1.0
Mac_Terminal_ver1.0Satoshi Kume
 
Start printf 6_takarakasai
Start printf 6_takarakasaiStart printf 6_takarakasai
Start printf 6_takarakasaitakara kasai
 
RailsエンジニアのためのSQLチューニング速習会
RailsエンジニアのためのSQLチューニング速習会RailsエンジニアのためのSQLチューニング速習会
RailsエンジニアのためのSQLチューニング速習会Nao Minami
 

Tendances (20)

Offline Hoogleで何処でもはすはす
Offline Hoogleで何処でもはすはすOffline Hoogleで何処でもはすはす
Offline Hoogleで何処でもはすはす
 
Rails3.1rc4を試してみた
Rails3.1rc4を試してみたRails3.1rc4を試してみた
Rails3.1rc4を試してみた
 
Web API デザインの鉄則 第2章
Web API デザインの鉄則 第2章Web API デザインの鉄則 第2章
Web API デザインの鉄則 第2章
 
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
 
カジュアルにソースコードリーディング
カジュアルにソースコードリーディングカジュアルにソースコードリーディング
カジュアルにソースコードリーディング
 
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2
 
Shibuya Perl Mongers#12 No Sql Couch Db
Shibuya Perl Mongers#12 No Sql Couch DbShibuya Perl Mongers#12 No Sql Couch Db
Shibuya Perl Mongers#12 No Sql Couch Db
 
Chiba.pm #1 lt @studio3104
Chiba.pm #1 lt @studio3104Chiba.pm #1 lt @studio3104
Chiba.pm #1 lt @studio3104
 
Redis Intro Osc2010 Tokyo Spring
Redis Intro Osc2010 Tokyo SpringRedis Intro Osc2010 Tokyo Spring
Redis Intro Osc2010 Tokyo Spring
 
ActiveHash
ActiveHashActiveHash
ActiveHash
 
Yapc -asia 2012 lt @studio3104
Yapc -asia 2012 lt @studio3104Yapc -asia 2012 lt @studio3104
Yapc -asia 2012 lt @studio3104
 
System4 detail for_h
System4 detail for_hSystem4 detail for_h
System4 detail for_h
 
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
 
GradleによるG*なビルドシステムの構築
GradleによるG*なビルドシステムの構築GradleによるG*なビルドシステムの構築
GradleによるG*なビルドシステムの構築
 
Log analysis by using elasticsearch,kibana and fluentd.
Log analysis by using elasticsearch,kibana and fluentd.Log analysis by using elasticsearch,kibana and fluentd.
Log analysis by using elasticsearch,kibana and fluentd.
 
Next-L Enju 開発WS #03 Ruby on Railsの使い方
Next-L Enju 開発WS #03 Ruby on Railsの使い方Next-L Enju 開発WS #03 Ruby on Railsの使い方
Next-L Enju 開発WS #03 Ruby on Railsの使い方
 
Mac_Terminal_ver1.0
Mac_Terminal_ver1.0Mac_Terminal_ver1.0
Mac_Terminal_ver1.0
 
Silkについて
SilkについてSilkについて
Silkについて
 
Start printf 6_takarakasai
Start printf 6_takarakasaiStart printf 6_takarakasai
Start printf 6_takarakasai
 
RailsエンジニアのためのSQLチューニング速習会
RailsエンジニアのためのSQLチューニング速習会RailsエンジニアのためのSQLチューニング速習会
RailsエンジニアのためのSQLチューニング速習会
 

Similaire à Haskellday rf

Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方linzhixing
 
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情takezoe
 
RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成弘毅 露崎
 
おもにEXcelだけで出来る自動化技術
おもにEXcelだけで出来る自動化技術おもにEXcelだけで出来る自動化技術
おもにEXcelだけで出来る自動化技術Takanobu Mizuta
 
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略takezoe
 
Spring Data in a Nutshell
Spring Data in a NutshellSpring Data in a Nutshell
Spring Data in a NutshellTsuyoshi Miyake
 
20160220 MSのビッグデータ分析基盤 - データマイニング+WEB@東京
20160220 MSのビッグデータ分析基盤 - データマイニング+WEB@東京20160220 MSのビッグデータ分析基盤 - データマイニング+WEB@東京
20160220 MSのビッグデータ分析基盤 - データマイニング+WEB@東京Koichiro Sasaki
 
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-uedayou
 
2011年2月9日第130回FxUG勉強会@東京第一打者空振り三振
2011年2月9日第130回FxUG勉強会@東京第一打者空振り三振2011年2月9日第130回FxUG勉強会@東京第一打者空振り三振
2011年2月9日第130回FxUG勉強会@東京第一打者空振り三振Sadao Tokuyama
 
Best practice laravel
Best practice laravelBest practice laravel
Best practice laravelRisa Ohnishi
 
Go と Couchbase で microservices を作るには?
Go と Couchbase で microservices を作るには?Go と Couchbase で microservices を作るには?
Go と Couchbase で microservices を作るには?Yusuke Komatsu
 
CSS Nite in Matsuyama vol.1 - session 4
CSS Nite in Matsuyama vol.1 - session 4 CSS Nite in Matsuyama vol.1 - session 4
CSS Nite in Matsuyama vol.1 - session 4 arisu yano
 
Java ee6 with scala
Java ee6 with scalaJava ee6 with scala
Java ee6 with scalaSatoshi Kubo
 
データサイエンティスト必見!M-1グランプリ
データサイエンティスト必見!M-1グランプリデータサイエンティスト必見!M-1グランプリ
データサイエンティスト必見!M-1グランプリSatoshi Kitajima
 
Mongo dbのgridfsについて
Mongo dbのgridfsについてMongo dbのgridfsについて
Mongo dbのgridfsについてMasahiro Saito
 
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道20123時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012Yusuke Ando
 

Similaire à Haskellday rf (20)

Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
 
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情
 
RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成
 
おもにEXcelだけで出来る自動化技術
おもにEXcelだけで出来る自動化技術おもにEXcelだけで出来る自動化技術
おもにEXcelだけで出来る自動化技術
 
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略
 
Spring Data in a Nutshell
Spring Data in a NutshellSpring Data in a Nutshell
Spring Data in a Nutshell
 
20160220 MSのビッグデータ分析基盤 - データマイニング+WEB@東京
20160220 MSのビッグデータ分析基盤 - データマイニング+WEB@東京20160220 MSのビッグデータ分析基盤 - データマイニング+WEB@東京
20160220 MSのビッグデータ分析基盤 - データマイニング+WEB@東京
 
Scala on Hadoop
Scala on HadoopScala on Hadoop
Scala on Hadoop
 
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
 
2011年2月9日第130回FxUG勉強会@東京第一打者空振り三振
2011年2月9日第130回FxUG勉強会@東京第一打者空振り三振2011年2月9日第130回FxUG勉強会@東京第一打者空振り三振
2011年2月9日第130回FxUG勉強会@東京第一打者空振り三振
 
Best practice laravel
Best practice laravelBest practice laravel
Best practice laravel
 
Django boodoo
Django boodooDjango boodoo
Django boodoo
 
第5回LinkedData勉強会@yayamamo
第5回LinkedData勉強会@yayamamo第5回LinkedData勉強会@yayamamo
第5回LinkedData勉強会@yayamamo
 
Go と Couchbase で microservices を作るには?
Go と Couchbase で microservices を作るには?Go と Couchbase で microservices を作るには?
Go と Couchbase で microservices を作るには?
 
CSS Nite in Matsuyama vol.1 - session 4
CSS Nite in Matsuyama vol.1 - session 4 CSS Nite in Matsuyama vol.1 - session 4
CSS Nite in Matsuyama vol.1 - session 4
 
Java ee6 with scala
Java ee6 with scalaJava ee6 with scala
Java ee6 with scala
 
はじめてのMongoDB
はじめてのMongoDBはじめてのMongoDB
はじめてのMongoDB
 
データサイエンティスト必見!M-1グランプリ
データサイエンティスト必見!M-1グランプリデータサイエンティスト必見!M-1グランプリ
データサイエンティスト必見!M-1グランプリ
 
Mongo dbのgridfsについて
Mongo dbのgridfsについてMongo dbのgridfsについて
Mongo dbのgridfsについて
 
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道20123時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
 

Plus de rf0444

FRP in Practice
FRP in PracticeFRP in Practice
FRP in Practicerf0444
 
Start FRP
Start FRPStart FRP
Start FRPrf0444
 
PFDS 11.2.2
PFDS 11.2.2PFDS 11.2.2
PFDS 11.2.2rf0444
 
PFDS 10.1.2
PFDS 10.1.2PFDS 10.1.2
PFDS 10.1.2rf0444
 
PFDS 9.3.2
PFDS 9.3.2PFDS 9.3.2
PFDS 9.3.2rf0444
 
PFDS 9.3.1
PFDS 9.3.1PFDS 9.3.1
PFDS 9.3.1rf0444
 
PFDS 8.4.1
PFDS 8.4.1PFDS 8.4.1
PFDS 8.4.1rf0444
 
PFDS 7.4
PFDS 7.4PFDS 7.4
PFDS 7.4rf0444
 
Tapl 5
Tapl 5Tapl 5
Tapl 5rf0444
 
PFDS 6.4.3
PFDS 6.4.3PFDS 6.4.3
PFDS 6.4.3rf0444
 

Plus de rf0444 (11)

SWF
SWFSWF
SWF
 
FRP in Practice
FRP in PracticeFRP in Practice
FRP in Practice
 
Start FRP
Start FRPStart FRP
Start FRP
 
PFDS 11.2.2
PFDS 11.2.2PFDS 11.2.2
PFDS 11.2.2
 
PFDS 10.1.2
PFDS 10.1.2PFDS 10.1.2
PFDS 10.1.2
 
PFDS 9.3.2
PFDS 9.3.2PFDS 9.3.2
PFDS 9.3.2
 
PFDS 9.3.1
PFDS 9.3.1PFDS 9.3.1
PFDS 9.3.1
 
PFDS 8.4.1
PFDS 8.4.1PFDS 8.4.1
PFDS 8.4.1
 
PFDS 7.4
PFDS 7.4PFDS 7.4
PFDS 7.4
 
Tapl 5
Tapl 5Tapl 5
Tapl 5
 
PFDS 6.4.3
PFDS 6.4.3PFDS 6.4.3
PFDS 6.4.3
 

Dernier

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
論文紹介: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
 
論文紹介: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
 
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
 
論文紹介: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
 
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
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです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
 

Dernier (10)

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
論文紹介: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...
 
論文紹介: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
 
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」の紹介
 
論文紹介: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
 
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
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
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
 

Haskellday rf

  • 1. Persistent の使い方 ∼ Yesod で使っている Persistent を単体で使う話 ∼ rf
  • 2. 自己紹介 rf @rf0444 最近ホットな言語 Haskell 今読んでいる本 「Learn You a Haskell for Great Good!」 (10章)
  • 3. Persistent Yesod を入れると一緒に入ってくるやつ DB 部分をやってくれる 型安全
  • 4. Persistent 使えるDB SQLite MongoDB PostgreSQL MySQL (experimental)
  • 5. インストール 共通 cabal install persistent-template SQLite cabal install persistent-sqlite MongoDB cabal install persistent-mongoDB
  • 6. インストール 共通 cabal install persistent-template PostgreSQL cabal install persistent-postgresql MySQL cabal install persistent-mysql
  • 8. つないでみる SQLite {-# LANGUAGE OverloadedStrings #-} import Database.Persist.Sqlite main = withSqliteConn path $ runSqlConn $ do return () where path = "hogesql.sqlite3"
  • 9. つないでみる MongoDB {-# LANGUAGE OverloadedStrings #-} import Database.Persist.MongoDB main = withMongoDBConn dbname hostname $ runMongoDBConn master $ do return () where hostname = "localhost" dbname = "test"
  • 10. つないでみる PostgreSQL {-# LANGUAGE OverloadedStrings #-} import Database.Persist.Postgresql main = withPostgresqlConn conf $ runSqlConn $ do return () where conf = "host=localhost port=5432 user=hoge dbname=hoge password=hoge"
  • 11. つないでみる MySQL import Database.Persist.MySQL main = withMySQLConn conf $ runSqlConn $ do return () where conf = defaultConnectInfo { connectHost = "localhost" -- default connectPort = 3306 -- default connectUser = "hoge" -- default : “root” connectPassword = "hoge" -- default : no password connectDatabase = "hoge" -- default : “test” }
  • 12. Model の定義 Yesod の Model を使いたい import 部分に Yesod に依存する部分があるので、 そこだけ切り離す 言語拡張をコード側へ
  • 13. Model の定義 Yesod の Model.hs (SQLite) model Model where import Prelude import Yesod import Data.Text (Text) import Database.Persist.Quasi share [mkPersist sqlSettings, mkMigrate "migrateAll"] $(persistFileWith lowerCaseSettings "config/models")
  • 14. Model の定義 Model.hs (SQLite) {-# LANGUAGE TypeFamilies, TemplateHaskell, FlexibleContexts, GADTs #-} model Model where import Data.Text (Text) import Database.Persist.Quasi import Database.Persist.Sqlite import Database.Persist.TH share [mkPersist sqlSettings, mkMigrate "migrateAll"] $(persistFileWith lowerCaseSettings "config/models")
  • 15. Model の定義 Yesod の Model.hs (MongoDB) model Model where import Prelude import Yesod import Data.Text (Text) import Database.Persist.Quasi import Database.Persist.MongoDB import Language.Haskell.TH.Syntax share [mkPersist MkPersistSettings { mpsBackend = ConT ''Action }, mkMigrate "migrateAll"] $(persistFileWith lowerCaseSettings "config/models")
  • 16. Model の定義 Model.hs (MongoDB) {-# LANGUAGE TypeFamilies, TemplateHaskell, FlexibleContexts, GADTs #-} model Model where import Data.Text (Text) import Database.Persist.Quasi import Database.Persist.MongoDB import Database.Persist.TH import Language.Haskell.TH.Syntax share [mkPersist MkPersistSettings { mpsBackend = ConT ''Action }, mkMigrate "migrateAll"] $(persistFileWith lowerCaseSettings "config/models")
  • 17. Model の定義 config/model User email Text password Text Maybe UniqueUser email
  • 19. マイグレーション SQLite {-# LANGUAGE OverloadedStrings #-} import Database.Persist.Sqlite import Model main = withSqliteConn path $ runSqlConn $ do runMigration migrateAll return () where path = "hogesql.sqlite3"
  • 20. マイグレーション SQLite $ ls -F Model.hs config/ main.hs
  • 21. マイグレーション SQLite $ ls -F Model.hs config/ main.hs $ runhaskell main.hs
  • 22. マイグレーション SQLite $ ls -F Model.hs config/ main.hs $ runhaskell main.hs Migrating: CREATE TABLE "user"("id" INTEGER PRIMARY KEY,"email" VARCHAR NOT NULL,"password" VARCHAR NULL,CONSTRAINT "unique_user" UNIQUE ("email"))
  • 23. マイグレーション SQLite $ ls -F Model.hs config/ main.hs $ runhaskell main.hs Migrating: CREATE TABLE "user"("id" INTEGER PRIMARY KEY,"email" VARCHAR NOT NULL,"password" VARCHAR NULL,CONSTRAINT "unique_user" UNIQUE ("email")) $ ls -F Model.hs config/ hogesql.sqlite3 main.hs
  • 24. マイグレーション SQLite $ ls -F Model.hs config/ main.hs $ runhaskell main.hs Migrating: CREATE TABLE "user"("id" INTEGER PRIMARY KEY,"email" VARCHAR NOT NULL,"password" VARCHAR NULL,CONSTRAINT "unique_user" UNIQUE ("email")) $ ls -F Model.hs config/ hogesql.sqlite3 main.hs $ sqlite3 hogesql.sqlite3 .table user
  • 25. あとは {-# LANGUAGE OverloadedStrings #-} import Database.Persist.Sqlite import Model main = withSqliteConn path $ runSqlConn $ do runMigration migrateAll insert $ User { userEmail = "hoge@hoge.jp", userPassword = Just "hoge" } return () where path = "hogesql.sqlite3"
  • 26. あとは $ runhaskell main.hs $ sqlite3 hogesql.sqlite3 "select * from user" 1|hoge@hoge.jp|hoge