サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大谷翔平
tototoshi.hatenablog.com
ご近所さんにハロウィン用のかぼちゃを育てている人がいて、毎年ハロウィンになると家の前にかぼちゃで作ったジャック・オー・ランタンを並べている。真似してみた。 ポイント 育てる難易度はあまり高くない。食用かぼちゃと違ってハロウィン用の観賞用かぼちゃは味を気にする必要がない。見た目もきれいな形になるにこしたことはないけれど、いびつだとしてもそれがジャック・オー ・ランタンの味になるので気にすることはない。 難しいのは単純にかぼちゃが大きすぎて扱いづらいということ。できれば協力者が欲しい。 収穫時期はコントロールするのが難しいが、できるだけ遅いほうが良い。ハロウィンかぼちゃは水分が多く腐りやすいので、早すぎるとハロウィンまでに持たずに腐ってしまう。保存方法で工夫の余地はあるとはいえ、収穫して2ヶ月以上持たせるのは難しいようだ。 種購入と苗作り 種はデカかぼちゃとしてはメジャーな品種と思われるアトラ
speakerdeck.com 純粋関数型スタイルのプログラミングは私はあまりやって来なかったんですが、たまには違ったことをやってみようかなと思って発表してみました。年末年始にTypelevelの技術スタックをいろいろ見ててhttp4sとかさわってみてたりしたんですが、その過程でCats Effect 3が気になった感じです。 やはり純粋関数型スタイル自体にはそんなに興味ないんですが、Cats Effectのランタイムは面白くて、それに乗っかるためのフレームワークとして純粋関数型スタイルが要求されるというのはそんなに悪くないなと思いました。あと資料作成や準備の過程でCats Effectの作者の方(Danielさん)のトークを何本かYouTubeで見たんてすが面白すぎる。全部面白い。 Scalaは人気のピーク(ピークと言うほどでもない)を越えてしまって少しコミュニティの熱量は下がってるのか
emacs-libvterm っていうのを見つけたのだけどこれがすごく良いので紹介します。 emacs-libvterm https://github.com/akermu/emacs-libvterm EmacsにはTerminal系の機能としてterm-modeやeshellなどがあるんですが、遅かったり、クセが強かったりで使えてませんでした。一時期それでも使おうとしてたんですがちょっと無理でした。 それがemacs-libvtermはTerminal.appと遜色ないくらいに速く動いてくれます。しかもtmuxもちゃんと動く。 ちなみにneovim/libvterm というやつを元にしてるみたいなのでvim様には頭が上がらないですね。 試し始めはたまになんかもっさりしたり、tigみたいなncurses系のアプリで表示が崩れたりしたんだけどそれは使っている日本語フォントに起因する問題だっ
sbt 1.4.0 から sbtn という機能が追加されました。 https://eed3si9n.com/sbt-1.4.0-beta Native thin client sbt 1.4.0 adds an official native thin client called sbtn that supports all tasks. > https://github.com/sbt/sbtn-dist/releases/tag/v1.4.0-RC2 This lets you run sbt tasks from the system shell as: $ sbtn compile $ sbtn shutdown The native thin client will run sbt (server) as a daemon, which avoids the JVM > spin
JavaでPDFを作成するJasperReportsの使い方について解説します。少し古いライブラリですが企業がバックについてますし、継続的にメンテナンスはされているようです。 JasperReportでPDFを作成するには、 JasperReport Studioでテンプレートを作成する Javaプログラムでデータを流し込んでPDFを作成する と言う手順を踏みます。JasperReport StudioではGUIからText、Imageといったパーツを配置しますが、裏ではjrxml形式のファイルを吐き出しています。このjrxmlをコンパイルした.jasperという拡張子のファイルをJavaのプログラムから読み込み、PDFを作成するというのが通常の手順です。 PDF出力のサンプルコードは次のようになります。大抵の場合はこれで事足りると思います。 // 入力パス、出力パス Path in =
Scalaで独自の例外を定義する場合 class MyException(message: String) extends RuntimeException(message) と case class MyException(message: String) extends RuntimeException(message) のどちらが良いでしょうか。タイトルで言っちゃってますが、まずほとんどの場合はcase classではなくclassを使う方が良いと思います。 case classにすると等価性がそのインスタンスの属性によって判断されるので、同じ属性を持っている例外は同じものと見なされます。 scala> case class MyException(message: String) extends RuntimeException(message) defined class MyE
Akka Streamを使ったサーバーを書いていて、サーバーの終了処理を行う時にstreamを停止させる必要が出てきました。どうしたら良いでしょうか。 いきなり ActorSystem#terminate とりあえずAkka Stream自体の終了のさせ方。これは無理やり ActorSystem#terminate を呼んでも止まることは止まります。 implicit val system = ActorSystem() implicit val materializer = ActorMaterializer() val src: Source[Int, NotUsed] = Source.fromIterator[Int](() => Iterator.continually(1)) val sink: Sink[Int, Future[Int]] = Sink.fold(0)(_ +
混迷極まるScalaのJsonライブラリ事情ですが、最近はcirceというライブラリもメジャーになってきました。ただ個人的にはあまり仕事では採用する気にはならないライブラリです。 catsに依存している circeの売りとして、cats以外のライブラリに依存していないというものがあるんですが、catsに依存してるという時点ですでに判断が別れるところだと思います。私はscalazやcatsは仕事ではほぼ使ったことがないので依存ライブラリがcatsに依存しているのは結構嫌です。またscalaz派から見ても同じようなライブラリが加わるのは嫌でしょう。 shapelessに依存している なぜcirceの人気が出てきたかといえば、おそらくgenericの存在ではないでしょうか。 play-jsonでは毎回 implicit val hogeFormat = Json.Format[Hoge] を書か
不変オブジェクトを使ったプログラムを書く時に便利なcase classですが、case classのメリットを生かしつつ副作用を扱うためにはどのような書き方をするのが良いでしょうか。具体的には外部APIやデータベースへのアクセスをcase classを使ってどう実装するのが良いか考えます。 例として次のような簡単なUserクラスを用意します。 case class User(id: Int, name: String) Userの名前を変更するメソッドを追加してみます。これはcopyメソッドを使えば簡単です。ここまではサンプルコードでよく目にするような例です。 case class User(id: Int, name: String) { def rename(name: String): User = copy(name = name) } さて、このユーザー情報をデータベースに保存す
ScalaMatsuriの感想ブログです ScalaMatsuriでscala.metaの話を2つ聞いて面白そうと思ったので私もやってみました。 typesafe configをscala.metaとscalameta/paradiseのmacro annotationで設定パスを文字列ではなくscalaのコードで表現できるようにしたやつです。 github.com こんな感じで使います。 // src/main/resources/application.conf akka { actor { serializers { akka-containers = "akka.remote.serialization.MessageContainerSerializer" } } } import com.typesafe.config.ConfigFactory import com.gith
Playを触っていると謎のClassNotFoundExceptionが発生することがあります。 もしかしてそれはDEVモードだけで起きてはいないでしょうか? 先日、開発中のPlayアプリケーションで、ある依存ライブラリからClassNotFoundExceptionが発生するという現象にあたりました。 そのClassNotFoundExceptionはObjectInputStream.readObjectを呼び出した時に起きるのですが、なぜこのようなことが起きるのでしょう。 それではここでPlayのソースコードにある深イイコメントを見てみましょう。 /* * We need to do a bit of classloader magic to run the Play application. * * There are seven classloaders: * * 1. buil
Playのドキュメントを見るときに、公式サイトに行かなくても手元で http://localhost:9000/@documentation というURLにアクセスすればドキュメントサイトが見えるということはご存知でしょうか? これにはWebCommandsという仕組みで動いていて、ドキュメントのほかにもEvolutionsの実行ページの表示などにも使われています。 普通のアプリケーションを作る分には必要ないですが、開発用のライブラリにWeb UIをつけたいときなどは便利です。 例えば、/@hello, /@hello/:name というパスにアクセスすると反応するWebCommandは次のような具合です。 package controllers import javax.inject.{Provider, Singleton, Inject} import play.api._ impo
scalaではFutureなどの裏側ではExecutionContextが動いています。ということはExecutionContextの使い方がいまいちだとFuture周りで問題が起きることになります。 よく起きる問題の1つとして、標準のExecutionContextがいまいちだった、というのがあると思います。 標準のExecutionContextはダメというか、適さないパターンがあるのですが、あまりよく考慮されずに使われてしまう印象があります。 まあ悪いのはコンパイラの親切すぎるエラーメッセージでしょう。 scala> import scala.concurrent.Future import scala.concurrent.Future scala> Future { 1 + 1 } <console>:9: error: Cannot find an implicit Execu
Dependency Injectionとはコンポーネント間の依存関係をプログラムのソースコードから排除し、外部の設定ファイルなどで注入できるようにするソフトウェアパターンである ってwikipedia先生が言ってました。 Scalaにおける最適なDependency Injectionの方法を考察する 〜なぜドワンゴアカウントシステムの生産性は高いのか〜 - Qiita を読んでいろいろ考えたので、なんで今さらって感じのことを書きます。 ScalaでDIというとDIコンテナとかCake PatternとかReader Monadとかって話になっちゃうんですが、これらはいかにかっこよくDIするかの話であって、別にこういった道具やパターンを使わなくてもDIは可能という話です。 Constructor Injection 簡単な例で考えます。今ここにUserRepositoryにべったり依存し
フレームワークの便利さとコードの柔軟性とのバランスの話。 PlayにはいわゆるMVC的な機能の他にいろいろと便利っぽいモジュールが付いていますが、 実際そいつらを使っていると依存関係や柔軟性の面でちょくちょく困ることがあります。 最近何度か困ったのはプロジェクトを分割する場面です。 Playでプロジェクトをスタートするときはwebアプリケーションのプロジェクトとしてスタートするわけで、 シンプルに次のような構成をとります。 . ├── app ├── build.sbt ├── conf ├── public ├── test └── test しかし、だんだんプロジェクトが進むにつれて、あ、webアプリだけじゃなくてバックエンドでバッチ動かす必要あるわ、となったりします。バッチからも今までに書いたコード使いたいな。じゃあ共通コードをcoreっていうサブプロジェクトに移そうか。coreはp
私の理解が正しければ、Play2.4のプラグインシステムにはプラグインの起動順が制御できないという大きな欠陥があります。Play2.3以前はplay.pluginsファイルに優先度を記述するというイケてない感が漂うやり方ではありましたが、問題なく制御することができていました。 Play2.4からはプラグインをDIコンポーネントとして記述するようになりました。play.pluginsファイルはなくなり、優先度ではなくコード中に記述してあるコンポーネント間の依存関係を利用して起動順が結果的にうまくいくようになっています。 ただし全てのプラグインがコードを介して依存しているわけではありません。例えばflyway-playのようなデータベースマイグレーションを行うライブラリはscalikejdbc-fixtureのようにデータベースフィクスチャプラグインよりも先に起動する必要がありますが、コード上
ピザの量 人数÷3枚 LまたはXL(3000-3500円くらい) クアトロ3種類 飲み物 カクヤス ビール、人数×1.5本 (350ml缶) お茶、お茶、炭酸、非炭酸 当日注文だと冷えてないので前日までに注文できると良い。 お金 最初に集める。 1人1000円だと足りない。1500円だとおつりがめんどくさい。よって2000円。 2000円だとちょっと多いかもしれないので学生や発表者をひいきする。 注文の量を増やすなら酒じゃなくて食べ物にしたほうが余らない。 その他 紙皿、紙コップ、ウェットティッシュ http://d.hatena.ne.jp/hyoshiok/20081017
mixi 社はいつモンスターストライク社に変わるんだろうという冗談を言っていたら、なんと Typesaefe 社が社名を変えたいと言い始めました。最初エイプリルフール的なものかと思いましたが、冗談じゃないようです。冗談じゃないよ。 May 18, 2015 | What’s in a name? | Typesafe 自分は Typesafe 社の人間ではないし、人様の会社の社名変更に口を出すとかも変な話ですが、open process だ、意見をくれと言われたらそりゃ嫌って言うよ、だってめんどくさいもん!! 実際typesafeの社名とか全く興味ないしopen processとか言ってるけど反対多くても変えるんでしょ。自由に変えてもらってもいいけど、自分としてはめんどくさいだけでメリットないから意見ないかって聞かれたらそりゃ反対って言うよ、って感じ。— Toshiyuki Takahas
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" % "
ピクシブを退職しました。 主に健康上の理由です。 (在宅勤務もさせてもらって、おかげさまで最近やっとよくなってはきましたが。) 退職はしましたが、4月からはフリーランスっぽい感じで仕事を続けます。 ピクシブに転職したのは、なんか楽しそうと思ったからなのですが、 実際とても楽しく過ごすことができました。 // TODO ここにいいことを書く 仕事はバックエンドの改善、課金周り、画像のアップロード、ストレージの移行、APIの移行などをやっていました。1年半で 99784 行のコードを追加し、251930 行のコードを削除しました。 今後は業務委託という形で今の仕事を継続する予定ですので、 次の WEB+DB PRESS で私がピクシブの連載を担当していても不思議に思わないでください。 基本リモートでよければ、他の仕事を受けることも可能です。 技術要素にはこだわらないですが、Play/Scala
オープンソースの Scala ライブラリは sonatype を経由して Maven Central にデプロイするのが定番となっています。Maven Central のアカウントを持っていない、とかクローズドにしておきたい、などの理由から自前で Maven リポジトリを持ちたくなることがあるでしょう。 Maven リポジトリはなんとなくセットアップが面倒そうに思われていそうですが、実際には Web サーバ上にルールに従ってファイルが配置されているだけです。Artifactory や Nexus などの管理ツールもありますが、それらをインストールしなくとも簡単にセットアップが可能です。 例えば、gh-pages をリポジトリにしている人はたまに見かけます。自分も Sonatype のアカウントを作る前はそうしていました。それから svn リポジトリに jar を突っ込み、それを web 上
ここ数日 Ansible を触ってみてた。 MoinMoin Wiki のセットアップとか試しにやってみた。 tototoshi/ansible-playbook-moinmoin · GitHub Chef の代替というよりも Chef + Capistrano/Fabric という感じ。 インストールが楽。設定ファイルもほとんどなし。 デフォルトでできることが多い。Apache の Basic 認証設定とか PostgreSQL のユーザー作成とかまで最初っから使えるのが良い。 ドキュメントが充実しているしサンプルも併記してくれていて親切。 あまりハマらない。 シンプルで良いツールだと思った。 yaml なので簡単なことは簡単にかけるけれど、手続きっぽいことを書くのは当然つらい。 そこは仕方ないかというところ。まあ数日使った程度ではそこまで困ることはなかった。 シェルスクリプトでは手続
git でブランチを切り替えたらうまくビルドできなくなって困ったけど、build.sbt が変わっているのに sbt の reload をするのを忘れていただけだった、ということがたまに起こります。これを防ぐために、.sbt や project/.scala が変更されていたら警告を表示する sbt プラグインを作りました。 tototoshi/sbt-build-files-watcher 作りました、というかよしださんの https://gist.github.com/xuwei-k/6278769 をだいたいパクった感じです。 インストールはプロジェクトごとに設定するよりはグローバルの設定にすると便利だと思います。 ~/.sbt/0.13/plugins/build.sbt addSbtPlugin("com.github.tototoshi" % "sbt-build-files-
IntelliJ IDEA は Community Edition であれば無料で使えますが、 Ultimate Edition になると大体初期2万+維持費1万/年くらいの課金をする必要があります。 機能比較 これをどう見るかは人によると思いますが、自分は Scala はほとんど Emacs で書いてしまって、たまに気分で IntelliJ IDEA を使うくらいのノリなので少し高く感じています。 しかし、実は Ultimate Edition をタダで使う方法が存在します。Open Source License というヤツです。 IntelliJ IDEA 14.x Open Source License Open Source License はオープンソースのプロジェクトの開発に使用できるライセンスです。ライセンスの発行には審査が必要です。 条件は、 プロジェクトのリーダー、または
“データベースマイグレーションについて考えないといけないことや諦めないといけないことが結構あるでよ” http://t.co/BYna6w5luj 期待して記事見たが、複数人開発時におけるバージョン番号の衝突について説明がなかったのが残念。紙面が限られてるししゃあない。— 早すぎる最適化オジサン (@makotokuwata) 2014, 12月 29 flyway って、V1_ みたいな prefix をつけるけど、integer を increment するのって、ブランチきって平行で開発してる場合どうなるの?という気がしている— tokuhirom (@tokuhirom) 2014, 7月 30 flywayのマイグレーションについて見てたけど、これ、バージョン番号をファイル名につける感じなのですかね。まだよく見てないが。Railsのマイグレーションと比べて複数人開発に強くないです
普段 Scala でトレイトを使いまくってるけれども PHP にも 5.4 からトレイトが入った。 trait の良いところは多重継承のできない言語で多重継承っぽいことができることだ。 use, use とつけていけば、いくらでも追加できる。DRY に書けてよいことだ。 対して悪いところはいとも簡単に複雑で暗黙的な依存関係が生まれることだ。 例えばこんなの <?php trait Greeting { public function say() { if ($this->location == 'ja') { echo 'こんにちは' . PHP_EOL; } else { echo 'Hello' . PHP_EOL; } } } class Location { } class US extends Location { use Greeting; private $location
Play 2.4 では今までの Plugin の仕組みが deprecated となり、 新たに Module という仕組みが導入されています。 Module はこれまた新たに導入された Runtime Dependency Injection の上に乗っかっています。 Play では Guice をデフォルトの DI 実装として利用しますが、 Guice 以外の実装を利用するユーザーもいるだろうということで、 ライブラリとして提供するモジュールについてはそこだけ Guice ではなく、Play 独自の Module という仕組みに沿った形で実装します。 アプリケーションの起動時と終了時にメッセージを表示する Play Module を実装してみましょう。 まずは処理の本体です。 package example import play.api._ import javax.inject._
Scala Advent Calendar 2014 の 12 日目です。 sbt で ~compile でファイル変更をフックしてコンパイルは皆さんよくやってると思いますが、 ~ ;eval "\u001B[2J\u001B[0\u003B0H" ;compile とにするとコンソールをクリアしつつコンパイル続行するのでちょっといいかんじになります。 ~/.sbtrc に alias cc = ~ ;eval "\u001B[2J\u001B[0\u003B0H" ;compile って書けば cc で使えるようになります。
Emacsにはブックマーク機能が標準で入っているのだけど、 どうもあまり知られていないらしい。 開いているファイルやディレクトリを登録する まずブックマーク登録の仕方です。 今いるディレクトリ(bookmark-test)を登録してみます。 「C-x r m 」で↓のように、ブックマークの名前をつけろと言われます。 デフォルトの名前でもいいですが、今回はBOOKMARKという名前を付けます。 これで登録は終了です。 ブックマークの一覧を表示する 「C-x r l」で登録したブックマークの一覧が表示されます。 ここでブックマークを選択してEnterキー押せばブックマークしたディレクトリにジャンプします。 ブックマークを削除する ブックマークを削除したいときは、ブックマーク一覧で削除したいブックマークにカーソルを合わせて 「d」を押します。 ブックマークの左に削除フラグがつきます。 削除フラグ
次のページ
このページを最初にブックマークしてみませんか?
『tototoshi の日記』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く