Network.Qiita作りました!

去年暮れから仲間と4人でコツコツ作っていた、HaskellによるQiita APIラッパーをついにリリースしました!配布サイトはこちら http://qiita.com/items/a0e4d1a105b12467850fこういうライブラリを公開するのは初めてです。誰かの役に立つと嬉しいですね〜

eclipse+Jetty開発環境の作成

Herokuに手を出してからというものの、eclipse+Jettyで開発することが多くなりました。JettyのおもしろいところはAPIを使って起動用クラスを作ることで、普通のJavaアプリとして起動できることです。これが便利なところは 起動が速い! 特別なプラグインを入…

JerseyでJSONを扱うときは注意

JAX-RSは素晴らしい仕様です。しかし、その参照実装であるJerseyでJSONを扱うときには注意が必要です。 けっこうイヤな動きをします。 Listオブジェクトをエンコードしてくれない トップレベルのオブジェクトがListの場合、JSONにしてくれません。 他のオブ…

java.util.List#subListの誤った用法

java.util.List#subListメソッドの使い方がまちがっていたためにメモリリークを犯してしまっていた、という話です。 画像の各ピクセルの色を抽出してある法則に並べ替えた後に、先頭の10個の要素を返す、というメソッドを作るとしましょう。 このとき List<Color></color>…

WicketのAjaxでJavaScriptを動かす

Wicketで、Ajaxで何か処理した後にクライアント(ブラウザ)側でJavaScriptを実行するには AjaxRequestTarget#appendJavaScript(CharSequence)を使います。便利。 ちなみにAjaxRequestTargetにはfocusComponent(Component)というメソッドがあって、Ajax処理…

WicketのHTMLテンプレートはまりどころ

WicketはHTMLのテンプレートにHTMLを使います。 このことの恩恵は非常に大きくて、HTMLでローカルで確認したレイアウトをそのままアプリで使えるわけです。 もちろん他にもHTMLをテンプレートに使えるフレームワークはありますが、Wicketのおもしろいところ…

JavaEEでConnectionを使うときはclose()を忘れずに

最近Glassfish v3.0.1 を使ったJavaEE+Wicketで開発しているのですがはまった出来事があります。 それはjava.sql.Connectionのクローズもれです。Java1年生かと見紛うばかりの初歩的なミスですが、なぜか「JavaEEのConnectionはclose()しなくてもOK」という…

WicketのComponentにオブジェクトをインジェクトする

私はWicketというフレームワークが大好きです。 それからJavaEE6の新仕様であるCDIも大好きです。だったらWicketの中でCDIを使いたくなるのは、ごく自然な流れ。一応WicketとCDIを統合するライブラリもあるにはあるようですが、まともに動いたことがないんで…

eclipseのWTPでテストクラスをデプロイ対象から外す

eclipseのWTPを使ってWebアプリを開発するときの話題。開発環境とは言えWEB-INF/libの下には必要最低限のjarしか置きたくありませんが、JUnitのテストクラスを置いているプロジェクトの場合、JUnitのJARを置いておかないとデプロイに失敗してしまいます。で…

StrutsのメッセージファイルをXMLにする

久々のJavaネタ。Strutsの話です。Strutsではメッセージをpropertiesファイルに記述しますが、これを変更してXMLで書けるようにする方法を紹介します。 仕様 今回のサンプルでは、メッセージファイルはクラスパス直下に置くことにします。多言語化を考慮して…

YesodでHTML/JavaScript/CSSを共通化する

Webアプリを作ってると、HTML/JavaScript/CSSを共通化したくなることがあります。 Yesodでは、これはWidgetって仕組みを使うようです。なお今回出てくるコードは全て、scaffoldで生成されたソース群がある環境を前提にしています。 Widgetとは? Widgetにつ…

MacでHerokuにYesodを(Herokuに公開編)

さていよいよYesodアプリをHerokuに公開します。 ただ、当然ながらHerokuにアカウントが必要なので、作業はそこからスタートです。相変わらずUbuntu on VirtualBoxで作業します。 HerokuにSign Up これはHerokuのサイトから簡単に出来ました。ちなみにHeroku…

MacでHerokuにYesodを(Yesod導入・アプリビルド編)

前回cabal-installがインストール出来たので、いよいよYesodのインストール、更にアプリのビルドまで行ってみましょう!相変わらずUbuntu on VirtualBoxで作業します。 yesodのインストール cabal-installがインストール出来たので、Yesodはこれを使って楽に…

MacでHerokuにYesodを(GHC/cabal-install導入編)

前回Ubuntu on VirtualBox環境を作成したので、次はGHC。 更にYesod開発に必須のcabal-installもインストールしてしまいます。 GHCをインストール ここからはUbuntu on VirtualBoxでの作業。 まず依存ライブラリをインストール。 sudo apt-get install libre…

MacでHerokuにYesodを(Ubunto on VirtualBox導入編)

HerokuにYesodで作ったWebアプリを公開出来るという情報が! これはやるしかない!情報源はこちらです。 Haskell on Heroku - ごったく大感謝!ただ開発はMacで支障ないのですがHerokuに公開する実行ファイルはUbuntu 10.04の64bit版でビルドする必要がある…

Yesodでファイルアップロード

Yesodにもだいぶ慣れてきました。慣れるまではなかなかコンパイルを通せず苦労しますが、コンパイルに通りさえすれば意図通りに動かないということはまずありません。 YesodはHaskellの素晴らしさを見事に受け継いでいるな、と感じます。さて今回はファイル…

警告を消す・Warning: A do-notation statement discarded a result of type ...

do記法の中での警告 Yesodを書いているとdo記法をたくさん使うのですが、ときどき以下のような警告に遭遇します。 Handler/Root.hs:36:7: Warning: A do-notation statement discarded a result of type <型情報>. Suppress this warning by saying "_ <- ($…

Yesodにはまってると思いきやHaskellの文法にはまっていた

よくあるっちゃーよくあるんですが、Yesodを書いていてYesodの作法を理解していなくてはまっているのかと思いきや、実はHaskellの文法にやられていたという。今回はこんなエラーが。 Handler/Bbs.hs:7:19: The first argument of ($) takes one argument, bu…

Template Haskellとクォートの衝撃

こんなエントリを見付けました。 できる!Template Haskell (完)最近Yesodを触っていて見慣れない構文にとまどっていたのですが、多くの部分に対する回答を得ることが出来ました。Template Haskellとクォートの衝撃。言語の中に言語を埋める。Haskellの用途…

Yesodで入力フォーム

Yesod Web Framework Bookの写経を始めて3日目くらい。 ついに入力フォームに至ったんですがここのサンプルを写経すると私の環境では型エラーが起きました。ここまでは順調だったんですけどね。ちなみに私の環境のYesodのバージョンは以下の通りです。 $ gh…

SAStrutsの落とし穴

たまには実践的(笑)なエントリを。SAStrutsは業務でかなり扱ってるのですが、Actionにははまりどころがあります。それを紹介。 getで始まるメソッドを作らない これ超大事です。SAStrutsはJSPをレンダリングするとき、ActionFormとActionのプロパティとpub…

モナドを書くときはdo記法が圧倒的に読みやすい

Haskellでモナドを使ったコードを書くとき、2つの書き方があります。>>=を使って真面目に書く方法とdo記法です。前回のYesodによるプログラムを例にとって両者を比較してみます。まずは>>=を使った書き方。 getUsers = getYesod >>= \users -> return $ aUs…

Yesodでサンプルを書いてみる

相変わらずYesodを触っていて、最近はサンプルを書いてみています。YesodはフルスタックなRoR風Webフレームワークということなので、本来はscaffold使ってDBやソースコードを自動生成して編集していくのが作法なのでしょう。でも本家サイトのサンプルは1フ…

Yesodサンプル

なにはともあれサンプルを書いてみる まずはサンプル。 {-# LANGUAGE TypeFamilies, QuasiQuotes, TemplateHaskell , MultiParamTypeClasses, OverloadedStrings #-} import Yesod data HelloWorld = HelloWorld mkYesod "HelloWorld" [parseRoutes| / HomeR…

staticクラスはテストしにくい

staticクラスというのは造語で、staticメソッドしか持たないユーティリティクラスの事を指しています。 この手のクラスは実務でよくみかけますが、状態を持つstaticクラスをつくってしまうとテストで苦労することになります。 例えばメッセージユーティリテ…

配列リテラルの最後にカンマがあってもいい

久々Javaネタ。 こんな↓感じで書けるみたいです。 int[] is = { 1, 2, }; 知りませんでした。地味にうれしい。 列挙型もこの書き方ができますね。ただ、この書き方をしたソースをjavadocに食わせるとエラーになるんですよね。 これにはガッカリです。

Yesodが動かない

Yesodがインストール出来たので、当然動かしてみるわけです。 Yesod in Five Minutesを見ながら最初のサンプルを作ってみたのですが・・・最後の最後、開発用サーバ起動コマンドに失敗するのです。 yesod develを実行すると dist/devel.hs:3:1: Failed to lo…

Yesodがインストールできた!

こないだこんなこと書いたのですが、cabalコマンドをsudoで叩くとインストール出来ました! sudo cabal install yesodこれでYesodで遊べるかも、と思うとわくわくします。

Yesodがインストールできない

何やら最近YesodというHaskell製のWebフレームワークがあつい、と聞いたのでインストールしてみようと思ったのですが・・・ 例によって敷居が高い!Yesod in Five Minutesに沿ってインストールしようとすると cabal install yesodで zlib-bindings-0.0.1 fai…

Haskellは型が先にある

Haskellの正規表現パッケージの使い方を見ていて、衝撃を受けました。 Prelude> :m Text.Regex.Posix Prelude Text.Regex.Posix> "abca" =~ "a" :: Bool True Prelude Text.Regex.Posix> "abca" =~ "a" :: Int 2 Prelude Text.Regex.Posix> "abca" =~ "a" ::…