2013-01-31

FirefoxがFlash Player、Adobe Reder、Silverlightプラグインのデフォルトでのブロックを検討中

Firefox to block content based on Java, Reader, and Silverlight | Ars Technica

Firefoxの開発者は、主要な3つの不自由なプラグインであるAdobe Flash Player, Adobe Reader、Silverlightプラグインが必要なコンテンツをデフォルトでブロックし、ユーザーによる明示的なクリックがない限り表示しない、いわゆる「クリックして再生」機能をデフォルトで有効にすることを検討しているようだ。理由は、安定性とセキュリティのためだ。Flash、PDF、Silverlightは、Firefoxにおける主要な3つのクラッシュ要因かつ攻撃ベクターであり、これらを無効にすることで、大幅な安定性とセキュリティの向上が図れる。

ちなみに、これらのプラグインは不自由なソフトウェアであるので、このようなソフトウェアでシステムを汚染してはならない。

Samsungのラップトップに文鎮化するUEFIの不具合

[Phoronix] Linux Bricks Some UEFI Samsung Laptops

Bug #1040557 “UEFI boot live-usb bricks SAMSUNG 530U3C,np700z5c ...” : Bugs : Ubuntu CD Images

SamsungのラップトップをUEFIブートにして、Ubuntu 12.04のブートイメージでブートさせると、ラップトップが文鎮化してしまうという報告が上がっている。

当初、GNU/LinuxのUEFIブートに問題があるとは思わず、Ubuntu 12.04をインストールしようとして一台壊した後、保証期間だったので修理に出して(修理内容はマザーボード交換)、もう一度試したところ再現したという。

実際、ソフトウェア側からの特定の操作だけでハードウェアを壊してしまう不具合は多数ある。大方はファームウェアなどを記録しているフラッシュメモリの書き換えだ。

また、Samsungの2011年に製造された携帯電話のeMMCファームウェアに問題があり、セキュアな削除コマンドを実行すると、文鎮化してしまうという不具合もある。Samsungは、この不具合にまともに対処せず、また不具合を利用した脆弱性も発見されて悲惨なことになっているそうだ。

Linux: Booting Via UEFI Can Brick Samsung Notebooks - Slashdot

この問題は、UEFIの規格上の問題ではない。実装の不具合である。BIOSでもこの手の問題は少なからずあった。ただし、UEFIの規格は無駄に複雑で、このような問題を誘発しやすいのではないかと疑う。

実際、UEFIのセキュアブートは、全然セキュアではない。Treacherous Computingもいい加減にして欲しい。

洒落本

この五日間、コンピューターもインターネットも使えない場所で過ごしてきた。そこで、だいぶ前に入手していたものの、なかなか読むきっかけがなかった本を読むことにした。今回読んだのは洒落本だ。洒落本というのは、1700年代に流行った、今で言うライトノベル的な小説だ。内容は遊郭に関するもので、特に通人(遊郭に足繁く通っている者の粋)という概念を取り上げている。幕府によって規制されるまでの短い間に流行った。

洒落本の流通形態は貸本、つまりレンタルであった。そのため、個人で所蔵するということがまれであり、初版本の入手が非常に難しいそうだ。

300年前、日本では多色刷りの版木印刷により大規模な印刷が行われており、貸本屋という流通を介して本がレンタルされ、しかも当時の女郎が読んでいたのだ。これを思うと、当時の日本の識字率の高さはすごい。

読むと、当時の遊郭事情がたくさん載っていて面白い。

また、洒落本には、通人の粋という概念が強く出てくる。通人とは、毎日のように遊郭通いをしていたやくざ風の男の美学である。ただし、多くの洒落本では、通人ぶる男は、たいていうぬぼれが強く、意識的に通人ぶろうとして、やり過ぎで失敗している。洒落本で持てる男は、「むすこ」とよばれるキャラである。むすこキャラとは、若い遊郭なれしていない金持ちのボンボンだ。まあ、むすこキャラは金を持っているし、ちょっと媚をうれば女郎に本気で恋をしていい金づるになるので、遊郭でもてるのは当然といえよう。

また、当時の流行語や、通人言葉が多数出てくる。その上、表記もできるだけ発音に合わせて表記しようとした努力がみられる。

感想としては、300年前の日本語はあまり変わっていないということだ。

2013-01-25

留守

5日間留守にします。

2013-01-24

C++ 2013-01 mailingの簡易レビュー

ISO/IEC JTC1/SC22/WG21 - Papers 2013が公開された。今回はそれほど多くはない。

C++11の参考書は、今年中には出せるようにしたい。この際、未完成でも公開してしまうべきだと思う。

N3493: Compile-time integer sequences

Variadic Templateのとあるイディオムをサポートするための標準のクラステンプレートを追加する。

以下のようなコードを考える。

template<class... T>
  void f(T... t);

このパラメーターパックtのすべての要素に対して、expr( コンマで区切られた各要素 )という式を適用したい場合は、単にexpr( t ... )と書けばよい。

tupleの場合はどうだろうか

template<class... T>
  void foo(std::tuple<T...> t);

このtupleのすべての要素を、コンマ区切りにしてexprに渡したい場合どうすればいいのだろうか。expr( t... )と書くことは出来ない。では、どうすればいいのか。再帰的なメタプログラミングを書くしかない。論文のクラステンプレートを使う方法が気にいらなかったので、自分なりに書くと以下のようになった。


struct unpack_element
{

struct call_expr
{
    template < std::size_t, typename Tuple, typename ... Types > 
    static void invoke( Tuple &&, Types && ... pack )
    {
        expr( std::forward< Types >( pack ) ... ) ;
    }
} ;


struct call_apply
{
    template < std::size_t I, typename Tuple, typename ... Types >
    static void invoke( Tuple && t, Types && ...  pack )
    {
        apply< I + 1 >( std::forward<Tuple>(t), std::forward<Types>(pack)..., std::get< I >( t ) ) ;
    }
} ;

template < std::size_t I, typename Tuple, typename ... Types >
static void apply( Tuple && t, Types && ... pack )
{

    std::cout << Demangle( typeid( std::tuple<Types...> ) ) << std::endl ;
    constexpr std::size_t i = std::tuple_size< Tuple >::value ;
    std::conditional< I == i, call_expr, call_apply>::type::template invoke<I>( std::forward< Tuple >(t), std::forward<Types>(pack)... )  ;
}

} ;

template < typename Tuple >
void foo( Tuple && t )
{
    unpack_element::apply<0>( std::forward< Tuple  >( t ) ) ;
}

クラステンプレートは使わなかったが、結局クラスは使うことになってしまった。クラススコープに入れないとcall_applyがapplyを呼べないのだ。テンプレートの相互再帰はどうかと思うが、個人的にはこちらのほうが読みやすいのではないかと思う。

実は、この問題は、眼からウロコの解決方法があるのだ。まず以下のようなクラステンプレートを定義する。

template< std::size_t ... >
struct index_seq { } ;

このindex_seqのテンプレートパラメーターをパラメーターパックにして受け取れば、N個の要素を持つstd::tuple用の、[0, 1, 2, ... , N]までのパラメーターパックが受け取れる。あとは、std::getで普通に使うだけだ。

簡単に使うために、0, 1, 2, ..., Nまでのパラメーターパックを生成するmake_index_seqを定義する。


template < std::size_t N, typename T >
struct make_index_seq_impl ;


template < std::size_t N, std::size_t ... I  >
struct make_index_seq_impl< N, index_seq< I ... > >
{
    using type = typename make_index_seq_impl< N-1, index_seq< N-1, I... > >::type ;
} ;


template < std::size_t ... I  > 
struct make_index_seq_impl< 0, index_seq< I ... > >
{
    using type = index_seq< I... > ;
} ;

template< std::size_t N >
using make_index_seq = typename make_index_seq_impl< N , index_seq< > >::type ;

これで準備は完了だ。あとは使うだけ。

template < typename Tuple, std::size_t ... I >
void foo_impl( Tuple && t, index_seq< I ... > )
{
    expr( std::get<I>(t)... ) ;
}

template < typename Tuple,
    typename Indices = make_index_seq< std::tuple_size<Tuple>::value >
>
void foo( Tuple && t )
{
    foo_impl( std::forward<Tuple>(t), Indices() ) ;
}

なんと、このイディオムにより、再帰的なメタプログラムを書かなくても、簡単にTupleのすべての要素をコンマ区切りにできる。

ここでは簡易的にindex_seqのみを実装したが、規格では、より汎用的なinteger_seqテンプレートを定義し、そこからint_seq, uint_seq, index_seq(std::size_t)を作っている。

この機能はPythonにヒントを得ているのだそうだ。

PDF注意:N3494: A proposal to add special mathematical functions according to the ISO/IEC 80000-2:2009 standard

標準ライブラリに大量の数学的関数を追加する提案。数学的関数を追加することで、科学者にもC++を訴求する狙いがあるのだとか。

N3495: inplace realloc

アロケータ―にrealloc機能を導入する提案。

古き良きreallocは、確保したメモリ領域を、そのまま縮めたり伸ばしたりできる機能である。もちろん、不可能な場合は、単なる新たな領域確保とコピーになるが、実装次第では可能であり、無駄の削減にもなりうる。

残念ながら、C++のアロケーターには、realloc機能を提供するインターフェースがない。そこで、そのようなインターフェースを追加する。

N3497: Runtime-sized arrays with automatic storage duration (revision 4)

実行時にサイズを指定できる自動ストレージ上の配列を許す提案。つまり、配列の定義で、コンパイル時定数を使わなくても良くなる。すでに、C99には同等の機能がある。

void f( std::size_t n )
{
    int a[n] ; // nは実行時に決定される。
} 

単に自動ストレージ上に配置されるだけならば、allocaやstd::arrayを使えばいい。しかし、allocaはタイプセーフではなく、コンストラクターやデストラクタ―も動かない。やはり、生の配列を使いたい需要が多い。

また、実行時に長さが与えられる配列の確保に失敗した場合は、bad_array_length型が例外としてthrowされる。

N3498: Core Issue 1512: Pointer comparison vs qualification conversions (revision 2)

C++におけるポインターの比較に対する変更。歴史的経緯から、C++のポインターの比較は、非常に分かりにくい。

この提案は、nullptrとポインター型や0との大小比較をill-formedにする。

void f(char * p)
{
  if (p > 0) { ... }
  if (p > nullptr) { ... }
}

また、T **とconst T **の比較をwell-formedにする。

void g(int **p1, const int**p2)
{
   if (p1 == p2) { ... }
}

N3499: Digit Separators

長い数値リテラルは読みづらいので、セパレーターを挟めるようにしようという提案。まだまだ議論は続く。問題は文法だ。数値リテラルのような基本的な文法を変更するのは難しい。本物のC++コンパイラーなら、いまさら文法はどうにでもなるが、世の中には簡易的なパーサーを使っているツールが山ほどある。そのようなツールを壊し、さらに修正に多大な労力を必要とするのは困る。

また、C++で数値リテラルというと、プリプロセッサーの定義も別にある。

英語で伝統的に用いられてきたのは、コンマだが、残念ながら、C++では既存の文法との兼ね合いからコンマは使えない。では、どの文字を区切り文字として使うのか。

Bjarne Stroustrupは単に空白文字を提案した。

int x = 123 456 ; // 123456

問題は、プリプロセッサーの定義も修正が必要になることだ。また、十六進数リテラルで[a-f]の範囲の文字を使うリテラルは、文法上の曖昧性の問題がある。また、単に空白文字で区切られた文字列を単語と認識して抽出するようなツールの存在もある。

Ville Voutilainenはグレイブアクセントを提案した。

int x = 123`456 ; // 123456

グレイブアクセントは、C++のBasic Character Setにはない文字である。したがって、新たに追加することになる。グレイブアクセントの利点としては、従来C++には存在しなかった文字なのだから、既存のC++コードとの互換性の問題がないということだ。

ただし、あくまでC++コードとの互換性だけだ。たとえば、C++コードにメタデータを埋め込み、別のツールで処理させるような場合、C++ではたまたま使われていないグレイブアクセントは好都合だ。グレイブアクセントをC++に追加すると、そのような既存のツールを壊してしまう。また、既存のプリプロセッサーもグレイブアクセントを認識しないので修正が必要になる。

シングルクオート

Daveed Vandevoordeはシングルクオートを提案した。

int x = 123'456 ; // 123456

しかし、プリプロセッサーの問題は残る。Vandevoordeの専門分野なので自ら解説している。

そういえば、VandevoordeのファーストネームのスペリングはDaveedの方が正しいのだろうか。C++ TemplatesではDavidと表記している。それはさておき。

アンダースコア

既存のいくつかの言語は、アンダースコアを数値リテラルの区切り文字に用いている。例えば、Ada、VHDL 、Verilogなどだ。

int x = 123_456 ; // 123456

私は個人的にアンダースコアが最も気に入っているのだが、残念ながらアンダースコアには問題が多い。

ユーザー定義リテラルと文法が曖昧になるのだ。

int x = 0xabc_def ;

これは、0xabcefなのか、あるいは0xabcと_defというユーザー定義リテラルを記述したものなのか。

この曖昧性を避けるために、ダブルアンダースコアを使ってはどうかという珍妙な意見まで出された。

また、John Spicerは、名前解決のルールに手を加えて、0xabc_defに対しては、まず_defという名前のユーザー定義リテラルを探し、見つからない場合は、数値リテラルとして解釈するなどという これまた珍妙な意見を出した。

また、スコープ演算子(::)やらダブル小数点(..)やらバックスラッシュ(\)やらと、他の区切り文字の意見も出された。

果たして、どこに落ち着くことになるのやら。

N3500: New assert variants

既存のassertは、メッセージを付加できない。そのため、メッセージを付加できるassertを追加する。

void f( int x )
{
    assert_msg( x, u8"0はだめよん" ) ;
}

N3505: Filesystem Library Proposal (Revision 4)

Filesystemライブラリの提案の改訂版。Boostを元にしている。変更点としては、UTF-8をデフォルトで受け付けるようにした。

N3506: A printf-like Interface for the Streams Library

ストリームで使えるprintfフォーマット。以下のように使う。

std::cout << putf("Smoke me a %s.", "Kipper") << std::endl ;

なんのひねりもなく、従来のprintfのフォーマットをそのまま使えるようにしただけだ。printfのフォーマットは非常に有名なので、なかなか変えづらい。

個人的には、Boost::formatあたりを標準化して欲しいのだが。

N3507: A URI Library for C++

C++でURIを処理するためのライブラリ。名前通り。あくまで、単なる文字列としてのURIの処理だ。wgetライブラリではない。

N3508: Any Library Proposal

BoostのAnyを標準ライブラリにいれる提案。

N3509: Operator Bool for Ranges

STLのbasic_string、コンテナー、rangeに、explicit operator boolのオーバーロードを付け加える提案。

空のときはfalse、そうでないときはtrueを返す。

boolはtrueかfalseを表し、数値はゼロか非ゼロを表し、ポインターはnullか非nullを表す。とすれば、文字列やコンテナーやRangeは空か非空を表すことができる。

N3510: Proposing std::split()

文字列分割のライブラリであるstd::splitの提案。

言うまでもなく、文字列分割はプログラミングの基本的な処理である。分割した文字列はイテレーターで回したい。とすると、たとえば以下のような関数を書くことになる。

std::vector<std::string> my_split(const std::string& text, const std::string& delimiter);

標準ライブラリにはこのような関数がないため、企業、団体、プログラマーごとに独自実装が生まれる。お互いに互換性はなく、機能的にもまちまちである。

そのため、汎用的に使えるsplitを標準ライブラリに導入する。このstd::splitは、std::string_refをうけて、分割した結果をRangeで返す。また、デリミタ―は抽象的なコンセプトであり、単なる文字指定や、正規表現や、あるいは自前で実装したデリミタ―要求を満たすカスタムデリミタ―も使える。

N3511: exchange() utility function

atomicライブラリには、atomic_exchangeという関数がある。これは、オブジェクトに新しい値を代入し、古い値を返す関数である。この操作は、非アトミックなコードでも有益である。そのため、非アトミック版の汎用的なexchange関数を標準ライブラリにいれる提案。

N3512: string_ref: a non-owning reference to a string, revision 2

文字列を所有するのではなく、その参照を保持する、std::string_refライブラリの提案の改訂版。

N3513: Range arguments for container constructors and methods, wording revision 2

C++11には惜しくも入らなかったRangeライブラリ。基本的には、イテレーターのペアを返すコンセプトである。

PDF注意:N3514: A Proposal for the World's Dumbest Smart Pointer

タイトル:世界一おバカなスマートポインターの提案

スマートポインターというイディオムは、ポインターという低級な機能を、高級な機能に押し上げてくれる。スマートポインターの機能はいろいろある。unique_ptrや時代遅れのC++03のauto_ptrのような、デストラクタ―が走るタイミングで自動的にdeleteしてくれるスマートポインターもあるし、shared_ptrのような、参照カウントが0になった段階でdeleteしてくれるスマートポインターもある。また、optionalのような、nullになりえるポインターを抽象的に表現しているスマートポインターもある。

スマートポインターの機能は様々だが、いずれも、ポインターのように振る舞うが、ポインターのある機能を抽象化しているということには変わりない。

ところで、生のポインターはどうだろうか。ポインターの参照先のオブジェクトの寿命管理は他所で行われている場合、観測の目的で、生のポインターを使うということは多い。

しかし、そのような場合でも、生のポインターを使わずに、所有しないスマートポインター経由で使ったほうが、コードが読みやすくならないだろうか。機能的には何も変わらない。単に可読性の問題である。

しかし、そのようなスマートポインターは、既存の標準ライブラリの枠組みでは作れない。unique_ptrに何もしないデリーターを組み合わせるのは、うまくいかない。何故ならば、unique_ptrはもともと所有する前提で設計されており、コピーができずムーブのみ可能だからだ。一方、観測のための所有しないポインターは、自由にコピーできてしかるべきだ。

そこで、所有しないポインターというイディオムを表現する、あまり賢くない、それ自体は何もしない、つまりはおバカなスマートポインターを標準ライブラリにいれてはどうか。

この所有しないポインターのイディオムは正しいのかどうか、色々議論がある。C++標準委員会の重鎮でも、所有しない観測目的のポインターは生ポインターで苦労した覚えはないという意見を出すメンバーがいた。とはいえ、まだC++の標準ライブラリは、すべての種類のスマートポインターの含めえたわけではないので、所有しないスマートポインターをいれてもいいのではないか。

そういうわけで、世界一おバカなスマートポインターというタイトルになっている。

ちなみに、PDFは世界で二番目におバカなフォーマットである。一番目はMS Officeのような邪悪なプロプライエタリのフォーマットである。

PDF注意:N3515: Toward Opaque Typedefs for C++1Y

Opaque Typedef、あるいはStrong Typedefとも呼ばれている提案。typedef名が別の型として認識される不透明で強いtypedefを作ろうという提案である。

時として、機能的には同じだが、型としては別物だと認識してほしい場合があるものだ。これは、型が機能ではなく、意味を表現する場合だ。

N3520: Critical sections in vector loops

以前、ベクトルループの中ではクリティカルセクションは禁止されていたが、使いたいという要望に答えて、ベクトルループの中でクリティカルセクションを使う部分をマークすることで、使えるようにする提案。

今回は並列化に関する論文は少ないが、やはり並列化の言語でのサポートは次のC++ではだいぶ現実的になっている。

N3521: convert() utility function

明示的な型変換が必要な場面を暗黙的に型変換するための関数テンプレートconvertの追加。

以下のコードは動かない。

std::unique_ptr<int> f()
{
    return new int ;
}

なぜならば、unique ptrの変換関数はexplicitだからだ。以下のコードも動かない。

std::unique_ptr<int> f()
{
    return {new int} ;
}

しかし、{}で囲っているのだから、もう十分明示的と言えるのではないか。なぜ以下のように書かなければならないのか。

return std::unique_ptr<int>( new int ) ;

このために、一度暗黙な型変換を行うクラスを経由して、明示的な型変換を暗黙の型変換にできるテンプレート関数を追加する提案。これを使えば、以下のように書ける。

return convert( new int ) ;

トリックは、すでに述べたように、一度別のクラスを経由することにある。

template<typename T>
struct Converter {
  T source_;
  Converter(T source) : source_(std::forward<T>(source)) {}
  template<typename U, decltype(static_cast<U>(std::forward<T>(source_)), 1)=0>
  /*implicit*/ operator U() {
    return static_cast<U>(std::forward<T>(source_));
  }
};
template<typename T>
Converter<T> convert(T&& source) {
  return Converter<T>(std::forward<T>(source));
}

これにより、explicitな変換関数を持つクラスでも、暗黙的に型変換できる。

まあ、トリックとしては昔から知られていたが、悪用が怖い。

Ubuntuがローリングリリースへの切り替えを検討中

[Phoronix] Ubuntu Considering Switch To Rolling-Release Model

Ubuntuは、これまで半年ごとの更新と、二年ごとのLTS(Long Term Support、長期サポート)というスケジュールですべてのパッケージを一斉にリリースしてきた。

一方、他のクールなディストロはローリングリリースという不定期なリリーススケジュールを採用している。

半年おきのリリースの問題点は、あるソフトウェアが大規模な変更を行った場合、その変更だけbackportするのが難しくなる。カーネルなどの一部の重要なソフトウェアならば人手をかけて行う価値もあるが、すべてのパッケージはいかにも無理だ。

どうやら、Ubuntuは二年ごとのLTSと、その間のローリングリリースに変更することを考えているようだ。何でも、QAチームは日々ブートテストを行なっているので、安定性と新機能提供を両立できるとしている。

2013-01-23

Fedora 19のデフォルトのDBパッケージをMySQLからMariaDBに切り替える提案

[Phoronix] Fedora Looks To Replace MySQL With MariaDB

Proposed F19 Feature: Replace MySQL with MariaDB

FedoraのML上で、デフォルトのDBのパッケージを、MySQLからMariaDBに切り替える提案がなされている。理由はもちろん、最近、OracleによってMySQLの開発が閉鎖的になっていることの懸念からだ。

そのML上での発表に曰く、

2012-12-05のFESCoで決定されたように、機能提案はdevel-announceで発表して、コミュニティによるレビューの通過を必要とする。FESCoは発表より最低でも一週間を経過した後に投票する。

= Features/ReplaceMySQLwithMariaDB = https://fedoraproject.org/wiki/Features/ReplaceMySQLwithMariaDB

・詳細
MariaDBはMySQLデータベースプロジェクトのforkであり、MySQLをそっくりそのまま置き換える機能を提供している。MySQLとのAPI/ABI互換を維持した上で、いくつかの新機能を追加している。

もともとMySQLを開発した会社MySQL ABは、Sunに買収され、その後Oracleに買収された。Oracleによる最近の変更は、MySQLプロジェクトが閉鎖的な方向に向かっていることを示唆するものである。セキュリティ上の問題に関する有益な情報を公開せず、完全なリグレッションテストも提供されず、MySQLのバグデータベースの大半は公開されていない。

MariaDBはオリジナルのMySQLの開発者によって出資され、よりオープンソース志向であり、活動的なコミュニティが存在する。彼らからの方が協力を得やすい。とくに、セキュリティに関しては。

Fedora 19の初期開発サイクルの段階で、MySQLをMariaDBに置き換えたい。MySQLは依然として少なくとも次のリリースでは提供されるが、MariaDBがデフォルトになる。また、両方のパッケージを同時にインストールすることはサポートしない。どちらかを選ばなければならない。

MySQLの閉鎖的な傾向を懸念してMariaDBに切り替えるのは最近Wikipediaで話題になっている。

本の虫: WikipediaがMySQLからMariaDBに移行中

2013-01-17

staticデータメンバーの明示的特殊化

規格によれば、クラステンプレートのstaticデータメンバーは明示的特殊化できるという。

template < typename T >
struct X
{
    static int data ;
} ;


// staticデータメンバーの定義
template < typename T >
int X<T>::data ;

// 明示的特殊化
template < >
int X<int>::data ;

なるほど、確かにできる。しかし、何の意味があるのだろう。staticデータメンバーの型を変えることは出来ない。

// エラー
template < >
float X<int>::data ;

また、以下のようなコードも動かない。

template < typename T >
struct X
{
    static T data ;
} ;


// staticデータメンバーの定義
template < typename T >
T X<T>::data ;

// 明示的特殊化
// エラー、void型はデータメンバーにできない。
// X<void>::dataの型はvoid
template < >
int X<void>::data ;

このようなコードは、staticデータメンバーの明示的特殊化ではなく、staticデータメンバーの定義の時点でメタ関数を使わなければならない。

template < typename T >
struct X
{
    static typename std::conditional< 
        std::is_same< T, void >::value,
        int, T >::type data ;
} ;


// staticデータメンバーの定義
template < typename T >
typename std::conditional< 
    std::is_same< T, void >::value,
    int, T >::type X<T>

クラステンプレートのstaticデータメンバーの明示的特殊化は、存在意義が謎だ。

追記:初期値を変えることができる。なるほど、たしかにそうだ。

staticデータメンバーの明示的特殊化の使い方? - C++でゲームプログラミング

GoogleのNative ClientチームがLLVMにx32を所望

[Phoronix] Google Wants LLVM To Mainline x32 ABI Support

[LLVMdev] Upstreaming x32 ABI support

なんでも、Native ClientのABIはx86-64環境において32bitアドレスなんだそうで、これはx32の方向性と一致する。したがって、GoogleのNative Clientチームは、LLVMにx32が入って欲しいのだとか。

Native Clientは、ブラウザー上でネイティブコード(x86かARM)を安全に実行するための仕組みである。x32は、x86-64の命令セットの拡張や増加した汎用レジスターの恩恵を受けつつ、アドレスだけは32bitに保ち節約するという、いいとこ取りを狙ったABIで、現在、Linuxカーネル、glibc、gdb、gccといった環境でサポートされている。

アドレス長を32bitに保つことの利点は、コードサイズを削減し、キャッシュにより多くのコードがのるようになり、すなわちパフォーマンス上有利になることだ。特に、スマートフォンやタブレットなどのCPUが貧弱な環境では意味が出てくるのだろうか。

しかし、x32を使うという事は、プログラムのみならず、すべての動的リンクされるライブラリをx32でコンパイルして適切に配置しておかなければならない。僅かなパフォーマンス増加に見合うコストなのだろうか。

2013-01-16

Fedora 18がリリースされた

Fedora Project Homepage

Fedora 18のコードネームはSpherical Cow。これは、理論物理学の大胆な簡略化を笑うジョークが元ネタとなっている。

ちなみに、次のFedora 19のコードネームは、Schrödinger's Catとなっている。

Onionのアウトソースネタが現実に

Security audit finds dev OUTSOURCED his JOB to China • The Register

一昔前、theonion.comというジョークニュースサイトで、アメリカ人がどんどん仕事のアウトソースを進めた結果、被雇用者まで仕事をアウトソースするようになり、最終的に世界中のすべての仕事はアフリカのある一人の男にアウトソースされているなどというジョークを出したことがあった。

More American Workers Outsourcing Own Jobs Overseas | The Onion - America's Finest News Source

それが現実のものになったそうだ。

この男は、自宅からVPN接続で仕事をしていたのだが、職場でもトップのコーダーであり、C, C++, Perl, Java, Ruby, PHP, Pythonのエキスパートであると認識されていた。

実際は、仕事をすべて中国にアウトソースしていたという。

何故バレたのかというと、VPNへの接続が中国IPから行われていたからである。VPNのアクセスまで直接丸投げしてしまうとは、あまり才能がない。githubなどを使い、アウトソースからのコミットは一体自分で受けて、それをさらに自分の環境から提出するようにすれば、もう少しバレなかっただろうに。

Amazon Swindleが詐欺広告を堂々と掲載

あえてリンクしないが、AmazonのKindleSwindleが、名前の通り詐欺(Swindle)を働いている。

その広告では、バッテリー比較として、ノートPCは5-9時間、タブレットが5-10時間、スマートフォンが4-13時間としているのに対し、Swindleは8週間と宣伝している。8週間とはすばらしい。ただし、Swindleだけ、一日30分間のみ利用という条件付きだ。

さすが、何恥じぬ詐欺っぷりだ。

AmazonのSwindleは制限コンピューターであるので、使ってはならない。

2013-01-15

Aaron Swartzの119日前の協力要請

Aaron Swartz, Asking For Help, 119 Days Ago | TechCrunch

Aaron Swartzは自殺の119日前にも、助けを求めていた。しかし、具体的な背景事情の説明が欠けている。そのため、119日前は、世間の反応は、自分の尻ぐらい自分でふけとそっけない。

具体的な背景事情が一般に明らかになったのは、自殺後である。

レッシグが、「裁判官の心証を損ねねば、助けを求めることも出来ない」と書いたのはこのことである。

伝統的に、裁判中に被告が問題を裁判外で公にするのは、裁判官の心証を損ねるからだ。

2013-01-14

Aaron Swartzの自殺に対するローワンス・レッシグの声明

Lessig Blog, v2

暴君たる検察

(まだ時期尚早だといういう者もいるが、違う。今こそ声をあげるべき時だ)

2011年1月のAaronの逮捕より、私はこの事件の事情を、知りたいと思う以上に知らされてきた。彼は私に友人かつ弁護士として相談してきた。Aaronは一体何が、何故起こったのかを説明し、私は支援を得るべく働きかけてきた。私のハーバードにおける地位に関連して、私が彼の弁護士として活動できなくなった後も、私は友人として働きかけてきた。私は十分に心強い友人ではなかったのは疑いがないが、友人であったことは変わらない。

ネット上における大量の悲観と混乱が、この驚嘆すべき少年の価値を裏付けている。その声を読むと、我々が抵抗していればよかったと思い知らされる。

これを感情的に受け取らないでくれ。

あれほど愛された人物にして、ニューヨークで彼を愛する群衆に囲まれたAaron境遇のを思えば、彼と同じ事をしないのは無理がある。私も彼の境遇に怒りを覚える。しかし、我々はこの教訓から学ばねばならない。彼を事ここに及ばせた状況を見過ごしてはならない。

まず、もちろん、Aaron自身がこのAaronの事態を引き起こしたのだ。私がこの件について書くというのは(私が公に声明を発表する際の束縛として)、政府の主張が正しければ、そして、「もし」、というのもAaronが私に私的に語ったことを明かせないのであれば、すなわち、彼の行いは悪であった。法的に悪でなければ、倫理的に悪であった。Aaronが戦った原因は私の原因でもある。私に反対するものも尊重するように、これは私の意図ではない。

しかし、もし政府がこの事件を実証して、何らかの罰がふさわしいとなったとしたら、一体何に対して罰すべきなのだ? Aaronはテロリストか? あるいは盗品によって利益を得ようとしたクラッカーか? あるいは何か全然別の罪か?

すでに、JSTORは「ふさわしい」ものを見つけていた。JSTORは告訴を取り下げ、政府にも取り下げるよう要請していたのだ。MITは、恥知らずにも暗愚であり、検察はAAronへの戦争を続けAaronとして愛された人物を「犯罪者」とするための都合のいい理由となった。

ここに、もっとマシは司法の常識があるべきで、恥ずべきことだ。この事件の許されざるところは、ただ一人Aaronのみではない。愚かな検察の態度にもある。そもそも、政府は全力を尽くして、Aaronがいかにして極端で愚かなことをしでかしたのかと印象付けようとした。政府が我々に語るところによる、Aaronが「盗んだ」という「何百万ドル」相当の価値のある「財産」、これだ。そして、これにより、彼の目的は犯罪により利益をあげるものであると結論した。しかし、学術論文の山が金になるという主張する奴は、アホか詐欺師だ。これが違うことは明らかであるのに、我々の政府は、まるで9/11のテロリストを捕まえたかのように、継続した。

Aaronは人生において「金を為す」などということをしたことがなかった。彼のRedditは幸運にも金を生んだが、RSS標準規格への貢献、Creative Commonsの構築、公共記録の自由化、自由な公共図書館の構築、Change Congress, FixCongressFirst, Rootstrikers, Demand Progressに対する貢献では、Aaronはただ公共の善のためだけに邁進していたのだ。彼は天才で、面白みがあった。神童。その精神の深淵は、私は幾度となく夢想したものだ。Aaronならどう考えるだろうかと。その人物は、今日逝ってしまった。我々まともな社会が暴力と称するより他のないものによって、崖に追い詰められた。これは私の過ちであるが、機会でもある。もし、この過ちと機会を得なければ、お前は合衆国政府の後ろ盾を得る資格はない。

考えてもみよ。この世界では、経済問題をたびたび引き起こした張本人がホワイトハウスで優雅に食事をしているのだ。たとえ「正義」の制裁を受けたものさえ、己の悪事を認めず、ましてや「被疑者」となることなどない。

この世界においては、政府に疑問を生じさせるには、Aaron Swartzが「被疑者」のレッテルを貼られたことが必要になるのだ。この18ヶ月もの交渉は、彼にとっては受け入れがたいことであり、そのために4月に何百万ドルもの罰金を告訴され、彼の財産はなくなるも、裁判官の心証を損ねねば、弁護を頼むべき経済的支援すら受けられない。邪悪でクソのようなこの状況が、この戦いの結末を決定づけた。天才的問題児は、こんな世界は終わらせたほうがマシだと考えたのだ。

政府によって求刑された懲役50年。何とかして、我々はこの「俺様は正しいんだからてめぇなんか核爆してもいいんだよ」という我々を支配する原理から逃れなければならない。この原理が導く言葉は一つのみ、曰く、恥。

一言にして、涙尽きせず。

Aaron Swartz自殺に対するEFFの声明

Farewell to Aaron Swartz, an extraordinary hacker and activist | Electronic Frontier Foundation

さらばAaron Swartz、たぐいまれなるハッカーにして活動家。

昨日、Aaron Swartz、我々の友人にして協力者が、自殺した。これはたぐいまれなる人生の悲惨な最後である。

Aaronほどインターネットを開かれた知識の場にし、そして維持した者はいない。彼の貢献は数多く、その内のいくつかは替えようのないものである。2010年末に我々がインターネットのブラックリスト法であるSOPAとPIPAの前身であるCOICAと食い止めようと彼に相談した時、彼はDemand Progressという団体をたちあげて出資し、百万人以上ものネット上の活動家を生み出し、阻止活動の貴重な味方となった。

Aaronの関わった他のプロジェクトとしては、RSS仕様や、web.py[訳注:Pythonによって書かれた軽量Webフレームワーク]、tor2web[訳注:Torに簡単にアクセスするためのWebプロクシ]、オープンライブラリー[訳注:障害者のために書籍媒体を変換して公開するWebサイトとしての図書館]、HTTPS EverywhereのChromeへの移植[訳注:既存のHTTPとHTTPSの両方のプロトコルで提供されているWebサイトの問題として、たとえHTTPSでアクセスしたとしても、既存のリンクのほとんどはHTTPであり、結局リンクは依然としてセキュアではない通信のままであるということがある。HTTPS Everywhereは、HTTPSページのリンクをHTTPSプロトコルを使うものに差し替えるブラウザー拡張である]。AaronはCreative Commonsの立ち上げに協力した。彼はRedditの共同出資者の一人であり、サイトを成功ならしめた主要な開発者の一人である。彼のブログはすばらしい。

Aaronの天才性はなかなか理解されづらい。彼は自分の世界に従って生き、その大きさは測りがたく、彼の協力者をも不安にさせた。彼は世の中に感化されたものの、世界は時として彼に残酷である。

長年、Aaronは人間と話すより本を読む方を好んだ。彼はかつて、「とても賢い人間と話すのすら苦痛だ。しかし、単に座って賢い人の書いた本を読めば、神妙な思考を、簡潔に美しく効率的に学ぶことができる。著者と話すより、本を読んだほうが早い」のようなことまで言った。彼の情熱は、書かれた文章や開かれた知識に向かい、彼の自己表現は、時として素晴らしい成果を生んだ。

2011年、AaronはMIT構内のネットワークを使い、JSTORのデータベースから何百万もの論文をダウンロードした。必要に応じてラップトップのIPとMACアドレスを頻繁に変更し、JSTORとMITの妨害工作を迂回し、MITネットワークに高速に接続するため押入れに忍び込んだ。この罪により、Aaronは35年の懲役を求刑されたのだ。Computer Fraud and Abuse法におけるコンピューターへの「未認可のアクセス」による。

検察の主張するところを信じれば、AaronはJSTORからダウンロードした何百万もの論文を自由にしたいと願っていたのである。論文を公開し、誰でも読め、解析できるようにしたかったのだ。Aaronはすでに似たようなことをしていた。彼の手法に異論があるとはいえ、彼の思い描いた目的である、公共によって出資された科学論文の、出資者による閲覧を阻む出版の仕組みから解放しようという目的は、我々皆が支持すべきものである。

Aaronのおかれた事態を考えれば、アメリカ合衆国のコンピューター犯罪法とその罰則に正義はないことが分かる。Aaronの行動は疑いなく政治活動であり、その行動を現実世界で起こした結果は、最大でも、政治的抗議に付随する軽い不法侵入に過ぎない。彼はコンピューターを使ったがために、長い懲役刑を求刑されたのだ。ローレンス・レッシグは声明で、この悲劇を元にコンピューター犯罪法と無知なる検察を改正すべきであるとした。当然だ。

Aaron、我々は君と君の世界の善のための活動の損失を痛む。
こいねがわくはうけよ。

2013-01-13

Aaron Swartz死去に対するTim Berners-Leeの詩

Aaron is dead. from Tim Berners-Lee on 2013-01-12 (www-tag@w3.org from January 2013)

Aaron is dead.

Wanderers in this crazy world,
we have lost a mentor, a wise elder.

Hackers for right, we are one down,
we have lost one of our own.

Nurtures, careers, listeners, feeders,
parents all,
we have lost a child.

Let us all weep.


timbl

アーロン死す

この狂える世界の放浪者
我ら指導者、賢老を失へり

正しきハッカー、一人逝く
我ら一人を失へり

育む者よ、慈しむ者よ、聞く者よ、哺乳する者よ
親よ皆
我ら子供を失へり

我ら皆しばし欷歔せん


timbl

強欲な出版社によって隠されていた著作権が消失しているはずの論文集

Swartz supporter dumps 18,592 JSTOR docs on the Pirate Bay | Ars Technica

一年以上前の話になるが、Aaron Swartzの逮捕を受けて公開されたtorrentがある。このtorrentは、すでに著作権が消失したはずの論文18592本、容量にして32.48 GiBの論文集である。Aaron Swartzの論文収集とは関係がないが、すべて、著作権保護されていないはずの論文だ。

Papers from Philosophical Transactions of the Royal Society, fro (download torrent) - TPB

そのコメントに曰く、

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

This archive contains 18,592 scientific publications totaling 33GiB, all from Philosophical Transactions of the Royal Society and which should be available to everyone at no cost, but most have previously only been made available at high prices through paywall gatekeepers like JSTOR.

このアーカイブは18592本、計33GiBの出版された科学誌であり、すべて王立協会のフィロソフィカル・トランザクションズによって出版されたものであり、すでに皆に無料で提供されているべきものであるが、JSTORのようなペイウォールの番人により、高い対価を支払わねば閲覧できぬものである。

Limited access to the documents here is typically sold for $19 USD per article, though some of the older ones are available as cheaply as $8. Purchasing access to this collection one article at a time would cost hundreds of thousands of dollars.

論文に対する限定アクセスは、一本あたり19米ドルである。いくつかの古い論文は、8米ドルほどでも提供されている。この論文集全体への閲覧権を購入するには、何十万ドルもかかる。

Also included is the basic factual metadata allowing you to locate works by title, author, or publication date, and a checksum file to allow you to check for corruption.

さらに、タイトル、著者、出版日で容易にアクセスできるように基本的なメタデータを入れ、さらにファイル損傷を検証するための以下のチェックサムも入っている。

ef8c02959e947d7f4e4699f399ade838431692d972661f145b782c2fa3ebcc6a sha256sum.txt

I've had these files for a long time, but I've been afraid that if I published them I would be subject to unjust legal harassment by those who profit from controlling access to these works.

私のこのファイルを長年所有していたが、これまで、もし公開した場合の、この論文への閲覧を制限することによって利益を得ている者の手による非倫理的な法的脅迫が身に及ぶのを恐れていた。

I now feel that I've been making the wrong decision.

私は間違った選択をしていたことになる。

On July 19th 2011, Aaron Swartz was criminally charged by the US Attorney General's office for, effectively, downloading too many academic papers from JSTOR.

2011年7月19日、Aaron Swartzは、JSTORから大量の学術論文をダウンロードしたかどにより、アメリカ司法当局により逮捕された。

Academic publishing is an odd system—the authors are not paid for their writing, nor are the peer reviewers (they're just more unpaid academics), and in some fields even the journal editors are unpaid. Sometimes the authors must even pay the publishers.

学術論文の出版には奇妙な慣習があり、著者や査読者は著作にたいし対価を得ることがない(彼らは無償労働の研究者である)、ある分野では、編集者ですら無償労働である。時に、著者は出版社に金を支払わなければならないこともある。

And yet scientific publications are some of the most outrageously expensive pieces of literature you can buy. In the past, the high access fees supported the costly mechanical reproduction of niche paper journals, but online distribution has mostly made this function obsolete.

それでいて、学術出版は、およそ購入できる文章としては、法外に高価である。かつては、高価な閲覧料により、ニッチな分野の論文の印刷を支援していたが、オンライン出版により、もはやそれも過去のものになった。

As far as I can tell, the money paid for access today serves little significant purpose except to perpetuate dead business models. The "publish or perish" pressure in academia gives the authors an impossibly weak negotiating position, and the existing system has enormous inertia.

私の知る限り、今日支払われる購読料には、旧態依然の死んだビジネスモデルを存続させる以外の意味はない。学術業界における「出版するか死ね」という重圧は、著者に交渉の余地を与えず、既存の仕組みは変わり様がない。

Those with the most power to change the system--the long-tenured luminary scholars whose works give legitimacy and prestige to the journals, rather than the other way around--are the least impacted by its failures. They are supported by institutions who invisibly provide access to all of the resources they need. And as the journals depend on them, they may ask for alterations to the standard contract without risking their career on the loss of a publication offer. Many don't even realize the extent to which academic work is inaccessible to the general public, nor do they realize what sort of work is being done outside universities that would benefit by it.

仕組みを変える力を持つ者たち、科学誌に影響力を持つ大昔にテニュアを得た研究者達は、この惨状にまったく悪影響を受けない。彼らは支援先から必要な資料をすべて閲覧できるからだ。科学誌が彼らに依存しているからには、彼らはキャリアを失う恐れや、出版の機会を失う恐れなしに、改革を提案できるはずなのだ。多くの者は、一般大衆からはどの論文が閲覧できないのかということさえ知らないでいるし、大学外で行われている研究による利点も知らない。

Large publishers are now able to purchase the political clout needed to abuse the narrow commercial scope of copyright protection, extending it to completely inapplicable areas: slavish reproductions of historic documents and art, for example, and exploiting the labors of unpaid scientists. They're even able to make the taxpayers pay for their attacks on free society by pursuing criminal prosecution (copyright has classically been a civil matter) and by burdening public institutions with outrageous subscription fees.

大手出版社は政治を買収し、著作権保護の商業主義を、まったくもって不適切な分野にまで推し進めている。例えば、歴史的文書と技術の奴隷的再生産であり、無償労働する科学者の悪用だ。彼らはさらに、自由な社会に対して刑法上の摘発のため、税金まで利用している(著作権は民事に分類されるべきなのに)、そして公共利用を法外な購読料によって阻害している。

Copyright is a legal fiction representing a narrow compromise: we give up some of our natural right to exchange information in exchange for creating an economic incentive to author, so that we may all enjoy more works. When publishers abuse the system to prop up their existence, when they misrepresent the extent of copyright coverage, when they use threats of frivolous litigation to suppress the dissemination of publicly owned works, they are stealing from everyone else.

著作権は法によって作り出された限定的な取り決めである。情報を交換することに対する自然権利を与えることにより、著者に経済上のインセンティブを与えることで、より多くの作品が産み出される。出版社が己の存続のために仕組みを悪用し出した時、著作権の意義を履き違えた時、公共財産の利用を妨げた時、彼らは皆から盗んでいるのである。

Several years ago I came into possession, through rather boring and lawful means, of a large collection of JSTOR documents.

数年前、退屈で合法的な方法により、私はJSTORの論文を大量に入手した。

These particular documents are the historic back archives of the Philosophical Transactions of the Royal Society—a prestigious scientific journal with a history extending back to the 1600s.

その論文集は、1600年台にまで遡れる、王立協会のフィロソフィカル・トランザクションズによって出版された科学誌のバックナンバーである。

The portion of the collection included in this archive, ones published prior to 1923 and therefore obviously in the public domain, total some 18,592 papers and 33 gigabytes of data.

このアーカイブに含まれているのはほんの一部である。これらは1923年以前に出版されたものであり、明らかにパブリックドメインである。計18592本で、33ギガバイト分のデータだ。

The documents are part of the shared heritage of all mankind, and are rightfully in the public domain, but they are not available freely. Instead the articles are available at $19 each--for one month's viewing, by one person, on one computer. It's a steal. From you.

この論文は人類の共有財産の一部であり、正当にパブリックドメインであるが、無償で提供されていはいない。論文一本あたり19米ドルかかる。しかもたったの一ヶ月の閲覧で、たった一人で、たった一台のコンピューターに限定されている。これは我々人類に対する窃盗である。

When I received these documents I had grand plans of uploading them to Wikipedia's sister site for reference works, Wikisource— where they could be tightly interlinked with Wikipedia, providing interesting historical context to the encyclopedia articles. For example, Uranus was discovered in 1781 by William Herschel; why not take a look at the paper where he originally disclosed his discovery? (Or one of the several follow on publications about its satellites, or the dozens of other papers he authored?)

この論文を入手した時、私はこれをWikipediaの姉妹サイトでありWikipediaと強く結びついているWikisourceにアップロードして、百科事典の記事に興味深い歴史的な出典を加えようと思った。例えば、天王星は1781年にWilliam Herschelによって発見されたのであるから、なぜ彼の発見を公開したオリジナルの論文を参照しないのだ?(もしくは、天王星の衛星に関する追補論文とか、彼の書いた何十本もの他の論文とか)

But I soon found the reality of the situation to be less than appealing: publishing the documents freely was likely to bring frivolous litigation from the publishers.

しかし、すぐ私は、現実はそれほど好ましくないことに気がついた。もし論文を無料で公開すると、出版社の強烈な反感を買うことになるのだ。

As in many other cases, I could expect them to claim that their slavish reproduction—scanning the documents— created a new copyright interest. Or that distributing the documents complete with the trivial watermarks they added constituted unlawful copying of that mark. They might even pursue strawman criminal charges claiming that whoever obtained the files must have violated some kind of anti-hacking laws.

出版社は論文をスキャンしたことにより新たな著作権を作り出したと主張するだろうし、あるいはスキャンした論文に小さなウォーターマークを付加していることにより、マークの違法な複製を主張するかもしれない。いや、事によると、論文を入手した方法が反ハッキング法に抵触するなどと主張してくるかもしれないのだ。

In my discreet inquiry, I was unable to find anyone willing to cover the potentially unbounded legal costs I risked, even though the only unlawful action here is the fraudulent misuse of copyright by JSTOR and the Royal Society to withhold access from the public to that which is legally and morally everyone's property.

考慮した結果、私が負う恐れのある法的コストを負担してくれる協力者は得られなかった。たとえ、違法な行為としては、JSTORの著作権の誤用と、王立協会が、法的かつ倫理的に皆の財産であるはずの論文への公共アクセスを提供しないだけであるにもかかわらず。

In the meantime, and to great fanfare as part of their 350th anniversary, the RSOL opened up "free" access to their historic archives—but "free" only meant "with many odious terms", and access was limited to about 100 articles.

ところで、王立協会の350周年を記念して、歴史的なアーカイブへの「無料」のアクセスが開始されたが、「無料」というのは、「多くに珍妙な利用規約」を伴うものであり、アクセスは100本までに限定されている。

All too often journals, galleries, and museums are becoming not disseminators of knowledge—as their lofty mission statements suggest—but censors of knowledge, because censoring is the one thing they do better than the Internet does. Stewardship and curation are valuable functions, but their value is negative when there is only one steward and one curator, whose judgment reigns supreme as the final word on what everyone else sees and knows. If their recommendations have value they can be heeded without the coercive abuse of copyright to silence competition.

往々にして、論文誌や、展覧会や、博物館は、彼らが背負っているはずの知識の流通者としての役割を果たさず、知識を検閲している。なぜならば、彼らがインターネットよりうまくやれるのは、検閲しかないからだ。保存は重要な役割だが、たった一人の保存かしかおらず、彼の判断は皆が従うべき最終のものである場合、害悪である。彼らの推奨事項に価値があるのならば、著作権を悪用して競争を阻害せずともいいはずだ。

The liberal dissemination of knowledge is essential to scientific inquiry. More than in any other area, the application of restrictive copyright is inappropriate for academic works: there is no sticky question of how to pay authors or reviewers, as the publishers are already not paying them. And unlike 'mere' works of entertainment, liberal access to scientific work impacts the well-being of all mankind. Our continued survival may even depend on it.

知識の自由な伝達は科学的好奇心のために必要不可欠である。学術研究の成果は、他のどの分野よりも、著作権による制限は不適当なのだ。著者や査読者に対価を支払うなんて問題は起こらない。出版社はそもそも支払っていないからだ。そして、エンターテイメント業界の単なる成果と異なり、科学的な成果へのアクセスを自由にすることは全人類を利するのだ。我々の存続すらかかっている。

If I can remove even one dollar of ill-gained income from a poisonous industry which acts to suppress scientific and historic understanding, then whatever personal cost I suffer will be justified—it will be one less dollar spent in the war against knowledge. One less dollar spent lobbying for laws that make downloading too many scientific papers a crime.

この科学的、歴史的理解を妨げる毒物的業界から邪悪な利益を1ドルでも減らせるならば、私個人が負うコストは正当化される。知識に対する侵略のために費やされる金が1ドル減るわけだ。大量の科学論文をダウンロードする行為を違法にする法律を制定すべくロビー活動されるのに費やされる金が1ドル減るわけだ。

I had considered releasing this collection anonymously, but others pointed out that the obviously overzealous prosecutors of Aaron Swartz would probably accuse him of it and add it to their growing list of ridiculous charges. This didn't sit well with my conscience, and I generally believe that anything worth doing is worth attaching your name to.

私はこれを匿名で公開することも考えたが、他者が指摘したように、強欲な検察はAaron Swartsの行為であるとし、アホくさい罪状に付け加えるであろうことが容易に懸念される。私はこれを善としないし、私は、善とする行為には、自分の名前を付けたいものだ。

I'm interested in hearing about any enjoyable discoveries or even useful applications which come of this archive.

私はこのアーカイブから得られる面白い発見や、有益な適用が現れるのを心待ちにしている。

- ----
Greg Maxwell - July 20th 2011
gmaxwell@gmail.com Bitcoin: 14csFEJHk3SYbkBmajyJ3ktpsd2TmwDEBb

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)

iEYEARECAAYFAk4nlfwACgkQrIWTYrBBO/pK4QCfV/voN6IdZRU36Vy3xAedUMfz rJcAoNF4/QTdxYscvF2nklJdMzXFDwtF =YlVR
-----END PGP SIGNATURE-----

Aaron Swartz自殺の背景事情

Aaron Swartzが自殺したというニュースが世界に衝撃をもって伝えられた。Aaron Swartzは誰か。一体何をしたのか。何が彼を自殺に追い詰めたのか。

強欲な著作権である。

科学や技術はもちろんのこと、およそ学問は、論文に書かれて発表されている。

通常、論文の筆者は著作権を維持しない。論文を査読した者も権利を主張しない。実に、論文は多くの者に読まれるべきである。しかし、今日、その論文の閲覧を妨げている勢力が存在する。旧態依然の出版社である。

インターネットが普及した今日、情報の公開のコストは極端に下がった。しかし、論文は依然としてペイウォールの向こう側に隠されている。なぜか。旧態依然の出版社のためである。

昔の論文は、紙に印刷されている。ほとんどの論文は、すでにスキャンされ、少なくとも画像という形で電子化されている。しかし、その論文を簡単に読むことは出来ない。何故か。旧態依然の出版社のためである。

この旧態依然の論文の出版社は、論文に著作権を主張し、広く人類に読まれるべき知識の宝庫である論文を、厚いペイウォールの向こう側に隠している。

しかし、著作権は期間を限定した排他的権利である。著作権は消失する。一体何が昔の論文の閲覧を妨げているのか。論文をスキャンした出版社である。

出版社の主張では、論文をスキャンするという行為により、さらに著作権が発生するのだという。あるいは、論文をスキャンした画像に刷り込ませたウォーターマークに著作権が発生するのだという。

少なくとも、日本ではこの論理は通用しない。著作物の媒体を変更するのに伴う変化や、誤字の修正、ふりがなや句読点の増減などといった変更には、著作権は発生しない。非常に不思議な著作権法を持つアメリカは知らないが。

とにかく、本来ならば著作権が消失したはずの論文ですら、いまだに自由に読むことが出来ない。Aaron Swartzはこの現状を打破したかったのだ。

MITの構内のネットワークは、非常に開かれている。構内のネットワークの接続には認証が必要ないし、構内のネットワークから、購読している論文を自由にダウンロードできる。Aaron Swartzはこれを利用して、MITの購読している論文を片っ端から大量にダウンロードしていた。もちろん、これはMIT構内のネットワークからアクセスすれば誰でも自由にダウンロードできる状態にあった。

例えば、このブログの各記事が、一切の事前の課金やユーザー名とパスワードの認証がなく閲覧できるのと同じだ。

しかし、Aaron Swartzはこの認証も何もない状態で片っ端からダウンロードしたという行為により、懲役数十年を求刑された。興味深いことに、被害者であるはずのJSTORとは、民事上の和解が成立していた。なぜ刑事上の摘発がなされたのか。物事の本質を理解せず、この天才を汚らしい犯罪者に仕立て上げ、何十億もの価値のある情報を盗んだとでっち上げる政治的な思惑があったのだ。正義はない。著作権と強欲による、人類に対する罪である。

彼の論文は公共の財産であり、自由に閲覧できるべきであるという決意は、本の虫: Aaron Swartzによるゲリラ・オープン・アクセス・マニフェストで示されている。

Aaron Swartzによるゲリラ・オープン・アクセス・マニフェスト

Information is power. But like all power, there are those who want to keep it for themselves. The world’s entire scientific and cultural heritage, published over centuries in books and journals, is increasingly being digitized and locked up by a handful of private corporations. Want to read the papers featuring the most famous results of the sciences? You’ll need to send enormous amounts to publishers like Reed Elsevier.

情報は力なり。あらゆる力には、専有を企む勢力あり。世紀に渡り書物と科学誌によって発行せられた世界中の科学及び文化財産は、続々と電子化され、少数の私企業の手に囚われたり。諸君ら科学の有名なる事跡を記した論文を読まんと欲すか? 諸君らReed Elsevierなどの出版社に多額に送金せずんばあらず。

There are those struggling to change this. The Open Access Movement has fought valiantly to ensure that scientists do not sign their copyrights away but instead ensure their work is published on the Internet, under terms that allow anyone to access it. But even under the best scenarios, their work will only apply to things published in the future. Everything up until now will have been lost.

世に変革をもたらさんともがく者あり。オープン・アクセス運動が争われたり。科学者自らの著作権を失わぬようにし、さらにその著作は、万人が入手可能であるべく、インターネット上に公開せらるべく争われたり。しかし最善の策によりても、将来の発表物に適用されるに過ぎず。すでに発表せられたるものは失われたり。

That is too high a price to pay. Forcing academics to pay money to read the work of their colleagues? Scanning entire libraries but only allowing the folks at Google to read them? Providing scientific articles to those at elite universities in the First World, but not to children in the Global South? It’s outrageous and unacceptable.

高きかなその対価。同志の著作を読むに対価を要するとはそも何ぞや? 大図書館の全蔵書をスキャンするも、独りGoogle読むことを得るのみ。科学論文を第一世界のエリート大学に提供するも、アフリカの子供らには提供せざるか? それ驚くべく、受け入れがたし。

“I agree,” many say, “but what can we do? The companies hold the copyrights, they make enormous amounts of money by charging for access, and it’s perfectly legal — there’s nothing we can do to stop them.” But there is something we can, something that’s already being done: we can fight back.

「然り然り」と多く言へり。「しかし何をかせん? 企業、著作権を有し、彼ら閲覧に課金することで莫大な利益を得る。これ完全に遵法なり。我ら何をかせん」。我ら策あり、すでに行われたる策あり。我ら宜しく戦い返すべし。

Those with access to these resources — students, librarians, scientists — you have been given a privilege. You get to feed at this banquet of knowledge while the rest of the world is locked out. But you need not — indeed, morally, you cannot — keep this privilege for yourselves. You have a duty to share it with the world. And you have: trading passwords with colleagues, filling download requests for friends.

汝ら閲覧の可なる者、生徒、司書、科学者、汝ら権限を与えられたり。世界が締め出されたる中、汝ら知識を食し得たり。汝らその権限を締めだすことなかれ、それ倫理に反せり。汝ら世界に共有するの義務あり。汝ら宜しく同志とパスワードを交換し、友人のためにダウンロードすべし。

Meanwhile, those who have been locked out are not standing idly by. You have been sneaking through holes and climbing over fences, liberating the information locked up by the publishers and sharing them with your friends.

しかる間、締めだされたる者はただ呆然と侍すにあらず。汝ら宜しく坑を潜り塀を越え、出版社によりて幽閉されたる情報を救い出し、汝の友人と共有すべし。

But all of this action goes on in the dark, hidden underground. It’s called stealing or piracy, as if sharing a wealth of knowledge were the moral equivalent of plundering a ship and murdering its crew. But sharing isn’t immoral — it’s a moral imperative. Only those blinded by greed would refuse to let a friend make a copy.

この活動、闇にまぎれ、地下に潜る。これ窃盗ないしは海賊と呼ばれたるがためなり。知識の富を共有すること、それ船を襲い船員を殺戮する倫理と一般なり。それ共有は倫理に反せず。倫理にかなう行為なり。それ欲に目のくらむ者のみ、友人の複製を拒絶せり。

Large corporations, of course, are blinded by greed. The laws under which they operate require it — their shareholders would revolt at anything less. And the politicians they have bought off back them, passing laws giving them the exclusive power to decide who can make copies.

大企業もとい欲に目くらみたり。彼らの操る法が要求せり、株主は一切の減益を批難せり、政治家は買収せられたり、法を通し、排他的な複製の権利を与えたり。

There is no justice in following unjust laws. It’s time to come into the light and, in the grand tradition of civil disobedience, declare our opposition to this private theft of public culture.

かかる悪法に正義なし。まさに汝ら目覚めて、反骨の精神を公共文化の私的窃盗に対して示すべし。

We need to take information, wherever it is stored, make our copies and share them with the world. We need to take stuff that's out of copyright and add it to the archive. We need to buy secret databases and put them on the Web. We need to download scientific journals and upload them to file sharing networks. We need to fight for Guerilla Open Access.

我ら補完せられたるあらゆる情報を得て、複製し、世界に共有せんと欲す。我ら著作権の消失したる事物を得て、保存せんと欲す。我ら秘密のデータベースを買い得て、Web上に置かんと欲す。我ら科学誌をダウンロードして、ファイル共有ネットワークにアップロードせんと欲す。我らゲリラ・オープン・アクセスを戦わんと欲す。

With enough of us, around the world, we’ll not just send a strong message opposing the privatization of knowledge — we’ll make it a thing of the past. Will you join us?

世界中に、十分な数の同志を得なば、我らただに情報の専有に抵抗するのみならず、それ過去のものにならん。来たれ者共。

Aaron Swartz
July 2008, Eremo, Italy

2013-01-12

デススター建設署名に対するホワイトハウスの返答

少し前、アメリカ合衆国政府の署名サイトで、デススターを2016年までに建設できるよう資源と資金を確保せよとの署名が立ち上がり、ホワイトハウスによる公式の返答の義務が生じるだけの署名が集まった。

それに対し、ホワイトハウスが返答した。

This Isn't the Petition Response You're Looking For | We the People: Your Voice in Our Government

どうやら、オバマ政権のホワイトハウスには結構な物書きがいるらしい。

デススターを2016年までに建設できるよう資源と資金を確保せよ

に対する公式なホワイトハウスの返答

これは期待しているような署名への返答ではない。

By Paul Shawcross

政府は職の確保と強固な国家防衛に共感するものの、デススターは現実的ではない。以下はその理由の一部である。

  • デススターの建設には$850,000,000,000,000,000以上かかることが推定されている。我々は負債を減らすべく努力しているのであって、増やすのではない。
  • 政府は惑星の破壊を支持しない。
  • なぜ一人乗りの宇宙戦闘機に破られる致命的な欠陥のあるデススターに数えきれないほどの血税を費やさねばならないのだ?

しかし、注意深く調べれば(ヒント)、すでに空に浮いているものに気がつくはずだ。月ではない。宇宙ステーションだ。いかにも、我々はすでに巨大にしてアメフトグラウンドの大きさの国際宇宙ステーションを地球周回軌道に持ち、この宇宙ステーションは我々人類がいかにして宇宙で長期滞在できるかという研究に貢献している。宇宙ステーションには6人の宇宙飛行士--アメリカ人、ロシア人、カナダ人--がおり、現在、生活し、研究し、長期にわたって宇宙での滞在方法を研究し、定期的に宇宙船を迎え入れ、船内の修理活動等をしている。また、我々には、二つのロボットによる研究施設を持っている。その内の一つは、レーザーを装備し、火星を探査して、あの赤茶けた惑星における生命の痕跡を探っている。

そもそも、宇宙はすでに政府専用ではない。民間のアメリカの企業が、NASAのCommercial Crew and Cargo Program Office(C3PO)と協力し、物資運搬を行なっているし、いずれNASAのために人間をも運搬するであろうし、近々月への有人探査も計画している

アメリカ合衆国はケッセル・ラン[訳注:スターウォーズにおける宇宙航海路の名称。主に違法な運び屋が帝国から隠れて物資を運搬するのに使う]の12パーセクにも及ばないが、我々には太陽系を離れつつある二つの宇宙船があり、さらに太陽表面に向かって飛ぶ観測船を建設中である。我々は何百もの他の恒星系の惑星を発見しつつあり、宇宙の初期の姿をとらえるハッブル宇宙望遠鏡の強力な後継機を開発中である。

我々にはデススターはないが、宇宙ステーションには浮遊する補助ロボットがおり、ライトセーバーの使い手であり、高度な(マシュマロの)大砲を操作できる大統領がいる。さらに国防高等研究計画局があり、ルークの腕や、浮遊するドロイドや、四足のウォーカーの開発と研究をしている。

我々は未来に生きているのだ。楽しみ給え。いや、よりよいことには、科学、技術、工学、数学の分野のキャリアに進み、開発を手伝い給え。大統領は史上始めてのホワイトハウス科学フェアや、ホワイトハウス天文ナイトを開催した。何故ならば、大統領はこれらの分野が我が国の将来にとって重要であり、アメリカ合衆国が世界に先導してデカいことを為すために必要であることを認識しているからだ。

科学、技術、工学、数学の分野のキャリアを進む者らにフォースの守りあれかし。デススターの惑星や恒星系全体を破壊する力も、フォースの力の前には大したことがないのだ。

Paul Sawcrossは管理と予算のホワイトハウスオフィスにおける科学と宇宙部門の長である。

ちなみに、デススターはあまりに規模が巨大であり、設計上の欠陥があるにも関わらず建設され、一度失敗したのにも関わらず、偉い人のメンツを維持するため、またほぼ同じ設計図を元に再び建設するという、大きなプロジェクトの典型的な失敗をすべて踏んでいる。

すべての国歌を混ぜてみた

Every national anthem at once | National Anthems of the World from NationalAnthems.me

国際連合に登録されている193ヶ国の国歌と、パレスチナ、バチカンシティ、台湾を含むすべての国の国歌を混ぜあわせた結果の音がこれらしい。

国歌は長さが違うので、すべて、最後に合わせている。つまり、最も長い国歌から始まり、徐々に重ねあわせられる国歌が増えていく。世界で最も長いウルグアイの国歌から始まり、7秒後にグアテマラの国歌が入り、さらにアルジェリアの国歌と続く。

後半になると、あまりに重ねすぎているので、なんだか聴き続けると精神に失調をきたしそうな不安な音になっている。

LLVMがGNU Hurdに移植される

[Phoronix] LLVM/Clang Compiler Being Ported To GNU/Hurd

[LLVMdev] Porting LLVM, clang et al. to GNU/Hurd

GNU HurdのメンテナーであるThomas SchwingeがLLVMのML上で、LLVMをGNU Hurdに移植する作業をしていると発表した。もともと、LLVMは移植性が高く、GNU Hurdで動かすのにそれほど問題はないらしい。

LLVMはカーネルには依存しないので、ユーザースペースのインターフェースであるglibcや、ビルドのために必要なツールがまともに動作すればいいのだそうだ。

Linux用の一部のマクロなどを、GNU Hurd用に置き換えるが、コピペしてわずかに変更という形になるのが、GNU Hurd用の修正をどのように行うべきかLLVMの流儀を尋ねている。

2013-01-10

Falloutに関する何かの予告のようなもの

Xbox 360 News: Fallout 3's "ThreeDog" teases Fallout 4 announcement - Xbox 360 - The Official Magazine

不自由なソフトウェアのゲームであるFalloutの続編のほのかな予告が現れた。

Erik Todd Dellumsは、Fallout 3でThree Dog というキャラクターの声優であった。

ただし、これはFallout 3の続編のFallout 4かもしれないし、あるいはまた同じく噂されている、Falloutの映画のことなのかもしれない。

ちなみに、現在の根も葉もない噂によれば、Fallout 4の舞台はマサチューセッツであり、Bethesda社員が現地取材をしているそうだ。

Fallout 3は面白いゲームだった。こういうニュースを聞くと、Wineをインストールしたくなるが、最近のゲームは不自由なソフトウェアだけに飽きたらず、SteamというDRMも強制しているので、残念ながら出来ない。

Falloutのloreとしては、The Vault, the Fallout wikiが詳しい。発売中止になったゲームの情報まで網羅している。何でも、Fallout 3は外伝的な扱いで、Fallout New Vegasが、オリジナルの開発者もいるために、むしろ正史扱いなのだとか。

Microsoftが3月15日にメッセンジャーを終了させるらしいという噂が広がっている

Microsoft plans to shut down Messenger on March 15 | PCWorld

何でも、Microsoftが不自由なソフトウェアクライアントを利用したメッセンジャーサービスを3月15日に終了するという噂が広がっているらしい。すでに、終了予告をメールで受け取ったユーザーがいるそうだ。

もっとも、すでにMicrosoftは不自由なソフトウェアであるSkypeを買収しており、将来は不自由なSkypeに一本化すると公式に発表しているので、3月15日終了説がガセであろうとも、いずれ終わることは間違いない。

MicrosoftのメッセンジャーやSkypeは不自由なソフトウェアであり、その利用は自分だけではなく、他人にも不自由なソフトウェアの利用を強いることになる非人道的な行為であるので、決して使ってはならない。

更に、Skypeの通信がセキュアであるかどうかということも疑いがある。暗号化されていると宣伝しているというものの、中国ではSkypeの通信内容においじて検閲が行われいるそうで、これはすなわち平文を傍受できる状態である。さらに、オーストラリア政府は過去に、Skypeの通信を傍受できると発言しており、これに対してSkype側は何の声明も出していない。

そして、実装はバイナリのみで提供されている。

不自由なソフトウェアは使わないにこしたことはない。

2013-01-09

LLVMがC++11の機能を使うかどうか議論

[Phoronix] LLVM Developers Ponder Using C++11 Features

[LLVMdev] Using C++'11 language features in LLVM itself

LLVMのMLで、LLVMのコードにC++11のいくつかの基本的なコア言語機能を使うべきかどうかという議論がなされている。議論を発起したChris Lattnerのメールによれば、

平穏な日だから、ちょっと混ぜっ返すことをしようか。

LLVMで、auto指定子とかrvalueリファレンスとかlambda式等といった、基本的なC++11の言語機能(C++11のライブラリ機能は除く)を使い始めるのは、狂気だろうか? 思うに、いくつかの簡単な決まりを設ければ、まともにやっていけるんじゃないだろうか。例えば、言語機能はMSVC 2010以降と、GCCのあるバージョン以降(GCCのバージョンはLinux畑の奴らが選ぶべきかな?)、Clangのあるバージョン以降(FreeBSD畑の連中?)

一方では、コードをすばらしく綺麗にでき、また将来的にも当然のことである。他方で、ビルドと開発の負担を増やし、LLVMの受け入れや利用に支障をきたすようなことはしたくない。

もし、C++11の機能を使うことが重大な問題があると思うのならば、どうか発言して、どうやって、またいつ、その問題が解決できるのか説明してもらいたい。我々はいつか確実にC++11に移行するので、今すぐではないにせよ、議論して問題を発見するべきだ。

-Chris

LLVMのライセンスは、オープンソース(笑)である。オープンソース主義者はソフトウェア利用者が自由かどうかを気にしない。ソフトウェアの直接のソースコードがオープンならそれでいいという思想だ。ソースコードが派生されて不自由な利用をされようがかまわないという劣った考え方だ。

したがって、LLVMは何よりも使われることを優先する。コンパイラーが使われるには、特に、C++コンパイラーのような基本的なコンパイラーが使われるには、その環境にLLVMをコンパイルできるC++コンパイラーが存在する必要がある。もちろん、LLVMは自分自身をコンパイルできるが、GCCほど利用率が高くない現状では、別のコンパイラーでもコンパイルできるということが、利用率を高める戦略的に重要だ。この卵と鶏のような問題は厄介だ。

自由なGCCは、最近までコードベースがC言語のみであった。C++に移行するにあたって、既存のどのコンパイラーが、また自分のどのバージョンまでは、最新のGCCを正しくコンパイルできるのかという不安の声もでた。不自由なMSVCは、Microsoft一社のみで開発しているため、他のコンパイラーでコンパイルできるかどうかということは気にしなくてよいだろう。

Ubuntu 13.04のGTK+ではWaylandサポートが追加される

[Phoronix] Ubuntu 13.04 Will Enable Wayland Support In GTK+
[Phoronix] Canonical "Won't Fix" GTK+ Wayland For Ubuntu

Bug #954352 “Enable wayland backend” : Bugs : “gtk+3.0” package : Ubuntu

先月、GTK+でWaylandをサポートするための変更は、適用されないとされていた。理由は、GTK+にWaylandとlibxkbcommonの依存を持ち込むのを嫌ったためだ。

この決定は変更され、Ubuntu 13.04では、GTK+がWaylandをサポートするようになった。

その理由は、Ubuntu 13.04では、libegl1-mesaがWaylandに依存しており、さらにEmpathy(複数のプロトコルをサポートしたチャットクライアント)やTotem(動画プレイヤー)といったlibegl1-mesaに依存することより、すでにWaylandはデフォルトのインストールパッケージに含まれており、GTK+がWaylandに依存することは問題ないと判断されたようだ。

ちなみに、これはあくまでWaylandライブラリがUbunutu 13.04のデフォルトメディアに含まれるだけであって、Ubuntu 13.04でX11からWaylandへ移行するわけではない。Waylandへの移行は、まだまだ時間がかかる。

2013-01-08

Compizの開発者、今後の発展をやめ保守のみし、Waylandへの移植もしないと表明

Sideways | Make it better

Compizの主要な開発者の一人であり、一時期Canonicalに雇われていたこともあるSam Spilsburyがブログで、Compizはこれ以上開発せず、保守のみするべきであり、Waylandへの移植もしないという意見を表明している。

主な理由は、Wayland環境では、Compizの存在価値がなくなるから、また細分化の弊害のためだとしている。

かつて、Waylandへの移行をロードマップに描いたCanonicalの意向に逆行する意見だ。確か、当時のCanonicalの意向では、CompizをWaylandに移植し、すなわちCompiz上で動くUnityをWaylandに移植するということになっていたはずだ。また少し前は、WaylandのWestonをforkしてUnityをWayland上で実装するなどという話も聞こえてきた。一体どうなることやら。そもそも、Waylandはいつ実用になるのか。

思うに、現時点で、このプロジェクトをこれ以上発展させるのは無意味だ。大勢の人がいまだに使っているので、利用者のために保守するのは重要だが、そこまでだ。

このブログ記事は、以上を念頭に置いた上で書く。

近い将来の、ポストX11の世界と、ポストデスクトップの世界には期待しているが、ひそかに思うに、またぞろ似たようなウインドウマネージャとかシステムコンポジターが必要なのかどうか疑問だ。Waylandでは、幸いにも今のところ、westonがいわゆるデファクトなコンポジターかつウインドウマネージャーになっている。つまり、どのように動くべきかという規格上の問題を心配する必要がなく、ウインドウマネージャーとクライアントの間をつなぐインターフェースが存在するだけだ。

最近の予測では、X11はいずれ退場するため、Waylandへ移植する必要がある。そのため、X11とWaylandを、共通のインターフェースに抽象化して隠し、いずれは移行を終える。どうやったらそんなことができるのだ? 二つの方法が思いつく。一つには、新しいwl_compositorを実装することだ。これはつまり、オペレーティングシステムにより提供されるサーフェイスのOpenGLコンテキストの初期化のためのオペレーティング・システムのインターフェースをなんとかしなければならない(Linuxの場合、KMS)。さらに、オペレーティング・システムにより提供されるグラフィックバッファーの管理もしなければならない(LinuxはGBM、Androidはgraloc)。さらに、ディスプレイモードやらディスプレイ回転やら何やらも面倒を見なければならない。2つ目は、wl_shellを実装することで、これはつまり、一度に有効にできるwl_shellはひとつだけになる。

そのようなシステムにおいて、Compizがユーザーに提供するものとはなんだ? 開発者として、私は以下のような点を挙げるだろう。

  • OpenGLの基本的概念(vertex buffer objects, framebuffer objects, frame timing etc)に沿ったC++インターフェース
  • 設定
  • コールバックのディスパッチによるプラグイン
  • reparentingをサポートしたウインドウマネージャー

利用者は、以下のような点を挙げるだろう。

  • 状態変化に伴うアニメーション
  • キューブ上の仮想デスクトップ
  • グラフィカルなウインドウ選択

利用者が使っているこれらの機能はいずれも、コンポジットエンジンでしか提供できない機能ではない。我々のコンポジットエンジンが存在すべき理由がなくなるのだ。もうこれ以上、他の「ウインドウマネージャー」と同じ事をする別の「ウインドウマネージャー」だが、独自の機能も提供するといったものは必要ない。

CompizをUbuntuとUnityのために長年保守してきて学んだことは、コンポジットエンジンとウインドウマネージャーを正しく動作させるのはとても難しいということだ。実に多数の考慮すべき問題があるし、グラフィックドライバーはまともにうごかないし、OpenGLを使うのは嫌になる。Canonicalで働いていたとき、98%の労力はコンポジットエンジンとウインドウマネージャーを保守することに費やされ、2%の労力が、新機能の提供に費やされた。存在理由を探す方が難しい仕事だ。

Linuxのエコシステムにおける断片化の弊害だ。単に、車輪の実装が複数あるというのではない。ほぼ同じことをする完全な車両の実装が複数あるが、どれもほんのわずかだけ違っているのだ。ある者曰く、これこそ自由なソフトウェアの最大の強みであると。断片化の弊害を身をもって思い知らされた今、最大の弱みであると思う。

Compizで好かれているとある機能を提供するためだけに、完全なコンポジットエンジンとウインドウマネージャーを再実装するのはまったくもって合理的ではない。私は、精神的にも、プロジェクトのそのような方向にもっていき、このエコシステムにさらなる断片化をもたらし、新たな開発者をお互いに罵らせる理由をつくるというのは。断じてできない。

そのため、私にはCompizをWaylandに移植するつもりはまったくないし、そのようなことは一切推奨しない。

納得できる作業とは、利用者に好まれている機能を、すでに存在するフレームワーク上で提供することだ。つまり、より多くの人が共同開発することになり、労力が分散されない。

わたしはかつて、自由ソフトウェアの最高な点は、プロジェクトはメンテナーやコードベースがいなくなっても使えることであると思っていたが、間違いだった。

自由ソフトウェアの最高な点は、コードベースがその本来のプロジェクトを離れて活用できるということだ。

自由ソフトウェアの美しいところは、完全に終了することがなく、常に可能性の開かれている芸術品だということだ。プロジェクトからメンテナーが離れても、開発を続行できる道具は他者に残されているので、新しいメンテナーはプロジェクトを続行するか、あるいは新しいプロジェクトで部分的に再利用するかを選択できる。

私からすれば、現状は非効率的であり、あまりに競争的過ぎると思う。時には妥協や協調も必要なのだ。

協力して何か素晴らしいものを作ろうじゃないか。

Compizとは、本来コンポジットエンジンとして始まった。仮想デスクトップとか、ウインドウのアニメーションとか、ウインドウの配置とかいった機能は、なにもコンポジットエンジンでなければ提供できない機能ではない。

とすれば、Wayland環境では、Compizはその存在理由を失う。そのため、Compizやその他多数のほぼ同じ事をするコンポジットエンジンやウインドウマネージャーを断片独立してWayland上で再実装するよりも、皆で協力した労力の分散を低減したほうがいいのではないか、ということを言っているようだ。

2013-01-06

天皇とアーッ!

【閲覧注意】天皇陛下でBLを書いたら脅迫メールが送られてきた件 - Togetter

この脅迫を送った者に、平安、鎌倉時代の説話集を読ませたら発狂するんだろうか。

Ubuntuの邪悪なSteam上でのシェア率が0.8%になった

邪悪なDRMつきのソフトウェア配信システムであるSteamを運営するValve社は、2012年12月時点のSteamクライアントのインストール環境の統計を発表した。

Steam Hardware & Software Survey

OSの種類は、バージョンと、CPUアーキテクチャがx86かx64かで、分割されている。これをまとめると、

Ubuntu 12.10 64 bit 0.29%
Ubuntu 12.04.1 LTS 64 bit 0.26%
Ubuntu 12.04.1 LTS 0.13%
Ubuntu 12.10 0.12%

となり、足し合わせると0.8%となる。今年は確実に1%を超えるだろう。

ああ、デジタル制限管理により再配布を制限され、さらに単なる個人的な利用すら制限されるライセンスへの同意を迫られる、汚らしい不自由なソフトウェアの汚染が進んでいる。

百千万歩譲って考えると、不自由なOS上で不自由なソフトウェアを実行するより、自由なOSで不自由なソフトウェアを実行したほうが、まだいくらかマシであるといえる。かのRMSも、「悪よりも善の方が大であると思う」としている。

とはいえ、現在GNU/Linux用に提供されているゲームをまともに遊ぶには、やはり処理能力の高いGPUを使いたいものであり、それにはnVidiaかAMDのGPUを、公式の不自由なドライバーとともに使う必要がある。してみれば、Steam利用者の大半のGNU/Linux環境は、所詮は完全に自由なOSでもないのだろうが。

さらに、Other(その他)が0.71%あるというのも興味深い。SteamはWindows 2000やそれ以前のOSを公式にサポートしていない。もちろん、それでもなんとか動かしている人間もいるかもしれないが、その他の環境が考えられる。

Ubuntu以外のGNU/Linuxベースのディストロかもしれない。聞説、邪悪なライセンスへの同意を要求するSteamの現在のライセンスはリパッケージを許しているかどうか疑わしいが、Valveの一社員の見解によれば、制限していないのだという。GNU/Linuxベースのシステムでは、ライブラリのバージョンの差異などにより、邪悪なバイナリのみの提供では移植性に難があるのだが、まあ、やれないこともない。

もう一つの可能性としては、Wine環境が考えられる。WineはGNU/LinuxやFreeBSDやMac OS Xなどの環境に、Windows互換レイヤーを提供するソフトウェアである。近年のWineの精度の向上はめざましく、なんとSteamクライアントを動作させ、不自由なソフトウェアを購入し、ダウンロードし、大半のソフトウェアを実行することができるそうだ。それも、Direct3Dをふんだんに使ったパフォーマンスが重要なゲームでも、問題なく遊べるレベルに達しているらしい。もちろん、不自由なソフトウェアを実行するのは問題であるが。

すでに明らかになっているように、Valveは利用者の環境にwine3dが存在するかどうかを調べ、実行環境がWineであるかどうかを判定している。OtherにはWine環境が含まれているのかもしれない。

邪悪で非人道的なSteamとそのソフトウェアの汚染は嘆かわしいことであるが、不自由なOSであるWindowsやMac OS Xのシェア率が下がり、不自由なドライバーを使っているとはいえ、部分的に自由なOSのシェア率が上がることは、RMSのいう「悪よりも善の方が大であると思う」といえる。

また、実際にゲームという需要が発生することで、GNU/Linux環境におけるグラフィク周りのソフトウェア環境の各種向上が発生しているのも、「悪よりも善の方が大であると思う」といえる。

2013-01-02

XVoice: Linuxデスクトップアプリの音声操作

Dubhrosa: XVoice: speech control of Linux desktop applications

XVoice

参考にされるのを求めているオープンソースの音声操作プロジェクト

黎明期

1990年代の終わり頃、IBMはViaVoice音声認識エンジンのLinux版をリリースした。常にベータ版で、オリジナルのWindows用のプログラムの完全な機能は提供されていなかったが、当時、Linux用のまともな音声認識エンジンとしては、唯一の存在だった。そこで、私はそれを使って遊んでいた。

すぐに、XVoiceというオープンソースプロジェクトを発見した。XVoiceはViaVoiceエンジンを使って音声認識を行い、その認識結果をLinuxデスクトップをコントロールするために使うアプリケーションであった。多くのプログラムを、本来想定していない方法で使うハックの塊だったが、すばらしい事を達成していた。Linuxに向かって言葉で命令することができるのだ。

ViaVoiceエンジンのすばらしい機能に、文法を定義すれば、エンジンは入力された音声に対し、文法に一致するかどうかを試みるというものがあった。つまり、特定の文法(すばらしいことにBNFで定義)に対しては、トレーニングなしで、認識率をほぼ完璧にすることができたのだ。

進歩と成功

2000年初頭に数ヶ月の開発の末、XVoiceはユーザー定義されたコマンド文法をサポートした。文法を定義して、話されたコマンドを、キーストロークに割り当てる。しかもアプリケーションごとにそれぞれ、複数の文法を設定できる。XVoiceは、ややハック的なヒューリスティックによって、正規表現でウインドウのタイトルにマッチさせることができた。これにより、正しい文法ファイルを自動的に読み込むのだ。マウスもコントロールできた。XVoiceは画面を3x3グリッドに分割して、マウスが望みの位置に移動するまで誘導させることができた。文法は階層的なので、数字を単語として入力するEmacs用コントロール文法[訳注:1-one, 2-twoのように数字を単語に変換すること]を含めることができたし、パターン認識もサポートしていたので、アプリケーションに送られるコマンドは、話された単語の一部を含めることもできた。

開発に多大に貢献した、積極的な利用者もいた。あるVi使いのプログラマーはひどい反復性ストレス障害をわずらっており、コンピューター操作に支障をきたしていた。彼は洗練されたVi用の文法を定義して、プログラミングをしていた。興味深いことに、彼はむしろ作業がより効率的なったと主張した。というのも、Viコマンドを従来より高度に使いこなせるからである。Emacs利用者達は巨大な文法集をこしらえて、ニュースを読み、メールを送り、lispでプログラミングし、そのほかおよそすべての作業を行なっていた。

それはそうと、XVoiceの経験から言えば、普通の人間にとっては、コンピューターを声で操作するのは楽しいことであるが、日常的に使う人間は、それ以外に選択肢のない人間だけである。一日数時間発声し続けるのは肉体的に難しく、どんなに賢い文法をこしらえようとも、これ以外に方法がない場合のみ、仕方なく使う機能だ。頸髄損傷を起こした何人かの利用者がこのシステムを使って、ある程度の成功を収めていた。彼らにとっては、Unixマシンを操作する方法は、XVoiceだけなのだ。この認識は、プロジェクトの将来の方向性を明白にした。我々は、タイプできないか、あるいはタイプに相当の支障がある人間を助ける機能を重視したのだ。

プログラミングのプロジェクトとして、XVoiceを開発するのは最高だった。私は自分よりはるかに経験や能力のあるプログラマーから、多くのことを学んだ。最終的には(Version 0.9.6だったと思うが)、とてもクールなプログラムになり、コンピューターを操作する必要のある人たちに使われていた。我々はボイスコントールのGUIのいくつかの問題に対処した。コマンド文法はとても洗練されていて、拡張性の高い仕組みだ。かえりみるに、ほとんどの興味深い開発は、よりよく幅広い文法集を構築することに集中していた。

突然の終了

残念ながら、IBMはLinuxにおけるViaVoiceに、それほど興味を持っていなかったようだ。我々は開発者と何度か意思疎通をしたが、彼らは協力的であった。しかし、「公式」のIBMの人間は、Linuxサポートを続ける計画について、何も話さなかった。彼らの唯一の連絡事項は、XVoiceの関連サイトで、XVoiceをViaVoiceとともに配布しないようにしろというものだけだった。XVoiceは、別に購入しなければならなかったのだ(もちろん、我々はちゃんと購入した)

ある日、IBMはLinuxにおけるViaVoiceを打ち切ってしまった。単に、Webサイト上から消えてしまったのだ。その時、ViaVoiceのかわりに使えるオープンソースの音声認識エンジンとしてはCMU Sphinxがあるぐらいだったが、あまりよろしくなく、容易に解決できない問題も山ほどあった。プロジェクトの主要な開発者達は、趣味で開発しており、XVoiceの開発にしばらく参加できないこともしばしばあったので、プロジェクトの開発速度ははかばかしくなかった。

考察

たまに、音声認識に関する記事、特に操作システムに関するものを読むたびに、XVoiceをオープンソースのエンジン向けに作り直したいと思う。オープンソースにせよ、そうでないにせよ、音声でしか意思疎通ができない人たちに対する決定的な解決策が、いまだに存在しないのは、とても残念なことだ。多くの技術系の大企業各社は、アクセシビリティに関してうわべのいいことを言っているが、この問題に関しては、巨人達はなにもやっていない。

将来

思うに、汎用的な認識精度の高い音声認識エンジンと、アクセシビリティを目指した音声操作システムは、明確に分けて考えるべきである。音声による完全な操作は難しく、汎用的で巨大な音声操作システムだけで解決できる問題ではないだろう。アクセシビリティに注力し、実際にアクセシビリティに問題を抱えている利用者と相談して、ともに作業して乗り越えて行かなければならない問題である。音声操作システムを開発しているのであれば、注目が薄れて喉元過ぎ去った後でも、そのソフトウェアを使い続けなければならない利用者のみが、本当の利用者だということを肝に銘じるべきである。最後の数カ月、XVoiceが注力したのはその点で、解決しなければならない厄介な問題は多かったが、それこそやりがいのある仕事であった。

XVoiceや、その他の音声操作システムの根本的な機能は、文脈に特化した文法を、音声認識エンジンにすぐに流し込めるということである。エンジンの内部的な精度は、文法が十分に構築できれば、それほど問題ではない。最近のエンジンは、どれも悪くないだろう。しかし、私の知る限り、HTML5の実装による音声入力は、文法設定をサポートしていない。CMU Sphinxはサポートしているらしいが、どの程度動くのか分からないし、設定ファイルはやたらと複雑だ。

XVoiceのコードはGPLであり、Sourceforceと、GitHubにある。dどうかいじくり回して欲しい。私が関わっていたのは、今を去ること十数年前だが、ドキュメントは実際なかなかいいし、コードは危惧していたほど読みにくいわけではない。ほとんどがRAII以前のC++なので、クリーンアップして、スマートポインターを使うように置き換えるなどして、近代的な水準に引き上げる必要があるだろう。プロジェクトの復活は望めないとしても、コマンド文法のアイディアや構造は、他のプロジェクトに役立つかもしれない。Xイベントを生成する部分のコードは再利用できるかもしれない。モジュールのサブディレクトリに文法のサンプル集がある。読めば面白いだろう。netscape用のものまであるのだ。懐かしいなぁ。

教訓としては、不自由なソフトウェアに依存してはならないということだ。