月別アーカイブ: 2015年4月

弊社デスクトップ製品のご利用について

おはようございます。
デスクトップ製品のサポート担当です。

まもなくゴールデンウィークが始まりますね。
今年は日の並びも良くて、大型連休が取りやすいため、今からあれこれ計画して楽しみにされている方も多いのではないでしょうか?

さて、新年度を機会に会社やご家庭でパソコンの買い替えをされる場合も多くなってくるかと思います。
そのせいか、サポートセンターには「パソコンを買い替えたけれど、今使っているソフトはそのまま新しいパソコンにも使えますか?」といった内容のお問い合わせが多くなっているように思われます。
使いなれたソフトは、新しいパソコンでもこれまでと同じように使いたいもの。気になるのは当然ですね。

上記のお問い合わせへの回答は、もちろんOKです。
ただし、弊社のデスクトップ製品の場合、条件があります。
それは、今まで使われていたパソコンから弊社製品を削除(アンインストール)してから、新しいパソコンに再インストールを行っていただく必要があるということです。

弊社デスクトップ製品は、サイトライセンスで購入された場合を除いて、1ライセンスにつき1台のパソコンでご使用いただくことを前提にご提供させていただいております。
古いパソコンを廃棄してしまう場合は問題ありませんが、新旧ふたつのパソコンに弊社製品をインストールされた状態で、どちらも使われるのは製品の使用許諾に反した行為となりますので、是非ともご注意いただきたいと存じます。
使用許諾の詳細につきましては、以下のFAQの内容もご参考にしてください。

デスクトップ製品の使用条件について

上記の条件をご理解いただいた上で、アンテナハウスのデスクトップ製品を末永くご愛用いただけますよう、お願いいたします。


『瞬簡PDF』シリーズは、ただいま新年度応援キャンペーン中!

おはようございます。
デスクトップ製品のサポート担当です。

早いもので、4月もまもなく終わりに近づいてきました。
今月は雨ばかり降っていた印象ですが、ここにきてようやく春らしい暖かな日射しが戻ってきましたね。
4月としては記録的に日照時間が短かったようですが、雨に打たれていた農作物がこれから元気を取り戻してくれることを願うばかりです。

さて、桜とともに新年度を迎えた4月に、アンテナハウスでは「新年度応援キャンペーン」と銘打ったセールを開催中です。
人気の「書けまっせ6」や「作成7」、「変換8」など、PDF製品が特価で販売中です。
4月いっぱいの開催のため、残りあと僅かの期間となっています。

新年度応援キャンペーン開催中

この機会に、アンテナハウスの『瞬簡PDF』シリーズをお手元に揃えてみてはいかがでしょうか?
サポートも充実しておりますので、安心してお使いいただけます。
是非、ご検討ください!


[海外営業レポート] ページメディア出力と XSL-FO の未来について(2)

さて昨日の続きです。

Thad は正しかったのです。12年間でアンテナハウスは40か国以上のあらゆる産業界、政府機関で、またXSL-FO が利用されるだろうと想像さえできなかったアプリケーション向けに、数千本ものライセンスを販売しました。

今日 XSL-FO はビジネス文書、ドライバーライセンス、電車のチケット、映画の台本、視聴覚障害者向け印刷物、注文書などなどあらゆる分野での文書の出力に利用されています。

古いシステムからページをよりモダンに改革しようとする企業はますます増えていて、それに伴って XSL-FO の利用がますます増え、少ない割合ですが CSS も使われています。DITA への関心も深まり、2007年にDITA カンファレンスが開催された時に比べたら、DITA  関連の XSL-FO の販売実績は非常な割合で伸びています。
将来的に、ページ出力は情報配布の方法としてはかなり重要な要素であり続けると考えます。XSL-FO はそのような配布手段の最も有力な標準仕様であり、ページ出力に限っては XSL-FO にとって代わるものは現れないだろうと思います。またCSSも成長しうる出力の仕様だと思います。
2025年の予想としては、依然として XSL-FO と CSS は一日に何百万ものページを生産し続けているのではないかと思います。

US 営業グループ
アンテナハウス海外サイト
http://www.antennahouse.com/
http://rainbowpdf.com/


[海外営業レポート] ページメディア出力と XSL-FO の未来について(1)

冬季はカンファランスがあまり開催されないのですが、それでも XML Prague と Vasont Users Group、2つのイベントに参加してきました。

DCLabs の最近の調査によると、PDF 出力とページ組版は回答者の90%以上が主な配布方法であると回答しています。XSL-FO は依然としてページメディア出力の手段であると認識されています。このことは epubs や ebooks を取り巻く活発な活動レベルを考えたとき、非常に意味があることだと思います。

12年前の2003年、アンテナハウスが海外で XSL Formatter を売り出そうとアメリカに事務所を開設した時、欧米ではページ印刷の歴史は Johannes Gutenberg (ヨハネス・グーテンベルク)が1440年に活版印刷技術を発明した時に遡り500年以上にもなります。

2003年当時、続く500年がどうなるかなど考えられなかったですが、せめて20年間はアンテナハウスが XSL-FO とページ出力の方向を貫いていけるかどうかを考えていました。
2003年当時、XSL-FO は2年間ほど W3C の勧告となっていました。そして、DITA は全く出始めたばかりでした。最初の DITA North America Conference は2007年まで開催されませんでした。その頃は、情報伝達の代替えの手段がいくらか動きを見せだしたとはいえ、紙のページの需要は永久に続くだろうと推測していました。

2004年に Thad McIlroy、出版業界のエキスパートが Gilbane レポートで次のように予想をしました。

XSL-FO はかなり注目され採用されるだろう。なせなら、XML (そしてさらに重要な XSLT )はあらゆる分野の産業で広く定着し、どんなビジネスプロセスの展望においてもベンダーによる、手厚いサポートがあるからである。XSLT を扱うことは開発者が FOを実装できるようになるための大きなステップとなり、そのことは、標準を推進していくエネルギーと経験となるだろう

続きは明日投稿します。

US 営業グループ
アンテナハウス海外サイト
http://www.antennahouse.com/
http://rainbowpdf.com/


F# の Seq に驚く

.NET の一級市民と「なるべく」設計されたという F#。一級市民になれたのだろうか。Visual Studio 2013 Community でも最初から F# が使える。がしかし、GUI プログラム (WPF プログラム) が作れるようにはなっていない。拡張プログラムの「F# Empty Windows App (WPF)」をインストールすることで GUI プログラムが作れるようになる。喜んで使い始めるが、どうもプロパティで GUI コントロールをバインドする部分がちゃんと動かない。ツリー表現のコントロール(パス)でアイテムを選べるのだが、アイテム名が表示されないので何を選んでるのかわからない。選ぶと XAML ファイルが変更されるので動いてはいるようだ。これがバグなのか、たまたま微妙に動いてるだけなのかわからない。F# は正規には WPF プログラムを作れるようにはなってないのだからたまたま微妙に動いてるだけという可能性は高い。なんにせよ結局 XAML は手で触らないといけない。一級市民ねぇ。

プロパティをイベントモードにすると「イベントハンドラーを追加する前に、分離コードファイルとクラス定義を追加してください。」などとお願いされちゃう。分離コードってなんだ? と調べると、C# の partial class を使って XAML の定義と C# の定義を融合するといったことをするようだ。問題は F# には partial class なんて概念がないこと。将来的にはサポートされるのかもしれないが、VS2013 の F#(バージョン3.1.2) には存在しない。困ったぞ。しかたがないので、アプリケーションのインスタンスを表す App.xaml を使うのを止め、コードでアプリケーションの初期化を記述した。イベントハンドラはコードで追加。まさしく手で追加。困った一級市民だ。

そんな、皆さんのディスクの肥やしになっているだろう F# の Seq に驚かされた。

.NET の ZipArchive クラスの Entries プロパティは ReadOnlyCollection<ZipArchiveEntry> という型なのだが、こういった .NET でよく使われるコレクションは F# では List の関数では直接扱えない。ところが Seq の関数では扱える。で、map や iter など Seq の関数を List の関数のつもりで(大概同じものがある)使ってるとその仕様の違いに突然驚かされる。で、確認のためプログラムを書いた。

let OnList (d0) =
    let _ = stderr.WriteLine("## OnList ##")
    let _ = stderr.WriteLine("part 1")
    let c = ref 0
    let d1 = 
        List.map 
            (fun (s: string) -> 
                let _ = stderr.WriteLine("function list 1")
                c := !c + 1
                s.ToUpper() + string !c
            ) 
            d0
    if List.length d1 > 2 then
        let _ = stdout.WriteLine("part 2")
        let d2 = 
            List.map
                (fun (s: string) -> 
                    let _ = stderr.WriteLine("function list 2")
                    s
                ) 
                d1
        d2
    else
        []

let OnSeq (d0) =
    let _ = stderr.WriteLine("## OnSeq ##")
    let _ = stderr.WriteLine("sect 1")
    let c = ref 0
    let d1 = 
        Seq.map 
            (fun (s: string) -> 
                let _ = stderr.WriteLine("function seq 1")
                c := !c + 1
                s.ToUpper() + string !c
            ) 
            d0
    if Seq.length d1 > 2 then
    //if true then
        let _ = stderr.WriteLine("sect 2")
        let d2 = 
            Seq.map
                (fun (s: string) -> 
                    stderr.WriteLine("function seq 2")
                    s
                ) 
                d1
        Seq.toList d2
    else
        []

[<EntryPoint>]
let main argv =
    let ls1 = [ "abc"; "def"; "ghi" ]
    let r1 = OnList(ls1)
    let _ = List.iter (fun (s: string) -> stdout.WriteLine(s)) r1
    let r2 = OnSeq(ls1)
    let _ = List.iter (fun (s: string) -> stdout.WriteLine(s)) r2
    0

OnList 関数と OnSeq 関数はどちらも入力の文字列リストを関数1 で大文字に変換して順序数を付けて、リストサイズが 2 より大きかったら関数2 を通って変換後のリストを返す。関数2 では何もさせてないが、何かしてもしなくても同じなので省略した。OnList 関数と OnSeq 関数の違いは List の関数を使うか Seq の関数を使うかだけ。

OnList の実行結果は以下の通り。

## OnList ##
part 1
function list 1
function list 1
function list 1
part 2
function list 2
function list 2
function list 2
ABC1
DEF2
GHI3

目論んだ通り、リスト要素の回数だけ関数1 と関数2 が呼ばれている。

OnSeq の実行結果は以下の通り。

## OnSeq ##
sect 1
function seq 1
function seq 1
function seq 1
sect 2
function seq 1
function seq 2
function seq 1
function seq 2
function seq 1
function seq 2
ABC4
DEF5
GHI6

関数1 が 2 回ずつ呼ばれ、参照を使った順序数が変わってしまっている。この程度のコードで結果が変わるのである。

Seq は遅延評価されるのに加え、要素のインスタンスが常に 1 つという制限がある。で、

if Seq.length d1 > 2 then

のときに d1 が評価され、分岐するのだが、関数2 での評価時、もう d1 の要素は保持されていない(要素のインスタンスは常に 1 つ)ため再度関数1 からやり直している。ところが関数1 は順序数を得るのに参照を使った代入をしている不純な関数なので結果が変化してしまうのである。この関数1 が純粋でも問題は同じ。関数1 が重い処理だったりした場合、無駄に CPU と時間を食うことになる。不純な関数を使ったのは結果が変化するという、どう考えてもダメな判りやすい結果を敢えて出すため。

if true then

というように分岐の判定である d1 の評価をやめると、関数1 は要素数回のみ呼び出される。

ようは Seq には気を付けろということだ。.NET のコレクションがデフォルトでは Seq でしか扱えないのは、どう考えても罠。強烈な罠。

 


『Antenna House pdfview』 1.0.0版を販売開始!

~ Android アプリケーションへ PDF 表示機能を組み込み ~

Android 向けの PDF 描画ライブラリー『Antenna House pdfview』1.0.0版の販売を開始しました。昨年よりβ版を公開しておりましたが、本日より正式リリースとなります。

お客様開発アプリへ PDF の表示や検索機能を提供

『Antenna House pdfview』 は、Android 上で下記が可能です。

  • PDFファイルをビットマップ画像に変換
  • PDFファイルからページテキストを抽出

『Antenna House pdfview』 を組み込むことで、お客様が開発される Android アプリで PDF の表示や検索が実現できます。

対応プラットフォーム

下記のプラットフォームで動作します。
・Android 4.0.4 – 4.4.4 (ARMv7-A アーキテクチャーの CPU)

サンプル PDF ビューアー、ソースコードが付属

サンプル PDF ビューアーが付属しておりますので、お手元の Android 端末で、PDF の表示やテキスト検索の動作をすぐにご確認いただくことができます。

また、サンプル PDF ビューアーの Java ソースコードも提供しております。Java ソースコードは、開発アプリケーションへの PDF 表示機能の組み込みや、独自の PDF ビューアーの開発にご利用いたくことができます。

ahpdfview sample

サンプル PDF ビューアー

詳しい製品情報は、下記の製品ページをご覧ください。
また、評価版をご用意しておりますので、ぜひこの機会にお試しください。

製品ページ:
https://www.antenna.co.jp/ahpdfview/
評価版のお申し込み:
https://www.antenna.co.jp/ahpdfview/trial.html
お問い合わせ:
Antenna House pdfview はOEM 販売となります。OEM ご相談窓口へお問い合わせください。


月刊論文誌のEPUB化

おはようございます。今日は月刊論文誌のEPUB化についての話題です。

現在、月刊の技術学会誌のEPUB版を制作しています。印刷用のPDFと組版用のテキストデータが校了後に提供され、これをEPUB化して印刷物の発行と同時に公開します。

EPUBは、アンテナハウスの電子書籍制作Webサービス「CAS-UB」で生成します。

時間がないので、できるだけ効率よく作業を行えるよう、組版用のテキストデータをCAS-UBのマークアップテキストに効率よく置き換えられるようにインポートプログラムを用意しています(CAS-UBは、このようなユーザー毎のカスタマイズ要求に対応できます)。

図や数式は画像素材としては提供されないので、アンテナハウスで開発した「PDF加工画像化ツール」でPDFから切り出して使用します。

数式の切り出し

PDFを「PDF加工画像化ツール」で表示し、まずは数式を探して切り出す範囲を指定します。数式のほとんどは特殊なフォントが使われているので、フォントを検索することで自動的に範囲指定できるようにしています。数式は、文章中に置かれたインライン数式と、段落に数式のみが置かれたブロック数式に分けて範囲指定します。

数式の切り出し

数式の切り出し

数式は、インライン数式とブロック数式を分けて、ファイル名に連番を付けて切り出します。
組版用のテキストデータには数式のマークアップがあるので、数式の範囲指定と組版用のテキストデータの数式マークアップを1対1に一致させて、組版用テキストデータの数式マークアップをCAS-UBのマークアップに置き換えます。

図や表、写真などの切り出し

図表やイラスト、写真などは、目視で探してキャプションを含めて範囲指定することで、キャプション付きの画像として切り出します。図表の位置は、組版用テキストデータに情報がないので、本文中に 図1 図2 といった記述があれば、その段落の後にCAS-UBのマークアップで図表を配置します。

画像の切り出し

画像の切り出し

EPUBのカバー画像は、印刷用の表紙を画像化したデータを加工して使用しています。
作成したEPUBは、閲覧用の端末で表示しを確認し、問題があれば調整します。

今回の案件では、アンテナハウスで開発した「会員制出版物配信サービス」でEPUBを購読者向けに配信しています。



「会員制出版物配信サービス」モニター募集!

おはようございます。今日明日は、電子出版サービスグループから電子書籍にまつわる情報を発信します。

【告知】iOSアプリ「EB2Magazine」モニター募集のご案内

昨年リリースした会員制出版物配信サービスの実践例として、編集兼発行人 鎌田博樹氏が率いる『EBook2.0 Magazine』をiOSモバイルユーザー向けアプリとして開発しました。EBook2.0 Magazine を楽しみつつ、アプリの出来具合を確かめていただけるモニターを募集いたします。

ご興味をお持ちいただいた方は、是非下記お申込フォームからお申し込みください。

  • モニター期間:2015年9月末まで
  • モニター特典
    有料会員向けの記事を期間終了まで無料で購読いただけます。

アプリダウンロードURL:E-Book2.0 Magazine iOSアプリダウンロード

「会員制出版物配信サービス」のコンセプト

会員ユーザーのもとに確実に届き、いつでもどこでも読まれる電子書籍(PDF/EPUB)を!

特定ジャンルに絞ったサイトの記事を閲覧するユーザーの多くは、そのジャンル(またはサイト)に元から関心を払っていて、かつ興味をひかれる記事は「きちんと読みたい」「読みながら考えたい」と感じます。

さて、情報配信側はというと、こちらはWebページを制作、更新し、ユーザーに対してその内容を告知します。告知の方法はメールが主流ですが、メールを開く前に大量のスパムに紛れてしまったり、本文の作られ方やユーザーが利用しているメーラーによって可読性が変わり、ユーザーが閲覧をあきらめてしまったりと、なかなかWeb閲覧までの道のりは遠いと伺います。そういうサービスを専門に行う企業に外注するのも一つの手ですが、コストを考えるとなかなか手が出せません。

会員制出版物配信サービスは、ユーザーの読みたい、配信者の見てもらいたいニーズにマッチしたサービスです。

配信サーバーと専用モバイルアプリで問題を解決します。イメージは学会誌、会誌、ニューズレターをモバイル向けに電子書籍で配信する方式で、アプリを端末へインストールすれば、多くのメールに紛れてしまうことがないので、確実にユーザーの手元に届きます。オフラインでも、電車の中でも、いつでもどこでもしっかり読んでもらえます。

詳細ページURL:https://www.antenna.co.jp/epub/e-maga.html

「会員制出版物配信サービス」実例のご案内


troubleshooting(DITA 1.3)

なかなか勧告されない DITA 1.3 ですが (^^;  期待している方も多いはず。
中でもやはり最大の注目は troubleshooting でしょうか。
新たに troubleshooting トピックタイプが追加されたり、タスクの中にも troubleshooting が記述できるようになるみたいです。

そこで troubleshooting トピックタイプについて少し調べてみました。極めて大雑把ですが次のような構造になるようです。

 DITA 1.3 troubleshooting1

まず「症状」の記述があって、その下に「原因」と「対処法」が続く構造ですね。
具体的にイメージできないので、試しにオーサリングしてみました。

DITA 1.3 troubleshooting2

私自身オーサリングの専門家ではないのでちょっと怪しげかもしれませんが、上のような感じになりました。
もし「その書き方は間違っているよ」という部分がありましたらご指摘ください。


DITA Festa2015 Kyoto

少し古い話題になってしまいますが、3月20日に恒例の DITA Festa が開催されました。今回は京都での開催です。
昨年2月には大阪で開催していて、そのときと比べて少し参加者が少なかった感があるのですが、それでも皆さんが熱心に各セッションに耳を傾けていらっしゃったのが印象的でした。
詳しいアジェンダはDITAコンソーシアムジャパンのWEBページをご参照ください。

DITA Festa2015 Kyoto の様子

DITA Festa2015 Kyoto の様子

まず最初に「SAPにおける大規模DITA導入事例」のセッションです。これは昨年11月に東京で行われた DITA Festa でもあったセッションなのですが、そのときの参加者の評価が非常に高く、今回もドイツからSven Leukert氏をお招きして事例発表をしていただきました。

  • CMS上にある130万ファイル以上のオブジェクトから、1日に12,000以上の成果物を生成
  • 300人以上に対して教育、役割の定義、サポートやコミュニケーションチャネルを設定を実施

という大きな規模の事例で、参加者の方々からは「非常に参考になった」という声が聞かれた反面「あまりに大規模過ぎて…」という声もありました。
質疑応答の中で「コストダウン前提ではなく改革なんだ」とおっしゃっていたのが印象的でした。

続いて DITA Europe 2014 に参加されたIXIASOFTの村田氏とPFUソフトウェアの竹森氏の報告です。両氏が DITA Europe で聞いて来たなかで、興味深かったセッションをかいつまんで報告してもらいました。
個人的に面白いと思ったのが「失敗するコンテンツ管理プロジェクト プロジェクト初期におけるその兆しと解決方法(Mekon社)」です。「こうするといいよ」みたいな切り口での話はよく聞きますが、ここでは「こうしちゃだめだよ」という切り口で話を聞けました。
それから「執筆ガイドラインをきちんと作ってそれを遵守しないとだめ。インフォメーションモデルだけでは十分でない」というのも説得力があります。

そのあと10社のベンダー企業から各社のサービスや製品の紹介があり、全体として非常に密度の高いイベントとなりました。


Pages: 1 2 Next