fixedpoint.jp




2017/04/26

オフィス文書をバージョン管理するならFlat ODF形式がお薦め

ワープロドキュメントや表計算シート、プレゼンテーションなど、LibreOfficeで編集するオフィス文書をGitのようなバージョン管理用ソフトウェアで管理するとします。その際、既定のOpenDocument Format (ODF)というファイル形式にすると、バイナリファイルになるため何かと不便です。例えば、文書の変更箇所を差分として表示するためにgit-diff(1)を使おうとするとtextconvフィルターを通すなどしてテキストに変換する必要があります。

こういうときにはsingle XML document(いわゆるFlat ODF形式)として保存すると便利です。これはプレーンテキストのXMLファイル形式です。Flat ODFは国際標準であるODF 1.2の正式な仕様の一部であり、通常のODFで保存した場合と同じ情報を含んでいます。ファイルの内容には、ドキュメントの地の文や表計算シートのセルの数字などがそのままテキストとして書き出され、画像などのバイナリのデータはbase64エンコードされて記録されています。

この形式がソースとして優れているもう1つのポイントとしては、オフィススイート編集画面でのカーソルの位置といったメタデータもテキストで扱われるため、気付きにくいメタデータの差分も簡単に得られます。

ただ欠点としては、通常のODFのようにzipで圧縮されていないため、Flat ODFにするとファイルサイズが数倍程度増える傾向にあります。

参考

#permalink

2017/04/25

Exponential integralの応用

C++17ではライブラリ数学関数がいくつか追加されますが、そのうちの1つがstd::expintです。これはexponential integral (Ei)を数値的に計算した値を返します。

さてEiの定義を理解して、Eiが手軽に計算できるようになると具体的に何の役に立つのでしょうか。有名な"Numerical Recipes 3rd Edition: The Art of Scientific Computing"でもEiを計算するアルゴリズムこそ紹介されていますが、どのような応用があるかまでは書かれていません。

例えば、次のような応用が見つかります:

参考

#permalink

2017/04/12

なぜEvernoteを避けるべきか

アイデアをメモするツールとしてEvernoteは便利です。モバイルでもデスクトップでもデバイスに依らずデータを共有でき、画像や音声などの様々なデータをクリップできるのが特長です。また、to-doリストを管理する機能も重宝します。

しかしEvernoteを利用することで生まれるリスクもあります:

セキュリティ上の懸念
Evernoteが管理するサーバー上にデータが保存されるため、多少なりとも漏洩や紛失の可能性があります。
サービスの継続性についての懸念
Evernoteを提供する企業の経営状況が変化することで、サービスや企業自体が存続しない可能性があります。

上の2つのリスクを軽減するために、定期的にデータをバックアップするという方法があります。仮にクラウドの障害でデータが失われても、バックアップがあればサービスが復旧した後にリストアできます。また、サービス提供が終了してもデータが手元に残ります。

しかし、ここでより微妙で見逃しがちな問題が見つかります。それは、バックアップ用途のためにEvernoteが公式に提供しているエクスポートで得られるデータの形式は再利用に適していないという点です。HTMLもしくはENEX形式にエクスポートできますが、いずれも本来Evernoteに保存されていたノートをそのまま表現したものではありません。

このことは同時に、他の類似のツールに移行する妨げになることを意味します。メモを記録するという機能ゆえに、利用を続けていくうちにデータが蓄積しロックインの慣性が働きます。エクスポートされたデータを別の形式に変換するプログラムを開発することは可能でしょうが、むしろ最初からorg-modeのような"future proof"なテキストベースの形式をネイティブに扱うツールを使うという選択肢もあります。

#permalink

Archives

2017: Mar / Feb / Jan

2016: Dec / Nov / Sep / Aug / Jul / Mar / Feb / Jan

2015: Dec / Oct / Sep / Jul / May / Mar / Feb

2014: Dec / Nov / Oct / Aug / Apr / Mar / Feb / Jan

2013: Dec / Nov / Oct / Sep / Aug / Jun / May / Apr / Mar

2012: Nov / Oct / Sep / Jul / Jun / May / Mar / Feb / Jan

2011: Dec / Nov / Oct / Sep / Jul / Jun / Apr / Mar / Feb / Jan

2010: Dec / Nov / Oct / Sep / Aug / Jul / Jun / May / Apr / Mar / Feb / Jan

2009: Dec / Nov / Oct / Sep / Aug / Jul / Jun / May / Apr / Mar / Feb / Jan

2008: Dec / Nov / Oct / Sep / Aug / Jul / Jun / May / Apr / Mar / Feb / Jan

2007: Dec / Nov / Oct / Sep / Aug / Jul / Jun / May / Apr / Mar / Feb / Jan

2006: Dec / Nov / Oct / Sep


© 2006-2017 fixedpoint.jp