Category: "Linux"

2012/09/23

  11:20:00 by , Categories: Freesoftware and Open Source Software, Linux, Ubuntu

Link: http://bugs.winehq.org/show_bug.cgi?id=30598

先日、レポートしたEvernoteがUbuntu12.04で動かないよ、という件だが、その後、OpenSSLの問題だというのは濡れ衣で、OpenSSLが TLS1.1/1.2をサポートするようになったけど、WINEでそのあたりをうまく取り扱っていないことが、問題の発端であることがわかった。

すでに、
http://source.winehq.org/patches/
http://source.winehq.org/patches/data/89343

提案をして、議論しているところだ。
ぜひ、パッチをレビューしたり、さらなる改善を提案したり、動作試験をしたりしてほしい。
http://permalink.gmane.org/gmane.comp.emulators.wine.devel/91356

2012/03/24

  14:14:00 by , Categories: Linux, Ubuntu

Link: http://kenichiokuyama.blogspot.com/2011/12/schedclock-overflow-after-2085-days-in.html

"okkyの銀河制圧奇譚"で、Linux Kernelのスケジューラで使用するTSCをns単位に換算するルーチンでの掛け算オーバーフローが起因して、リブートする等の問題があこることの議論がされている。

しかし、問題が発現していない環境もあって、現象の理解が必要だとおもわれた。ブログ上でのコメントでのレポートでは、656日稼動しているという。

こういうときには、実験的に確認するのがよい。

#include<stdio.h>

static __inline__ unsigned long long rdtsc(void)
{
unsigned hi, lo;
__asm__ __volatile__ ("rdtsc" : "=a"(lo), "=d"(hi));
return ( (unsigned long long)lo)|( ((unsigned long long)hi)<<32 );
}

int main(){

unsigned long long tick, result;
unsigned long cyc2ns;
unsigned long cpu_khz = 1770000;

tick = rdtsc();
printf("TSC= %llu\n", tick);
cyc2ns = 1000000 * (1 << 10)  /  cpu_khz;
printf("SC= %lu\n", cyc2ns);
result = tick * cyc2ns;
printf("MULT= %llu\n", result);
printf("OVER> %llu\n",  ((unsigned long long) 1 << 63));
}

問題のルーティンに似せた、簡単なこのようなコードを書き、現象の理解をおこなう。 とりあえず、実行したカーネルは、Ubnutu 11.10上の3.0.0である。

miurahr@miurahr-note:~$ ./a.out
TSC= 18906864235232
SC= 578
MULT= 10928167527964096
OVER> 9223372036854775808
miurahr@miurahr-note:~$ ./a.out
TSC= 27953476532
SC= 578
MULT= 16157109435496
OVER> 9223372036854775808

この2つの実行の間に、実行されたPCはスリープされている。このスリープのresume時にcyc2ns_offsetを再計算するようにされている。

上記の結果からわかるように、64bitのTSCが折り返されて、小さくなっている。もちろん、複数CPUが搭載されているので、かならずしも同じCPUの値を取得しているとは言えないのである。とはいえ、得られたヒントは大きい。

static inline unsigned long long __cycles_2_ns(unsigned long long cyc)
{
int cpu = smp_processor_id();
unsigned long long ns = per_cpu(cyc2ns_offset, cpu);
ns += cyc * per_cpu(cyc2ns, cpu) >> CYC2NS_SCALE_FACTOR;
return ns;
}

当該コード部分に注目すると、cyc2ns_offsetに、指摘されている演算結果を加えるコードになっている。どういうことか。ノートPCはとくに、使用時間をのばすために、CPUの速度を動的に変更して、負荷の低い時のCPUの消費電力を削減する。こうすると、当然クロックあたりの時間幅、上記のcyc2nsの値が変化する。したがって、単純にTSCの累計にそのときのCPU速度で計算してしまっては、正しい値になりえない。

で、どうするかというと、CPU速度の変化をさせる時に、そのときの経過時刻をns単位でもとめ、変更後の速度で計算した場合の累計時刻との差分をcyc2ns_offsetに格納する。

2011/12/24

2010年の上半期に、国際化の開発に協力したOSSプロダクトのひとつに、nixnote(旧Nevernote)がある。

Evernoteクライアントのフリークローンで、Java+QtJambiで書かれていて、プラットホームニュートラルに動く。そのころ、KoedoLUGで、紹介したことがあった。しばらく、開発協力した本人も使うことが無くなっていたのだが、KoedoLUG主宰のはとちゃんが地道に使い続けてくれていることが判明、ちゃんとみないと遺憾な、とgit repositoryをおいかけ直すことに。

ところで、この手のドキュメント管理ソフトウエアでは、全文検索のできがとても重要である。nixnoteは、データ保管には、H2 Database を使っている。H2は、Javaで実装されたオープンソースのDBMSである。

さて、nixnoteでは、設定可能な正規表現 [,\\s]+ で単語を切り分けて、インデックスを作成している。ご多分にもれず、これでは日本語の検索ができない。日本語などCJK言語の単語切り分けは、正規表現では表現できず、形態素解析を必要とするからだ。

さて、H2データベースには、内蔵の全文検索が2タイプあり、ネイティブとLucineによるものがある。Apache Lucineは有名な全文検索エンジンで、これを使うように改良できれば、nixnoteの機能も向上させられそうだ。そこで、H2データベースのLucineによるCJK全文検索をしらべると、H2追っかける日記にて全文検索を使う話が掲載されていた。

ということで、nixnoteのこの部分を改良する人、募集中なのである。(自分でやれ?)はとちゃんが、がんばれ!?

2011/06/12

  12:53:00 by , Categories: Freesoftware and Open Source Software, Linux

Link: http://d.hatena.ne.jp/mktredwell/20110611/1307815106

Linux 20周年で、Linus Torvaldsさんが来日し、6/1-3のLinuxCon Japanに参加しました。 この20年に関わった人は、それぞれに感想をもったとおもいます。そのなかのひとりにあかいさんがいます。あかいさんは、LinuxFoundationの20年史をポイントしつつ、それ以外に

20年で記憶に残るマイルストーンには、何があったのだろうか

と提起しています。あかいさんが初めてLinuxを知ったのは、1995年の神戸・阪神大震災のとき、と記しています。わたしが初めてLinuxを知ったのは、1994年の夏くらい、使い始めたのは、1995年4月に社会人となって最初の給料でPCを買って、初日にプレインストールのWindows3.1Jを消し去ったとき、からです。

なぜ、山形浩生氏の活動が、Linux 20年史と関係してくるのだろう。

山形さんには、1990年代後半、TLUGの活動の中で、お話させていただく機会が数度ありました。このときは、TurboLinuxの前身Pacific HiTechのクリフ・ミラーさんとも交流があって、1998年くらいにNTTデータにきていただいて、Linux推進派の社内エンジニアたちと日本の情報産業の構造と、システムインテグレータが取り扱うに必要な環境などについて、意見交換したこともありました。

このころに、エンジニアやLinux開発者は、技術だけではなく、ライセンスや倫理や経営についても理解を深めないといけないと思ったのですが、ここには山形さんの影響を受けている気がします。

私が、OSS/Linuxの世界に深く入っていくきっかけになったのは、1989年前後のGNU Manifestの引地さんの訳だったのだけれども、1990年代前半の東北大学在学中に黒木さんやその辺りの一派による社内掲示板での議論の影響もすごく強かった。

そして、2003年くらいから、あかいさんがLinux/OSSをぐいぐい引っ張っているとき、私も、Linux/OSSを業界の別の地点から押していったんですよね。 てなわけで、2003年以降に互いを認識したあかいさんと私の間には、それ以前に共有するものが結構あったのでした。

2011/01/09

Link: http://bigbluebutton-blog.blogspot.com/2010/11/193-simultaneous-users.html

世の中には、OSSの、LGPLでライセンスされたTV会議ソフトウエアというものが存在する。これは、アーキテクチャ的には、他のOSSに大きく依存している。たとえば、Ubuntu, Tomcat6, Ngidx, ghostscript, OpenOffice.org, swftools, MySql, Astariskなどだ。このソフトウエア・プロジェクトの名前は、BigBlueButtonという。

実に、素晴らしいソフトウエアで、ローカライズもすごく頑張っている。インターフェースもクールだ。複数名の同時カンファレンスができる。開発者のブログによれば、193同時ユーザの会議をホストできたようだ。WebCamによるテレビ会議も20人までいけたようだ。 Asteriskを使っているのは、普通の電話からも会議に入れるように。この193同時ユーザの実験でも、45人は電話からはいったようだ。

さて、自分の利用を用意にするため、そしてみなさんの実験をするのを容易にできるよう、Amazon EC2にイメージを作ってみた。

AMI ID: ami-58b7c90a
Name: bbb-0.71-Ubuntu-10.04-64
Description: BigBlueButton 0.71 on Ubuntu 10.04LTS(64bit)
Owner: 457068382909

そして、その取り扱いを容易にするスクリプトも書いてみた。

ubuntuなどのAmazon EC2に対応したLinuxディストリビューションで
apt-get install ec2-api-tools
として必要なツールを導入し、
以下のスクリプトをbbb.shというファイル名で保存しているとすると、

./bbb.sh run

で、EC2上でUbuntu Linuxが起動し、

./bbb.sh status

として起動したことを確認したあとに

./bbb.sh start

とするとサーバが立ち上がり、必要なIP設定を自動でおこないます。

./bbb.sh login

とすると立ち上がったサーバにログインできて、

./bbb.sh stop

とすると終了するはず。
スクリプトは、適宜、Amazon EC2の登録情報を書き換えて欲しい。また、自分がオーナーではないイメージからの起動については実験していないので、うまく動かす方法をしっていたら、教えて欲しい。

2010/07/04

  13:14:00 by , Categories: Linux, Ubuntu

Link: http://bugs.calibre-ebook.com/ticket/6086

Kindle2を使っている。電子ブックを上手に使うには、calibreというアプリケーションが便利だ。Linuxだけではなく、mac, windowsでも使えるだろう。

Ubuntu GNU/Linux (10.04)上で、Calibreをつかって、外部のWebニュースを巡回して、電子ブックを生成して、Kindle2に流し込んでいる。

Calibreは、スケジュールされた時間帯にWebを巡回して、たとえばLWNやTimes, CNN, BBC, Japan Timesなどニュースサイトからニュースを取得して、ebookを生成してくれる。
また、kindle2を接続すると、自動的に、まだkindle2に取り込んでいないNewsを転送してくれる。すぐれものだ。

ただし、ちょっとした不具合がある。
Calibreを英語以外のlocaleで起動すると、Timesなどのサイト巡回結果のタイトルに日付がつくのだが、それが日本語混じりになる。技術的にはstrftime()がロケールLC_TIMEの影響を受けるためだ。

一方、Kindle2は、まだ英語以外の言語に対応していない。Kindle2をUbnutuにつなぐと、vfatとして認識されて自動マウントされる。マウントオプションは、

/dev/sdc1 on /media/Kindle type vfat (rw,nosuid,nodev,uhelper=udisks,uid=1000,gid=1000,shortname=mixed,dmask=0077,utf8=1,flush)

こんな感じ。
そこに、日本語のファイル名のついたニュースファイルを流し込むと、怪しいことが起こる。
具体的には、マウントしたKindleが読み込みのみになってしまう。

で、リンク先のようなバグレポートとなった。

でも、本当は、OSがわで対応すべきではないのか?ということで、たとえばuni_xlateというマウントオプションをつけることを考えたい。これは、unicode文字がきたときに、適当なエスケープシーケンスでlatin文字に変換するというものだ。

では、オートマウントされるときの機構でどこをどのようにいじればいいのか。

gconf-editorで、設定を開いて、system/storage/vfatあたりを見ればいいのかとおもったが、ここに設定を追加すると、すべてのデバイスで影響してしまう。kindleの時だけ、オプションを追加するには、どうすればいいか。

Automounting a storage device with GNOMEを参考にすると、hal-device というコマンドを見ればいいらしい。

Kindleに関わる部分をみるとこんなふうになっている。

0: udi = '/org/freedesktop/Hal/devices/volume_uuid_0096_AB41'
  linux.hotplug_type = 3  (0x3)  (int)
  info.interfaces = { 'org.freedesktop.Hal.Device.Volume' } (string list)
  block.storage_device = '/org/freedesktop/Hal/devices/storage_serial_Kindle_Internal_Storage_B003B0A200930A7F_0_0'  (string)
  volume.fstype = 'vfat'  (string)
  volume.fsusage = 'filesystem'  (string)
  volume.fsversion = 'FAT32'  (string)
  volume.uuid = '0096-AB41'  (string)
  volume.label = 'Kindle'  (string)
  info.udi = '/org/freedesktop/Hal/devices/volume_uuid_0096_AB41'  (string)
  volume.mount_point = '/media/Kindle'  (string)
  volume.is_mounted = true  (bool)
  volume.is_mounted_read_only = false  (bool)
  volume.is_disc = false  (bool)
  info.product = 'Kindle'  (string)
  volume.partition.number = 1  (0x1)  (int)
  block.major = 8  (0x8)  (int)
  block.device = '/dev/sdc1'  (string)
  block.is_volume = true  (bool)
  volume.partition.start = 8192  (0x2000)  (uint64)
  volume.partition.media_size = 1602191360  (0x5f7f8000)  (uint64)
  volume.size = 1602183168  (0x5f7f6000)  (uint64)
  block.minor = 33  (0x21)  (int)
  volume.num_blocks = 3129264  (0x2fbfb0)  (uint64)
  volume.is_partition = true  (bool)
  org.freedesktop.Hal.Device.Volume.method_names = { 'Mount', 'Unmount', 'Eject' } (string list)
  volume.block_size = 512  (0x200)  (int)
  volume.linux.is_device_mapper = false  (bool)
  org.freedesktop.Hal.Device.Volume.method_execpaths = { 'hal-storage-mount', 'hal-storage-unmount', 'hal-storage-eject' } (string li
st)
  org.freedesktop.Hal.Device.Volume.method_signatures = { 'ssas', 'as', 'as' } (string list)
  org.freedesktop.Hal.Device.Volume.method_argnames = { 'mount_point fstype extra_options', 'extra_options', 'extra_options' } (strin
g list)
  volume.ignore = false  (bool)
  volume.mount.valid_options = { 'ro', 'sync', 'dirsync', 'noatime', 'nodiratime', 'relatime', 'noexec', 'quiet', 'remount', 'exec', 
'utf8', 'shortname=', 'codepage=', 'iocharset=', 'umask=', 'dmask=', 'fmask=', 'uid=', 'flush' } (string list)
  volume.unmount.valid_options = { 'lazy' } (string list)
  linux.sysfs_path = '/sys/devices/pci0000:00/0000:00:1d.7/usb1/1-8/1-8:1.0/host16/target16:0:0/16:0:0:0/block/sdc/sdc1'  (string)
  info.parent = '/org/freedesktop/Hal/devices/storage_serial_Kindle_Internal_Storage_B003B0A200930A7F_0_0'  (string)
  info.capabilities = { 'volume', 'block' } (string list)
  info.category = 'volume'  (string)

あとは、このUDIなどをつかって、labelがKindleのようなストレージデバイスのときは、こうしろ的な設定を gconftoolなんかつかって、書き込めばいいらしい。

2010/05/23

Link: http://andymatuschak.org/articles/2008/05/07/more-on-launchpad-bazaar-vs-lighthouse-github/

最近、gpxviewerというアプリケーションをいじっている。これは、GPXファイルの管理を行う上で、容易に地図上でどこをトレースした物かを表示してくれる。
Python + GTKでかかれており、小さく、最低限必要な機能を満たしている。
多数のGPXファイルがあると、JOSMで開いて確認していくのでは、少々手間がかかりすぎる。また、できればファイル管理ソフトウエア(nautilus) から簡単に起動できた方がいい。

これは、まだリリースして日が浅く、コードベースも小さいので、こういった用途に向けて改良するには、ちょうどよかった。
わたしの改良点は、Githubリポジトリにおいてある。すでに、作者にパッチを送っており、gpxviewer on launchpadから最新のコードを入手できる。
5月に入ってから、7つのコミットに関わる貢献をしている。

さて、作者のAndrew Geeさんからは、BazaarをつかってLaunchpadにブランチを開いてくれ。そしたら、マージもレビューも簡単だ、といわれている。たしかに、bazaarを使ってlaunchpad からコードを入手して開発しているが、bazaarはその使い勝手が気持ち悪くて、git-bzrをつかって、(たとえば、git-bzrの使いかた),gitにインポートして開発し、ブランチの歴史をきれいにしてから、git format-patchを用いてパッチを生成して送っている。送ったパッチをそのままインポートしてくれれば、リポジトリに取り込むときに面倒はないのだけれども、Andrewは(bzrにそんな機能はないのかもしれないが)、パッチをあてて適当なコメントをつけてupstreamにマージをするので、パッチを送った後は、upstreamの最新から再度ブランチを切って作業をする羽目になる。

そもそも、プロジェクトのオーナーがlaunchpad+bazaarを使っているのだから、選択するのはオーナーだ。それに不満はない。けど、開発する方は、使いたい奴を使いたいではないか。

閑話休題

その選択にあたっても、プロジェクトオーナーは、pros/consがあって悩ましいはず。launchpadのサイトとしての機能はすばらしいが、bazaarよりgitのほうが使いやすいじゃん。という悩みをこの記事では吐露してくれているのである。

::