2013年10月27日日曜日

64bit化の利点と欠点

最近Appleの製品が64bit化したことで、64bit化についての話が盛り上がっているようです。しかし、Windowsの64bit化の際には、あまり意味がないと冷静な意見が多かったのに対して、Appleの場合は理由もなく絶賛されている気がするのですが、気のせいでしょうか?

Ubuntuも今まで32bitが奨励でしたが、Ubuntu 13.10より64bit版が奨励されるようになりました。 メモリが2GB以下の場合は32bit版を奨励するようです。

実際64bit化の恩恵は少ないと思われます。速度的にはベンチマークを見ても確かに早くはなるのですが、この種の計算が一般に使われるとは思いません。

利点

よく言われる64bit化の利点は、32bitでは最大でも4GBのメモリしか使えない問題が解決できることでしょう。最近はメモリの値段も安くなりましたし、4GBメモリの搭載ぐらいは当たり前になってきたので、64bit化も良いかと思います。 ただしiPhone5Sは1GBメモリのようで、意味はないです。

IntelのCPUの場合には、64bit化によりレジスタの数が増えているので、それも高速化に役立つようです。

その他、大きな整数値が速い利点もありますが、32bitでも 40億近い数値が扱えますので、普通は必要ないでしょう。

欠点

欠点はサイズが大きくなることでしょう。

  1. 32bit版と64bit版を両方動かすためのシステムのサイズの拡大
  2. 32bit版と64bit版を両方動かすためのアプリケーションのサイズの拡大
  3. アプリケーション自身のサイズの拡大
通常64bit版はシステム側に32bit版のアプリケーションを動作をさせるための仕組みが入っています。Fedoraでは /lib64 の他に、/libが32bit用のフォルダがありますし、Windowsも C:¥Windows¥System32の他にC:¥Windows¥SysWOW64という32bit用の動作のためのフォルダが出来ます。

アプリケーションも64bit専用のものは、32bit版では動作しないため、アプリケーションは64bit用と32bit用の2つを用意する必要があります。普通の人は64bit版や32bit版などの区別を考えたくないので、それは避けたいです。Appleではユニーバーサルバイナリと言うものがあるので、それを使うことになるかもしれません。しかし、単に2つの実行ファイルを合わせて1つに見せかけるだけなので、ファットバイナリ(サイズの大きいバイナリ)と言われています。

そして64bit用のアプリケーション自身も持つデータも一部が2倍になります。そこそこ良く使われるアドレスのデータが64bitになるのは影響が大きそうです。

たぶんAppleは今までも互換性を重要視していないので1,2の欠点克服のために32bit版はいつか捨てることにするのでしょう。きっと今回の64bit化は将来に32bitを捨てるために早めの準備をし始めただけで、しばらくは利点より欠点の方が多いと思われます。


X32 ABIの話

Linuxでは欠点の3の対策として「64bit化でのレジスタ増加による高速化は利用して、アドレスは32bit」というX32 ABIと言うものが使えるようになっています。アドレスが64bitになることで4GB以上のメモリの使用ができるのですが、そこまでメモリを使うアプリケーションは少ないと考えられるためです。しかし欠点の1に関してはさらにサイズが増えることになります。

Fedora19ではX32 ABI用を使うためのパッケージも無いようですし、カーネル
もconfigを見るとCONFIG_X86_X32=yとなっていませんでした。FedoraでX32 APIを使うにはカーネルのビルドから行う必要があり少し面倒そうです。

Ubuntuでは、X32 ABIを使用できるようになっているようです。以下のように32bit版のビルド環境をインストールすれば、X32 APIのコンパイルも出来るようになります。
$ apt-get install lib6-dev-i386

コンパイルは-mx32オプションを使用します。
$ gcc -mx32 test.c

なお、通常の64bitや、32bitのアプリケーションと作るときのオプションは-m64, -m32です。

-mx32でコンパイルした実行ファイルをlddで確認すると、/lib32x/libc.so.6が使われています。またobjdump -f で確認するとfile formatがelf32-x86-64となっているなど、32bitと64bitが混合されているような表示となっています。


追記:後藤弘茂氏によるとARM32bit命令は変態命令セットのため、「アドレス空間のメリットは3番目」とのことですが、x86のレジスタ数はARM32bitより更に少ないですし、セキュリティも指紋センサーのみにしか使えないなら、やはり64bitの利点ではないような気がする・・・

C/C++ Hello Worldと文法

C/C++の準備が終わった所で、Hello Worldを作ります。Hello Worldは一番最初に作るプログラムとしては有名で、単に Hello World と表示するだけのものです。
以下の様に入力します。

最初にhelloというディレクトリを作ってそのディレクトリに移動しています。
vimでhello.cでソースコードを書いて保存します。

hello.cの中身は以下のように書きました。


一番したの:wqは保存して終了です。
それで、gccというコマンドによって、hello.cをプログラムに変更します。この変更作業をコンパイルといい、gccのようなソフトウェアをコンパイラと言います(厳密には少し違いますが)。

プログラムの名前は、Windowsの場合、a.exeという名前になります。 Linuxの場合は、a.outという名前になります。
 ./a.exeと入力しEnterキーを押すとa.exeという名前のプログラムが実行され、 ソースコードに書いた文字が表示されます。

またhello.c内でLinuxの場合は、円マーク(¥)を記述した部分はバックスラッシュ(\)と表示されるかもしれません。

最後のlsコマンドで、a.exeとhello.cのファイルがあることが確認できると思います。

hello.cの文法について説明します。文法とはどのように記述をするか、と言うことです。この文法に従ってソースコードを書かないとgccを行ったときにエラーとなります。

#include <stdio.h>

最初に#から始まっている行は(青字で見難いですが)、C/C++言語では特殊な行でマクロと呼ばれています。先ほど、gccコマンドで実行ファイルを作成しましたが、実際には、gccコマンドでは以下が行われています。

プリプロセス → コンパイル → リンク

#で始まる行はプリプロセスによって、処理され文法もC言語本体とは異なります。
includeは意味がある単語で、分割できません。 例えば下記のようにincとludeの間にスペースを入れます。

#inc lude <stdio.h>

すると、下記のようにエラーが表示されます。エラーが表示された場合、プログラムは作成されないので、ソースコードを修正して再度コンパイルを行う必要があります。




マクロの文法を意味のある単語に分割すると以下のようになります。

単語 説明
# マクロであることを示します。
include 指定した機能を使用する事を宣言するために使います。実際に行っていることは別のC言語のファイルを取り込むだけです。
<stdio.h> stdio.hと言う名前の機能を使用することを示します。機能はOS(またはコンパイラ)が最初から用意している機能です。
自分で作った機能の場合には"myfunc.h"のように"で括ります。

改行
マクロの終了を意味します。マクロでは改行が意味を持ちます。マクロを終了したくない場合には¥(\)で繋ぎます。例えば以下のようにします。
#include ¥
<stdio.h>

この単語の間には空白文字(スペースキーで入力した文字)をどれだけ入れても問題ないです。

その他がC言語本体となります。「関数」については後述します。
単語 説明
int 次の関数main()の返り値の型を示します。C言語では省略可能で、省略するとintとみなされますが、省略しないことを奨励します。
main mainという名前の関数名で、機能を記述することを示します。
( ここから関数の引数の記述を開始すると言う意味です。
) ここで関数の引数の記述を終了すると言う意味です。
{ ここから関数の中身の記述を開始するという意味です。
printf printfというコンソールに文字列を表示する関数を実行することを意味します。stdio.hに機能が含まれています。
( ここから関数の引数の記述を開始すると言う意味です。
"Hello World¥nGood bye\n" 関数に渡す引数を記述しています。この記述はプログラムの動作とは関係ないデータで、ソースコードに直接記述するデータをリテラルといい、このダブルコーテーション(")で括ったデータは文字列のデータのため、文字列リテラルと言います。
) ここで関数の引数の記述を終了すると言う意味です。
; printfから始まった機能の記述の終了を意味します。
return main関数を次に指定された値で終了することを意味します。
0 返り値を示します。この記述はプログラムの動作とは関係ないデータで、ソースコードに直接記述するデータをリテラルといい、数値だけのデータは数値リテラルと言います。
; returnから始まった機能の記述の終了を意味します。
} ここで関数の中身の記述を終了すると言う意味です。
これらの単語の間には空白類文字(スペース、改行、タブ)をどれだけ入れても問題ないです。マクロは空白のみで、C言語部分は改行やタブもOKです。単語の大文字小文字は区別するのでreturnをReturnなどと記述するとコンパイルできません。

文字列リテラルについてもう少し詳しく話します。リテラル内の¥文字は特殊な意味を持ち、¥nは改行を意味します。円マーク自体を表示したい場合は¥¥と2つ繋げて文字列リテラル内に書くと1つの¥が表示されます。文字列リテラル内で改行は出来ません。長い文字を分割したい場合は、一旦ダブルコーテーション"で終了し、改行してから再度ダブルコーテーション(")で記述します。

以下はNGです。

        printf("Hello World¥n
                Good bye¥n");

以下はOKです。
        printf("Hello World¥n"
              "Good bye¥n");


main()やprintf()は関数と呼び、データを扱って処理を行う機能のひと塊を指定します。関数はデータを受け取り、処理をして、データを返します。

このプログラムではmain()の機能を自分で作って、すでにあるprintf()の機能を使用しています。main()ではデータの受け取りはしていませんが、0を返しています。printf()では、 "Hello World¥nGood bye\n"のデータを受け渡しています。返り値も戻ってきていますが、その返り値に対して何もしていません。

main()は少し特殊な関数でプログラムが実行されると一番最初に呼ばれる関数です。main()関数の返り値はコンソール上で以下の様にechoコマンドで表示することができます。

$ echo $?

文法に関してはとりあえず以上です。最初の頃は機能の終了を示すセミコロン(;)を入力し忘れやすいかもしれません。 色々なところに改行や空白を入れたり、終了を意味する記述を削除したりして、コンパイルを試すと文法について詳しく解ってくると思います。

2013年10月20日日曜日

json-c

設定ファイル等のデータ形式として色々と考えられますが、JSONがなかなか良いのではないかと思います。ECMA標準にもなったようです。独断と偏見でデータ形式の利点、欠点をまとめてみました。

データ形式 利点と欠点
バイナリファイル 構造体をそのまま入力すれば読み込み速度は速いし、プログラミングは楽。内容をあまり見せたくない場合には、見にくく編集もしにくいので良い。エンディアンやアライメントの違いなどCPUやコンパイラによって互換性に問題が生じることがある。またデータのバージョンアップ等で間にデータを挿入すると互換性がなくなる。
csv Microsoft Excelで簡単に作ることができる。読み込みのプログラミングも比較的楽。ただしフォーマットが曖昧。通常は小数点がドット(.)で、区切りがカンマ(,)だが、例えばドイツ語版Excelだと小数点がカンマ(,)になり、区切りがセミコロン(;)になるので注意。その他、ダブルコーテーション(")の扱いなど不明点が多い。
INI Windowsの場合、Win32APIを使用すればプログラミングが楽。階層構造が2弾(セクションとキー)しかなく、また配列の表現が出来ないため、複雑な表現はできない。
XML 汎用性が高く、表現力が高い。XPathやXSLやXML SchemaなどXMLを元にした仕様も充実している。仕様が複雑で仕様通りの読み込みのプログラムを完全に自作するのは難しい。しかしライブラリが多くあり、ツールも多い。汎用性が高すぎるために、XMLを元にしたフォーマット(スキーマ)を良い物にするにはそれなりの知識が必要。また冗長性が高いため、データサイズが大きくなる。
JSON 配列や連想配列などのプログラミングで必要な型をそのまま表現できるのが便利。仕様が非常にシンプルで、読み込みのプログラムも比較的簡単に作成できる。

JSONは読み込みのプログラミングが簡単と書きましたが、動的な文字列や連想配列を扱う言語でないと少し厄介かもしれません。やはりライブラリがあれば便利です。

C言語でいくつかライブラリがありますが、 Fedoraではインストーラの段階でjson-cとjson-glibが入っていました。中でもjson-cは依存関係が少なくWindowsでも使用できるなど使い勝手が良さそうなので使ってみました。

json-cの開発環境は以下でインストールできます。

$ sudo yum install json-c-devel

テストプログラムは以下です。jsontest.jsonを読み込み、表示するだけのプログラムですが、これだけの関数が使えれば読み込みは十分だと思われます。

jsontest.c

#include <stdio.h>
#include <json/json.h>

int json_print(json_object *obj)
{
        json_type jt;
        int len, i;
        
        jt = json_object_get_type(obj);
        switch(jt) {
        case json_type_null:
                printf("null\n");
                break;
        case json_type_boolean:
                if (json_object_get_boolean(obj)) {
                        printf("true\n");
                } else {
                        printf("false\n");
                }
                break;
        case json_type_double:
                printf("%f\n", json_object_get_double(obj));
                break;
        case json_type_int:
                printf("%d\n", json_object_get_int(obj));
                break;
        case json_type_object:
                {
                        struct json_object_iterator je, ji;
                        json_object *jo;
                        const char *key;

                        ji = json_object_iter_begin(obj);
                        je = json_object_iter_end(obj);
                        printf("{\n");
                        while (!json_object_iter_equal(&ji, &je)) {
                                key = json_object_iter_peek_name(&ji);
                                printf("%s:\n", key);
                                jo = json_object_object_get(obj, key);
                                json_print(jo);
                                json_object_iter_next(&ji);
                        }
                        printf("}\n");
                }
                break;
        case json_type_array:
                len = json_object_array_length(obj);
                printf("[\n");
                for (i = 0; i < len; i++) {
                        json_object *jo;
                        jo = json_object_array_get_idx(obj, i);
                        json_print(jo);
                }
                printf("]\n");
                break;
        case json_type_string:
                printf("\"%s\"\n", json_object_get_string(obj));
                break;
        default:
                return 1;
        }
        return 0;
}


int main()
{
        json_object *jo;

        jo = json_object_from_file("jsontest.json");
        json_print(jo);
        json_object_put(jo);

        return 0;
} 

コンパイル時にはlibjson-cをリンクします。
$ gcc jsontest.c -ljson-c

注意点は以下です。
  • json_objectは参照カウンタでメモリ管理されているので、使用後にjson_object_put()でメモリを解放する必要がある。
  • json_object_array_get_idx()等の関数で得たjson_objectは参照カウンタをカウントアップしない。元のjson_objectを削除すると参照できなくなる。また得られたjson_objectをjson_object_put()すると元のデータも変更され、その部分が削除される。必要な場合はjson_object_get()でカウントアップする。
  • エラーをあまり返さない。エラー時にNULLを返すため、エラーでNULLなのか、データ自体が無くNULLなのかの判断がしにくい。
  • 文字列の文字コードはutf-8。

C/C++準備(テキストエディタ)

プログラムの作り方は、まずはテキスト形式のファイルにソースコードを書きます。そしてそのテキスト形式のファイルを、C/C++コンパイラというソフトで実行形式のファイルに変換する事で出来ます。

テキスト形式のファイルとは最も単純な形式のファイルで、文字の情報だけで出来ています。例えばWordなどのワープロの形式だと文字のフォントやサイズや色など 指定できますが、テキスト形式ではフォントやサイズや色の情報を持つことはできません。そのテキスト形式のファイルを作成・編集するのが、テキストエディタと呼ばれるものです。

テキストエディタには様々なソフトがあります。Windowsには「メモ帳」というテキストエディタが最初からあります。UNIX系ではviとemacsが有名なテキストエディタです。Fedoraではgeditが最初から使えると思います。フリーソフトもたくさんありますので、好みのを使うと良いです。それなりの機能のエディタであれば、プログラムを色付けして表示をするなど、メモ帳よりは便利な機能を持っています。

ここでは、コマンドラインで使うことを考えてvi(vim)をオススメします。使い方が特殊で少し難しいですが、UNIX系ではだいたい使えるので少しでも覚えておくと便利です。


vimのセットアップ

WindowsのMinGWでは開発環境の準備の時にすでにvimがインストールされています。下記を行うことで、使うのが便利になります。
$ cp /usr/share/vim/vim73/vimrc_example.vim ~/.vimrc

FedoraやUbuntuは最初からviがありますが、下記で高機能バージョンのvimをインストールできます。

Fedoraの場合
$ sudo yum install vim-enhanced

Ubuntuの場合
$ sudo apt-get update 
$ sudo apt-get install vim


ファイルの作成・編集

test.cというファイル名のファイルを作成・編集するには、コマンドプロンプトで以下を実行します。
$ vim test.c

vi(vim)ではコマンドモードと入力モードがあります。入力モードでは文字の入力ができ、コマンドモードでは、コピーなどの操作が出来ます。起動時はコマンドモードになっていますので、入力するにはまず入力モードにするiをキー入力して入力モードにします。コマンドモードに戻るにはEscをキー入力します。

コマンドモードでは以下ぐらいを知っておけば、大体の編集はできるかと思います。

コマンド 説明
i カーソルの位置から入力する。入力モードになる。
:w [ファイル名] 編集内容を指定したファイル名で名前を付けて保存する。ファイル名を省略した場合は上書き保存。
:wq 編集内容を保存して終了する。
:q! 編集内容を破棄して終了する。
[数値]yy カーソル位置から数値の行分バッファにコピーする。例えば5yyと入力すると5行コピーする。viではヤンクと言う。数値を省略するとカーソル行のみコピーする。
[数値]dd カーソル位置から数値の行分削除する。数値を省略するとカーソル行のみ削除する。削除された内容はバッファにコピーされる。
[数値]v ビジュアルモードに以降する。カーソルを移動して、範囲を選択してyでコピー、dで削除となる。
p yyやddコマンドでバッファに保存された内容をカーソル位置に貼り付ける。
u アンドゥ。1つ前の編集内容に戻す。
[数値]G 数値の行にカーソルを移動する。例えば10Gとキー入力すると10行目に移動する。数値を省略すると最終行に移動する。
/[文字列] 指定した文字列を検索して、その位置にカーソルを移動する。
?[文字列] 指定した文字列を前方向に検索して、その位置にカーソルを移動する。
n /や?コマンドで検索した文字列で次の位置に移動する。
N /や?コマンドで検索した文字列で前の位置に移動する。
:%s/[検索文字列]/[置換文字列]/gc [検索文字列]を[置換文字列]に置換する。最後の/gcのgには全ての検索文字列の意味であり、gがなければ最初に見つかった文字列のみ置換する。cは確認を求めるかどうかで、cが無いと確認なしで置換する。

他にも色々なコマンドがあります。慣れると便利なところもありますが、最初は面食らうかもしれません。 特にWindowsを使用している方で、どうしてもvimは使いにくいと言う方は、以下のようにすれば、メモ帳で編集できます。
$ notepad test.c

サクラエディタなどのフリーソフトのエディタも良いかと思います。


2013年10月15日火曜日

C/C++の準備(コマンドライン)

最近は統合開発環境といってGUI操作で色々としてくれるソフトもあるのですが、敢えてコマンドライン(CUI)環境で説明します。コマンドラインの方が説明が楽というのと、コマンドラインを知っていて損は無いからです。

Linuxを使用している方はほとんど問題ないと思います。WindowsでMinGWをインストールした方は、まずはC:¥MinGW¥msys¥1.0のmsys.batを実行してください。MINGW32:~というタイトル名のウィンドウが開きます。

$はコマンドプロンプトで、その後ろにカーソルが点滅して表示されていると思います。ここで、キーボードでコマンドを入力することで、PCに対して操作をすることができます。例えばpwdと入力して、Enterキーを押すと、"/home/ユーザー名"が表示されると思います。pwdはカレントディレクトリ(今いるディレクトリ)を表示するコマンドです。

コマンドの後ろにスペースをあけてファイル名などのコマンドライン引数を指定できます。コマンドは、まずはファイルやディレクトリの表示や操作をする以下を知っておけば問題ないと思います。

コマンド 説明
ls Listの略。ファイルの一覧を表示する。
mkdir ディレクトリ名 Make Directoryの略。指定した名前のディレクトリ(フォルダとも言う)を作成する。
cd ディレクトリ名 Change Directoryの略。カレントディレクトリを指定したディレクトリに移動する。
rmdir ディレクトリ名 Remove Directoryの略。指定したディレクトリを削除する。削除するディレクトリ内にファイルがあるとエラーとなる
rm ファイル名 Removeの略。指定したファイルを削除する。
cp 元ファイル名 新ファイル名 Copyの略。元ファイル名のファイルを複製して新ファイル名のファイルを作成します。
mv 元ファイル名 新ファイル名 Moveの略。ファイル名を元ファイル名から新ファイル名に変更します。(フォルダ名も出来ます)


Fedora20のsyslog

Fedora20では、syslogを外してリリースされるとのことです。systemdのjournal機能を使用するためとのことです。実際にFedora20Alpha版のLiveイメージで確認した所、psでsyslogdは見つからなかったです。その他にも/var/log/messagesも無かったですし、/run/systemd/journal/syslogも無かったです。

今まで、以下のようにloggerでログを書き込んだときには、

$ logger -it "test" "message"

下記のようにして確認をしていました。

$ tail -f /var/log/messages

これが、journalを使用することで以下のように確認することになります。

$ journalctl -f

なお、Fedora19でもすでに、journalはすでに使用されていて、syslogはjournalからログを転送されていただけのようです。そのため、Fedora19でもjournalctlは使用できます。
journalについては、arch linuxのwikiが参考になります。

C/C++の準備(開発環境のインストール)

Linuxの場合は、プログラミングの準備も簡単にできます。

Fedoraの場合

$ sudo yum groupinstall "Development Tools"

Ubuntuの場合

$ sudo apt-get update 
$ sudo apt-get install build-essential


Windowsの場合は、Microsoft製のVisual Studioなど色々とありますが、MinGWをオススメします。以下の理由からです。
  • Linuxに近いこともできるし、Windowsのプログラミングも出来る
  • C++11など新しい規格への対応が良い
  • 個人情報の入力が必要ない

欠点は以下です。
  • インストーラがベータ版で、インストールが難しい
  • ライセンスがGPLのため、作成したプログラムの配布に注意が必要 
  • コマンドラインベース

MinGWはここからダウンロードできます。左のNavigationの欄にDownloadsがありますが、ここをクリックすると、ダウンロードのページに行きます。"Download mingw-get-setup.exe"とありますので、ダウンロードして実行すると、インストーラが起動します。

インストーラは、"Install"と"Continue"を続けて行くと完了します。インストールが完了すると"MinGW Installation Manager"と言うものが起動します。


mingw-developper-toolkit, mingw32-base, mingw32-gcc-g++, msys-baseの左側の□をクリックすると出るメニューで"Mark for Installation"を選択して、メインメニューの"Installation"の"Apply Changes"を選択して"Apply"を行ってください。エラーが表示されることがありますが、気にしないでください。

 次にメモ帳を開いて、以下のような中身にして、C:¥MinGW¥msys¥1.0¥etc¥fstabとして保存してください。ファイル名がfstab.txtとなってしまったら名前の変更をして、拡張子を削除してください。

C:¥MinGW /mingw

C:¥MinGW¥msys¥1.0に、msys.batというファイルがあるので、それをクリックすると、MinGWの環境が起動します。

このままだとまだコンパイルが出来ないので、この画面でコマンドライン入力することで、インストールを続けます。($はプロンプトを意味していて入力の必要は無いです)

$ mingw-get install mingw32-binutils mingw32-gmp mingw32-mpc mingw32-mpfr
$ mingw-get install mingw32-mingwrt mingw32-pthreads-w32 mingw32-w32api 

これでMinGWのインストール完了です。


2013年10月14日月曜日

Fedoraでのlhaとunzip

Fedoraを使用していて困ることで、lhaやzipの扱いがあります。lhaやzipはWindowsで作られるとファイル名の文字コードがShiftJISで組み込まれるのですが、Fedora標準ではutf-8で解釈するため、文字化けしてしまいます。

そこで、ShiftJISに対応したlhaやunzipがあります。憩いの場 で、野良レポジトリが公開されていたのですが、残念ながらFedora18までしか公開されていません。

そこで、憩いの場 からいただいたソースを使って自分でrpmを作ります。ビルドし直すだけです。(そのままFedora18のを使っても問題ないと思いますが)
$ wget http://download.opensuse.org/repositories/home:/sawaa/Fedora_18/src/lha-1.14i-2.ac20050924p1.fc18.ikoi1.src.rpm
$ rpmbuild --rebuild lha-1.14i-2.ac20050924p1.fc18.ikoi1.src.rpm
$ sudo rpm -ivh ~/rpmbuild/RPMS/x86_64/lha-1.14i-2.ac20050924p1.fc19.ikoi1.x86_64.rpm

unzipの場合も同様ですが、色々と注意点があります。
$ wget http://download.opensuse.org/repositories/home:/sawaa/Fedora_18/src/unzip-6.0-7.fc18_5.52_ja1.1.src.rpm
$ rpmbuild --rebuild unzip-6.0-7.fc18_5.52_ja1.1.src.rpm
$ sudo rpm -e --nodeps unzip
$ sudo rpm -ivh ~/rpmbuild/RPMS/x86_64/unzip-6.0-6.fc19_5.52_ja1.1.x86_64.rpm

まず、元々入っているunzipを--nodepsオプションで強制アンインストールする必要があります。 また、Fedora19では、unzipのバージョンが、6.0.10と上がっているので、少し古くなってしまいます。 自動アップデートされないようにするには、/etc/yum.confにexclude=unzip*を加えます。

unzipのバージョンが変えられるようには、これから勉強します・・・

2013年10月6日日曜日

Fedora20

Fedoraの次のバージョン、Fedora20は計画通りいけば、2013年12月3日に新しいバージョンのFedora20が出ることになります。いつもどんどん遅れていくのですけど年末には出て欲しいところです。

http://fedoraproject.org/wiki/Releases/20/Schedule

Fedora20のコードネームは「ハイゼンバグ」。「ハイゼンベルグの不確定性原理」をもじったもので、環境によって出たり出なかったりする不確定なバグの事です。この手のバグはデバッグが難しくて厄介なのですよね。なんとなく不吉なコードネームです。

Gnome3.10(リリースノート) が含まれる予定で、Waylandの実験的なサポートが楽しみなところです。

Btrfsはどうなったのだろう?

FedoraとGnome3

私はPCは自作のデスクトップPCを使用しています。OSはFedoraを使用しています。LinuxというとUbutuを使用している人が多いと思いますが、Linuxを使い始めたのがFedoraだったのと、64bitOSを使いたかったこと(当時は64bit化はFedoraの方が進んでいた)などから今もFedoraを使っています。

本当はプログラミングの勉強のためなどに使いたいところですが、もっぱら普段のWeb閲覧等の普通の使い方ばかりです。ブログをきっかけに勉強を始めていけたらいいな・・・

デスクトップ環境はデフォルトのまま、Gnome3を使用しています。Gnome3は、評判悪いみたいですが、私は気に入っています。
他にもFeroraやGnome3が好きな人がいるといいのですが・・・

はじめまして

ブログを開始!パソコン、Linux、プログラミングが好きなので、その関係で色々と書いていきたいと思う。まだどうなるかわからないけど