2014年1月26日日曜日

プロセスとスレッドの話

1.プロセスとは?


WindowsやLinux等のOSでは、ワープロやブラウザなどのアプリケーションを実行するとプロセスというものを作ってその中でアプリケーションを動かします。

コンピュータの仕組みをざっくり話すと、CPU(処理実行)、メモリ(データ記憶)、I/O(外部入出力)の3つで出来ていますが、 このCPUとメモリの部分を仮想的に作ったものがプロセスです。

なんとなくのプロセスのイメージです

実際のCPUとメモリは、複数の仮想的なCPUとメモリを切り替えながら動作させることになります。この複数の仮想的なCPUとメモリはそれぞれは完全に分離されています。その事からプロセスには以下の利点があります。
  1. 分離された環境でプログラムを動かせば良いのでプログラミングが楽。
  2. メモリが分離されているので、他のアプリケーションから干渉を受けず、セキュリティに強い。
最近はセキュリティが大きく取り上げられることも多く、Chromeなどのブラウザでは1つのアプリケーションに見えても、タブごとに複数のプロセスが作るなどの工夫がされています。

2.WindowsとLinuxのプロセス生成の違い


WindowsとLinux(正確にはUNIX系)ではプロセス生成の仕方が少しだけ違っています。Windows(Win32 API)では以下のようにCreateProcess関数でプロセスを作成します。引数の詳細の説明は省きますが、notepad.exe(メモ帳です)のようにアプリケーションを指定してプロセスを作成します。

#include <windows.h>
#include <tchar.h>

int main()
{
        STARTUPINFO si;
        PROCESS_INFORMATION pi;
        BOOL r;

        ZeroMemory(&si, sizeof(si));
        si.cb = sizeof(si);
        r = CreateProcess(_T("C:¥¥Windows¥¥System32¥¥notepad.exe"), NULL,
                                NULL, NULL,
                                FALSE,
                                0,
                                NULL,
                                NULL,
                                si, &pi);
        if (r) {
                MessageBox(0, _T("CreateProcess Success!"), _T("Test"), MB_OK);
                CloseHandle(pi.hThread);
                CloseHandle(pi.hProcess);
        }
        return 0;
}

これに対してLinux(UNIX系)では以下のようにfork関数とexec関数の2つを使用します。fork関数の時点でプロセスが作られますが、ここでは自分自身のコピーのプロセスを作成します。新しく作成したプロセスかどうかは返り値で判断できます。そして、exec系関数(execl, execlpなど色々とある)で指定されたアプリケーション(ここではgedit、GNOMEでのメモ帳みたいなソフト)に置き換えをします。

#include <unistd.h>
#include <stdio.h>
#include <signal.h>

int main()
{
        pid_t pid;

        pid = fork();
        if (pid == 0) {
                execlp("gedit", "gedit", NULL);
        } else if (pid != -1) {
                struct sigaction act;

                printf("create process success!\n");
                act.sa_handler = SIG_IGN;
                act.sa_flags = 0;
                sigemptyset(&act.sa_mask);
                sigaction(SIGCHLD, &act, NULL);
        }
        return 0;
}

一旦プロセスのコピーをするので無駄な処理を行っているように見えますが、以下のような利点もあります。
  1. 別の実行ファイルを作らなくても複数プロセスが作成できる。
  2. 同じようなプロセスを複数作りたいときにコピーが簡単に作成できる。
また、プロセスのコピーといってもCOW(Copy On Write)という方式を使っており、ほとんどオーバーヘッドはありません。

なかなか利用法がないように思えますが、Androidにおいては、主要なライブラリのみ読み込んだプロセスを作っておいて、そのプロセスをforkすることで、高速に新しいプロセスを作成できるようになっています(通常はプロセスを作ってからライブラリを読み込みます)。そのためJavaであってもアプリケーションの起動が速いです。

3.スレッドとは?


プロセスはCPUとメモリを仮想的に作成したものでしたが、メモリ部分だけは共通にCPU部分だけを分けたい事があります。この場合に使われるのがスレッドです。

例えば、長い処理をウィンドウの処理内で行うと、ウィンドウ管理システムが応答が無いとの警告を出す場合があります。こういうとき、長い処理はスレッドで行い、ウィンドウ処理では「お待ちください」 というメッセージと共にプログレスバーを表示するなどで使われます。

以下のような利点があります。
  1. プロセスだとメモリが分離しているため、データのやりとりのプログラミングが難しいし、データのやりとりの速度が遅い。
  2. プロセス(CPUとメモリ)を切り替えるより、スレッド(CPU)のみ切り替えたほうが速度が早い。

4.WindowsとLinuxでのスレッドの違い


使い方などはほとんど同じですが、WindowsとLinuxでは、実装で少し違いがあります。

Windowsでは、スレッドはプロセスの中に在るものというようなイメージになっています。CreateProcess関数の例でもプロセスを作るとスレッドも同時にできるので、CloseHandle関数でスレッドとプロセスの両方を解放しています。

Linuxでは、スレッドは軽量プロセスというような意味合いになっており、メモリを共有したプロセスのように扱われています。実際プロセスの作成のfork関数もスレッド作成の関数も内部的にはclone関数が呼ばれており、プロセスとスレッドの差が小さいです。

スレッドのイメージ。Windowsが左側、Linuxが右側

5.マルチCPUと並行処理


最近のコンピュータでは、単体のCPUの速度向上が頭打ちになってきました。そこで、複数のCPUを搭載して処理速度をあげようとしています。

そのため、プロセスやスレッドの利用目的として、速度向上の役割ができてきました。1つの事でも複数で同時に並行処理をすることで、処理速度をあげます。しかし1つの事を同時に複数に行うには

並行処理の方法には大きく以下の3つの方法があります。
  1. データ並列化
  2. タスク並列化
  3. パイプライン並列化
 例えば、千羽鶴を多人数で作成することを想定します。折り紙がデータとなります。

データ並列化は1人が何枚ずつ折り紙を折るかに分けて作業する方法です。1人ごとの折り紙の量を間違うと全体として完了は遅くなります。

タスク並列化は、折り紙を一箇所に置いておき、 それを皆が一枚づつ取っていき鶴を折ります。一箇所に折り紙が置いてあるので、取るとき手がぶつかる可能性があり、それを避ける仕組みが必要です。

パイプライン並列化は流れ作業です。1人ずつ半分に折る担当、羽を折る担当などの作業の担当を分け、次の作業へと渡していきます。時間がかかる担当の場所があると、そこで折り紙がたまってしまう事になります。

秀和システムより「マルチコアCPUのための並列プログラミング―並列処理&マルチスレッド入門」が出ていますが、上記の並列についてWindows、Linuxについてのソースコードも含め、書かれているので参考になると思います。

少し内容が古くなっており、WindowsVista以降に入った条件変数のAPIについて書かれていないなどがありますが、異種混合CPUや、OpenMPなどのライブラリについても書かれており、入門には良いのではないかと思います。


6.プロセスとスレッドとメモリの関係と実験


並列で高速化する際に難しいのがメモリの扱い方です。 CPUからメモリに書き込みをする際に同時に書き込みをしないようにする排他制御が必要です。例え、データ並列化の場合にソフトウェア的にソースコードでは排他制御が必要ないとしても、ハードウェア的にはCPUとメモリの間のキャッシュがあり、データをある程度まとまった固まりで扱おうとするため、その事も考慮する必要があると思われます。その点では元々メモリが分かれているプロセスの方がスレッドよりはプログラミングの考慮は少なく済むかもしれません。

スレッドにおいて以下のようなプログラムで実験をしてみました。

#include <stdio .h>
#include <stdlib .h>
#include <memory .h>
#include <pthread .h>

#define MEMSIZE (1024L * 1024L * 1024L)

void mem_init(void *mem)
{
        int *p;
        long i;

        p = (int *)mem;
        for (i = 0; i < MEMSIZE; i++) {
                *p = 0;
                p++;
        }
}

void mem_init1_1(void *mem)
{
        int *p;
        long i;

        p = (int *)mem;
        for (i = 0; i < MEMSIZE / 2; i++) {
                *p = 0;
                p+= 2;
        }
}

void mem_init1_2(void *mem)
{
        int *p;
        long i;

        p = (int *)mem + 1;
        for (i = 0; i < MEMSIZE / 2; i++) {
                *p = 0;
                p += 2;
        }
}

void mem_init2_1(void *mem)
{
        int *p;
        long i;

        p = (int *)mem;
        for (i = 0; i < MEMSIZE / 2; i++) {
                *p = 0;
                p++;
        }
}

void mem_init2_2(void *mem)
{
        int *p;
        long i;

        p = (int *)mem + MEMSIZE / 2;
        for (i = 0; i < MEMSIZE / 2; i++) {
                *p = 0;
                p++;
        }
}

int main(int argc, char *argv[])
{
        int *mem;
        int proc = 0;
        pthread_t pth;

        if (argc > 1) {
                proc = atoi(argv[1]);
        }
        mem = (int *)malloc(MEMSIZE * sizeof(int));
        if (mem == NULL) {
                printf("malloc error\n");
                return 1;
        }
        switch (proc) {
        case 0:
                mem_init(mem);
                break;
        case 1:
                pthread_create(&pth, NULL, (void *)mem_init1_1, mem);
                mem_init1_2(mem);
                pthread_join(pth, NULL);
                break;
        case 2:
                pthread_create(&pth, NULL, (void *)mem_init2_1, mem);
                mem_init2_2(mem);
                pthread_join(pth, NULL);
                break;
        defalut:
                break;
        }
        free(mem);
        return 0;
}

単なる大量のメモリの初期化のプログラムです。引数が0番はスレッドを使わないもの。1番はキャッシュが効かないようにと作ったもの。2番はキャッシュが効くように作ったものです。sched_setaffinity関数でCPU指定をしていませんが、1番と2番はCPUを別に使っていました。

速度比較の結果は、user timeが0番は0.350s程度、1番が0.500s程度、2番が0.375s程度で、速度順は 0 > 2 > 1 でした。初期化程度ではスレッドなど他のオーバーヘッドなどの方が大きく、あまり意味のないテストだったかもしれませんが、1番が一番遅い結果となりました。マルチCPUの処理は思ったように速度をあげるのが難しいのは確かです。

2014年1月19日日曜日

Fedora 20 と Nexus 5 を使用して Andoridアプリ開発準備

Nexus 5は使うだけでも良い端末ですけど、元々はNexusシリーズはリファレンスモデルと呼ばれ、開発用の意味合いが大きい機種です。Androidは誰でも簡単にアプリ開発ができることも利点の1つですし、開発に使わないと勿体無いです。

そこで、開発の準備です。これから書く内容は以下を参考にしています。

Fedora 20でのAndroidアプリ開発環境の準備


まずは関連モジュールのインストールをインストールします。java-1.7.0-openjdkは最初から入っていると思われます。また64bitの場合には以下のように32bitのモジュールをインストールする必要があります。

$ sudo yum install glibc.i686 glibc-devel.i686 libstdc++.i686 
$ sudo yum install zlib-devel.i686 ncurses-devel.i686 
$ sudo yum install libX11-devel.i686 libXrender.i686 libXrandr.i686

次にAndroidの開発環境を以下からダウンロードします。「ADT Bundle」の方が開発環境が英語になると言う問題はあるものの、とりあえず始めるには楽です。



以下の手順を行えばインストールは完了です。
  • 上記の中から、adt-bundle-linux-x86_64-20131030.zipをダウンロードします。
  • ダウンロードしたzipファイルを自分のホームディレクトリに解凍し、~/AndroidSDKに名前を変更します。 
  • 自分のホームディレクトリにある.bash_profileファイルに、パス環境変数として、~/AndroidSDKを追加します。例えば、以下のようにします。
    PATH=$PATH:$HOME/AndroidSDK/sdk/tools
    export PATH
    
    # For SDK version r_08 and higher, also add this for adb:
    PATH=$PATH:$HOME/AndroidSDK/sdk/platform-tools
    export PATH
    
  • ログアウトして再ログインし、パスの変更を適用します。

参考にWindowsでのAndroidアプリ開発環境の準備


実際に私が行っていないのですが、Windowsでの開発準備もJDKをインストールする以外は同様です。ここが参考になると思います。


Eclipseの起動と画面の説明


端末上で、以下のようにして開発環境であるeclipseを起動します。

$ ~/AndroidSDK/eclipse/eclipse

起動をすると、以下のような画面になっています。ツールバーのボタン等を覚えておくと良いです。




Androidプロジェクトの作成


Androidプロジェクトは作成するAndroidアプリのためのソースコードを構成する全てのファイルを含んでいます。デフォルトのプロジェクトのディレクトリやファイルを使って簡単に新しいAndroidプロジェクトを始めることができます。

  1. ツールバー上のNew(一番左)のボタンをクリックします。
  2. 表示されたウィンドウで、Androidフォルダー内のAndroid Application Projectを選択し、Nextをクリックします。
  3. 表示されたフォームに書き込みをします。
    • Application Nameは、ユーザーに表示されるアプリの名前です。このプロジェクトでは"My First App"とします。
    • Project Nameは、プロジェクトのディレクトリの名前でEclipse上で使われる名前です。
    • Packege Nameは、アプリのパッケージの名前空間名です。JAVAプログラミング言語のルールで唯一の名前を名前をつけるための組織名です。このプロジェクトでは、とりあえす"com.example"のネームスペースを使用します。
    • Minimum Required SDKは、アプリがサポートする最も低いAndroidのバージョンを指定します。今回はデフォルトのままとします。
    • Target SDKは、アプリをテストした最も高いAndroidのバージョンを指定します。Nexus5でテストするので4.4で良いです
    • Compile Withは、アプリをコンパイルするバージョンを指定します。SDK Mangerで古いバージョンを追加しなければ、最新のバージョンのみしか入っていません。
    • Themeは、アプリに適用するAndroidのUIスタイルを指定します。そのままで良いです。
  4. 次の画面で、プロジェクトの設定をしますが、そのままの選択でNextをクリックしてください。
  5. 次の画面は、アプリのアイコンの作成を手伝います。画面解像度に合わせて作成します。通常はデザインガイドに合うように作成する必要がありますが、とりあえず最初のままでNextをクリックします。
  6. ここで、作るアプリのアクティビティ(アプリの1つの画面のこと)のテンプレートを選択します。このプロジェクトではBlankActivityを選択してNextを押してください。
  7. アクティビティの詳細は全てデフォルトでFinishをクリックしてください。

いくつかデフォルトファイルからAndroidプロジェクトが作成され、アプリを作る用意が完了します。


エミュレータでアプリの実行をしてみる


PC上のAndroidのエミュレータでアプリの動作を確認することができます。まずは、どのような端末でエミュレートするかAVD(Android Virtual Device)を作成する必要があります。

  1. ツールバーからAndroid Virtual Device Managerを起動し、Device Definitionsのタブを選択します。
  2. 残念ながらNexus 5が無いので、Nexus 4 by Googleを選択して、Create AVDボタンを押します。
  3. OKボタンでNexus4のエミュレータが出来ます。
  4. Android Virtual Device Managerを「Esc」キーを押して終了します。

先ほど作成したAndroidプロジェクトを実行します。

  1. ツールバーのRunボタンからアプリを実行します。
  2. Run As のウィンドウが表示されたら、Android Application を選択してOKをクリックします。

エミュレータが起動して(非常に時間がかかります)、ロックを解除すると、以下のようにアプリケーションが実行されています。



Nexus 5 でアプリの実行をしてみる


Androidのエミュレータは残念ながら非常に遅いです。Windowsであれば、Intel x86 Emulateor Accelerator(HXAM)を使用する方法もあるのですが、Linuxでは使用できません。Neuxs 5等のデバイスを使うのが一番良いです。

まずは、Nexus5側で開発の準備をします。

  1. 設定端末情報を開き、ビルド番号を7回タップします。
  2. そして設定画面に戻ると開発者向けオプションが表示されるので、タップします。
  3. USBデバッグにチェックを入れます。

後はPCとNexus 5 をUSB接続し、同様にRunボタンで実行します。以下のようにNexus5に表示されます。


これで、Androidアプリを作成するための準備は完了です。後はAndroidプロジェクトを自分が作りたいアプリに変更していきます。

2014年1月18日土曜日

Ferora 21 はどうなる?


Feroda 21について以下の発表がありました

「2014年、Fedora は名前を持たないリリースを1度だけ公開する ― だが、心配には及ばない」
  • 今までは一年に2回のリリースだったが、2014年は8月に1回のみ。
  • コードネームは無し。 
 心配には及ばないと言いますが、人気はそれほど無いですし、やはり心配です。Linuxはカーネルの更新が1年に4回、Gnomeは1年に2回という更新頻度を考えると、Feroraの最新を使用するという利点が無くなるのが残念です。

コードネームも「Beefy Miracle(肉たっぷりの奇跡)」、「Spherical Cow(球形の牛)」、「Schrodinger's Cat(シュレディンガーの猫)」、「Heisenbug(不確定なバグ)」と、面白いものが多かっただけに残念です。

一応「むしろ飛躍するだろう」を信じたいと思います。最近の話題としてはDELL Vanue Pro 8 での動作報告が嬉しいところです。ただし、タッチができない、Windows8と共存できない、など問題は多いみたいですが。

個人的に今後のFedoraに期待する所は以下です。
  • Btrfsのファイルシステムがデフォルトになり、HDD(SSD)の更なる高速化、安全化。
  • X11からWaylandへの置き換えで、描画の高速化、タッチ操作への対応強化。
  • タッチ関係のドライバの充実で、タブレット端末への対応。
  • タブレット端末へのインストールを簡単にできる方法。
やはりこれからは個人用途としては、タブレット端末が主流になっていくと思われます。Ubuntuも同様にその方面を目指していますが、個人的な好みではUnityよりGnome3が好きです。より使いやすいLinuxを目指して頑張って欲しいです。

ただ、Red Hat Enterpriseのテスト版という位置づけをより強化するとなると、個人用途でなくサーバー用途になるので、方向性は変わってしまいそうです。これから、どうなっていくのでしょうか。

2014年1月13日月曜日

Nexus5 + DTI Serversman SIM LTE + IP-Phone SMART で安く電話

Nexus5DTI ServersMan SIM LTE で節約する件について前に書きました。今度は電話を安くすませる方法として、Nexus5でIP電話サービスを設定してみました。

使用したのはFUSION COMUNICATIONSのFUSION IP-Phone SMARTです。特徴としては以下があります。
  1. スマホ同士の電話が無料
  2. 月額利用料が無料(初期費用も無料)
  3. 固定電話・携帯電話へ電話が掛けられる(有料)
LINEやICQなどのサービスでも 1番や2番は出来るのですが、3番は無理です。また3番ができるIP電話サービスとしては050plusが有名ですし、DTIもServersman 050というサービスを行っていますが月額315円となっています。Skypeでも3番を行うには固定電話では月額130円、携帯電話では月額400円が必要です。その代わり、IP-Phone SMARTはその代わり電話を掛けたときの値段が高いですが、滅多に電話しないのであれば、IP-Phone SMARTは非常に良い選択肢だと思います。

申し込み方法はIP-Phone SMARTのサイトから申し込みをするだけです。非常に簡単で、しかも登録後1時間で使用できるようになるなど、速いです。

  1. メールアドレスを送ると、そのメールアドレスに 本登録のためのURLが送られてきますので、開きます。
  2. その本登録において、パスワード、住所、氏名、クレジット番号等を入力すれば、登録完了です。
  3. IP-Phone SMART Login Page にてメールアドレス、パスワードでログインすると、アカウント情報(電話番号を含む)や使用料金を見ることができます。
  4. アカウント情報をNexus5に設定します。
Nexus5(KitKat Android4.4)では、最初から入っている標準の電話でIP電話を使用することができますので、その設定をします。

まずは、電話のアイコンをタップすると以下の画面になります。



ここで右下の縦点3つのメニューアイコンをタップするとメニューがでます。


「設定」をタップすると設定の画面になります。



「通話設定」をタップすると通話設定の画面になります。

下の方にスクロールすると「インターネット通話の設定」の欄がありますので、「アカウント」をタップします。


「着信を許可」にチェックを入れ、下の方の「アカウントを追加」をタップすると、SIPアカウントの詳細の画面になります。



ここでIP-Phone SMART Login Pageに表示されている「SIPアカウント」を「ユーザー名」に、「SIPアカウントパスワード」を「パスワード」に、「ドメイン」を「サーバー」に設定し、「メインアカウントに設定」にチェックを入れ、「保存」をタップし終了します。

また、通話設定の画面に戻ってから、「インターネット通話を使用」をタップします。
 

Serversman SIM LTEを使ってIP電話のみ使うのであれば、「データネットワーク接続時はすべての通話」で良いかと思います。

これで後は普通に電話をかけることができます。

Serversman SIM LTEは通信速度が150kbpsと遅く、どこまで使用できるか不安でしたが、少し引っかかることがある程度で問題なく使うことができました。時間帯などにもよるかもしれません。

電話をかけなければ無料なので、緊急用に入れておくのも良いかと思います(IP電話は110等に掛けられないですけど)。

※Skypeは固定電話・携帯電話に電話を掛けられないと当初書いていましたが、間違いのため、修正しました。

2014年1月12日日曜日

MinGW + MSYS でLLVM 3.4

LLVM 3.4が出ました。LLVM(clang)はgccに比べてコンパイルが早い、エラー表示が分かりやすい、C++の新しい規格C++1y(C++14)への対応が早い、など利点が多く、注目されています。

LLVM 3.3まではWindowsでの動かし方が難しかったのですが、LLVM 3.4からはWindowsのインストーラが追加されているので、MinGWでの動作を試してみました。(MinGWのインストール方法はこちら

まずは、LLVMのダウンロードのページから、Clang for Windowsをダウンロードして実行します。



MinGW上で使うのであれば、インストール先フォルダをC:¥MinGWにすると良いと思われます。残りの部分は「次へ」で進んでいけばインストール完了です。

注意点として、LLVM 3.4のインストーラでは、標準のincludeフォルダが固定となっており、MinGWのincludeフォルダを見に行くようなので、MinGWをデフォルトのC:¥MinGW以外にインストールした場合には、コンパイルがうまく行かない可能性があります。

今回のバイナリはWindows Vista以降にしか対応していないようなので、WindowsXPで動かすために少し細工しました。clang.exe等の実行ファイルにおいて、Vista(バージョン6)以降でないと動かないようになっていたので、バイナリエディタで少しいじって下記のアドレス0x000130以降の"06 00 00 00 00 00 00 - 06 00 00 00"となっていたところを、 "05 00 00 00 00 00 00 - 05 00 00 00"と書きなおしています。clang++.exe等も同様に変更します。


 これで、hello worldのプログラム等をコンパイルして実行することができます。


しかし、clang++.exeを使用して、C++のプログラムをコンパイルして実行すると、libstdc++-6.dllで落ちてしまいます。どうもLLVMと現在(gcc-4.8.1)のlibstdc++は相性が悪いようです。そこで、gcc-4.6.2のlibstdc++-6.dllをダウンロードして、それを実行ファイルと同じ場所に置いて実行したところ、問題なく動作しました。

Fedora 20では"sudo yum install clang" で、LLVMのインストールは簡単ですが、まだバージョン3.3です。

2014年1月5日日曜日

新規HDDにFedora20のインストール その2

前回で、基本的なインストールは終わりましたが、私は他にも色々なソフトをいれています。それについて紹介です。

まずは、いくつかRPMを入れています。

RPM Fusion freehttp://rpmfusion.org/RPMをダウンロード
RPM Fusion nonfreehttp://rpmfusion.org/RPMをダウンロード
Flash Playerhttp://get.adobe.com/jp/flashplayer/Linux用YUM(YUM)を選択してダウンロード
Google Chromehttp://www.google.co.jp/intl/ja/chrome/browser/64bit.rpmを選択してダウンロード
VirtualBoxhttps://www.virtualbox.org/wiki/Linux_DownloadsFedora18用を選択してダウンロード


ダウンロード時に実行をすれば、インストールされると思います。コマンド入力でインストールする場合には、例えば以下のようにrpmコマンドで-ivhオプションをつけてrpmを指定するとインストールできます。

% sudo rpm -ivh rpmfusion-free-release-20.noarch.rpm


Google ChromeとVirtualBoxは、いくつかのモジュールを別途インストールする必要があります。コマンド入力で行う場合には、自分でそれらをインストールした後にrpmコマンドを行う必要があります。

Linuxで仮想化というとKVMが一番良いのでしょうが、Windowsの動作が遅いのでVirtualBoxを使用しています。

RPM Fusionというのは、フリーソフトウェアでないソフトや、フリーソフトウェアでも国の事情などで、特許関係に問題のありそうなソフトウェアをインストールできるようにするものです。例えばvlcなどのソフトウェアがあります。

RPM Fusion, Flash PlayerのRPMをインストールできたら、yumを使用して使用するソフトウェアをインストールします。私の場合、以下のような簡単なシェルスクリプトinst.shを用意して、それを実行しています。

#!/bin/sh

#google chrome
sudo yum -y install redhat-lsb libXScrnSaver

#VirtualBox
sudo yum -y install libpng15

#unzip
sudo yum -y install bzip2-devel

#android
sudo yum -y install glibc.i686 glibc-devel.i686 libstdc++.i686 zlib-devel.i686 ncurses-devel.i686 libX11-devel.i686 libXrender.i686 libXrandr.i686

sudo yum -y install gnome-tweak-tool easytag vim jd thunderbird unrar
sudo yum -y install vlc gstreamer* ibus-mozc k3b


以下のように実行して、各ソフトをインストールします。

% sh inst.sh

gnome-teak-toolはGnome Shell をより便利に使用するため。easytagは、MP3のタグ編集に使います。vimはテキストエディタ。 jdは2chビューア。thunderbirdはメールソフト。unrarはrarファイルの解凍ソフト。vlcはDVDを見るためです (vlcでDVDを見るためにはrpmをもう少しインストールする必要があるのですが、最近は何かと法律で禁止されているので、説明はやめます)。 gstreamer*はビデオや音楽のコーデック。ibus-mozcはGoogle日本語入力のフリー版です。 k3bはCDやDVDを焼くために使用します(たまにBraseroがうまく動かないため)。

また、LHAとunzipのShiftJIS対応版を入れます

前回に書きましたが、私は新規のHDDにインストールした後に、昔(Fedora19)のHDDを接続し、昔のHDDの/homeディレクトリのパーティションがsdb5であり、testと言う名前のユーザーの場合、以下のようにしてユーザー環境をコピーしています。 これを行う際には別のユーザーを作って別のユーザーでログインして行ったほうが良いです。

% sudo su
# cd /mnt
# mkdir F19
# mount /dev/sdb5 F19
# cd F19
# cp -a test ~test

一部に設定が必要ですが、だいたい以上で終了です。

2014年1月4日土曜日

Nexus5 のケース

Nexus5は壊れやすいという話も聞くので、ケースを買いました。いくら薄くて軽くてもケースが必要だとせっかくのデザインが台無しですし、本当は裸派なのですが・・・。もっと丈夫なスマートフォンが出来て欲しいものです。

選んだのは、「Spigen Google Nexus5 ケース ウルトラ フィット シェル ECO-Friendly Packaging」と言うケースです


選択の理由は以下です。
  • なるべく元のデザインを変えない
  • 写真写りが良かった
ケースというと、レイ・アウトさんも有名ですが、サイトはケースの写真だけで、実際に使用した場合の写真が無いのが残念です。やはり画像は重要です。

実際に使った感じは悪くないです。前面の保護フィルムもきれいに貼れ、視認性や操作性も特に悪くなった気はしません。

ただし、ツルツルの手触りになってしまったのは残念です。それとストラップホールは欲しかった・・・