Sphereとともに

scalaとかplayframeworkとか。技術ブログにしたいなと。環境は Windows7x64, mac です。たまに声優さん情報が混ざります。最近ちょっとClojure触りました。

gcli で作ったものを動かしたら・・・

DEPRECATED Action signature.  Must be `cli.ActionFunc`.  This is an error in the application.  Please contact the distributor of this application if this is not you.  See https://github.com/urfave/cli/blob/master/CHANGELOG.md#deprecated-cli-app-action-signature

というメッセージが出た 自分が定義したコマンドの戻りの型定義をしてやればOKだった

func CmdInsert(c *cli.Context) {
}

func CmdInsert(c *cli.Context) error {
  return nil
}

Go言語によるWebアプリケーション開発

Go言語によるWebアプリケーション開発

Scala で 文字列の配列を日本語の読み順に並び替える方法

Scala Seq[String] は以下のようにすることで並び替えが可能 stackoverflow.com

Scalaスケーラブルプログラミング第2版

Scalaスケーラブルプログラミング第2版

DDDを学ぶ その1

以前ザーッと本を読んだものの正直DDDのことを全然理解できていなかった

DDDConf01

togetter.com

に参加して自分の中でやっぱりDDD必要だなってなったのと

今自分の関わっているプロジェクトが複雑になってきて、自分自身のコードがその場しのぎで書いているような感じになってきてしまっているので、再度DDD入門しようと思う。

DDDの本を読んでいて難しいのはやはり、ページ数多くて用語がたくさん出てきてどの用語が何を表しているのかが頭に入ってこないところだと思う。

というわけで用語について簡単に押さえることで少しでも本を読み進められるようになろうと思う。

戦略的モデリング

戦略的設計の原則

コンテキストマッピング

境界づけられたコンテキスト = ドメインモデルを適用する際の概念的境界

戦術的モデリング

重要な概念

集約

戦術的モデリングツール

集約 エンティティ 値オブジェクト サービス ドメインイベント

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)

実践ドメイン駆動設計

実践ドメイン駆動設計

neo4jでスフィアの共演作品を出してみる

データの準備

ここが一番大変
Wikipediaから2016/05/07現在の登録情報を抜き出してcsv形式にします。

docs.google.com

import

LOAD CSV WITH HEADERS FROM "file:///anime.csv" AS csvLine
MERGE (s: 声優 {名前: csvLine.名前})
MERGE (a: アニメ {作品名: csvLine.作品名, 放映年: csvLine.放映年})
CREATE (s)-[:出演]->(a)

表示

MATCH (n) RETURN n

f:id:FScoward:20160507171537p:plain

設定を変更しないで表示させると350件表示までしてくれないのでInitial Node Displayを1000に変えておくとよし。

あやひーと他のメンバーとの共演作品をグラフ化

MATCH (a: 声優{名前: "高垣彩陽"})-[r:出演]->(b),
(b)<--(s)
WHERE (s.名前="豊崎愛生")
RETURN a,b,s

f:id:FScoward:20160507171449p:plain

MATCH (a: 声優{名前: "高垣彩陽"})-[r:出演]->(b),
(b)<--(s)
WHERE (s.名前="戸松遥")
RETURN a,b,s

f:id:FScoward:20160507171423p:plain

MATCH (a: 声優{名前: "高垣彩陽"})-[r:出演]->(b),
(b)<--(s)
WHERE (s.名前="寿美菜子")
RETURN a,b,s

f:id:FScoward:20160507171657p:plain

2010年の共演

MATCH (a: 声優{名前: "高垣彩陽"})-[r:出演]->(b),
(b)<--(s)
WHERE (b.放映年="2010年")
RETURN a,b,s

f:id:FScoward:20160507171927p:plain

4人全員が出演している作品

MATCH (a: 声優{名前: "高垣彩陽"})-[r:出演]->(b),
(b)<--(s: 声優{名前: "豊崎愛生"}),
(b)<--(s2: 声優{名前: "戸松遥"}),
(b)<--(s3: 声優{名前: "寿美菜子"})
RETURN a,b,s,s2,s3

f:id:FScoward:20160507175636p:plain

そふてにっ に4人出てたんだ・・・知らんかった

neo4j ローカルファイルインポート

ファイルを用意

id,name
1,"高垣彩陽"
2,"豊崎愛生"
3,"寿美菜子"
4,"戸松遥"
5,"雨宮天"
6,"夏川椎菜"
7,"麻倉もも"
id,name
1,Sphere
2,TrySail
actorId,unitId
1,1
2,1
3,1
4,1
5,2
6,2
7,2

ファイル格納

Neo4jのDatabase Locationで指定しているディレクトリ配下にimportというフォルダを用意してそこにcsvファイルを格納する。

C:\Users\FScoward\Documents\Neo4j\default.graphdb\import\seiyu.csv

LOAD CSVでファイルをインポートする

MATCH (n) DELETE n

LOAD CSV WITH HEADERS FROM "file:///seiyu.csv" AS csvLine
CREATE (a: Actor {actorId: toInt(csvLine.id), name: csvLine.name} )

LOAD CSV WITH HEADERS FROM "file:///unit.csv" AS csvLine
CREATE (u: Unit {unitId: toInt(csvLine.id), name: csvLine.name} )


LOAD CSV WITH HEADERS FROM "file:///belong.csv" AS csvLine
MATCH (a: Actor {actorId: toInt(csvLine.actorId)}), (u: Unit {unitId: toInt(csvLine.unitId)})
CREATE (a)-[:BELONG]->(u)

f:id:FScoward:20160507120856p:plain

グラフ型データベース入門 - Neo4jを使う

グラフ型データベース入門 - Neo4jを使う

グラフデータベース ―Neo4jによるグラフデータモデルとグラフデータベース入門

グラフデータベース ―Neo4jによるグラフデータモデルとグラフデータベース入門

はじめてのneo4j

neo4j をダウンロードして起動して、パスワード設定をすること。

github.com

f:id:FScoward:20160430105248j:plain

グラフ型データベース入門 - Neo4jを使う

グラフ型データベース入門 - Neo4jを使う