テック

Scala traitの無名クラスmixin

絶対忘れるので書いておく。 traitのメソッドのみ使いたい場合、無名クラスにtrait mixinすれば簡単に利用できる。 このように対象のtraitがあった場合、 trait Job { def p(str:String) = {println(str); str} } ダメなケース。 new Job() traitそのものは…

Haskell AtCoder 自分用コピペ保管場所

すぐコピペして使う用の自分用メモ AtCoder用の標準入力の受け取り -- 整数の入力 a <- readLn --文字列の入力 w <- words <$> getLine [w1, w2] <- words <$> getLine -- スペース区切り整数の入力 n <- map read . words <$> getLine :: IO [Int] [n,m,x] …

Haskell accumulatorがリストとなるfold関数の学習

employment.en-japan.com このページの下のコード部分がすぐに把握できなかったんだけど、整理するとなるほどな。と納得できた。 > foldl plusEach [0] [[1, 11], [1, 11], [3]] [5,15,15,25] 整理 plusEachの定義はページとは違うけど要約するとこんな感じ…

Haskell モナドについての学習

モナド モナドはバインド (>>=)関数をサポートするアプリカティブファンクターの一種。 (>>=)関数の定義。 (>>=) :: (Monad m) => m a -> (a -> m b) -> m b Monadという文脈に包んだ値を、値を取る関数に対して渡す。と読める。 適用例。 ghci> Just 3 >>= …

Haskell モノイドの学習

newtype newtypeはある型を値コンストラクタで包んで新しい型を作成する。 newtypeはdataキーワードの作用ととてもよく似ているが、 1つの値コンストラクタに1つのフィールドのみ定義できる dataより高速に作用する。らしい。 ghci> newtype CharList = Char…

Haskell アプリカティブファンクターの学習

アプリカティブファンクター ファンクターの関数適用 アプリカティブファンクターの前にファンクターの関数適用について。 今まではfmap (*2) [1,2,3]のように引数に値を返す関数(*2)を定義していた。 これを let a = fmap (*) [1,2,3] ghci> :t a a :: Num …

Scala 式結果の変数代入と関数オブジェクトについての学習

変数の遅延評価 lazyキーワードを使用するとその変数にアクセスするまで評価が遅延する。 scala> val date = new java.util.Date date: java.util.Date = Wed May 06 18:59:57 JST 2020 scala> lazy val date = new java.util.Date date: java.util.Date = <lazy> </lazy>…

Haskell RandomパッケージとbyteStringの学習

Randomパッケージのインストール 多分、--libをつけないとexecutableじゃないと怒られる。 $ brew install cabal-install $ cabal update $ cabal install --lib random random関数 random関数はジェネレーターgを受け取り、乱数aとジェネレーターgを返す。 …

Haskell ファイル入出力の学習

ファイルを読む readfile.hs import Control.Monad import Data.Char main = forever $ do l <- getLine putStrLn $ map toUpper l $ ghc --make readfile.hs $ ./readfile < data.txt getContents関数 入力ストリームから文字列を得る関数。入力ストリーム…

Haskell IOアクション入出力の学習

IOアクション IOアクションは実行されると副作用を含む動作を行い結果を返す。結果に返すべきものがない場合、()空のタプル、Unitを返す。 ghci> :t putStrLn putStrLn :: String -> IO () ghci> :t putStrLn "Hello World" putStrLn "Hello World" :: IO ()…

Haskell クラス型とFunctor型クラスを学習する

クラス型 classキーワードを使用して定義する。EqやOrdはクラス型となり、データ型はクラス型を指定することでクラス型のインスタンスとして振舞うことができる。 クラス型はオブジェクト指向言語でいうところのインターフェースのように、インスタンスが持…

Haskell データ型の定義を学習する

データ型を定義する dataキーワードで定義する。 data MyBool = False | True MyBoolというデータ型はTrueまたはFalseの値コンストラクタを受け取る。型名及び、値コンストラクタは大文字から始まる必要がある。 値コンストラクタには引数を与えることができ…

Haskell パターンマッチを学習する

パターンマッチ 引数の値による条件分岐が行える。オシャレ。上から条件に合った式が見つかれば、以降の式は評価されない。 lucky :: Int -> String lucky 7 = "lucky number seven!" lucky x = "out of lucky" ghci> lucky 2 "out of lucky" ghci> lucky 7 …

Haskell 型変数と型クラス

型の確認 ghci> :t 'a' 'a' :: Char ghci> :t 1 1 :: Num p => p ghci> :t "string" "string" :: [Char] ghci> :t True True :: Bool ghci> :t [1,2] [1,2] :: Num a => [a] ghci> :t (1,2) (1,2) :: (Num a, Num b) => (a, b) 関数の型宣言 文字列を受け取…

Haskell タプルの取り扱い

タプル タプルはサイズ固定だが、違った型を収めることができる。 ghci> (1, 3) (1,3) ghci> (1, 'a', "Hello") (1,'a',"Hello") サイズが違ったタプルは違った型として解釈する。 ghci> [(1,3),(4,5,6)] <interactive>:103:8: error: • Couldn't match expected type ‘(a</interactive>…

Haskell リスト内包表記

Haskell リスト内包表記の整理。 <-でリストの各要素を束縛する。|以前の記述はリスト内表記の出力を表す ghci> [x*2 | x <- [1..10]] [2,4,6,8,10,12,14,16,18,20] フィルタリングして束縛することも可能。 ghci> [x*2 | x <- [1..10], x*2 >= 8] [8,10,12,…

Haskell 関数の定義とリスト操作関数

最近、Haskellの入門書を読んでいて、読んでる最中はなるほど!っと感動するんだけど、読んだ端から忘れていってしまうので、最初から読んだことをメモしておく。 一応、復習にもなるかな(^_^;) 演算の順序指定 ghci> 1 + 2 * 3 7 ghci> (1 + 2) * 3 9 関数…

PlayFramework Actionメソッドを拡張した独自アクションを作成する

例えば、各コントローラー、メソッド単位で認可の判断をする場合など、メソッド側にパターンマッチを書いてももちろんいいんだけど、以下のようにActionメソッドを拡張したメソッドに渡して透過的に確認することもできる。 def index() = SignedAction{ impl…

PlayFramework Anormを使用してDBへ問い合わせを行う

AnormはJDBCインスタンスを利用して、シンプルなDBレコード操作を提供する。 JDBCで書くSQLとの違いは、 ScalaオブジェクトにマッピングするParserを定義することで、ユーザが定義したcase class型のListを作成することが簡略化できる。 PreparedStatementの…

PlayFramework JSからのプリフライトリクエストを検証する

CSRFとプリフライトリクエスト PlayFrameworkは通常の入力フォームからのリクエストはCSRFFileterが常備されていてhelperでform生成している限り問題なく対策できるんだけど、JSからのPOSTメソッドなんかにCSRFTokenを付与して検証するのは結構手間。 いくら…

PlayFramework API用Jsonの出力

PlayFrameworkでWebAPIとして動作するJsonを出力する。 基本形 OkメソッドにJsonValueオブジェクトを渡せば、'Content-Type: application/json'が吐かれる。 Ok( data:JsonValue ) 以下、JsonValueの作成方法を紹介します。 文字列から生成 var jsonValue = …

書籍:Docker/Kubernetes 実践コンテナ開発入門 感想

この書籍を購入する以前もDockerは触っていたんだけど、都度調べながらコマンドを実行したり、ymlを書いたりしてた。 基本を学びたいなー。が半分、Kubernetes触ってみたいなー(笑)。が半分で本書を購入。 Dockerの基本的なコマンドから始まって、DockerHub…

書籍:HTML5/CS3モダンコーディング 感想

僕は前職で一応は、10年以上Webサービスの開発や運用をしていたんだけど、仕事のメインは、 なんと管理職だったのでチームマネジメント スマートフォンのリクエストに応じたAPIの設計・開発 AWS・インフラの構築と運用 主にDBとキャッシュ周りのパフォーマン…

書籍:データ収集からWebアプリ開発まで 実践で学ぶ機械学習活用ガイド 感想

機械学習はUdemyのキカガクの講座を購入したり、オライリーのPythonではじめる機械学習でscikit-learnを触ってたりで軽く遊んでた程度。 機械学習したpredictしたものをどうアプリケーションと連携するか?が興味あって購入した。 購入して気がついたんだけ…

書籍:グラフ型データベース入門 - Neo4jを使う 感想

Neo4jで遊んでいるとどんどん興味が湧いてきて購入。というかNeo4jの日本語の書籍ってこれだけじゃないのかな? グラフ型DBとは? ちょっとだけ説明。 要はRDBのリレーションに 指向性を持たせることがでる リレーションにデータを持つことができる。 RDBで…

書籍:オライリー:シングルページWebアプリケーション 感想

こちらも終わらせていたので感想を。 ハンズオン形式でJS (Jquery) + Node.js (Express) + MongoDBでチャットアプリを構築する。 今だと、MongoDBなんかはDockerでサクっと用意できるので簡単に試せたりできた。 MongoDBにはユーザ情報とそのログイン状態が…

Vue.js ファイルアップロード前のイメージプレビュー

フォーム選択した画像をブラウザ上にプレビュー表示する。 アップロードフォーム <form enctype="multipart/form-data"> <div> <input @change="changeFile" type="file" name="upfile[]" multiple accept="image/*" /> <img v-for="(img, idx) in uploadedImage" :key="idx" :src="img.src" /> </div> </form> のようなマークアップを記述する。 accept="image/*"を指定しておくとスマートフォン…

書籍:オライリー:サーバレスシングルページアプリケーション 感想

書籍、オライリー サーバレスシングルページアプリケーションの感想 JS (Jquery) + ASW ( S3, IAM、Cognito, Lambda, API Gateway, DynamoDB )を使用した簡単なクイズアプリをハンズオン形式で作成していく。 また、本書ではフルスクラッチというわけけなく…

技術評論社:Vue.js入門 基礎から実践アプリケーション開発まで の感想

技術評論社 Vue.js入門 基礎から実践アプリケーション開発まで を完走した。 自分は以前に他の入門書一冊を済ませているので基本的な文法や考え方は理解していたつもり。反面、コンポーネントの設計や応用をもう少し勉強したかったので購入した。 (function(…

Vue.jsコンポーネントのvue2-google-mapsを使用する

Vue.jsコンポーネント化されたGoogleMaps、vue2-google-mapsを使用する。 github.com www.npmjs.com API Keyの取得 まずはgoogle developer console、 Google Cloud Platform からAPI Key取得する。 projectを作成、または選択して ライブラリ - Maps JavaSc…