Link: https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1261459
FTPクライアントのFilezillaで、 vsftpdで運用するFTPサーバにFTP over SSL/TLSで接続すると、ディレクトリ一覧取得エラーになる事象が発生します。
これは、vsftpdがセキュリティ維持のために導入した、ssl_session_reuseにfilezillaが対応しているものの、新しいバージョンのGnuTLSの組み合わせではないと、有効に動作しないという問題のためです。
残念ながら、Ubuntu precise 12.04(LTS)や、Trusty 14.04 (LTS)に含まれるFilezillaでは、古いGnuTLS (gnutls26)に対してコンパイルをおこなっているために、このようなエラーになります。
バグトラッカーに対して、一行パッチを提出しました。
https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1261459
Ubuntu Precise 12.04 (LTS)を使っている方は、わたしのPPAから入手も可能です。
https://launchpad.net/~miurahr/+archive/ubuntu/ppa
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
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に格納する。
Link: http://ubuntuguide.org/wiki/BigBlueButton#Install_BBB_.3C-.3E_Moodle_API
BigBlueButtonは、APIを持っており、CMSなどと連携させることができる。
デフォルトでは、APIのデモページがあり、JSPによる具体的な利用方法を理解することができる。
人気のあるCMSといえば、Joomla!やDrupalがあるし、BBBは教育用途を意図して作られているところもあるので、Moodleも考慮に値するだろう。
このページでは、MoodleとDrupalについて、連携方法を示している。
Drupalとの連携については、
http://drupal.org/project/bbbで、すでにモジュールも用意されている。
Moodleの連携については、 http://www.dualcode.com/bigbluebutton/に、プラグインが提供されている。
活用してみようと思う。
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の登録情報を書き換えて欲しい。また、自分がオーナーではないイメージからの起動については実験していないので、うまく動かす方法をしっていたら、教えて欲しい。
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なんかつかって、書き込めばいいらしい。
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のほうが使いやすいじゃん。という悩みをこの記事では吐露してくれているのである。
:: Next >>