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

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

プログラミング

Evernoteで図入りのMarkdown文書を書いてMarkedでプレビューする方法(Mac OS X)

EvernoteにMarkdown記法でメモを書くのは便利なのですが, せっかくEvernoteを使っているのに図を手軽に扱えないのは残念なので,ひと工夫してみました。 使い方 以下が作成したPythonスクリプトです。 <EVERNOTE_USER_NAME>の部分は,Evernoteのアカウント名に置き換えてくださ</evernote_user_name>…

Gmailで自動返信メールシステムを構築する方法

Gmail Labsで公開されている「返信定型文」と「フィルタ」機能を組み合わせて自動返信メールを実現することはできますが,いくつか制限があります。 自動返信メールの返信元アドレスに「+canned.response」が付く。 返信文にあいての名前などを動的に挿入す…

書類送付状生成デモの改造

先日作成した書類送付状生成デモを少し改造してみました。 書類送付状生成デモ 解説記事 改造点は以下のとおりです。 すべてをcontrollerで実装していたのを改め,controllerとviewに分離した。 viewを切り替えて,PDFとHTML両方の出力形式に対応できるよう…

書類送付状生成デモの作成

前回のはがき宛名面の作成デモに続いて,書類送付状を作成するデモを作成しました。 実用的にも使えると思いますので,よかったら使ってみてください。 書類送付状生成デモ テンプレートの作成 まずは,オフィスソフトを利用して,帳票のレイアウトをデザイ…

Google App Engine からPDF帳票を生成する

Google App Engine (GAE) から Field Reports for Cloud β版で提供しているWeb APIサービスを用いて,帳票を生成する方法を解説します。 今回は,「Hello World!」を表示するデモを作成します。 プログラムの作成 Webアプリケーションフレームワークとしてwe…

CentOSにnginx+web2pyをインストール

さくらVPS上にnginx+web2pyの構成でWEBサーバを設定する手順をまとめました。 CentOSであれば,概ね同様の手順でインストールできると思います。 前提として,web2pyのファイルは /var/www/web2py に置いているものとします。 nginxのインストール nginxの公…

OCamlでWindows用DLLを作成する方法

同一のコードから複数のプラットフォーム用の共有ライブラリ(Unix系OSなら.so,Mac OS Xなら.dylib,Windowsなら*.DLL)を作りたい場合,どのプログラミング言語を選ぶべきでしょうか? まず思い浮かぶのがC/C++だと思いますが,もっと「モダン」なプログラ…

Google Apps Script でメールをタイマー送信する方法

メールの送信を予約して,決まった日時に送りたいことがあります。そのようなことを実現するためのアプリケーションもあるようですが,常にPCの電源を入れておく必要があります。 一方,外部のASPサービス(「ステップメールサービス」など)も存在するよう…

OCamlで作成した拡張モジュールでセグメンテーション違反発生

以前のブログでも書いたとおり,弊社ではOCamlを使ってLL言語用の拡張ライブラリを作成しています。 この構成でこれまでは特に問題なく稼動していたのですが,機能拡張していくうちに突然セグメンテーション違反が発生するようになってしまい困りました。 現…

jarファイルとjniライブラリのインストール方法

(c) YsPhoto|写真素材 PIXTAJavaの外部ライブラリ(*.jar)をJavaの処理系が参照できるようにするためには,環境変数CLASSPATHに追加したり,コマンド実行時に -classpath オプションを追加するなどの方法がありますが,jarファイルの数が多くなってくるとい…

Windows用PHP拡張モジュールを最短でビルドする方法

現在,「LL言語用PDF帳票ツール Field Reports」をWindowsへ移植しているのですが,Windows環境でPHP拡張モジュールをビルドする方法として断片的な情報しか見つからなくて苦労しました。 試行錯誤してなんとかビルド手順が確立できたので,わかったことをま…

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

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

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

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

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

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

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

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

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の通り作業す…