yendo weblog


Excelによるデータ処理が問題となるとき

さまざまなデータ処理業務において、データの規模があまり大きくない場合、 もっともよく使われているソフトウェアはMicrosoftの表計算ソフトExcelでしょう。 データを2次元の表という紙の延長線上で操作するというわかりやすさ、関数などによっ て単純な集計から複雑な分析まで可能というレベルと幅の広さ、マクロによる作業 の自動化の容易さなどによって、パーソナルコンピューターを代表するソフトウェ アとなり、さまざまな部門において幅広く活躍する不可欠のインフラとなっていま す。しかし、業務拡大などによって、扱うデータが大量化、複雑化すると、Excel でのデータ処理には様々な問題が発生します。

ユーザー目線での問題

ユーザーの目線からすると主に次のような問題があげられます。 大量のデータを複雑なマクロで扱うと、Excelは遅く、不安定です。再現性なく Excelがフリーズすることもあります。フリーズしているのか、単に計算に時間が かかっているのか判断に迷うこともあります。データの量が増えれば、担当者の数 も増えるでしょうが、Excel上でデータを複数人で同時に編集するのは面倒です。 Excelで時間のかかる処理を行っている間は通常、同一のパーソナルコンピューター 上ではExcelを使った別の作業は行えなかったりもします。

Excelは誰でも比較的簡単にデータや関数などに手を入れられる反面、そのデー タや関数が壊されていないかの信頼性に欠けます。データ量が増えるにつれデータ の検証はいっそう困難になります。悪意に対しても脆弱です。また、高度な自動化 やシステム化への誘因が低くなりがちで、ファイルを開く、コピー&ペースト する、マクロを実行する、といった単純な手作業をなかなか減らせない現状に慣れ てしまいがちです。

システム担当者目線での問題

システム担当者の目線からすると、Excelには実に深刻な問題があります。一言 で言うと、メンテナンスが困難だということです。Excelでは、マクロや関数といっ たプログラムの部品が、セルや複数のモジュールに断片化されがちです。単純なデー タ処理なら問題になりませんが、複雑なデータ処理のような場合、ソースコード (人間が読み書きできるプログラムの元で、Excelで言えばマクロや関数など)の 動作を追って検証することは困難です。一般的なプログラミング言語ではソースコー ドを管理する仕組みが利用でき、どの箇所を誰がどう変更したか簡単に管理できま すが、Excelはそのような仕組みを使う設計になっていません。また、Excelにはシ ステムとしてテストの仕組みがありません。作成したマクロや関数が適切に動作し ているかどうかを、確認するのに大きなコストがかかります。

作成したマクロを再利用する仕組みが中途半端なためにマクロのコピー&ペー ストが横行したり、ソースコードが列と行に縛られてデータやプログラムの論理的 自由さが失われがちだったりすることなどから、マクロの作成そのものはやっつけ 仕事で短時間で済ませたものの、その改修には数倍、数十倍の時間がかかるといっ たこともしばしば起こります。例えば、複雑なマクロを組み込んだExcelの既存の 表の間に、新規に列や行を追加するのはとても面倒で勇気のいる作業です。一般的 なプログラミング言語で適切に記述されていれば、そんな不要な心配はありません。

Excelの志向性

Excelは、大量のデータを決められたとおりに処理するという非人間的側面が多 くを占める作業に使うことを想定しては設計されていません。人間の知的意志判断 がより多くを占めるコンサルタント的なデータ処理に使うことを想定して設計され ています。そのため、Excelが抜群の効率性を発揮するのは、データの量や処理の 複雑さが一定の水準以下で、定形化できる作業と人間の知的操作との組み合わせが 必要となるような作業です。データの量や処理の複雑さが一定の水準を超え、作業 全体がより定型化できるようなケースでは、その長所がかえって短所になります。 このようなケースでは、例えば本格的なデータベースソフトウェアへの移行を検討 する必要があります。

トマ・ピケティ氏の『21世紀の資本』は、膨大な統計データをもとに経済的格 差の拡大を明らかにしたとして世界的にベストセラーになりましたが、少々驚いた ことに、公開された彼のデータ処理や分析にはExcelが使われていました。そして、 彼のデータ処理や分析には上記にあげたようなExcel特有の問題があるのです。興 味のある方はダニエル・レミア氏の 「 大切な作業に表計算ソフトは使わないように(本当に!)」 は参考になるで しょう。

2016/12/09 (Fri) 21:03 | タグ: computer | 固定リンク


GNOME 3 デスクトップでのキーバインド・カスタマイズ

以前のGNOMEデスクトップでは面倒ながらもxmodmap でキーバインドの柔軟なカスタマイズができたのですが、 最近のGNOMEデスクトップだと、このあたりが大きく変更されています。 キーボードの管理をGNOMEで行うようになったからです。

よくあるCapsキーとCtrlキーの入れ替えのようなものならば、 テキストファイルなどいじったりする必要はなくGnome Tweak Toolで簡単に設定できるようになりました。 ただ、その一方で独自な設定を行うのは反って難しくなりました。 たとえばxmodmapなどでキーバインドを変更してみても、サスペンドなどすると、 設定をGNOMEに上書きされ、独自の変更は無効にされてしまいます。 旧来からのUNIXユーザからするとイライラさせられる挙動です。

3.6 (かな?) 以降のGNOME デスクトップにおけるキーバインド・カスタマイズについては、 Custom XKB Options with Gnome - Blaenk Denum によくまとまっています。 これを参考に、以下では右ALTキーを全角半角キーに変更してみます。

1. ディレクトリ /usr​/share​/X11​/xkb​/symbols/ に設定ファイルを追加

ディレクトリ /usr​/share​/X11​/xkb​/symbols/ にキーバインド変更のための設定ファイルをおきます。 ファイル名は他とかぶらなければ自由です。ここでは zenkaku_hankaku と言うファイル名で以下の内容を作成しました。以下にある "ralt_zenkaku_hankaku" というシンボル名も好きに名前をつけます。

partial modifier_keys
xkb_symbols "ralt_zenkaku_hankaku" {
    replace key <RALT> { [ Zenkaku_Hankaku ] };
};
どのキーをどのように変更するかは、/usr​/share​/X11​/xkb​/symbols/ にある他のファイルや、 Keyboard configuration in Xorg - ArchWikiが参考になるでしょう。

2. ファイル /usr​/share​/X11​/xkb​/rules​/evdev の編集

ファイル /usr​/share​/X11​/xkb​/rules​/evdev に以下の一行を追加します。 zenkaku_hankaku は先ほどのファイル名、ralt_zenkaku_hankaku はシンボル名です。 これはパッケージの更新でファイルが変更されたら、 面倒ですが再度、追加する必要があります。

zenkaku_hankaku:ralt_zenkaku_hankaku =  +zenkaku_hankaku(ralt_zenkaku_hankaku)

3. GSetting の org​.gnome​.desktop​.input-sources​.xkb-options に設定追加

dconf-editor で org.gnome​.desktop​.input-sources​.xkb-options に、 'zenkaku_hankaku:ralt_zenkaku_hankaku' 追加します。

['zenkaku_hankaku:ralt_zenkaku_hankaku']
コマンドラインからも可能です。
% gsettings set org.gnome.desktop.input-sources xkb-options "['zenkaku_hankaku:ralt_zenkaku_hankaku']"

これで設定は完了です。すでに新しいキーバインドが有効になっているはずです。 サスペンドなどしても設定が変わることはありません。

2014/12/22 (Mon) 12:57 | タグ: computer | 固定リンク


「続きを読む」をJavaScriptで書いてみた

Facebookなんかである「続きを読む」の例を書いてみました。 JQueryを使ってます。 実例もどうぞ。


<html>

<head>
  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>

  <style>
  .more-text {display: none;}
  </style>

  <script type="text/javascript">
    function readMore(target){
      var id = '#'+$(target).closest('.status').attr('id');
      var main = id+' .main-text';
      var more = id+' .more-text';

      $(main+','+more).toggle();
    }
  </script>
</head>

<body>

<div class='status' id="123">
  <div class="main-text">
  <p><a href="#123" onclick="readMore(this)">続きを読む</a></p>
  </div>

  <div class="more-text">
  ここに記事の内容を記入します。
  <p><a href="#123" onclick="readMore(this)">折りたたむ</a></p>
  </div>
</div>

</body>

</html>

2013/05/15 (Wed) 21:20 | タグ: computer | 固定リンク


GFeedLine: GNOME 向け SNS クライアント

GNOME 3 向けのシンプルな Twitter クライアントを作り始め、今では Facebook や Tumblr にも対応しています。 Twitterについて言えば、以下のような機能をサポートしています。 ただ、細かいところは手抜きが多く、ウェブに丸投げしたりしてもいます。

設定で各フィードのグループを設定すると、 そのグループごとにマルチカラム表示を行えます。 フィードの表示順序は設定画面上でドラッグ & ドラッグすることで変更可能です。

ちょっと面白い機能としては、フィードの統合ができます。複数のフィードの、 ソースと名前とグループ名がそれぞれ同じ場合、それらを一つのタブにまとめるよ うになりました。例えば、Twitterで複数のリストや検索を一つのタブにまとめるこ とができます。

最新版は 2.2 beta 3 です。tar.gz 以外に、Debian および Ubuntu 向けのパッケージを用意しています。以下からどうぞ。

gfeedline - Google Project Hosting

追記: 最新情報に追随するため、内容を大幅に更新しました。 (2013/5/28)

2012/02/15 (Wed) 20:36 | タグ: computer | 固定リンク


NetWalker 向けパッケージ (Twitim および GNOME Photo Frame)

いまさらなのだけど、SHARP NetWalker を使う機会ができたので、自作アプリの NetWalker 向けのパッケージを作成した。

Twitim はチャットクライアント風の Twitter クライアント。 ちょっと古いものだけど、複数のタブやポップアップ通知をサポートしている。 チャット風ということで、一覧できるメッセージは比較的多い。 NetWalker 標準の Ubuntu Jaunty では日本語入力ができない問題に対処した。

GNOME Photo Frame は、Gnome デスクトップ向けの写真フレームガジェット。 ローカルや大手ネットサービスから写真を取得して表示する。 スクリーンセーバーとしても利用可能。 NetWalker で動くように、いくつかのバグを修正した。 ただ、NetWalker 標準の Ubuntu Jaunty の古さゆえ、最新のバージョンは動かないので、少し古いバージョンになる。

いずれも APT ラインに以下の行を加えて、

deb http://www.tsurukawa.org/debian/netwalker/ ./ 

Twitim なら

apt-get install twitim 

Gnome Photo Frame なら

apt-get install gphotoframe
で、インストールできる。問題があれば Twitter: yendo0206 までどうぞ。

2011/07/17 (Sun) 20:24 | タグ: computer | 固定リンク


デスクトップアプリケーションで Facebook Graph API を使うときのポイント

基本的にドキュメント通り。認証の手続きも簡単。 ただ、大したものではないけど、 デスクトップアプリケーションにおける利用で分かりにくいポイントを二つ。

認証

デスクトップアプリケーションでは、 パーミッション の設定 (scope) で 'offline_access' も指定しておくこと。 これはブラウザで Facebook にログインしていなくても (すなわちオフラインでも)、 自分の情報に (デスクトップアプリなどが) アクセスできるという権限みたい。 この権限がないと、アクセストークンは一定時間でエクスパイアされるのかな。

ログイン画面

認証に関するドキュメントではコンパクトなログイン画面が例としてあげられているが、ログインプロセスを説明通りに行うと、通常の大きなウェブのログインページが表示される。 コンパクトなログイン画面を利用したい場合は、 ログインのアクセスには display というオプションが利用できるのだけど、これに popup を指定する。 OAuth ダイアログのドキュメントには記載がないが、 ダイアログのドキュメントだと記載がある。

2011/03/30 (Wed) 16:24 | タグ: computer | 固定リンク


GNOME ドキュメントの作成と利用

GNOME でドキュメントを作成し、利用してみる。 ドキュメントを作成し、翻訳を行い、インストールを行って、 最終的に yelp で閲覧するところまで。 今回は GNOME Photo Frame のヘルプを例とする。 通常の GNOME アプリケーションとは異なり、Python を使う。 以下のツールが必要となる。

1. 作成するデータ

作成するデータは以下の通り。

基本的なファイルは以下のように help ディレクトリに配置する。

help/
    gphotoframe.omf.in
    C/gphotoframe.xml
    C/figure/gphotoframe.png
    ja/ja.po
    ja/figure/gphotoframe.png

インストールする前には PO ファイルから、ヘルプの XML ファイルと、OMF ファイルを 各言語ごとに生成する必要がある。

ヘルプ本体の XML ファイル

適当に他の GNOME ドキュメンテーションの XML ファイルを参考に書けると思う。 基本的には 1 ファイルで、1 ドキュメントを記述する。 ちゃんとしたことは以下を参照。

ちなみに GNOME アプリケーションのドキュメントのライセンスは、だいたい GNU Free Documentation License (GFDL) になっているみたい。

OMF ファイルの雛形

ドキュメントをシステムに登録するには、 OMF (Open Metadata Framework) ファイルが必要になる。 GNOME Photo Frame だと以下の通り。これを gphotoframe.omf.in として help ディレクトリに配置する。

<?xml version="1.0" standalone="no"?>
<omf>
  <resource>
    <subject category="GNOME|Applications|Graphics"/>
    <type>user's guide</type>
    <relation seriesid="01bfe79a-d094-c319-a063-ca3c4b5eb74d30"/>
    <rights type="GNU FDL" license.version="1.1" holder="Cristian Marchi"/>
  </resource>
</omf>

このうち seriesid はコマンド scrollkeeper-gen-seriesid で生成する。

PO ファイル

XML ファイルの翻訳には xml2po を使う。ドキュメントの po は、メッセージカタログの po とは別途管理する。 help ディレクトリに移動してから、以下のコマンドを実行する。

POT ファイルを作成する。後で説明するが、最終的には OMF ファイルを生成しておき、以下のようにこれも翻訳対象ファイルとして指定しておいた方がよい。

% xml2po -o help.pot C/gphotoframe.xml C/gphotoframe-C.omf
% cp help.pot ja/ja.po

PO ファイルを更新する

% xml2po -u ja/ja.po C/gphotoframe.xml C/gphotoframe-C.omf 

詳しい使用法は man を参照。

2. ビルド

通常の GNOME アプリケーションなら gnome-doc-utils.make を使う。 Migrating to GNOME Documentation Build Utilities の 2.2 を参考にすればよい。ただ、Python など、make を使わないシステムで、ビルドを自前でやろうとすると結構面倒。

各言語用に OMF ファイルを生成

gphotoframe.omf.in から OMF を生成するには、xsltproc で行う。 これは各言語ごとに行うが、後で翻訳を行うためにも、まずは C 向けの OMF を作成する。なお、対象となる XML ファイルが翻訳されていると、それに応じて各要素も翻訳が行われる。OMF ファイル用に別途 PO ファイルが必要になることはない。

% xsltproc \
-o ./C/gphotoframe-$lang.omf \
--stringparam db2omf.basename gphotoframe \
--stringparam db2omf.format 'docbook' \
--stringparam db2omf.dtd "-//OASIS//DTD DocBook XML V4.1.2//EN" \
--stringparam db2omf.lang C \
--stringparam db2omf.omf_dir "/usr/share/omf" \
--stringparam db2omf.help_dir "/usr/share/gnome/help" \
--stringparam db2omf.omf_in ./gphotoframe.omf.in \
`pkg-config --variable db2omf gnome-doc-utils` \
./C/gphotoframe.xml

OMF ファイルの生成は面倒なので、スクリプトを用意した方がよいだろう。 gphotoframe では、 makedoc.py - gphotoframe のようなスクリプトを用意した。

各言語用に XML ヘルプファイルを生成

xml2po を利用する。

% xml2po -p ja/ja.po -o ja/gphotoframe.xml C/gphotoframe.xml

Python でのインストール

C なら標準のビルドシステムを使うだけなのだが、python の場合は DistUtilsExtra を使うのが今のところ一番楽みたい。 setup.py と setup.cfg の記述については上記のリンクを参照。

OMF ファイル、XML ファイルなどを各言語ごとに全部生成しておく必要はあるが、 決められたフォルダ (デフォルトでは help) にそれらを置いておけば、setup.py でインストールで可能となる。

3. 閲覧

yelp の利用

閲覧に GNOME の標準システムでは yelp を使う。 インストール済みならば、URI で開くことができる。

% yelp ghelp:gphotoframe

ゆえにプログラムから呼び出すには、show_uri をコールすればよい。 Python なら以下の通り。

gtk.show_uri(None, 'ghelp:gphotoframe', gtk.gdk.CURRENT_TIME)
インストール前に試し読みするならば、ファイルを直接指定してもよい。 ただ、いずれにせよ OMF ファイルは必要になる。
% yelp ja/gphotoframe.xml

HTML の生成

ブラウザで閲覧できるように、HTML を生成することもできる。

% xsltproc -o /tmp/index.html /usr/share/xml/gnome/xslt/docbook/html/db2html.xsl ja/gphotoframe.xml

2010/10/26 (Tue) 00:53 | タグ: computer | 固定リンク