タグ

ブックマーク / tototoshi.hatenablog.com (19)

  • DIについてあれこれ - tototoshi の日記

    Dependency Injectionとはコンポーネント間の依存関係をプログラムのソースコードから排除し、外部の設定ファイルなどで注入できるようにするソフトウェアパターンである ってwikipedia先生が言ってました。 Scalaにおける最適なDependency Injectionの方法を考察する 〜なぜドワンゴアカウントシステムの生産性は高いのか〜 - Qiita を読んでいろいろ考えたので、なんで今さらって感じのことを書きます。 ScalaでDIというとDIコンテナとかCake PatternとかReader Monadとかって話になっちゃうんですが、これらはいかにかっこよくDIするかの話であって、別にこういった道具やパターンを使わなくてもDIは可能という話です。 Constructor Injection 簡単な例で考えます。今ここにUserRepositoryにべったり依存し

    DIについてあれこれ - tototoshi の日記
    terazzo
    terazzo 2015/12/04
  • Slick のコードを生成する sbt プラグインを作りました - tototoshi の日記

    Slick コードを生成のイブラリがあり、公式のほうにいくつか使い方のサンプルがありますが、毎回コピペするのもなあと思って sbt プラグインにしました。今のところ Slick 2.1.0 に依存しています。Slick 3.0.0 が出たらそれ用のバージョンも出そうと思います。 インストールは plugins.sbt に addSbtPlugin を加えた上で、コード生成に使う JDBC ドライバを追加します。 // plugins.sbt addSbtPlugin("com.github.tototoshi" % "sbt-slick-codegen" % "0.1.0") // Database driver // For example, when you are using PostgreSQL libraryDependencies += "org.postgresql" % "

    Slick のコードを生成する sbt プラグインを作りました - tototoshi の日記
  • Ansible を使ってみた感想 - tototoshi の日記

    ここ数日 Ansible を触ってみてた。 MoinMoin Wiki のセットアップとか試しにやってみた。 tototoshi/ansible-playbook-moinmoin · GitHub Chef の代替というよりも Chef + Capistrano/Fabric という感じ。 インストールが楽。設定ファイルもほとんどなし。 デフォルトでできることが多い。Apache の Basic 認証設定とか PostgreSQL のユーザー作成とかまで最初っから使えるのが良い。 ドキュメントが充実しているしサンプルも併記してくれていて親切。 あまりハマらない。 シンプルで良いツールだと思った。 yaml なので簡単なことは簡単にかけるけれど、手続きっぽいことを書くのは当然つらい。 そこは仕方ないかというところ。まあ数日使った程度ではそこまで困ることはなかった。 シェルスクリプトでは手続

    Ansible を使ってみた感想 - tototoshi の日記
    terazzo
    terazzo 2015/02/12
  • Scala 2.11.3 が生まれる前に死んでしまった話 - tototoshi の日記

    ↓に関して、https://gitter.im/scalajp/public で盛り上がってた内容をまとめました。 なぜこんなことになってしまうのだろう(未調査) https://github.com/skinny-framework/skinny-framework/issues/193 これ Skinny 側で何か work around できないですかね https://github.com/skinny-framework/skinny-framework/issues/193#issuecomment-58773130 2.11.3 を指定して build した Scalatra を scalaVersion := "2.11.0" なアプリから利用するのは問題なさそうだった。となると Scalatra に 2.11.3 でビルドした 2.3.1 を出してもらうようお願いするのが

  • ScalaJP の Gitter がオープンしました - tototoshi の日記

    ScalaJP のメーリングリストでも流れていますが、 Gitter という Github と連携して使えるチャットサービスを利用して、Scala の日語チャットルームができました。(kawachi さんが作ったのかな?)すでに 60 人くらい参加しているようです。 https://gitter.im/scalajp/public Gitter → Twitter Gitter に常駐するのがだるい人用に Twitter bot を作りました。 押そう→ Gitter で発言すると Twitter に流れます。 yuka2py: とりあえずブログに書きましたですー。みなさんありがとうございますー。 http://t.co/HJfaELXstX— scalajp_gitter (@scalajp_gitter) October 4, 2014 Gitter の無料プランは 2 週間しか履歴

    terazzo
    terazzo 2014/10/05
  • 「メンテナンス大変なのでサービス閉じたいです」 - tototoshi の日記

    Web サービスの会社にはイケイケなサービスの陰に隠れて、かつてイケイケだったけど今はイケテナイサービス、とか、ぶっちゃけ最初っからあんまりやる気なかった☆サービス、これどこで拾ってきちゃったのサービス、などなど、惰性で続いちゃってるようなサービスがごろごろあったりします。 そういうイケテナイサービス群はメンテナンスの手間を取らせる物なので、エンジニアとしては閉じてしまいたい。でも非エンジニアとしては閉じたくない。いや、当は閉じたい!でもちょっとは儲かってるし、閉じるとわずかながら存在するユーザーからクレームくるし、連携先の企業とやりとりするのめんどいし、まあいろいろめんどうそう。 そこで、「イケテナイサービスにはできる限りメンテナンスの手間を払うな」という話がエンジニアのとこにきて「お前なーっ!そのメンテナンスの手間がなーっ!」となり、話がループを始めます。なぜこういう噛み合わない話に

    「メンテナンス大変なのでサービス閉じたいです」 - tototoshi の日記
    terazzo
    terazzo 2014/08/29
  • WEB+DB Press 82 に PHP の記事を書きました - tototoshi の日記

    WEB+DB PRESS Vol.82 作者: 山口徹,Jxck,佐々木大輔,横路隆,加来純一,山伶,大平武志,米川健一,坂登史文,若原祥正,和久田龍,平栗遵宜,伊藤直也,佐藤太一,高橋俊幸,海野弘成,五嶋壮晃,佐藤歩,吉村総一郎,橋翔,舘野祐一,中島聡,渡邊恵太,はまちや2,竹原,河合宜文,WEB+DB PRESS編集部出版社/メーカー: 技術評論社発売日: 2014/08/23メディア: 大型この商品を含むブログを見る 8月23日発売の WEB+DB Press 82 で PHP の記事を書きました。 大規模な PHP プロジェクトをどうやって安全に、というか事故らずに運用していくかという視点で書きました。まあそんなの無理なんで、内容としてはかなり保守的に見えるかもしれません。イケイケ PHP プログラマは嫌がるのかな、わからん、とか思って書きました。 大規模になってくると、も

    WEB+DB Press 82 に PHP の記事を書きました - tototoshi の日記
    terazzo
    terazzo 2014/08/19
  • PHP の file_get_contents は get どころか post も put も delete も upload もできる - tototoshi の日記

    stream_context_create と組み合わせて使います。 手元でてきとーに動かしてた REST API とかで試してます。 get 普通ですね。 <?php $content = json_decode(file_get_contents("http://localhost:5000/api/note/161")); post <?php $context = stream_context_create( array( 'http' => array( 'method'=> 'POST', 'header'=> 'Content-type: application/json; charset=UTF-8', 'content' => json_encode( array( 'title' => 'file_get_contents で POST', 'raw' => "file

    PHP の file_get_contents は get どころか post も put も delete も upload もできる - tototoshi の日記
    terazzo
    terazzo 2014/06/10
  • Play 2.3 がリリースされたので変更点と試し方を説明します - tototoshi の日記

    http://www.playframework.com/documentation/2.3.x/Highlights23 https://groups.google.com/forum/#!msg/play-framework/bTvJbeR_zvU/J3reqk6Xo4AJ 変更点は以下の通り 新規プロジェクトを作るのに今までは play new コマンドを使っていたけれど Typesafe Activator を使うようになった。 asset のコンパイルに sbt-web を利用するようになった(sbt-web については http://slides.pab-tech.net/sbt-web/ を見るとよい) 。 Java8 サポート。Java 6,7 も引き続き使えます。 Play-Java のパフォーマンス向上 Scala 2.11 サポート (2.10 も引き続きサポート)

    Play 2.3 がリリースされたので変更点と試し方を説明します - tototoshi の日記
  • Scala.js について - tototoshi の日記

    Sendagaya.js(仮) で Scala.js について LT しました。 資料はこちら http://tototoshi.github.io/slides/sendagaya-js-scala-js/ スライドは Scala.js を使って作ってみました。 ソースコードはこちら。 tototoshi/scala-js-slide Scala.js は以前から知っていましたが、今回初めてさわりました。意外にサクサク書けました。ふむふむ、なんだちゃんと動くじゃないか、という感じ。 特にハマりどころはなかったし、ScalaJavaScript に変換されるということだけで十分面白いです。Scala 好きな方は一度試して見ると良いと思います。Scala の学習コストを考えたら Scala.js の学習コストはかなり低いです。そして何より心をざわつかせる何かがあります。 仕事で使うのは

    Scala.js について - tototoshi の日記
  • Scala のモデルクラスでプライマリキーとかをどう扱うかという話 - tototoshi の日記

    お悩み相談です。 Java とか Ruby、少なくとも ActiveRecord とか Hibernate とかではあまり気にならない話です。 Scala で例えば Slick や Anorm, scalikejdbc などのクエリのサポートのみでモデルクラスの設計はユーザーに任されているものだと、プライマリキーなどのデータベースにレコードを保存した時点で値が決まるフィールドの型をどうすべきか悩みます。 例えば次のような user テーブルについて考えてみます。id カラムがプライマリキーで、データベースの自動採番を利用します。また、created_at は省略するとデフォルト値をデータベースから取得します。 -- postgresql CREATE TABLE user( id serial PRIMARY KEY, firstName VARCHAR(30) NOT NULL, las

    Scala のモデルクラスでプライマリキーとかをどう扱うかという話 - tototoshi の日記
    terazzo
    terazzo 2013/08/04
  • Play 2.2, 2.3 Roadmap - tototoshi の日記

    https://docs.google.com/document/d/11sVi1-REAIDFVHvwBrfRt1uXkBzROHQYgmcZNGJtDnA/pub Scala の重要と思うとこだけピックアップ。 2.2 Typesafe Activator Typesafe Activator っていうブラウザからプロジェクトのテンプレートを作ったり、開発できたりしちゃうなんだかすごいもの(なんだかすごいので是非触ってみましょう)があり、それのサポートが進められます。 使用する sbt が 0.13 になる バージョン上げるだけと思ったあなた。残念でした! sbt ですよこれは! sbt は 0.13 で build.sbt がパワーアップするので、今 Build.scala で設定しているのを build.sbt に移行しようっていう計画のようです。 ivy リポジトリ、ドキュメント

    Play 2.2, 2.3 Roadmap - tototoshi の日記
  • コンパイル中に音楽を流せる sbt プラグインを作りました。 - tototoshi の日記

    Scala のコンパイルが遅い件は「Scala コンパイル 遅い」とかで適当にググればいいと思います。 https://twitter.com/search?q=Scala%20%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%AB%20%E9%81%85%E3%81%84 コンパイルが遅いと開発速度が当然鈍りますから、Scala にとっては大きな課題なわけですが、バージョンが上がり機能が増えていけば行くほどコンパイル時間は長くなる傾向にあります。 またマクロや implicit conversion などのコンパイル時に解決を行うような機能を多用したりしてもコンパイル時間は長くなります。 解決策としては 良いマシンを買おう!! です。 でも良いマシンを使っても遅いもんは遅いです。で、解決策を考えたのですが、思ったんです。逆に考えたらいいんじゃないかって

    コンパイル中に音楽を流せる sbt プラグインを作りました。 - tototoshi の日記
  • Play flyway プラグインを作りました - tototoshi の日記

    https://github.com/tototoshi/play-flyway Play にはもともと Evolutions というデータベースマイグレーション機能がついていますが、それと同じような機能を Flyway で作りました。 Flyway は Java 製のデータベースマイグレーションライブラリなんですが、Java でコードを書いたり、XML を使ったりではなく、Evolutions と同様に、Plain な SQL ファイルを使うのが基です。 http://flywaydb.org/ Motivation 1 (重要) Play の Evolutions Plugin って実は DBPlugin に依存しているので、DBPlugin を使わない人にとってはちょっともどかしいところがあります。DBPlugin を使わない人ってのは例えば Mongo とか使ってる人 Scali

    Play flyway プラグインを作りました - tototoshi の日記
  • Play 2.x の QueryStringBindable, PathBindable について - tototoshi の日記

    よしださんのこんなツイートを見たので、 https://twitter.com/xuwei_k/status/302445064976732160 Play 2.x ではリクエストの処理をどのコントローラーのどのアクションに任せるか、 conf/routes というファイルで定義します。そのとき、パスやクエリストリングに含まれる文字列を引数としてアクションに渡すことができます。 アクションに渡すときはパスやクエリストリングはアクションの引数の形に変換する必要がありますが、その変換ルールを定めているのが PathBindable[T], QueryStringBindable[T] といった implicit object です。conf/routes では例えば Int などはではデフォルトで変換してくれます。これは QueryStringBindable[Int] を Play 側が定義

    Play 2.x の QueryStringBindable, PathBindable について - tototoshi の日記
    terazzo
    terazzo 2013/02/18
    これでidを受け取って自分でfindByIdするとかいう臭いコードも無くせるのか(DB問い合わせタイミングをどうするかは兎も角。)
  • ScalaLogging の使い方 - tototoshi の日記

    https://github.com/typesafehub/scalalogging Scala 2.10.0 に合わせて ScalaLogging が 1.0.0 としてリリースされました。 ScalaLogging とはその名の通りロギングのためのライブラリです。と言ってもログを出力するためのライブラリではなく、log4j や slf4j を使うのをちょっとだけ楽にしてくれるヘルパーです。 これはなんのためですか? ログ出力処理はたいてい logger.info("Hello!") のように書きます。ログレベルが ERROR だった場合、「Hello!」というメッセージはログに出力されません。当たり前ですね。info メソッドがログレベルが ERROR だからログを吐かないと判断してるからです。 ただし、ログを実際に吐くかどうかは関係なく、info メソッドに渡される引数は評価されて

    ScalaLogging の使い方 - tototoshi の日記
  • Slick ガイド - tototoshi の日記

    この記事は Play or Scala Advent Calendar 2012 の 4日目です 去年 ScalaQuery の記事を書いたのですが、今年はその後継、Slick です。 Slick とは? Slick とは Typesafe stack に名を連ねる Typesafe 社お墨付きの ORM です。以前は ScalaQuery と呼ばれていたものが、Slick と名称を変更し、開発が続けられています。現在の最新は 0.11.2 です。 Slick は Scala 2.10 をベースに開発されていて、マクロなどの新機能も利用されています。現時点ではORMとしてデファクトスタンダードではなく、Squeryl と人気を二分している状態です。 Slick を使うメリット・デメリット Slick のメリットはなんといってもかっこいいシンタックスだと思います。Scala のコレクションの

    Slick ガイド - tototoshi の日記
    terazzo
    terazzo 2012/12/04
    Anorm もうやだーっ
  • 僕達プログラマはちょっとした Excel に Scalaz を使います! - tototoshi の日記

    出オチ乙 この記事は Scalaz Advent Calendar 2012 の 3日目です。 poi.scala という Apache POI のラッパーを教えてもらったのですが、これに Scalaz が使用されていたので紹介します。Scalaz を使って Excel 使うなんて倒錯したなにかを感じます。 "folone/poi.scala · GitHub" https://github.com/folone/poi.scala README には version 0.5 のインストール方法が記載されていますが、0.5 ではまだ Scalaz は導入されていません。 なので試したい方は HEAD を自分でビルドしてください。 ビルドは maven を使っているようですが、scala の version が振られていなかったり、イマイチですね。私は Build.scala を少しいじって

    僕達プログラマはちょっとした Excel に Scalaz を使います! - tototoshi の日記
  • Scalaパターンマッチの Infix Operation Pattern - tototoshi の日記

    Unfiltered を使うときに必要になるのですが、キモ便利です ちょっとテストデータを定義しますね。 case class Person(name: String, age: Int, height: Int) val tanaka = Person("tanaka", 16, 170) 田中君は16才で170cmです。 田中君は case class として定義しました。 case class なので、みんな大好きパターンマッチで分解してフィールドを取り出すことができます。 tanaka match { case Person(name, _, _) => println(name) } 普通ですね。 で、実はこんなことができます。 tanaka match { case name Person (_, _) => println(name) } なにがなんだかわからないかもしれませ

    Scalaパターンマッチの Infix Operation Pattern - tototoshi の日記
  • 1