天泣記

2006-12-02 (Sat)

#1

注: 実際に噛まれたわけではない

2006-12-11 (Mon)

#1

プログラムからその意味への関数を考えて、その関数を微分するとどうなるだろう?

それは拡張性を意味したりしないだろうか。

つまり、プログラムの小さな変更で意味が大きく変更できると微分は大きくなるはずだ、とか。

もちろん、行いたい変更にたいするところが重要なのであるが。

#2 [tdiary] 脆弱性fix [CODE blog]

http://www.tdiary.org/20061210.html ということなので対応する。

2006-12-15 (Fri)

#1

Binary 2.0カンファレンス 2006 で話してきた。

getcontextの怪

ネタと発表時間があっていなかった。

最初は Ruby 側の workaround まで入れようと思ったのだが、ざっと書いた段階で 36枚になってしまい、gcc の変化につながる流れだけに絞った。それでも時間はオーバー気味だった感じである。

workaround のほうが笑える話になるとは思うのだが、問題自体を説明しないのもなんだし。

2006-12-17 (Sun)

#1

「楽々 ERD レッスン」を読む。

#2

「諸般の事情でスライド6枚」 という件について考えてみる。

この「諸般の事情」なる制約は、立方体の面の数からきている。

したがって、まず考えられるのが、将来、ディスプレイおよびプロジェクタが正三角形に発展するという可能性である。そうなれば正二十面体により、スライド20枚が可能になる。

また、四角形から三角形になるのは数が減っていて発展とはいえないとすれば、五角形ということも考えられる。そうだとすれば、正12面体により、スライド12枚が可能であろう。

しかし、四角形以外になるのは現実的でないという意見もあるかもしれない。

そこで、正多面体以外の多面体を検討してみた。具体的には Wikipedia の図形の一覧 から、3次元の図形を眺めてみた、ということである。

まず使えそうなのが、斜方立方八面体である。正方形が18枚で、スライド18枚である。しかし、正三角形が8枚まざっているので、純粋さに欠けるという意見があるかもしれない。

その場合、菱形十二面体はどうであろうか。これであれば、菱形が12枚で、純粋である。しかし、菱形はプロジェクタの形にはあわないという意見があるかもしれない。

では、凧形二十四面体はどうであろうか。凧型もプロジェクタの形にあわないではないかという人もいるかもしれない。しかし、ここで、スライドが3次元空間に配置されていることを思い出してほしい。3次元空間を 2次元に投影した場合、遠近法により像が歪む。近い点は画面の中心から離れ、遠い点は中心に寄る。したがって、適切な距離と方向に配置すれば、凧型を正方形に投影することは可能であろう。(たぶん)

というわけで、凧形二十四面体による、スライド24枚はどうであろうか。

2006-12-19 (Tue)

#1 [tdiary] upgrade [CODE blog]

tdiary を snapshot (2.1.4.20061210) に upgrade する。

#2 [codeblog] code plugin [CODE blog]

tdiary を新しくして、code plugin も新しいのが動くようになったので、新しくする。

#3 test code plugin [CODE blog]

binutils-2.16.1/COPYING:1

1:                     GNU GENERAL PUBLIC LICENSE

binutils-2.16.1/COPYING:2

2:                        Version 2, June 1991

invalid citation on line 2: Version 2, June 1992

#4 [planet] planet を試す。 [CODE blog]

https://www.codeblog.org/planet/

んー、https は参照できないのか?

ローカルファイルは参照できるからそっちでできるか。

2006-12-20 (Wed)

#1 [codeblog] code.rb のテスト [CODE blog]

binutils-2.16.1/COPYING:3

3:

line1 line2

#2 [qwik] graphviz プラグイン [CODE blog]

いれてみた。

debian な管理を無視して適当にいれたので、qwik のパッケージを入れ直すと消えるかも。

新しいパッケージには始めから入っている (と思う) ので、バージョンアップであれば問題ないのではないかという気もする。仕様が変わっていなければ。

2006-12-21 (Thu)

#1

鴨志田さんの発表 に名前が出ていた Succinct Data Structure を調べる。

集合について理解するのは難しくない。

wavelet tree はしばらく考える必要があったが、理解できた気がする。

#2

ぬぅ、月例会を完全に忘れていた。

#3 2G 以上のメモリ [CODE blog]

今日、主査会のあとで話題になった、2G 以上のメモリを確保できるかどうか、というのを試してみた。

% cat t.c
#include <stdlib.h>
#include <stdio.h>

int main()
{
  size_t s = 2.7 * 1024 * 1024 * 1024;
  void *p = malloc(s);
  if (p == NULL) { perror("malloc"); exit(1); }
  printf("%p\n", p);
  printf("%p\n", (char*)p + s);
  return 0;
}
% gcc t.c
% ./a.out
0xb184008
0xb7e50cd4

というわけで、できました。

むろん、32bit である。

% uname -srm
Linux 2.6.17.11 i686

これができるのは、カーネルがアドレス空間の半分は占めていない、ということによる。

さて、とすると、ptrdiff_t が疑問である。

% cat t.c
#include <stdlib.h>
#include <stdio.h>
#include <stddef.h>

int main()
{
  size_t s = 2.7 * 1024 * 1024 * 1024;
  void *p = malloc(s);
  void *p2;
  ptrdiff_t d;
  if (p == NULL) { perror("malloc"); exit(1); }
  printf("%p\n", p);
  p2 = (char*)p + s;
  printf("%p\n", p2);
  d = (char*)p2-(char*)p;
  printf("%d\n", sizeof(d));
  printf("%ld\n", d);
  return 0;
}
% gcc t.c
% ./a.out
0xb14a008
0xb7e16cd4
4
-1395864372

うぅむ。やはり ptrdiff_t は 32bit で、この 2.7G 確保したものの両端の差を表現できない。

どうせ、ssize_t も同様であろう。

2006-12-25 (Mon)

#1

Succinct Data Structure に限らないが、前処理を必要とする高速化アルゴリズムというのは扱いが難しい

前処理のコストがかかるので、どんな場合でも自動的に適用する、というわけにはいかない

もちろん、事前にその高速化が必要であることがわかっていて、最初っからそれを使うと決めてプログラムを書く場合には大きな問題はない

しかし、後から遅いことがわかったとか、あるいは機能拡張にともなって高速化が必要になったとか、既存のプログラムを高速化しようとしたときにはそう簡単にはいかない

既存のプログラムを高速化する場合、前処理の結果として生成される補助データをどこに格納するかという点が問題になる。すぐに考えられる可能性としては2つあり、それぞれに利点・欠点がある

また、補助データの寿命の問題については共通する問題がある

「プログラムを書き換えなければならない」というのはとてもいやな欠点である。高速化のためだけに、高速化には直接関係のない箇所まで変更するのは避けたい。変更してプログラムが壊れてしまってそれを直すのは徒労である

とはいえ、グローバルなハッシュもいろいろと欠点がある

では、もっとマシなやりかたを可能にする言語機構としてはどんなものが考えられるか?

2006-12-27 (Wed)

#1 [codeblog] シェルスクリプトを測定してみる。 [CODE blog]

Debian で、各パッケージとシェルスクリプトの数とサイズをはかってみる。

#!/bin/sh

# パッケージのリストを求める
if [ ! -f out/a.pkgs ]; then
  dpkg -l | tail -n +6 |awk '{ print $2 }' > out/a.pkgs
fi

# パッケージごとに実行ファイルの内容を file で調べる
for pkg in `cat out/a.pkgs`
do
  if [ ! -f out/b.$pkg ]; then
    dpkg -L $pkg | ruby -ne 'f = $_.chomp; print if File.executable?(f) && File.file?(f)' | xargs file /dev/null |grep -v '^/dev/null:' > out/b.$pkg
  fi
done

# パッケージごとにシェルスクリプトをリストアップする
for pkg in `cat out/a.pkgs`
do
  if [ ! -f out/c.$pkg ]; then
    grep '\<shell\>' out/b.$pkg | sed 's/:.*//' > out/c.$pkg
  fi
done

# シェルスクリプトの数をパッケージごとに数えてソートする
if [ ! -f out/d.wc ]; then
  LANG=C wc -l out/c.*|sort |grep -v ' total$' > out/d.wc
fi

# シェルスクリプトの数と合計サイズを調べる
if [ ! -f out/e.size ]; then
  ruby -e '
    File.foreach("out/d.wc") {|numfile_filename|
      numfile, filename = numfile_filename.split
      pkg = filename.sub(/^.*?\./, "")
      s = 0
      File.foreach(filename) {|l| s += File.size(l.chomp.sub(/:.*/, "")) }
      puts "#{pkg}\t#{numfile}\t#{s}\n"
    }
  ' |sort -n -k +3 > out/e.size
fi

で、結果のうちシェルスクリプトを含むものは以下のようになる。

xdg-utils  7 151357
  gettext 13 126227
autotools-dev  3  79069
         grub 10  71310
  automake1.9 11  65785
       dpatch  6  55602
     metamail 14  54261
  initscripts 28  53766
      makedev  2  53374
          ucf  3  50865
        psgml  5  49128
   alsa-utils  4  46688
       ispell  4  44994
   exim4-base 11  44358
         udev 17  38419
xbase-clients  7  36121
    pcmcia-cs 11  34745
openoffice.org-common 11  34104
system-tools-backends  1  31228
            hibernate  3  29790
              texinfo  2  29239
        console-tools  6  28512
         exim4-config  5  27567
      initramfs-tools 13  27552
                 gzip 10  26558
               netcat 12  26202
   emacs21-bin-common  3  25276
                  hal 22  25214
                libc6  5  25139
                  ppp 18  24496
              dselect  6  24247
          debianutils  8  23730
                bzip2  8  22608
         acpi-support 72  22586
                  cvs  3  22452
               xutils 10  20227
                  gdm  8  19446
           resolvconf 10  19039
              sysv-rc  3  18828
            xresprobe  6  17792
              gcc-4.1  1  16283
         xfonts-utils  4  15793
           xutils-dev  7  15349
            gs-common 29  14557
           x11-common  2  14537
            alsa-base  6  13886
            im-switch  1  13868
             autoconf  1  13409
             dpkg-dev  2  12901
           po-debconf  2  12633
                  apt  5  12101
       apache2-common  7  12025
        hyperestraier  8  11659
               hdparm  2  11433
           util-linux  2   9918
      gnome-doc-utils  1   9497
            findutils  2   9112
              firefox  2   8550
       console-common  3   8421
            pppconfig  3   7378
               mtools  6   7230
                 bash  1   6870
           nfs-common  2   6861
          dhcp-client  1   6705
                 less  1   6507
           groff-base  4   6394
            discover1  3   6377
             fakeroot  2   6150
                gnupg  3   6019
             procmail  1   5859
               cupsys  5   5745
                 apmd  3   5470
                 apel  2   5190
                 cron  3   5173
         scrollkeeper  8   4969
         gettext-base  1   4607
             sysklogd  3   4436
                xterm  3   4402
              openssl  5   4251
                rsync  1   4096
  installation-report  3   4060
          vim-runtime  6   3932
            sharutils  2   3875
         bsdmainutils  2   3871
             ssl-cert  1   3830
                  nvi  2   3785
               gs-esp  2   3778
         avahi-daemon  1   3776
             graphviz  2   3632
    xserver-xorg-core  1   3573
             ifupdown  2   3564
         gnomemeeting  1   3485
       wireless-tools  2   3277
               gnupg2  1   3126
             xml-core  3   3090
                bin86  1   2910
               tcl8.4  1   2856
           bittorrent  1   2803
          java-common  1   2769
                 dbus  1   2760
              anacron  5   2726
       openssh-client  2   2723
            sgml-base  3   2578
  dictionaries-common  2   2558
       docbook-to-man  1   2521
              tasksel  5   2473
              netbase  1   2432
        gnome-session  1   2418
                 menu  1   2404
         tasksel-data  2   2369
          pcmciautils  1   2350
             modutils  6   2291
        libgcj-common  2   2288
                acpid  2   2248
         hotkey-setup  1   2245
             inkscape  8   2157
                anthy  1   2152
  localization-config  4   2146
   foomatic-db-engine  1   2136
      ca-certificates  1   2117
              uswsusp  2   2068
        openbsd-inetd  1   1948
          libgtk2.0-0  2   1946
            coreutils  1   1931
                  gdb  1   1923
    module-init-tools  2   1904
       openssh-server  1   1891
              libsane  2   1864
               defoma  2   1812
          tdiary-mode  2   1790
       emacsen-common  2   1790
       powermgmt-base  1   1697
         cpufrequtils  1   1671
               migemo  2   1660
                  lpr  2   1573
                 scim  2   1529
              portmap  1   1525
               man-db  2   1466
            e2fsprogs  2   1430
                klogd  1   1375
                 gaim  2   1375
              locales  1   1305
      update-notifier  2   1298
       python-central  3   1207
              libvte4  3   1203
                unzip  1   1188
linux-image-2.6.17-2-486  1   1156
                    gksu  1   1136
               reportbug  1   1121
                      at  2   1121
                pciutils  1   1112
             xpdf-reader  2   1111
                  procps  1    997
                 liferea  2    994
           laptop-detect  1    980
          libhsqldb-java  5    979
                 ntpdate  2    969
            mime-support  3    892
                     gcc  2    879
                  passwd  1    875
           apache2-utils  1    760
                usbutils  1    676
              base-files  1    641
             xpdf-common  1    628
      exim4-daemon-light  1    551
                   exim4  1    551
                sysvinit  1    541
                    sudo  1    541
xserver-xorg-input-wacom  1    499
    gnome-volume-manager  1    439
        libdevmapper1.02  1    417
                     bsh  2    347
                aptitude  1    314
                     tar  1    268
              i810switch  1    258
            libgphoto2-2  1    249
          discover1-data  1    226
          python-support  3    219
               python2.4  1    195
               python2.3  1    195
               logrotate  2    187
           python-gnome2  1    172
                    perl  1    125
                    mutt  1    108
                     zsh  1     97
                    grep  3     96
  openoffice.org-impress  1     64
   openoffice.org-writer  1     63
     openoffice.org-math  1     61
     openoffice.org-draw  1     61
     openoffice.org-calc  1     61
     openoffice.org-base  1     61
                 gparted  1     55
                   bison  1     39

合計サイズが一番大きいのは xdg-utils で、ファイル数が一番多いのは acpi-support である。

xdg-utils  7 151357
acpi-support 72  22586

xdg-utils はなんでそんなに大きいのかとおもって調べてみると、コマンド自体をシェルスクリプトで書いてある模様。うぅむ。

-rwxr-xr-x 1 root root 14804 2006-10-23 04:36 /usr/bin/xdg-desktop-icon
-rwxr-xr-x 1 root root 39026 2006-10-23 04:36 /usr/bin/xdg-desktop-menu
-rwxr-xr-x 1 root root 16313 2006-10-23 04:36 /usr/bin/xdg-email
-rwxr-xr-x 1 root root 24146 2006-10-23 04:36 /usr/bin/xdg-icon-resource
-rwxr-xr-x 1 root root 28013 2006-10-23 04:36 /usr/bin/xdg-mime
-rwxr-xr-x 1 root root 10027 2006-10-23 04:36 /usr/bin/xdg-open
-rwxr-xr-x 1 root root 19028 2006-10-23 04:36 /usr/bin/xdg-screensaver

acpi-support はなんでそんなに多いのかとおもって調べてみると、/etc/acpi 下にデバイス別にファイルがある模様。これはべつに悪くない。

-rwxr-xr-x 1 root root  270 2006-08-20 18:41 /etc/acpi/asus-touchpad.sh
-rwxr-xr-x 1 root root  203 2006-08-20 18:41 /etc/acpi/asus-wireless.sh
-rwxr-xr-x 1 root root   78 2006-08-20 18:41 /etc/acpi/batterybtn.sh
-rwxr-xr-x 1 root root   78 2006-08-20 18:41 /etc/acpi/ejectbtn.sh
-rwxr-xr-x 1 root root  761 2006-10-23 02:16 /etc/acpi/hibernate.sh
-rwxr-xr-x 1 root root   79 2006-08-20 18:41 /etc/acpi/hibernatebtn.sh
-rwxr-xr-x 1 root root  310 2006-08-20 18:41 /etc/acpi/ibm-wireless.sh
-rwxr-xr-x 1 root root 1191 2006-08-20 18:41 /etc/acpi/lid.sh
-rwxr-xr-x 1 root root   77 2006-08-20 18:41 /etc/acpi/lockbtn.sh
-rwxr-xr-x 1 root root  217 2006-08-20 18:41 /etc/acpi/mailbtn.sh
-rwxr-xr-x 1 root root   76 2006-08-20 18:41 /etc/acpi/mediabtn.sh
-rwxr-xr-x 1 root root   75 2006-08-20 18:41 /etc/acpi/mutebtn.sh
-rwxr-xr-x 1 root root   79 2006-08-20 18:41 /etc/acpi/nextbtn.sh
-rwxr-xr-x 1 root root  817 2006-08-20 18:41 /etc/acpi/panabright.sh
-rwxr-xr-x 1 root root  287 2006-08-20 18:41 /etc/acpi/panapower.sh
-rwxr-xr-x 1 root root   80 2006-08-20 18:41 /etc/acpi/playbtn.sh
-rwxr-xr-x 1 root root 1357 2006-08-20 18:41 /etc/acpi/power.sh
-rwxr-xr-x 1 root root   72 2006-08-20 18:41 /etc/acpi/prepare.sh
-rwxr-xr-x 1 root root   83 2006-08-20 18:41 /etc/acpi/prevbtn.sh
-rwxr-xr-x 1 root root   75 2006-08-20 18:41 /etc/acpi/resume.d/10-thinkpad-standby-led.sh
-rwxr-xr-x 1 root root  205 2006-10-23 02:16 /etc/acpi/resume.d/13-855-resolution-set.sh
-rwxr-xr-x 1 root root  205 2006-08-20 18:41 /etc/acpi/resume.d/13-915-resolution-set.sh
-rwxr-xr-x 1 root root   86 2006-08-20 18:41 /etc/acpi/resume.d/15-video-post.sh
-rwxr-xr-x 1 root root  470 2006-10-23 02:16 /etc/acpi/resume.d/17-video-restore.sh
-rwxr-xr-x 1 root root  523 2006-08-20 18:41 /etc/acpi/resume.d/35-modules-load.sh
-rwxr-xr-x 1 root root  198 2006-08-20 18:41 /etc/acpi/resume.d/40-infra-red.sh
-rwxr-xr-x 1 root root  205 2006-10-23 02:16 /etc/acpi/resume.d/49-855-resolution-set.sh
-rwxr-xr-x 1 root root  205 2006-08-20 18:41 /etc/acpi/resume.d/49-915-resolution-set.sh
-rwxr-xr-x 1 root root  152 2006-08-20 18:41 /etc/acpi/resume.d/50-framebuffer-enable.sh
-rwxr-xr-x 1 root root   47 2006-08-20 18:41 /etc/acpi/resume.d/50-time.sh
-rwxr-xr-x 1 root root  304 2006-08-20 18:41 /etc/acpi/resume.d/50-tosh-restore-brightness.sh
-rwxr-xr-x 1 root root  103 2006-08-20 18:41 /etc/acpi/resume.d/55-screen.sh
-rwxr-xr-x 1 root root  142 2006-08-20 18:41 /etc/acpi/resume.d/60-asus-wireless-led.sh
-rwxr-xr-x 1 root root  200 2006-08-20 18:41 /etc/acpi/resume.d/62-ifup.sh
-rwxr-xr-x 1 root root  179 2006-08-20 18:41 /etc/acpi/resume.d/65-console.sh
-rwxr-xr-x 1 root root  102 2006-08-20 18:41 /etc/acpi/resume.d/67-sound.sh
-rwxr-xr-x 1 root root  142 2006-08-20 18:41 /etc/acpi/resume.d/69-services.sh
-rwxr-xr-x 1 root root  662 2006-08-20 18:41 /etc/acpi/resume.d/72-acpi-pain.sh
-rwxr-xr-x 1 root root   75 2006-08-20 18:41 /etc/acpi/resume.d/90-thinkpad-unstandby-led.sh
-rwxr-xr-x 1 root root  342 2006-08-20 18:41 /etc/acpi/resume.d/90-xscreensaver.sh
-rwxr-xr-x 1 root root   82 2006-08-20 18:41 /etc/acpi/resume.d/98-acpi-unlock.sh
-rwxr-xr-x 1 root root  105 2006-08-20 18:41 /etc/acpi/resume.sh
-rwxr-xr-x 1 root root  304 2006-08-20 18:41 /etc/acpi/screenblank.sh
-rwxr-xr-x 1 root root 1203 2006-08-20 18:41 /etc/acpi/sleep.sh
-rwxr-xr-x 1 root root   77 2006-08-20 18:41 /etc/acpi/sleepbtn.sh
-rwxr-xr-x 1 root root  746 2006-08-20 18:41 /etc/acpi/sonybright.sh
-rwxr-xr-x 1 root root  675 2006-08-20 18:41 /etc/acpi/start.d/10-save-dmidecode.sh
-rwxr-xr-x 1 root root  142 2006-08-20 18:41 /etc/acpi/start.d/60-asus-wireless-led.sh
-rwxr-xr-x 1 root root   77 2006-08-20 18:41 /etc/acpi/stopbtn.sh
-rwxr-xr-x 1 root root   90 2006-08-20 18:41 /etc/acpi/suspend.d/05-acpi-lock.sh
-rwxr-xr-x 1 root root   75 2006-08-20 18:41 /etc/acpi/suspend.d/10-thinkpad-standby-led.sh
-rwxr-xr-x 1 root root  137 2006-08-20 18:41 /etc/acpi/suspend.d/50-irda-stop.sh
-rwxr-xr-x 1 root root  343 2006-08-20 18:41 /etc/acpi/suspend.d/50-tosh-save-brightness.sh
-rwxr-xr-x 1 root root  310 2006-08-20 18:41 /etc/acpi/suspend.d/55-down-interfaces.sh
-rwxr-xr-x 1 root root  792 2006-08-20 18:41 /etc/acpi/suspend.d/60-generate-modules-list.sh
-rwxr-xr-x 1 root root  121 2006-08-20 18:41 /etc/acpi/suspend.d/65-services-stop.sh
-rwxr-xr-x 1 root root  276 2006-08-20 18:41 /etc/acpi/suspend.d/70-modules-unload.sh
-rwxr-xr-x 1 root root  158 2006-08-20 18:41 /etc/acpi/suspend.d/75-console-switch.sh
-rwxr-xr-x 1 root root  235 2006-08-20 18:41 /etc/acpi/suspend.d/80-video-pci-state.sh
-rwxr-xr-x 1 root root  314 2006-08-20 18:41 /etc/acpi/suspend.d/80-video-vesa-state.sh
-rwxr-xr-x 1 root root  106 2006-08-20 18:41 /etc/acpi/suspend.d/85-alsa-state.sh
-rwxr-xr-x 1 root root  233 2006-08-20 18:41 /etc/acpi/suspend.d/90-framebuffer-stop.sh
-rwxr-xr-x 1 root root  961 2006-08-20 18:41 /etc/acpi/thinkpad-lockorbattery.sh
-rwxr-xr-x 1 root root  891 2006-08-20 18:41 /etc/acpi/thinkpad-stretchortouchpad.sh
-rwxr-xr-x 1 root root  172 2006-08-20 18:41 /etc/acpi/tosh-wireless.sh
-rwxr-xr-x 1 root root  637 2006-08-20 18:41 /etc/acpi/toshbright.sh
-rwxr-xr-x 1 root root   81 2006-08-20 18:41 /etc/acpi/voldownbtn.sh
-rwxr-xr-x 1 root root   79 2006-08-20 18:41 /etc/acpi/volupbtn.sh
-rwxr-xr-x 1 root root   74 2006-08-20 18:41 /etc/acpi/webbtn.sh
-rwxr-xr-x 1 root root  442 2006-08-20 18:41 /etc/acpi/wireless.sh
-rwxr-xr-x 1 root root  940 2006-05-15 09:42 /etc/init.d/acpi-support
-rwxr-xr-x 1 root root  896 2006-08-20 18:41 /etc/init.d/vbesave
#2 [xdg] xdg-utils の調査 [CODE blog]

xdg-utils を調べる羽目になったとしたらどう調べるかためしにやってみよう。

まず、xdg-utils が何をするものなのかを調べるために、パッケージの説明を読む。

% dpkg -s xdg-utils
Package: xdg-utils
Status: install ok installed
Priority: optional
Section: utils
Installed-Size: 248
Maintainer: Per Olofsson <pelle@debian.org>
Architecture: all
Version: 1.0-1
Recommends: xsltproc, firefox | www-browser, xbase-clients, file, mime-support, shared-mime-info
Suggests: desktop-file-utils, libgnome2-0, libexo-0.3-0, libgnomevfs2-bin, kdelibs-bin, konqueror, libgtk2.0-bin, menu
Description: Desktop integration utilities from freedesktop.org
 xdg-utils contains utilities for integrating applications with the
 desktop environment, regardless of which desktop environment is used.
 .
 The following utilities are included:
 .
  * xdg-desktop-menu - Install desktop menu items
  * xdg-desktop-icon - Install icons on the user's desktop
  * xdg-icon-resource - Install icon resources
  * xdg-mime - Gather MIME information about a file
  * xdg-open - Open a URL in the user's preferred application that
               handles the respective URL or file type
  * xdg-email - Open the user's preferred email client, potentially with
                subject and other info filled in
  * xdg-screensaver - Enable, disable, or suspend the screensaver

Description のところを読むと、デスクトップの情報をいじるツールであるらしい。そして、個々の環境を気にせず使えるもののようだ。 Suggests: のところをみると、gnome とか kde という文字列が見られるので、きっと GNOME と KDE を扱っているのであろう。

個々のコマンドの説明も書いてあるので読むと、メニュー、アイコンの情報をいじったり、アプリケーションを起動したりできる模様である。

ということは、GNOME/KDE のユーザ設定をいじるというシナリオが考えられて、データフローをとてもとてもとてもおおざっぱに書いてみると以下のようになる。

xdg

968b70d3ddc33115c4854f84751820590e82c3543b017140b16a91c9a44d5234.png

また、アプリケーションを起動するのはこんな感じだろうか。

xdg

eea0defb77b211c352d59443f6c32256ac1d806249a41c495f5303428b9a39e3.png

さて、5人に分割して割り当てろ、という想定に基づいて分割すると、シェルスクリプトはファイルが 7つあるので 2つ程余計である。似通った機能のところをまとめて割り当てると、 xdg-desktop-menu と xdg-desktop-icon をあわせて一人、 xdg-open と xdg-email をあわせて一人、あとは xdg-icon-resource, xdg-open, xdg-screensaver それぞれに一人ずつ、これで計5人というところか。

2006-12-29 (Fri)

#1

そういえば、両対数グラフの使いかたを習うのって、どのくらい一般的なのかな。

スミスチャートよりは一般的だと思うのだが。

2006-12-31 (Sun)

#1

Python が stdio を捨てるという話を調べてみる。

iostack というやつで、説明を読む限りはいろいろ統合するのが狙いらしい。

さて、non-blocking I/O がどう扱われるかというと、Open issues の項に入っていてあまりまじめな検討はされていないくさい。

NetworkStream の may_read, may_write, readavail が案のようだが、これらについての議論はとくにされていないようだ。

#2

webgen を試す。以下の点が気になった。

webgen がサポートしている HTML 以外のフォーマットは Textile, RDoc, Markdown であるが、これがどれもうまくない。

Textile:

RDoc (の SimpleMarkup):

Markdown:

というわけで、最初からサポートしているのはすべて却下である。ただ、新しいフォーマットをサポートするのは簡単だと書いてあるので RD を試してみると、以下のように plugin/rd.rb と config.yaml を作ると動いた。

% cat plugin/rd.rb 
module ContentHandlers

  class RDContentHandler < DefaultContentHandler

    summary "Handles content in RD format"

    register_format( 'rd' )

    def format_content( txt )
      str = nil
      IO.popen("rd2", 'r+') {|rd2|
        th = Thread.new { rd2.read }
        rd2 << txt
        rd2.close_write
        str = th.value
      }
      raise "rd2 fails: #{$?}" if $? != 0
      raise if %r{<body>(.*)</body>}m !~ str
      $1.strip + "\n"
    rescue
      self.logger.error { "Error converting RD text to HTML : #{$!}" }
      ''
    end

  end

end
% cat config.yaml 
# Configuration file for webgen
# Used to set the parameters of the plugins
PageFileHandler:
  defaultPageMetaData:
    useERB: true
    blocks:
      - name: content
        format: rd

なお、useERB: true というのはデフォルトがそうなので変えていないのだが、良いことなのかというと疑われるものがある。


[latest]


田中哲