Text.Htmlを使ってHTMLを出力

HaskellでCGIを作る、続きです。やはりCGIはHTMLを出力してこそ。でも文字列連結でHTMLを作るのはちょっとかんべん。 テンプレートエンジンをインストールしてもいいのだけど、GHCに付属しているText.Htmlというライブラリがあったので使ってみました。 Text…

HaskellでCGI

今、メインマシンのMacBook Airがありません。だからデスクの下の奥深くに眠っているUbuntuマシンを久々に引っ張り出してきました。 このマシンはサーバソフトの調査用に使っているのですが、今回はこのマシンを使ってHaskellでCGIを書いてみることにしまし…

HDBCとReaderTモナドを組み合わせてみる

HDBCでDBを操作するプログラムを書いていると、少なからずDB接続(IConnection)がうっとうしくなってきます。DB操作を行う関数は全て、引数にDB接続を取るからです。例えばCRUD操作を行う関数を書いたとします。 insertC c = runRaw c "insert into COUNTER…

HDBCを使う

さてようやくDB操作を実践出来ます。 せっかく導入に成功したHDBC-postgresqlですが、本エントリには出て来ません。DB操作はHDBCというパッケージで抽象化されているからです。 JavaでいうところのJDBCがHDBCで、JDBCドライバがHDBC-postgresqlに当たるわけ…

Haskellで書くときに欠かせないサイト

Hoogleが最重要!関数の名前での検索はもちろんですが、型で検索できるのが秀逸です。例えば (a -> b) -> [a] -> [b]で検索した結果がこちら。結果からはHackageDBというサイトのAPIリファレンスページへのリンクがはられています。 HackageDBはその名の通り…

HDBC-postgresqlが動いた

PostgreSQLを+universalでインストールし、x86_64とi386の両方に対応させたのが前回まで。 ちなみにGHCのライブラリのアーキテクチャを調べると、i386だったことが判明しました。 file /Library/Frameworks/GHC.framework/Versions/7.0.3-i386/usr/lib/ghc-7…

奮闘・HDBC-postgresqlを動かすための調査(その2)

「HDBC-postgresqlが使うdylibのアーキテクチャがちがう」と言ってエラーを吐かれてしまい、PostgreSQLへの接続どころか関数の実行すら出来ない でもCPUアーキテクチャもあdylibもx86_64で、一致している というところまでが前回。 調査を続けます。Googleさ…

奮闘・HDBC-postgresqlを動かすための調査

前回いよいよHDBC-postgresqlの関数を動作させてみたのですが、エラーが出てPostgreSQLに接続は出来ませんでした。エラーメッセージは以下の通りです。 Loading package HDBC-postgresql-2.3.2.0 ... can't load .so/.DLL for: pq (dlopen(/opt/local/lib/po…

HDBC-postgresqlに再度絶望する

前回HDBC-postgresqlのインストールに成功しました。 やっとDBアクセス出来る・・・のか?ghciの対話環境で接続を試してみます。 connectPostgreSQLという関数の第一引数の書式がよく分からんのですが、まずは適当に動かしてみましょう。 Prelude> :m Databa…

奮闘・HDBC-postgresqlのインストール(たぶん成功編)

ようやくのHDBC-postgresqlのインストールに成功しました。 もっとも動作確認まではやっていないので、まだ正しくインストール出来ているかどうかは分からないのですけれど。ちなみに環境は以下の通りです。 Mac OS X 10.6.8 GHC7.0.3 (Glasgow Haskell Comp…

奮闘・HDBC-postgresqlのインストール(その2)

前回HDBC-postgresqlをインストールしようとしましたが、エラーが出てインストールに失敗してしまいました。 解決に向けて少しは前進したいものです。しばし呆然とした後にエラーメッセージをよく見ると setup: The program pgconfig is required but it cou…

奮闘・HDBC-postgresqlのインストール

Haskellのパッケージのインストールには本当に苦労します。毎回これで挫折するんですよね。今回はHDBC-postgresqlをインストールしたいのですが、これがなかなか。 当方の環境がMacだからなのか、cabalでをインストールしようとしても失敗します。 やったこ…

HaskellでDBアクセスしたい!

本格的なプログラムにはWebAPIを叩くかDBアクセスのどちらかが必要・・・という独断と偏見により、HaskellでDBアクセスする方法を調査。実は、HaskellでPG組みたくなる度にDBアクセスを調査しては挫折しています。 ライブラリのインストール方法が分からない…

httpGetをさらにリファクタリング

HaskellでHTTPのGETリクエストを投げる話のつづき。 イマイチかっこよくないところを関数化するというアプローチを更に押し進めて、以下のような感じになりました。 import Network.HTTP import Network.URI import Data.Maybe httpGet :: String -> IO (Str…

JAX-RSでHTTPリクエストヘッダを参照する

知っていればなんてことない話。javax.ws.rs.core.HttpHeadersクラスを使います。 以下サンプル。import文は省略してます。 /** * @author jabaraster */ @Path("header") public class HeaderResource { /** * @param pHeaders * @return */ @GET @Path("")…

昨夜書いたプログラムをリファクタリング

前回までと同じくHTTPのGETリクエストを投げるんだけど、ヘッダを追加してみました。 import Network.HTTP import Network.HTTP.Base import Network.URI httpGet2 :: String -> IO (String) httpGet2 url = do mayUri <- return $ parseURI url uri <- case…

今朝書いたプログラム

HTTPのGETリクエストでレスポンスを文字列として得る。 import Network.HTTP httpGet :: String -> IO (String) httpGet url = (simpleHTTP . getRequest) url >>= return . rspBody . either (error . show) id たったこれだけのコードなんだけど、記述がま…

今日書いたプログラム

パーサコンビネータを試す関数。 import Text.ParserCombinators.Parsec.Prim run :: Show a => Parser a -> String -> IO () run p input = case (parse p "" input) of Left err -> print err Right c -> print c

標準化の威力

私の父は定年後も電気技師(でいいのかな?)として働いているのですが、先日重い機器を運ぶ要員として手伝いに行きました。 この作業、他の会社の方々との共同だったのですが、父と初めて顔を合わせる方々ばかりだったのです。 ソフトウェア開発の現場だと、…

2つの画像の異なる部分を見つける

2つの画像の大きさは同じっていう前提。 final BufferedImage image1 = ImageIO.read(file1); final BufferedImage image2 = ImageIO.read(file2); final BufferedImage delta = new BufferedImage(image1.getWidth(), image1.getHeight(), image1.getType(…

開発の下準備

最近やっとiPhoneにしたのでアプリを開発しようとしているのですが、iPhoneアプリを開発するには先にアプリケーション開発ガイドを読からにといけない、と思いました。 何かやりたいことがあってもスタンダードな解決策が分からないし、下手に自己流で作った…

eclipseでJPAのメタモデルを自動生成する設定

プロジェクトのプロパティを開く Project FacetsでJPAにチェックを付けてプロジェクトにJAPサポートを追加 プロジェクトのプロパティをいったん閉じる(重要!これをしないとJAPの設定項目が現れない) プロジェクトのプロパティを再び開く Java Persistence…

JAX-RSを使う

JavaEE6でJAX-RSを使う手順のメモ。 JAX-RSで処理するパスのルートを設定 具体的にはjavax.ws.rs.core.Applicationクラスを継承したクラスを作りjavax.ws.rs.ApplicationPathアノテーションを付けます。 以下サンプル。 /** * */ package sandbox.resource; …

ファイルアップロードの最大サイズ指定

久々のエントリです。過去のエントリで あと、セキュリティ面からアップロードファイルのサイズ制限などの設定は必須ですが、アノテーションでしか指定出来ないのは困ります。今回調査したJSFのように、既存フレームワークとの連携が非常にやりにくくなりま…

JSFで会話スコープを終わらせつつ自画面に遷移

若干はまったのでメモ。あるBeanの会話スコープを終わらせるにはConversation#end()を呼ぶわけですが、このメソッドを呼んだからと言ってプロパティが初期化されたりはしません。当たり前と言えば当たり前ですが。このことが若干問題になることがあります。 …

プリミティブ型は抽象型?

System.out.println(Modifier.isAbstract(int.class.getModifiers())); の結果は"true"。知らんかった。他にも System.out.println(Modifier.isAbstract(String[].class.getModifiers())) System.out.println(Modifier.isAbstract(Serializable.class.getMod…

会話スコープとAjax

Converasationオブジェクトによる手動スコープ制御を実現する会話スコープ(@ConversationScoped)。 タブブラウザにも対処できる優れものなんですが、制約があります。それは、URLに特定のクエリパラメータを含めないと会話スコープが有効にならないという…

JSFを拡張子htmlで動くようにする

これまでJSFの動作対象URLを「拡張子xhtml」にしていたのですが「html」で動くようにしたい。 ついでに、xhtmlへの直接アクセスを禁止したい。というわけでちょっと手を加えました。 web.xml FacesServletが動作対象とするservlet-mappingを書き換えます。旧…

JSFのAjaxで外のh:formを再描画する

JSFのf:ajaxで、f:ajaxが囲まれているh:formを再描画するときは <f:ajax render="@form"/> のように書けます。 のように書けます。もちろん、h:formのidを書いても構わないけど、こっちの方が変更に強いです。さてf:ajaxを囲んでいないh:formを再描画するときは? このときは <f:ajax render=":form1"/> のよう</f:ajax></f:ajax>…

Servlet3.0で追加されたファイルアップロードを使う

Servlet3.0から、HttpServletRequest#getParts()というメソッドが追加され、ついにJavaEE標準でファイルアップロードが使えるようになりました。JSFと連携する方法を調査したので、過程と結論をメモしておきます。 @MultipartConfigアノテーションの付いたSe…