2014年1月29日水曜日

Sphinx で LaTeX 出力のメモ

画像貼り付けでno BoundingBox

PNG画像を貼り付けようと思ったら
"! LaTeX Error: Cannot determine size of graphic in chelper_code.png (no BoundingBox)."
と怒られた。.ebbや.bbファイルを生成しても解決しなかった。

解決策:dvipdfmxを使う

使い始めたばかりのSphinxでPDFを生成してみたと似た症状かなと思って、強制的にdvipdfmxを使うように設定してみた。conf.pyに
latex_elements = {
'classoptions': ',dvipdfmx',
}
こんな感じの設定をする。latex_elementsは最初から入ってるので、'classoptions'の行を追加する。(今回は更に"! Package babel Error: You haven't specified a language option."というエラーが出たので、language = 'ja'という設定も追加した)

2014年1月22日水曜日

Adobe Illustrator CC で白抜き矢印を描く

Adobe Illustrator CC で白抜きの矢印を描く方法です。
illustratorで白抜き矢印を描く の方法はちょっと古いので、Illustrator CCでのやり方を解説します。

太い矢印を作る

直線ツールを選択します

太い直線を描きます


矢印にします
([ウィンドウ]-[線])

矢印の外郭線を得る

図形の外形を抽出します
([オブジェクト]-[パス]-[パスのアウトライン])

パスを合流させます
([ウィンドウ]-[パスファインダー])

白抜きにする

塗りの色、線の色・太さなどを調整します

2013年12月9日月曜日

進捗どうでしょう

「進捗どうですか」と聞いて「進捗ダメです」って答えるネタが流行っているみたい。元ネタは良く知らないのだけど。
この記事は進捗Advent Calendar 2013 9日目向けのものです。アドベントカレンダーなるものに初めて参加してみます。

修士論文

僕の進捗といえば修論の話をしなくてはいけません。なぜなら修士2年生だからです。そう、もう数ヶ月で卒業…。大学に入学して6年、ああ、小学校時代と同じ長さなのか!そりゃすんげえ!

修論は論文誌に投稿するのが12月中、学校に提出するのが1月後半という目標です。
単純なページ数的進捗で言えば、論文誌用の論文の方は2/6ページ書きました。執筆が捗るときと捗らないときの波が結構ありますけど、残りも頑張ります。ちなみにC-Helperが僕の研究です。

マイスタイル

僕が論文書くときのスタイルなどを書いておきます。「我も同じじゃ」とか「こうしたほうが良いよ」などありましたらコメントで教えてください。参考にさせていただくかもしれません!

音楽

BGMをかけつつ文章を書くのが好きです。電子音がピコピコするアニソン系の曲、東方JAZZアレンジ系、UKロックなど聴きます。日本語の歌詞が聞き取りやすい曲も好きですが、作業効率は落ちる気がします。
そうそう、最近はDiverse Systemのworks.3を買いまして、修論のお供に良く使ってます。アルバムタイトルの通り、結構優秀な作業用BGMだと思います。

場所

執筆活動をする場所も僕には重要です。僕は自宅ではゲームなどやってしまって執筆が捗ったためしがありません。比較的集中できるのはドトールなどのカフェや通学電車です。自宅以外だとお気に入りのゲームも無いですし、適度に人の目(カフェ席で寝てたら恥ずかしいので寝ないですみます)もありますから。
さらに付加効果として、カフェでMacBook Airを広げると多少優越感があります。Haswell搭載のノートPCにすれば、一日中電源なしでカフェを転々として執筆活動にいそしめます。

道具

Vim+TeXをターミナルから使って論文書いてます。Vimで.texファイルを保存するたびにmakeが非同期で走るように.vimrcを設定してあり、自動でTeXコンパイルされます。PDFのプレビューにSkimを使えば、ファイルの更新を自動で検出して再読み込みしてくれるので便利です。しかも、再読込時に他のウィンドウよりも手前、ターミナルよりも後ろという超絶妙な位置に再配置されるので、非常に使いやすい。おすすめ。

修論の同士たち、一緒に頑張りましょう。


さて、明日は wraith13 さんの担当で御座います。進捗は如何でしょう?

2013年11月22日金曜日

USBメモリはローカルディスク?リムーバブルメディア?

USBメモリをWindowsマシンに挿したとき、ローカルディスクになってしまう問題があります。または、無理やりローカルディスクとして認識させたい場合もあるでしょう(今回調べたのは、後者の理由です)。

少し調べたところ、USBメモリがリムーバブルメディアとして認識されるのはATAのIDENTIFY DEVICEコマンドの戻り値のRemovable Media Bitが1だからだそうです。

リムーバブル メディア デバイス設定は、SCSI Inquiry コマンドへの SCSI Inquiry Data 応答内に含まれたフラグです。バイト 1 のビット 7 (インデックスは 0 から開始) は、Removable Media Bit (RMB) です。ゼロに設定された RMB は、デバイスがリムーバブル メディア デバイスではないことを示します。1 に設定された RMB は、デバイスがリムーバブル メディア デバイスであることを示します。

flip removable media bit とググると、んもうたくさんの質問や記事が出てきます。皆さんUSBメモリにパーティションを作りたくてうずうずしているのでしょう。

漁ってみた中で一番確実そうな方法は "Lexar BootIt utility" を使う方法でした(まだ試していませんが)。LexarはUSBメモリのメーカーで、恐らく自社製品用にツールを作ったのだと思います。ということで、お店でLexarのTwistTurnなるUSBメモリを買ってきました。(Lexarのツールを使ってみたらここに追記予定)


Tips for USB pen drives によれば、「Removable」は本来、フロッピーやZIPドライブ、フラッシュカードリーダーなど、取り外し可能メディアを持つ機器を表すそうです。USBメモリがRMB=1になっているのは厳密には正しくないけれども、ほとんどすべてのUSBメモリがそうなってしまっているのだそうです(反対にUSBハードドライブはRMB=0になっています)。

なぜUSBハードディスクはリムーバブルでないのにUSBメモリはリムーバブルなのかは理解できませんが、現実的に市場の製品がそうなってしまっているのだから仕方がない。注意して製品選びするしかなさそうです。

Lexar BootIt utilityを試したらこの記事を修正するつもりです。

2013年10月15日火曜日

OS X Mountain Lion で i686-elf 向け GCC をビルドする

Xcode の Command Line Tools でインストールされる gcc コマンドは llvm-gcc なので、本当の GNU C Compiler ではありません。 Mac でクロスコンパイル用の GCC をビルドするためには、本物の gcc コマンドが必要です。
Mountain Lionユーザのためのクロスコンパイラビルド - Handwriting を読んでこの事実を知りました(それまで5回ぐらいクロスコンパイル用 GCC をビルドしようとして失敗していました)。

以下、ビルド手順メモ

ネイティブ用 GCC ビルド

クロスコンパイル用 GCC をビルドするための GCC をビルドします。A bare-metal x86-cross-compiler on Mountain Lion | The Intobooks や、そこからリンクされている Compiling gcc-4.7.1 on Mac OSX Lion が参考になりました。これらの記事の手順は僕の Mountain Lion でも使えました。

各種ソースコードのダウンロードと展開

$ cd ~
$ mkdir gcc-4.8.1
$ cd gcc-4.8.1
$ curl -O http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-4.8.1/gcc-4.8.1.tar.gz
$ curl -O http://ftp.tsukuba.wide.ad.jp/software/gmp/gmp-5.1.3.tar.gz
$ curl -O http://ftp.tsukuba.wide.ad.jp/software/mpfr/mpfr-3.1.2.tar.gz
$ curl -O http://ftp.tsukuba.wide.ad.jp/software/mpc/mpc-1.0.1.tar.gz
$ tar zxvf gcc-4.8.1.tar.gz
$ tar xzvf gmp-5.1.3.tar.gz 
$ tar xzvf mpfr-3.1.2.tar.gz
$ tar xzvf mpc-1.0.1.tar.gz

ビルドとインストール

ビルドするまえに環境変数 PATH の値をなるべくシンプルに調整するとミスがありません。PATHを調整し終えたらいざビルド。

GMP
$ mkdir gmp-build
$ cd gmp-build
$ ../gmp-5.1.3/configure --prefix=/Users/uchan/gcc-4.8.1/ --enable-cxx
$ make -j4
$ make install
$ cd ..

MPFR
$ mkdir mpfr-build
$ cd mpfr-build
$ ../mpfr-3.1.2/configure --prefix=/Users/uchan/gcc-4.8.1 --with-gmp=/Users/uchan/gcc-4.8.1
$ make -j4
$ make install
$ cd ..

MPC
$ mkdir mpc-build
$ cd mpc-build
$ ../mpc-1.0.1/configure --prefix=/Users/uchan/gcc-4.8.1 --with-gmp=/Users/uchan/gcc-4.8.1 --with-mpfr=/Users/uchan/gcc-4.8.1
$ make -j4
$ make install
$ cd ..

GCC
$ mkdir gcc-build
$ cd gcc-build
$ ../gcc-4.8.1/configure --prefix=/Users/uchan/gcc-4.8.1 --enable-checking=release --with-gmp=/Users/uchan/gcc-4.8.1 --with-mpfr=/Users/uchan/gcc-4.8.1 --with-mpc=/Users/uchan/gcc-4.8.1 --enable-languages=c,c++
$ make -j4
$ make install
$ cd ..

以上でクロスコンパイル用 GCC をビルドするためのネイティブ GCC が出来上がりました!(ややこしい(^^;

さて、やっとクロスコンパイル用 GCC のビルドです。まず PATH の調整など。先ほどビルドした GCC のパスと、クロスコンパイル用 GCC のパスも忘れず通します。GCC, GMP, MPFR, MPC のソースは先ほど展開したものを再利用します。
$ export PATH=$HOME/i686-elf-gcc-4.8.1/bin:$HOME/gcc-4.8.1/bin:$PATH
$ cd ~
$ mkdir i686-elf-gcc-4.8.1
$ cd i686-elf-gcc-4.8.1
$ mkdir src
$ cd src
$ ln -s ~/gcc-4.8.1/src/gcc-4.8.1 ./
$ ln -s ~/gcc-4.8.1/src/gmp-5.1.3 ./
$ ln -s ~/gcc-4.8.1/src/mpfr-3.1.2 ./
$ ln -s ~/gcc-4.8.1/src/mpc-1.0.1 ./

binutils
$ curl -O http://ftp.tsukuba.wide.ad.jp/software/binutils/releases/binutils-2.23.2.tar.bz2
$ tar xjvf binutils-2.23.2.tar.bz2
$ mkdir binutils-build
$ cd binutils-build
$ ../binutils-2.23.2/configure --prefix=/Users/uchan/i686-elf-gcc-4.8.1 --target=i686-elf
$ make -j4
$ make install
$ cd ..

GCC
$ mkdir gcc-build
$ cd gcc-build
$ ../gcc-4.8.1/configure --prefix=/Users/uchan/i686-elf-gcc-4.8.1 --target=i686-elf --enable-languages=c,c++ --without-headers
$ make -j4 all-gcc
$ make install-gcc

必要な configure オプションについては 開発環境(自作OS) - こうじのがく まとめ(自作OS、ホームページ作成) を参考にしました。
  • --without-headers : 自作 OS 開発には標準ヘッダファイルや標準ライブラリは要りませんので、これを指定しておきましょう。
make に all-gcc を指定するのが重要です。これを指定しないと make の途中でエラーが発生するかもしれません。(実際、 libstdc++ のビルドに失敗している様でした)

以上でクロスコンパイル用 GCC のインストールは完了です。やったね!

2013年10月11日金曜日

【自作OS】 Bookmarks

自作OSを作る上で参考になりそうなサイトを見つけたら追記していきます。主に個人用メモ。

起動処理,MBR

HDDの話 : CHS・LBAアドレスの話
MBR(Master Boot Recode)の構造 : MBRの何処に何が書いてあるか
Partition types : パーティションタイプのリスト

ATA in x86 RealMode (BIOS) : リアルモードでの BIOS の色々なお話。フロッピーの BPB に書かれている "Sectors per Track" や "Number of Heads" の値は「ほとんど常に間違っている」という記述に笑ってしまった(笑)
INT 13 Drive Type : BIOSは起動直後に DL レジスタにドライブ番号を格納してくれるというお話(でもこの番号は信頼性がない場合があり、MSのIPLは番号決め打ちしているという情報をいただいた)

Windows NT ブート処理とハード ディスクの制限 : MS公式サイト。Windows NT の IPL のディスク読み取り処理は BIOS int 0x13 にのみ依存することなどが書いてある

NASM

The Netwide Assembler: NASM : nasm の -f オプションに応じてビット数がデフォルトで設定されており、通常は明示的な BITS ディレクティブは必要ない。

ELF

Executable and Linkable Format - Wikipedia
ELF

リンカ ld

GNU リンカ LD の使い方
NASK環境からの解脱

building binutils

[Qemu-devel] [PATCH] configure: disable clang -Wstring-plus-int warning

メモリマップ

(AT)memorymap - OS-Wiki
Memory Map (x86) - OSDev Wiki

C++対応

C++ - OSDev Wiki

【自作OS】USBメモリからブートする

昨日あるチャットで自作OSの話題になったとき、最近のパソコンにはフロッピーが無い、USBメモリから起動できたらいいよね、という話が出ました。

気になったのでやってみました。


ブートセクタ - Wikipedia によれば、どんな起動デバイスでも BIOS は先頭 512 バイトを 0x7c00 番地に配置して実行してくれるらしい。

Hello World を表示する 512 バイトのバイナリを用意して、それを USB メモリの MBR に書き込んでしまえばいいはず。ちょうど良いことに「30日でできる! OS自作入門」の2日目3節で Hello World を表示するだけの 512 バイトのバイナリを作っていますので、これを利用することにしました。

MBR への書き込みには 【取り扱い注意】USB(メモリ)ブート関連ツール で紹介されている BOOTICE というツールを使いました。BOOTICE の画面で ProcessMBR → Restore MBR を選択し、上記の 512 バイトバイナリを選択すれば書き込めます。楽ちんだね!

壊れてもいい USB メモリを使ってくださいね!

で MBR への書き込みが完了した USB メモリをパソコンに刺して起動させれば、ほら! Hello World が出ました!