投稿

12月, 2016の投稿を表示しています

Intel HD Graphics のマシンで,Wine の DirectX をいいかんじにやってもらいたい(ArchLinux)

実は,数年前より,フリーのグラフィックスライブラリである Mesa において,DirectX 9 がネイティブに扱えるようになっています.と,言うのも,Mesa が導入した Gallium 3D というもののおかげです.

これは,OpenGL や DirectX のバックエンドとなる,3D 描画一般の標準的な API を提供するレイヤです.そこで,Wine についても,この Gallium を使って DirectX 9 をネイティブに描画する,Gallium nine patch というものが存在しています.
# pacman -S wine-staging-nine このパッチが当たった wine では,winecfg の staging タブで Gallium Nine を有効化するだけで使えるようになります.しかし,Intel HD Graphics のマシンでは,
ilo: driver missing と出てしまい,DirectX を使うアプリケーションの起動が失敗するようになってしまいます.
そこで,解決方法は,次の通りです.

# pacman -S abs && abs で /var/abs/ にパッケージビルドレシピをダウンロード$ cp -r /var/abs/extra/mesa $HOME/ PKGBUILD を編集し,--with-gallium-drivers= へ,ilo を追加$ makepkg -i によりパッケージビルド,インストール これで,Wine で DirectX をいいかんじにやってもらえるようになります.ただし,已然として不具合や欠けている機能の多いものなので,正しく動作しない可能性も高いです.その場合は,Gallium Nine を無効化して,諦めて従来の描画方法に頼りましょう.

インドのふたつのカレー

イメージ
カレー Advent Calender 2016 22 日目の記事です.

カレー†1の本場と言えば,言わずもがな,インドです. インドカレー屋は,案外街のあちこちにあったりして,馴染み深い人も多くなったんではないでしょうか.ところで,インドカレーと一口にいっても色々あります.大きく,北インド南インドでそれぞれ分けられます.北インドでもパンジャブ地方のパンジャブ料理と,ムガル帝国†2の宮廷料理であるムガル料理など,いくつか種類がありますが,タンドールを使った料理,ナンや,バターチキンカリーといったものを生み出したパンジャブ料理は日本でよく知られています.
この,南北ふたつのカレーについて,特徴を紹介しようと思います.
スパイス 北インドカレー インドカレーの南北をそれぞれ象徴付けるのは,やはりスパイスです.北インドカレーでは,カルダモンクローブシナモンローリエといったものが,よく使われるようです.カルダモンは,スパイスの女王と呼ばれる,さわやかな香りが特徴的です.
クローブは,肉料理によく使われ,臭み消しだったりします.中国だと丁子
ローリエはあの冠とかに使われる月桂樹の葉っぱ,と言えば通りが良いかと思います.この画像のような大きめの葉っぱが煮こまれて入ってるカレーとか,インド料理レストランで食べたことないですか?
シナモンはみなさんご存知ですね.エジプトでミイラ保存料として使われたり,聖書に出てきたり,歴史の古いスパイスです.甘い香りがして,おかし作りなどに出てきますね.

こういったスパイスを,ホール(粉にしない,実や葉,樹皮のようなスパイスのそのままの形)で使うのが北インドカレーです.それも,最初に油でこれらを炒めて,作った香油を,鶏肉など材料に絡めて,調理していくというのが,大きな特徴となります.ちなみに,ここで書いた中でも,カルダモンやクローブ,シナモンは,ハウス食品や S&B が瓶詰めのスパイス粉として発売している「ガラムマサラ†3」の中によく入ってます.
南インドカレー 対して,南インドではどのようなスパイスを使うのでしょうか.ホールスパイスとして使うものとして代表的なのは,マスタードシード赤唐辛子カレーリーフ
マスタードシードは,白芥子の種子です.あのマスタードの原料そのもの.場合によっては,粒入りマスタードなどにも使われる表皮の黒…

Rust で nostd(と UEFI)

Rust Advent Calender 2016,19 日目の記事です.

Rust で OS 作ったりなんだり,簡単にできるといいなあってことで.

まず,Rust で nostd な環境でどのようにすれば良いのか,なのですが,単純にこれだけならば,Rust の公式ドキュメントに載っています.
https://doc.rust-lang.org/book/no-stdlib.html
基本的には,nostd をコンパイラに指示して,lang_item を使っていくつかの不足のシンボルを定義してあげます. また,ここで panic_fmt をいい具合に定義するときっと panic!() とか使うのに役立つ(と思います).

ここからが,ちょっとした TIPS になります.
実際に本当に使える何かを作ろうとしたとき,何もないと不便で,作りづらいです.そこで,Rust の libcore,つまり core ライブラリを使って, core::fmt::Display でフォーマット文字列使ったり,core::mem::size_of で特定の型のメモリサイズを取得したり, core::ptr::null で null pointer 作ったり core::ptr::swap でポインタの中身を取り替えたり,そういう unsafe な部分も 組込みっぽい場所で必要になるでしょう.しかし,これらを使うにも,クロスコンパイルの時には,Rust のソースを全部もってきたりして,手動で core ライブラリを ビルドしてリンクさせないと使えなかったりするのです.

そこで便利なのが,xargo です.次のように使えます. $ cargo install xargo
$ export PATH=$HOME/.cargo/bin:$PATH
$ xargo build 普段のcargoの代わりに,ビルドなどにこのコマンドを使うと,cargoのラッパーとして動作し,しかも core ライブラリ等を自動でビルド,リンクしてくれます. 結構地味に便利なので,ぜひ.

最後に,宣伝というか.
UEFI で動かせるナニカを Rust で作りたいなーと思いつつ,放置してたのですが,crates.io に uefi というライブラリがあったので,手を出しはじめました. しかし,実装が全然足りてなかったの…

HIL: Designing an Exokernel for the Data Center

イメージ
遅刻しました.ごめんなさい.
本稿はシステム系論文紹介 Advent Calener 2016,2 日目の記事になります(大遅刻).
今回はHIL: Designing an Exokernel for the Data Center を紹介します.
原論文 J. Hennessey, S. Tikale, A. Turk, E. U. Kaynar, C. Hill, P. Desnoyers and O. Krieger, “HIL: Designing an Exokernel for the Data Center″, in 7th ACM Symposium on Cloud Computing, ser SoCC '16, Santa Clara, CA, USA: ACM, Oct. 2016, pp. 155―168, ISBN: 978-1-4503-4525-5. DOI: 10.1145/2987550.2987588. [Online]. Avaliable: http://doi.acm.org/10.1145/2987550.2987588.
前提 まず始めに,表題にもある,Exokernel について説明しなければなりません.Exokernel とは,1995 年に生まれた技術です[1]. 図1を見てください. これは,マイクロカーネルよりさらに一歩進めて,security bindings 以外を全てカーネルから追い出してしまい,従来のカーネルのサブシステムは,全てアプリケーションとリンクするライブラリとしてしまうアーキテクチャです.この,従来の OS の機能を持つライブラリを,libraryOS と言います.リソース管理などの機構をアプリケーション毎に特化させる事を容易にし,また,複数のアプリケーションの,デバイスや計算資源へのアクセスの分離(isolation)とその管理(management)をそれぞれ Exokernel と libraryOS で全く分けてしまえる事が特徴のアーキテクチャでした.
TL;DR さて,今回紹介する論文は,この Exokernel のような抽象層を,ベアメタルクラウドのデータセンタに導入する試みです.
双方向に信頼されないベアメタルのデプロイメントサービス(OpenStack …