ubuntuでFirefoxビルド挑戦記 第一回 まずは開発環境導入からという名の失敗談

開発環境

  • Ubuntu10.04LTS

失敗談

どっかでFirefoxは初心者でも使えるように低スペックPCでも動作(i386系のCPUでも動くよう)するように設定されているという記事を読んだ。
それは確かにすばらしいことだけど、つまりfirefoxは設定という名の鎖に縛られて本当の最適化は行われていないということになる。
というわけで、自分のPCにあわせてビルドしてみることにした。
以下が(失敗した)手順である。

  1. apt-get source firefox
  2. apt-get build-dep firefox
  3. dpkg-devが足りないぞと怒られる
  4. apt-get install dpkg-dev
  5. tar vxjf firefox
  6. 解凍後はmozillaディレクトリに移動
  7. mozillaディレクトリ内に.mozconfigの作成
  8. make -f client.mk build でビルド実行
  9. make[1]: *** [configure] エラー 1 make: *** [/home/ユーザー名/firefox-3.6.8/mozilla/Makefile] エラー 2

とまあざっとこんな感じかな。
.mozconfigファイルの設定が甘いのとmakefileかなんかの設定もミスってそうだ。
次回はその辺をもうちょっとつめていこうかな。

Ubuntuな生活!

DesktopのOSを
Windows→Ubuntu
に変えてみた。

とりあえず、Windowsにできて、Ubuntuにできないことはないと思ってる人種なので、Windowsな環境を構築した。
デフォルトブラウザをFireFoxからGoogleChromeに変更
メーラーにThunderbirdを導入。学校のアカウントからメールを受信可能にした。
*1
そしてこの間この日記に書いたとおりミュージックプレイヤーとしてRhythmboxを使用。WindowsのMediaPlayerで取り込んだ音楽データをRhythmboxに取り込む。

Skypeもいるなあとインストール。なぜベータインストールされたしとか思ったけど気にしない。使えればそれでいいのだ!
すべてのPCのデータを一部同期させたいのでDropBox導入。

さて、ここで困ったことにぶつかる。
僕はいろんなサイトにアカウント持ってるけどパスワードは覚えていない。
すべてID Managerで管理してもらっている。
これが便利なソフトなのだ
サイトごとにパスワードを覚えてくれることはもちろんのこと、IDとパスワードの一括貼り付けや、パスワードの生成機能までついてくれてるのだ。まさになくてはならない必需品!
がしかしである。
これWindows版しか存在しない。

どうすんべとか考えていてふと閃いた。
wine使えばいいじゃん!
なぜ気がつかなかったし。

Wineと言えばWindowsソフトを無理やりlinuxで動かせる仮想ソフト(多分)

さっそく導入してみた。
[アプリケーション]→[Ubuntuソフトウェアセンター]からWineを検索してインストールする。

インストールするとあら不思議!
アプリケーションのトップにWineの項目があるではありませんか!
ID Managerを入れるべく
[アプリケーション]→[wine]→[Uninstall Wine Software]
ここで注意が必要だ!
Windows用ソフトウェアのインストールだがUninstall Wine Softwereを選択する。すると、ウィンドウが開きインストールのボタンがあるのでクリックする。そして、あらかじめダウンロードしておいたソフトを選択するのだ。これでOK!

さすがに一括張り付けのような機能は使えなかったが*2サイトのIDとパスワードさえ分かればいいのだ!

これでひとまず環境に満足した。

まあ、音楽データがバックアップから取り込んでいて最新じゃないのでもう一度Windowsを起動してやらないといけないけど、また今度でいいや。

*1:ただこの2つに関してはなぜ英語のままなのか不満

*2:おそらくWindowsAPIを使用しているのだろう

Ubunut10.04×1Rhythmbox Shift-JIS文字化け対策

環境

  • Ubuntu10.04
  • Rhythmbox0.12.8

概要

Windowsで取り込んだMP3ファイルをUbuntuのRhythmboxにインポートするとタイトル等の文字化けが発生した。それを修正するための方法をメモっておく。検索すればヒットはするけど、メモメモ。。。

1.RhythmboxにMP3ファイルをインポート
2.Rhythmboxを終了させる!
3.Ubuntuの[アプリケーション]-[アクセサリ]-[端末]を起動
4.cd /home/ユーザー名/.local/share/rhythmbox
*1
5.cp rhythmdb.xml rhythmdb.xml.org
*2
6.gedit /bin/convert_rhythmdb.pl
以下の内容をエディタで作成*3

#! /usr/bin/perl
# rhythmbox変換スクリプト

use Encode; #エンコード用のperlライブラリ?

while (<>)
{
	# <artist>の行だけ変換
	if (/<artist>/)
	{
		# Shift_JIS文字参照をバイナリに戻す
		 s/\&\#x([0-9A-Fa-f]{2});/pack 'C', hex($1)/ge;
		# UTF-8に変換
		$artist_utf = decode('Shift_JIS', $_);
		print $artist_utf;	
	}
	
	# <title>の行だけ変換
	elsif (/title/)
	{
		 s/\&\#x([0-9A-Fa-f]{2});/pack 'C', hex($1)/ge;
		$title_utf = decode('Shift_JIS', $_);
		print $title_utf;	
	}

	# <genre>の行だけ変換
	elsif (/genre/)
	{
		 s/\&\#x([0-9A-Fa-f]{2});/pack 'C', hex($1)/ge;
		$genre_utf = decode('Shift_JIS', $_);
		print $genre_utf;	
	}

	# <album>の行だけ変換
	elsif (/album/)
	{
		 s/\&\#x([0-9A-Fa-f]{2});/pack 'C', hex($1)/ge;
		$album_utf = decode('Shift_JIS', $_);
		print $album_utf;	
	}
	#他の行は変換せずに表示
	else
	{
		print;
	}
}

7.chmod +x /bin/convert_rhythmdb.pl
*4
8.cd /home/ユーザー名/.local/share/rhythmbox
9.convert_rhythmdb.pl < rhythmdb.xml.org > rhythmdb.xml
10.終了です。お疲れさまでした。

参考サイト

以下のサイトを参考にさせていただきました。ありがとうございます。記述内容に問題があればコメントください。訂正します。

*1:ライブラリのデータベースファイル(?)のあるところに移動

*2:ファイルのコピー(コピー名は何でもよい。ただし、ここの記述と違う場合は9.の項目も変えること)バックアップもとっておくとなお良い

*3:けんけんさんのソースコードです。Ubuntuフォーラムに指摘されていたミスは訂正済みです。

*4:ファイル権限の変更

OSブートの仕組み

概要

OSの起動の仕組みについて調べたのでまとめてみた*1

内容

まず、Windowsから

  • 初期段階 ハードウェアとBIOS
  • 中間段階 HDDにインストールされたプログラムがブートプロセスを進める(PC/AT互換機共通)
  • 最終段階 システム・ソフトウェアを起動(OS固有)

以下、詳細に記述

  1. 電源を入れる。
  2. マザーボード上のBIOS(Basic Input/Output System)が起動する。
  3. BIOSによるPOST(Power On Self Test)が実行される。*2
  4. 起動ディスクの発見
  5. HDDの先頭にあるMBR(Master Boot Record)を読み込む。
  6. ブートローダーによるMBR内のパーティションテーブルのスキャン
  7. ブートローダーはパーティションテーブルの情報からアクティブな基本パーティションの開始位置に記録されたブートセクターを読み込む。
  8. ブートセクタのIPL(イニシャル・プログラム・ローダー)に移る。

windows NT系の場合

  1. IPLはNTLDR(NT Loader)を読み込む。*3
  2. NTLDRが「NTDETECT.COM」を実行し、ハードウェアの互換性をチェックする。
  3. レジストリの参照・変更
  4. カーネルの「NTOSKRNL.EXE」やドライバ、各種DLLの起動
  5. Windows起動

Linuxの場合
windowsと同じく3段階に分かれる。

  • ブートローダ段階 電源ONからliloやgrubといったブートローダソフトウェアが起動
  • カーネル段階 メモリ上に読み込まれたカーネルが起動し,CPUやメモリ,周辺機器の認識や初期化を行う段階
  • /sbin/init段階 ハードウェアの初期化を終えたカーネルから処理を委ねられた/sbin/initが/etc/inittabの設定に従ってシステムの動作に必要な各種サービスを起動していく段階

以下、詳細に記述。

  1. 電源を入れる
  2. マザーボード上のBIOS起動
  3. BIOSによるハードウェアの認識・初期化(CPUやメモリ,接続されている各種拡張カードetc)
  4. HDDの先頭セクタに書き込まれたMBRの起動
  5. MBRのstage1がstage2を読み込む。
  6. 起動メニューの表示
  7. 指定されたカーネルとinitrdを読み込む。
  8. カーネルは初期化用ramdiskを読み込む。
  9. ramdiskはモジュールドライバ(SCSIアダプタやUSBコントローラに応じたドライバ,LVM構築に必要なドライバ,ext3ファイルシステム用のドライバなど)をカーネルに組み込む。
  10. CPUやメモリ,接続されている周辺機器の認識や初期化を行う*4
  11. ルートパーティションのマウント
  12. /sbin/initの起動
  13. デフォルトのランレベルを認識
  14. システムの初期化のために/etc/rc.d/rc.sysinitを起動
  15. それぞれのランレベルに応じたサービス(プロセス)を起動
  16. /sbin/mingettyを6つの仮想端末に対して実行し,コンソールからのログインを待つ
  17. /etc/X11/prefdm経由でX Window System用のディスプレイマネージャを起動

以下はほとんどwikipedia情報ままである。

POST(Power On Self Test)とは?

  1. BIOSコード自体が問題ないかチェックする。
  2. POST を実行する契機が何なのかを特定する。
  3. システムのメインメモリを探し、大きさを調べ、問題ないか検証する。
  4. 全てのフロントサイドバスとデバイスを検出し、初期化し、登録する。
  5. 必要ならば、個別のBIOS群に制御を渡す。
  6. システム設定のためのユーザインタフェースを提供する。
  7. ブート可能なデバイスを特定し、選択する。
  8. 対象OSが必要とするシステム環境があれば、それを構築する。

マザーボードによるエラー通知はPOSTによって行われる。

MBR(Master Boot Record)とは?

PC/AT互換機の場合ここの長さは512バイトで、0(先頭セクタ)〜445バイトはブートストラップローダ、446〜509バイトはパーティションテーブル、510〜511バイトはブートシグニチャがそれぞれ格納されている。MBRの512バイトの部分に書き込まれているのが「ブートローダ」と呼ばれるソフトウェアである。

ブートストラップローダとは?

  1. パーティションテーブルを4つのテーブルエントリーの先頭から検査し、起動フラグが立っている基本領域がないか探す。
  2. 起動フラグの立っている基本領域が見つかったらその領域の先頭位置をパーティションテーブルから取得する。
  3. BIOSにその位置を示してメモリにロードしてもらい、制御を受け渡す。

パーティションテーブルとは?

パーティションに関する情報を記録している。4つのエントリがあり1つあたり16バイトである。各エントリにはそのパーティションの位置情報、種類、起動フラグが記録されている。

参照

以下のサイトやブログを参考にさせていただきました。
この場を借りてお礼を申し上げます。
ありがとうございました。

  • Nobusan's Square ブートの仕組み

http://nobumasa-web.hp.infoseek.co.jp/boot/boot.html

http://ja.wikipedia.org/wiki/Power_On_Self_Test

  • Penguin's campus note OS のブートシーケンス

http://www14.plala.or.jp/campus-note/vine_linux/install/boot_sequence.html

  • IT Pro

本当に知っている?Windowsの基礎
Windowsはどうやって起動しているのか?
http://itpro.nikkeibp.co.jp/article/COLUMN/20080929/315572/

ソースコードリテラシーのススメ
第13回 起動の仕組みを読む
http://gihyo.jp/dev/serial/01/sc-literacy/0013

*1:間違えているところを見つけた方コメントくださるとうれしいです。

*2:以下、一部内容が重複している可能性あり。POSTとは?参照のこと

*3:この後、複数のOSがインストールされている場合はOS選択画面が表示される。

*4:3でも初期化してまたここでも初期化?

KCPについて

概要*1

今日TwitterのTLを見てるとandroidとKCPについての比較をしているのを目にしたので、KCPとはなんなのか調べてみた。

解説

KCPが使用される理由

KDDIがBREWを使って取り組んだ携帯向けプラットフォーム、それがKCP(KDDI Common Platform)だ。

*2
これだけでは良くわからない。

「携帯電話のソフトウェアが大規模化、高度化、複雑化している中で、商品力を上げ、リードタイム(製品化までに時間)を短くし、安くするにはどうしたらいいか。共通化する部分は共通化し、差別化する点はメーカーごとに取り組む。共通化のためのベースがKCPだ」

つまり、開発のスピードを上げ、なおかつコストを抑えるための答えがKCPである。
KDDIは各メーカごとに共通で使用可能なプラットフォームのベースを作成したのだ。

KCPを詳しく知るためにもBREWの理解は必要である。よってまずはBREWの説明から始める。

BREWとは?

BREWとは、QUALCOMM社が発表した、携帯電話向けのソフトウェア実行環境である。携帯電話間の仕様の違いを吸収し、単一のプログラムで多数の携帯電話に対応できるよう設計されている。
そして、KDDIでは、QUALCOMM社製のチップを採用している。
そのため最適化も図れるため他社のようにJavaではなくBREWが使用された。

BREWの働き

それでは、BREWにはどんな働きがあるのだろうか。

分かりやすいのはJavaのようにOSの違いを吸収する働きだろう。
携帯電話のOSは各メーカごとに異なるのでこの機能がなければ話にならない。
OSごとにアプリケーションを開発していたのでは開発効率が大幅に低下してしまう。

もうひとつは、携帯電話のハードの進歩に伴うソフトウェアの肥大化である。
Javaとは違い電話帳にアクセスする機能などフレームワークが多数存在し開発を容易にしてくれる。

このようにBREW単体でも開発のスピードを上げ、コストを下げる働きを持っている。

KCPとは?

BREWがとても便利な実行環境であることは以上でわかったと思う。では、なぜKDDIはKCPを開発する必要があったのだろうか。

それは、徹底的にユーザーの視点に立った結果である。

例えば、アプリケーション間の連携など同一データの複数呼び出しや複雑な画面遷移は素のBREWでは難しい。
KCPを用いることでこのような複雑なタスク管理が可能になったのだ。

さらにKCP+ではマルチプレイウィンドウなどの機能が追加された。
共通化部分についても強化されている。

SnapDragon(このCPU搭載のプラットフォームはKCP3.0になるらしい)

今回はauからガラケー初のSnapDragon搭載機が発売されるらしいということで対Androidという話題になっていた。
すでに複数のスマートフォンに搭載されているSnapDragonだがガラケーに搭載されることでどんな機能を実現できるようになるのだろうか。
非常に楽しみだ!

参考

  • BREWを使ったプラットフォーム「KCP」とは何か ITmedia

http://plusd.itmedia.co.jp/mobile/articles/0509/20/news032.html

  • KCP+」導入開始、マルチウィンドウやVIVID UIなどを採用

http://k-tai.impress.co.jp/cda/article/news_toppage/36740.html

  • BREW  【Binary Runtime Environment for Wireless】 IT用語辞典e-Words

http://e-words.jp/w/BREW.html

http://ja.wikipedia.org/wiki/BREW

  • ソフィア・クレイドル

http://www.s-cradle.com/developer/brew/20050328_01.html

*1:ド素人が対してリサーチもせずに書いた文章です。おおいに間違っている可能性がありますので、見つけ次第コメントしてくださると助かります。 よろしくお願いします。

*2:ITmedia http://plusd.itmedia.co.jp/mobile/articles/0509/20/news032.html

YaTeXでTeX入門!

環境

概要

YaTeXのコマンドはTeXの入力において大変便利です。
今回はその補完機能を紹介しつつTeXの入門もしてみようという内容です。

How To YaTeX!

\documentclass{jarticle}
\begin{document}
\end{document}
  • まずは、クラスファイルを入力します。これがないとレイアウトがはっきりしません。
\documentclass{jarticle}

①C-c s *1と入力
②するとミニバッファに
(C-v for view-section) \???{} (default documentclass):
と表示されるのでdocumentclassと入力*2
③Documentclass options ([opt1,opt2,...]):
と表示されるが今回はいらないので何も入力せずRet
④Documentclass (default jarticle):
と表示されるのでjarticleと入力。*3

  • 次に環境と呼ばれる区切りを入力します。*4
\begin{document}
\end{document}

⑤C-c b d*5
これでbeginとendの間の行に日本語の文章が入力可能になります。
もし、これに数式を入力したい場合は、
C-c b E
としてください。

\begin{equation}
\end{equation}

これで数式が入力可能になります。

数式記号イメージ補完

たとえば、

;<

と入力すると

\leq 

LaTeXコマンドが入力され

となります。

この数式記号イメージ補完のヘルプを参照する場合は、
ミニバッファに;を入力し、tabキーを押下してください。
これでヘルプを参照できます。

*1:section 型補完と呼ばれています。

*2:defaultの値がすでにdocumentclassならばRet

*3:これも先ほどと同じくdefaultの値が同じならRet

*4:\begin{...} \end{...}

*5:begin型補完と呼ばれています。

RSSリーダーの効率的な使い方

内容

 RSSリーダーの使い方は検索すれば山のように出ます。
 しかし、どんなふうに使えば効率よく情報を集めるツールとして使用できるかはあまりありませんでした。
 そこで、今回はRSSリーダーの効率的な使い方について書きたいと思います。

RSSリーダーの使い方

  • 登録はブログに絞る

 RSSは便利だからといって良く見るサイトをすべて登録する必要はありません。大手ニュースサイトなどは登録しなくても良いサイトです。*1
 大手ニュースサイトなどは頻繁に更新されており、あまりたまるとそれだけで読む気がなくなります。*2
 それにニュースは鮮度が命!
 古いニュースをまだ読んでないからといってあとから読む必要がありますか?
 時間がたてばたつほど、他のサイトでも見かけるようになり、同僚などとの会話中にも上がったりしてすでに得た情報になっている可能性が高くなります。
 そこで、ブログを登録するのです。
 RSSリーダーならば登録したブログの一覧だけをみれば更新されたどうかを一目で判断でき、良いブロガーほどタイトルと最初の数行に内容をまとめてくれていますので記事すべてを読む必要がなくなります。
 それに、個人が運営するブログはいつ更新されるかわからないからです。
 しかし、個人のブログにこそ宝が眠っているのです。
 また、気になるイベント情報や新商品のプレスリリースなども有益かと思われます。

 手前味噌な内容で恐縮ですが、これは大変効果的です。
 登録したブログを見る頻度で分類する方法です。
 例としては、

  1. always
  2. often
  3. sometimes
  4. never

といった風にです。
 良く見るブログは1に登録し、あまり見なくなったものからどんどん下に入れていきます。
 こうすることで、忙しいときなどは1だけを見ればよくなります。
 簡単ですが、効果的なのでぜひ試してください。

追伸

 まだ、スター機能など紹介していない機能がありますのでいずれ更新しようと思います。*4

参考

http://www.shinojapan.biz/2010/01/skill/2232.html

さらにEvernoteを使っておられる方には

http://r.nanapi.jp/1780/

*1:登録したとしても一社までがいいかと思われます。

*2:RSSリーダーを定期的に見ない筆者のような人間だけですな

*3:livedoorのリーダーにはレートというこのための機能があるそうです。

*4:自分自身使いこなしていない感がありますのでかなり間が開くことが予想されます