FIELD NOTES: 書を持って街へ出よう

合同会社フィールドワークス プログラマ兼代表のブログ

Field Reportsの使い方:複合帳票

今回は,表紙付きの請求書を作成します。 復数のテンプレートを組み合わせて作る帳票を複合帳票と呼んでいます。 テンプレートの作成 表紙のテンプレートを作成します。 前回と同様に,OpenOffice.orgで下絵を作成し,Acrobatでフィールドを配置しました。請…

Field Reportsの使い方:単票(2) テーブルを含む帳票

今回は,テーブル形式のデータを持つ帳票(見積書)を作成します。 下絵の作成 前回同様,OpenOffice.org の Calc で帳票のデザインを作成しました。 これを,PDF形式にエクスポートします。 フィールドの配置 明細項目の部分が2次元のテーブルになっていま…

Field Reportsの使い方:単票(1) Hello World

今回から,Field Reports の使い方を説明させて頂きたいと思います。まずは単純な1ページ構成の帳票を作成します。 開発言語は,Python 2.7 を使用します。 テンプレートの準備 最初にテンプレートの下絵として使用するPDFを作成します。 PDFを作成できれば…

オープンソースのPDFライブラリ(Ruby編)

Python編に続いて,Rubyから利用できるオープンソースのPDF出力ライブラリをできるだけ集めてみました。 PDFに対して分割・結合などの加工を行うためのライブラリは含めていません。 記述に漏れや誤りがあれば訂正しますので,ご指摘ください。ざっと見た限…

オープンソースのPDFライブラリ(Python編)

Pythonから利用できるオープンソースのPDF出力ライブラリを集めてみました。 PDFに対して分割・結合などの加工を行うライブラリは含めていません。 他にあれば追加しますので教えてください。また,記述に誤りがあれば訂正しますので,ご指摘ください。 Repo…

Jimdo で会社サイトを構築してみた感想

弊社の会社サイトは,Jimdo というWebホスティングサービスを利用して作成しています。 サイトの準備も予定の8割ぐらい進んで形になってきましたので,この辺りでJimdo を利用して会社サイトを作成するメリット/デメリットを少し振り返ってみたいと思いま…

C言語でOCamlデータを生成する方法のまとめ

ユーザーズマニュアルの“Interfacing C with Objective Caml”に必要なことは全部書いてあるのですが,理解するのにちょっと苦労したので,自分なりの理解をまとめておきます。 プログラミングする際に最低限必要な概念をまとめただけなので,詳細は端折って…

Field Reportsの特徴 (5) テンプレートエンジンとの対比

Webシステム開発において,Ruby on Rails や Django などのWebアプリケーションフレームワークや Smarty, Cheetah, Mako, Jinja, Tenjin などのテンプレートエンジンを使用することが一般的になりました。CGIの時代と比べれば,ずいぶん生産性が向上したので…

OCamlでPython/Ruby拡張モジュールを作るときの注意点

Field Reports の拡張モジュールを作成する際に,メモリ管理やエラー処理といった通常サンプルプログラム等で説明されていような所で色々苦労しました。 注意点を記録しておきます。 メモリ管理 OCamlのGCと折り合いを付けるには,以下3点のルールを必ず守…

Ruby1.8/1.9両対応のC拡張モジュールを作る方法

Python用に作成した拡張モジュールをRubyに移植する必要があり,Ruby拡張モジュールの作成方法を調べました。以下の仕様を満たすgemパッケージを作成することが目的になります。 Ruby1.8とRuby1.9に両対応したC拡張モジュールを作成する。 Foo::Barのように…

Field Reportsの特徴 (4) テンプレート方式の帳票ツール

帳票ツールの分類 世の中には色々な方式の帳票ツールがあり,その処理方式も様々です。Field Reportsでは,あらかじめ準備しておいたテンプレートにテキストや画像を流しこむ方式を採用しています。 そのような方式にした理由を説明するために,まず既存の帳…

Field Reportsの性能測定

Field ReportsがPDFを生成する速度を測定してみました。 測定環境 PC DELL PowerEdge T100 CPU Core 2 Quad Q8400 2.66GHz Memory 4GB HDD SATA 160GB OS Cent OS 5.5 測定方法 Pythonで以下のようなスクリプトを作成してコマンドラインから実行しました。 …

Field Reportsの特徴 (3) ―「LL言語向け帳票ツール」とは ―

JAVAで構築した帳票ツールをLL言語から利用する場合にはありがちなことですが,以下のような手順を踏まなければいけないようなツールにはしたくありませんでした。 DBから取得したデータを元にXMLファイル(もしくはCSVファイル)を作成する。 帳票ツールを…

Field Reportsの特徴 (2)

前回の続きです。 OCamlで帳票ツールを作ってみてどうだったのか? OCamlの生産性の話や構文の話は既にあちこちで語られていますので,「LL言語の拡張ライブラリをOCamlで記述する」という特殊な用途で使用した中で感じたことを書いてみたいと思います。項目…

Field Reportsの特徴 (1)

OCaml関係で興味を持って頂いている方が多いようなので,まずOCamlで開発を行った理由・効果などについて書いておきたいと思います。 なぜOCamlを使って帳票ツールを作ろうと思ったのか? 帳票ツールを開発する言語を選ぶにあたって,次のようなことを考えま…

LL言語向けPDF帳票ツール Field Reports β版をリリースしました

かねてから開発していた帳票ツールが形になってきましたので,β版という形で本日リリースしました。 製品名は,Field Reports といいます。合同会社フィールドワークスWebサイトからダウンロードできます。Linux版とMac OS X版があります。 対応済みのLL言語…

Cryptokitを組み込んだプログラムが遅くなった場合の対処方法

今まで作ってきたプログラムに暗号ライブラリCryptokitを組み込んだら,プログラムの動作が急に遅くなってしまいました。どうやら,乱数を生成している箇所で数秒〜数十秒の待ちが発生している模様です。問題が発生した環境は,VMWare Fusion上で稼動してい…

LinuxとMac OS XでMACアドレスと取得する方法

実行マシンのMACアドレスを取得する必要があってやり方を探したのですが,意外と探すのに時間がかかりました。結果をここにまとめておきます。 やりたいこと 実行マシンが持つネットワークカードの名称とMACアドレスを列挙したい。 LinuxとMac OS Xの両方で…

激安IP電話機購入

某オークションで投げ売りされているIP電話機を購入した。 1台300円!! 型番は,IPWave P104SPWとなっている。 のぞみ電話というサービスで使われている端末のようだ。 D-Link DPH-140SのOEMと思われる。 操作パネル・マニュアル・WEB管理画面などは日本語…

TeXで使用しているハイフネーションアルゴリズムについて

TeXで欧文文書を成形する際に必要に応じて単語のハイフネーション処理を行なっている。TeXの解説書などによると,F. M. Liangさんの考案したパターンマッチングによりハイフンを入れる箇所を求める方式を使っているらしい。 現在作成している帳票ソフトでハ…

OCamlでのタイムゾーンの取得方法

以前作成した「日付/時刻→文字列変換ライブラリ」にタイムゾーン(というかUTCとの差)を出力する機能を追加しようと,OCamlのライブラリを探したのですが,タイムゾーンをダイレクトに取得する関数が見つからず,ちょっと手間取りました。 調べたこと Unix…

日付/時刻→文字列変換ライブラリ

日付/時刻のデータを整形した文字列に変換するライブラリを作成しました。前回の数値→文字列変換関数と合わせて,「書式指定付き文字列変換ライブラリ 0.2版」としてまとめました。ここで配布していますので,よろしければ使ってみてください。 書式指定文字…

曜日の計算

年・月・日で指定された日付の曜日と年初からの経過日を求める関数を作成した。年・月・日は,いづれも1はじまりの数値を与える。 wday_of_dateは,曜日に対応する数値(0:日曜日, 1:月曜日, ..., 6:土曜日)を返す。 yday_of_dateは,1月1日からの経過日(1月1…

pretty printer

今まで,デバッグprintf用にExtLibのStd.printを使ってきたが,フィールド名の情報がなくなってタグ番号の様な数字に化けてしまう。複雑なデータ構造になると直感的に理解できないので,ちょっと不便だなあと思っていたところに,d:id:KeisukeNakano:2008101…

UTF-8 ⇔ UTF-16 変換関数 その2

昨日作成したUTF-8⇔UTF-16変換関数が,いかにも効率が悪そうな作りだったので,チューニングしてみた。まあ,巨大な文字列を変換する予定はないので,実用的には大差ないと思うけど。 let explode_to_int s = let rec exp i l = if i < 0 then l else exp (i…

UTF-8 ⇔ UTF-16 変換関数 (OCaml)

UTF-8とUTF-16の文字列を相互変換する関数を作成した。 リスト処理を贅沢に使っているので,遅いかもしれない。 open ExtString (* UTF-8 → UTF-16BE(BOM付) 変換 *) let utf8_to_utf16be s = let rec loop = function | [] -> [] | ch0 :: rest when (ch0 l…

カスタム数値書式指定文字列による文字列整形プログラム

Microsoft Excelでは「ユーザー定義」,.Net Frameworkでは「カスタム数値書式指定文字列」と呼ばれる独特の記法がある。このカスタム数値書式指定文字列にしたがって,数値を文字列に変換するプログラムをOCamlで作成した。カスタム数値書式指定文字列自体…

OCamlでPython拡張モジュールを作る(その2)

昨日の続き。 はまり点3 デバッグのためにOCaml内でprintfしても値が出力されなかった。 原因は,標準出力をflushする処理がどこにもはいっていないためらしい。[Caml-list] Calling OCaml from C - nothing shown on stdoutに書いてあるとおり,手動でflus…

OCamlでPython拡張モジュールを作る

OCamlで作成したライブラリをPythonから利用できるように,拡張モジュール化した。その際に,いくつか苦労したので記録に残しておく。 なお開発環境は,Mac OS X 10.6.4 (Snow Leopard), Ocaml 3.12.0, Python 2.6.5 である。 一般的な作り方 mBの通り作業す…

オープンソースのバーコードライブラリ

バーコードを生成するオープンソースのライブラリにどんなものがあるのか,調べてみた。といってもたくさんありすぎるので,なにがしらの特徴のあるものだけをピックアップした。 pyBarcode http://packages.python.org/pyBarcode/ EAN, JAN, UPCなどメジャ…