ラベル IT関連 の投稿を表示しています。 すべての投稿を表示
ラベル IT関連 の投稿を表示しています。 すべての投稿を表示

2011年8月7日日曜日

MacOSのコピー&ペーストのショートカットキーを変える

WindowsとMacでは、コピー&ペーストのショートカットキーが違います。
Windowsだと、コピーはCtrl+C、ペーストはCtrl+V
MacOSだと、コピーはcommand+C、ベースとはcommand+V

commandの位置が微妙な点を考えると、MacOSでも、コピーはCtrl+C、ペーストはCtrl+Vにしたいものです。

便利なアプリがありました。”KeyRemap4MacBook”です。
http://pqrs.org/macosx/keyremap4macbook/index.html.ja

インストールして再起動すると、システム環境設定にKeyRemap4MacBookのアイコンがあらわれます。

%2525E3%252582%2525B9%2525E3%252582%2525AF%2525E3%252583%2525AA%2525E3%252583%2525BC%2525E3%252583%2525B3%2525E3%252582%2525B7%2525E3%252583%2525A7%2525E3%252583%252583%2525E3%252583%2525882011-08-0717.28.32-2011-08-7-17-57.png

選択すると、下の画面が表示されます。

%2525E3%252582%2525B9%2525E3%252582%2525AF%2525E3%252583%2525AA%2525E3%252583%2525BC%2525E3%252583%2525B3%2525E3%252582%2525B7%2525E3%252583%2525A7%2525E3%252583%252583%2525E3%252583%2525882011-08-0718.04.32-2011-08-7-17-57.png

下の画面のように、Change Keyタブの”For PC Users” の下にあるCopy/Pasteのショートカットの設定にチェックします。(ここでは、ターミナルやEmacsでは、Ctrl+Cでのコピーを無効にしています。)

%2525E3%252582%2525B9%2525E3%252582%2525AF%2525E3%252583%2525AA%2525E3%252583%2525BC%2525E3%252583%2525B3%2525E3%252582%2525B7%2525E3%252583%2525A7%2525E3%252583%252583%2525E3%252583%2525882011-08-0718.07.04-2011-08-7-17-57.png

Ctrl+A(全て選択)やCtrl+Z(取り消し)にもチェックをいれておきました。

%2525E3%252582%2525B9%2525E3%252582%2525AF%2525E3%252583%2525AA%2525E3%252583%2525BC%2525E3%252583%2525B3%2525E3%252582%2525B7%2525E3%252583%2525A7%2525E3%252583%252583%2525E3%252583%2525882011-08-0718.13.17-2011-08-7-17-57.png

Windows用キーボードでMacOSを操作する

Microsoftのワイヤレスキーボードを買いました。

RIMG0278-2011-08-7-17-11.JPG

Windowsでは問題なく使えますが、これでMacOSも動かせるのかな?
MacOSに接続してみます。案の定、Windows用のキーボードだとMacOSで思い通りの操作ができません。

ここでネックになっているのは、Macキーボードのスペースの隣にある”英数”と”かな”に対応するものがWindowsキーボードにないことです。

RIMG0280-2011-08-7-17-11.JPG

解決してくれるフリーソフトがありました。”PCKeyboardHack” です。
http://pqrs.org/macosx/keyremap4macbook/extra.html.ja

Macにインストールして再起動すると、システム環境設定に”PCKeyboardHack” のアイコンが現れます

%2525E3%252582%2525B9%2525E3%252582%2525AF%2525E3%252583%2525AA%2525E3%252583%2525BC%2525E3%252583%2525B3%2525E3%252582%2525B7%2525E3%252583%2525A7%2525E3%252583%252583%2525E3%252583%2525882011-08-0717.28.32-2011-08-7-17-11.png

選択すると、下の画面が立ち上がります。
有効にしたい設定にチェックを入れます。必要に応じてキーボードの変更をします。

%2525E3%252582%2525B9%2525E3%252582%2525AF%2525E3%252583%2525AA%2525E3%252583%2525BC%2525E3%252583%2525B3%2525E3%252582%2525B7%2525E3%252583%2525A7%2525E3%252583%252583%2525E3%252583%2525882011-08-0717.32.37-2011-08-7-17-11.png

上記の設定で下記のことをしています。
・Windowsキーボードだと”a”の左側に”Caps Lock” があります。これを”Ctrl”に割り当て
・Windowsキーボードのスペース左側にある”無変換”を、Macの”英数”に割り当て
・Windowsキーボードのスペース右側にある”変数”と”ひらがな”を、Macの”かな”に割り当て

2011年8月6日土曜日

サクラエディタで開こう ~設定~

Windowsで作業するときに使うエディタは何を使っているでしょうか。
メモ帳で十分という人もいれば、秀丸を使っているという人もいるでしょう。
僕が一番気に入っているエディタは、サクラエディタです。
http://sakura-editor.sourceforge.net/download.html

インストールは上のURLから最新版をダウンロード (例:sinst1-6-6-0.exe) して行います。
インストールに聞かれる内容はデフォルトのまま次に進めれば良いです。

ここからが本題の”サクラエディタで開こう”です。
Windowsだとデフォルトはメモ帳が入っています。
何かテキストを開こうとしても、ダブルクリックではメモ帳で開かれます。
サクラエディタで開くためには、右クリック>プログラムから開く>サクラエディタ を選択する必要があります。

では、ダブルクリックでサクラエディタを使うためにはどうすれば良いでしょうか。
これから説明します。
1. スタート>すべてのプログラム>サクラエディタ>関連づけツール を開きます

WS000002-2011-08-6-12-37.JPG

2. ダイアログを開き、この拡張子だとサクラエディタで開いて欲しいってものを選択します
(ここでは、.txtの拡張子を選択しています)

picture3-2011-08-6-12-37.JPG

3. “標準(ファイルをダブルクリック)でSakura Editor で開く” にチェックを入れておきます。

WS000003-2011-08-6-12-37.JPG

これで、.txtの拡張子のファイルの場合、ダブルクリックをしてサクラエディタで開く設定に変更されました。

WinShotが便利すぎる

スクリーンショット機能の話です。

MaxOSだと、下のキーでスクリーンショットでき、デスクトップで自動保存してくれます。
“command” + “shift” + “3” ⇒ 画面全体のスクリーンショット
“command” + “shift” + “4” + “Space” ⇒ カメラアイコンが現れ、Activeなウィンドウをスクリーンショット

Windowsだと、自動保存されないので、めんどくさいことになります。
1. キーボードのPrtScnで画面全体のコピー
2. “ペイント” を立ち上げ、張り付け
3. 保存

MacOSのように自動保存までしくれないものか?WinShotがあるんです。
http://www.woodybells.com/winshot.html

使い方を説明します。
1. http://www.woodybells.com/winshot.html からセットアップ版をインストールします。
2. 右下にWinShotのアイコンが現れるので、右クリック > JPEG保存 > アクティブウィンドウで スクリーンショットできます。(デフォルトでは、C:¥Program File¥WinShotの下に保存されます)

picture1-2011-08-6-11-50.jpg

デスクトップにpictureフォルダを作って、そこにスクリーンショットを自動保存してほかったので、設定を変えます。

3. 同じく右下のWinShotアイコンを右クリック>環境設定を選択します
4. ファイル自動保存で保存先を、デスクトップ¥picture にします

picture2-2011-08-6-11-50.JPG

とても便利です。

2011年8月1日月曜日

MacでisoイメージをCD/DVDに焼く

isoイメージは、CD-R/DVD-Rに普通にコピーするだけでは機能しません。
isoイメージを書き込むことのできる専用のソフトを使います。

Macでは、isoをCD/DVDに焼くツールが標準でインストールされています。
「ディスクユーティリティ.app」です。

1. 焼きたいisoを適当なディレクトリに置いておく
2. CD-RもしくはDVD-Rを用意して、PCにセットする
3. アプリケーション>ユーティリティ>ディスクユーティリティ.appを起動
4. CD/DVDが表示されているので、選択状態にした上、ディスクを作成をクリック

%2525E3%252582%2525B9%2525E3%252582%2525AF%2525E3%252583%2525AA%2525E3%252583%2525BC%2525E3%252583%2525B3%2525E3%252582%2525B7%2525E3%252583%2525A7%2525E3%252583%252583%2525E3%252583%2525882011-08-011.30.01-2011-08-1-01-15.png

5. 焼きたいisoイメージを選択状態にして、ディスクを作成をクリック

%2525E3%252582%2525B9%2525E3%252582%2525AF%2525E3%252583%2525AA%2525E3%252583%2525BC%2525E3%252583%2525B3%2525E3%252582%2525B7%2525E3%252583%2525A7%2525E3%252583%252583%2525E3%252583%2525882011-08-011.32.24-2011-08-1-01-15.png

これで完成です。
あとは、ディスクユーテリティ.appが自動的に、isoイメージをCD/DVDに焼いてくれます。

2011年6月27日月曜日

Cookieを利用して訪問数とユーザ名を取得

前回、Cookieを利用して訪問数を表示 で、訪問数のデータをCookieを利用して表示しました。
今回は、訪問数+ユーザ情報をCookieを利用して表示するページを作ってみました。

ここでのユーザ情報は、クライアント側で入力したユーザの名前とします。
Cookieを利用して、訪問数+ユーザ情報を表示

コードです。

<html>
<head>
<meta http-equiv="content-type" content="text/html;                         
                charset=UTF-8"
/>
<title>Cookie Test</title>
<script type="text/javascript">
<!--
function getCookie(key){
        var tmp1 = document.cookie + ";";
        var index1 = tmp1.indexOf(key, 0);
        if(tmp1 != -1){
                tmp1 = tmp1.substring(index1, tmp1.length);
                var index2 = tmp1.indexOf("=", 0) + 1;
                var index3 = tmp1.indexOf(";", index2);
                return unescape(tmp1.substring(index2, index3));
        }
        return ("");
}

function setCookie(key, val){
        var tmp1 = key + "=" + escape(val) + "; ";
        document.cookie = tmp1;
}

var access1 = getCookie("Access");
if(access1 == ""){
        access1 = 0;
}

document.write("<h2>訪問回数</h2>");

var name = getCookie("Name");
if(name == ""){
        inputName();
}

setCookie("Access", ++access1);
setCookie("Name", name);

document.write(name + "さん、" + access1 + " 回目の訪問です");

function inputName(){
        name = prompt("名前を入力してください", "user");
        if(name == null){
                inputName()
        }
}

//-->
</script>
</head>
</html>


前回の Cookieを利用して訪問数を表示 を利用して複数のデータが持てるように書き換えただけです。

2011年6月23日木曜日

Cookieを利用して訪問数を表示

Cookieは、Cookieとは で説明したとおり、WebページにアクセスしたユーザのPCに、個別データを一定期間書き込む仕組みです。

Cookieの機能を使用して、訪問数を表示してみました。
JavaScript + Cookie で訪問数を表示


<html>
<head>
<meta http-equiv="content-type" content="text/html;                                            
                charset=UTF-8"
/>
<title>Cookie Test</title>

<script type="text/javascript">
<!--
str = "count_now";

function getCookie(){
        var tmp = document.cookie;
        var index1 = tmp.indexOf("=", 0) + 1;
        var count = unescape(tmp.substring(index1));
     
        if(count == ""){
                count = 1;
        }
        return count;     
}

function setCookie(val){
        document.cookie = str + "=" + escape(++val);
}

var access = getCookie();
setCookie(access);

document.write("<h2>訪問回数</h2>");
document.write(access + " 回目の訪問です ");
//-->
</script>
</head>
</body>
</html>



■Cookieの読み込み
function getCookie(){
        var tmp = document.cookie;
        var index1 = tmp.indexOf("=", 0) + 1;
        var count = unescape(tmp.substring(index1));
     
        if(count == ""){
                count = 1;
        }
        return count;     
}

JavaScriptを使ってCookieの値を読み込むには、document.cookie を使います。
上の処理は、書き込まれたCookieに対して、訪問数(count)の値だけ抜きとって返す、ことをやっています。

■Cookieの書き込み
function setCookie(val){
        document.cookie = str + "=" + escape(++val);
}

Cookieを書き込むには、下記の書式で行います。
document.cookie = “name = 値; expire=値; domain=値; path=値; secure”;


■気になった事(時間があるときに調べる)

*ローカルでのテストで、FireFoxとChromeの動きが違っていました。
FireFoxだと、Web上にアップロードしていなくてもCookieの値の書き込みができていました。
Chromeだと、その状態では、Cookieの値が1から増えませんでした。
書き込みがうまくいっていないみたいでした。

htmlファイルをWeb上にアップロードすると、どちらも正しい動きをしています。
設定の問題?


*訪問数(count)の数を抜き出す作業にeval()関数を使ってたのですが、Chromeだとものすごく重かったです。
調べてみると、eval()関数の危険性についてのサイトが結構ありました。
http://www.atmarkit.co.jp/fcoding/articles/webapp/05/webapp05b.html
http://d.hatena.ne.jp/snaka72/20090617/1245247514

2011年6月20日月曜日

Cookieとは

Cookieの仕組みを説明します。
Webサーバが、アクセスしてきた人(クライアント)のPCにテキスト形式の情報(Cookie)を保存します。
そうすることで、Webサーバはクライアントが接続したときに、前回Webサーバが保存したCookieを読み込み、個人を特定することが可能になります。
(ここでの特定とは、名前や住所といった個人情報ではありません。)
もし、WebサーバがCookieを読み込めなかったら初めてサイトにアクセスしてきた人と判断します。

インターネットを使っていれば、掲示板や会員制サイトでID・PWを入力してログインすることがあります。
しかし、一度ログインしておけば、ID・PWを毎回入力しなくてもログインできるサイトがあることは、何となくご存知でしょう。

この仕組みにはCookieが使われています。
サイトを訪問すると、私たちのPC(クライアント)にサイトのログイン情報(Cookie)が自動的に保存されます。
Webサーバは、Cookieを読み込んで、ログイン情報を確認してID・PWの入力ステップをとばすことができます。


■Cookieの危険性
『インターネットカフェでの会員制のアクセスは、そのPCにCookie情報が残るから危険』
PCを使っている人ならば、誰でも聞いたことがあるのではないでしょうか。

事実です。
クッキー情報が残っていれば、次使う人がそのサイトにアクセスしたときに自動的にログインされます。

ショッピングサイト・オンライン銀行といった他人にログインされて困るサイトは、自分専用のPC・携帯からアクセスするようにしましょう。

公共のPCでどうしても会員制サイトにアクセスしなければなれない場面があるかもしれません。
(そんな場面に出くわしたことがないから、具体例が出ないけど・・・)
そういう時は、使い終わったら必ずログアウトしておきましょう。
そうすることで、自動ログインは防ぐことができます。


■Cookieの確認
どのブラウザからもCookieの情報を確認することができます。

FireFox (MacOS)
FireFox>環境設定>プライバシー>”Cookieを個別に削除”
を選択

Crome (MacOS)
Chrome>環境設定>高度な設定>プライバシーの”コンテンツの設定”>”すべてのCookieとサイトデータ”
を選択


■最後に
Cookieのおかげで、毎回同じ情報を登録する煩わしさから解放されます。
CookieがOFFになっていると、認証が必要なサイトが利用できなかったりもします。

Cookieはもはや必要不可欠なものになりつつあります。
セキュリティとして問題があるから、Cookieなんて排除しろ、と考える人がいるかもしれません。
そんな考えはナンセンスです。

インターネットを扱うならば、常にセキュリティを意識しておかなければなりません。
悪用される危険性を理解し、対策をすることが大切ではないでしょうか。
今一度、ブラウザになされている設定を確認してみては。

Cookieとセキュリティの関係が詳しく書かれています
http://secure.blog.ocn.ne.jp/column/2009/06/post_9305.html


参考)
http://eazyfox.homelinux.org/security/Security18.html
http://www.tohoho-web.com/wwwcook.htm

2011年2月14日月曜日

PythonでDiffie-Hellman鍵交換

PythonとDiffie-Hellman鍵交換を学んだので、実装してみよう。
共通鍵の値が同じになるってことを確認するだけのコードですが。

細かいところはあまり気にせず実装したので、大きな数だとオーバーフローするし、負数はエラーが出ます。

Diffie_Hellman.py

#encoding: utf8

'''素数Xと整数Yは共通認識である'''
def dh_algorithm():
        # もうあらかじめ値を決めておこう。
        print "共有情報として、素数 X = 113, 素数 Y = 2 があります"
        Prime_X = 113
        Prime_Y = 2

        # Aさんがランダムに選んだ数p と Bさんがランダムに選んだ数q
        random_p = int(raw_input("Aさんの乱数を入力してください : "))
        random_q = int(raw_input("Bさんの乱数を入力してください : "))

        # Aさんの公開値Pを求める
        P = create_publicKey(Prime_X, Prime_Y, random_p)
        print "\nAさんの公開値P : %d" % P
     
        # Bさんの公開値Qを求める
        Q = create_publicKey(Prime_X, Prime_Y, random_q)
        print "Bさんの公開値Q : %d" % Q
     
        # Aさんの共通鍵の値は、Bさんから送られてきた公開値を使って
        A_Z = create_commonKey(Prime_X, Q, random_p)
        print "Aさんの共有値A_Z : %d" % A_Z
     
        # Bさんの共通鍵の値は、Aさんから送られてきた公開値を使って
        B_Z = create_commonKey(Prime_X, P, random_q)
        print "Bさんの共有地B_Z : %d \n" % B_Z
     
        if(A_Z == B_Z):
                print "作成した共通鍵の値は同じです。\n"
        else:
                print "作成した共通鍵の値は等しくありません。\n"
     
      
def create_publicKey(prime_X, prime_Y, random):
        '''共有情報である素数Xと素数Yと、自身で定義した乱数Zで、公開値Pを作成する'''
        P = pow(prime_Y, random, prime_X)
        return P
                                     
             
def create_commonKey(prime, publicKey, random):
        '''共有情報である素数と、相手の公開値と、自身で定義した乱数と、 を使って、共通鍵Zの値を生成する'''
        Z = pow(publicKey, random, prime)
     
        return Z
                


ターミナルで実行しました。

%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%882011-02-1423.18.15-2011-02-14-23-00.png

実際は、サーバーとのやり取りだから、もっと複雑なんだろうけど、共通鍵の値が同じになることを確かめました。

それにしても、暗号鍵理論って面白いな、って思う今日このごろ。


『始めてのコンピューターサイエンス』第03章 演習問題

練習問題
(1) 次の式が、それぞれどのような値を返すでしょうか

>>> 'Comp' 'Sci'
'CompSci'
>>> 'Computer' + ' Science'
'Computer Science'
>>> 'H2O' * 3
'H2OH2OH2O'
>>> 'CO2' * 0
''



(2) 適当なクォートとエスケープシーケンスを使って、Python 文字列として表現してください

>>> print 'They\'ll hibernate during the winter.'
They'll hibernate during the winter.
>>> print '"Absolutely not," he said.'
"Absolutely not," he said.
>>> print '"He said, \'Absolutely not,\'" recalled Mel.'
"He said, 'Absolutely not,'" recalled Mel.
>>> print 'hydrogen sulfide'
hydrogen sulfide
>>> print "left" + "\\" + "right"
left\right



(3) トリプルクォートではなく、シングルクォートかダブルクォートを使って次の文字列を書き直す
‘’’A
B
C’’’


>>> print "'''A\nB\nC'''"
'''A
B
C'''



(4) 組み込み関数の len を使って、空文字列の長さを調べて下さい
>>> len("")
0



(5) それぞれ数を参照するメッセージをx, y変数を使って表現しなさい

>>> x = 3
>>> y = 12.5
>>> print "The rabit is %d." % x
The rabit is 3.
>>> print "The rabit is %d years old." % x
The rabit is 3 years old.
>>> print "%d is average." % y
12 is average.
>>> print y, " is average."
12.5 is average.
>>> print y, "*", x
12.5 * 3
>>> print y, "*", x, "=", x * y
12.5 * 3 = 37.5



(6)以下の出力を得るためには、どのような書式文字列を使えば良いか?
a) “ “ % 34.5 => “34.50”
b) “ “ % 34.5 => “3.45e+01”
c) “ “ % 8 => “0008”
d) “ “ % 8 => “8 “

>>> "%.2f" %34.5
'34.50'
>>> "%.2e" %34.5
'3.45e+01'
>>> "%04d" % 8
'0008'
>>> "%d " % 8
'8 '



(7) raw_inputを使ってユーザーに数値の入力を促し、入力された数値をfloat型のnum変数に格納して、numを表示してください。

>>> string = raw_input()
3.4
>>> num = float(string)
>>> num
3.3999999999999999

なんでだろ?文字列をfloat型に変換すると、何かが起きている。また調べてみよう。



(8) Pythonで2つの文字列を隣り合わせで入力すると、Pythonは自動的に2つの文字列を連続します。

しかし、同じ文字列を変数に格納してから変数を横に並べると、構文エラーになります。(以下参照)
Pythonがこれを認めないのは、なぜだと思いますか?

>>> 'abc' 'def'
'abcdef'
>>> left = 'abc'
>>> right = 'def'
>>> left right
File "<stdin>", line 1
left right
^
SyntaxError: invalid syntax

<見解>
”変数に格納する”だからです。”right”,”left” は変数を格納する箱だと思えばいいです。箱は、どのように扱われるべきかを示さないといけない、といった方が人間にとって都合が良いと思います。
>>> right
'def'
>>> left
'abc'
>>> left = right
>>> left
'def'
>>> left = 'abc'
>>> left + right
'abcdef'



(9) 文字列に負数を掛け合わせときに、空文字列を返すのではなく、エラーを起こすべきだと考えている人々がいます。彼らがそのように考える理由を説明しなさい。また自分なりの意見を説明しなさい。

>>> s = 'Taichi Shindo'
>>> s * (-1)
''

<見解>
文字列に(-1)を掛けて、空文字列が返ってくる。どういうことが内部で行われているのかがよく分からないです。その内部で起こっていることが人間にとって理解できないものなら、エラーで返す方が都合がいいです。


2011年2月12日土曜日

『始めてのコンピューターサイエンス』第2章 演習問題

Pythonを勉強し始めたものの、どうアウトプットすれば良いのだろうか....

『始めてのコンピューターサイエンス』に演習問題が載っていたので、自分なりの解答を導くことにしてみました。

練習問題
(1) 次の式は、それぞれどのような値を返すでしょうか。Python に式を入力して答えを確かめてください。
>>> 9 - 3
6
>>> 8 * 2.5
20.0
>>> 9 / 2
4
>>> 9 / -2
-5
>>> 9 % 2
1
>>> 9 % -2
-1
>>> -9 % 2
1
>>> 9 / -2.0
-4.5
>>> 4 + 3 * 5
19
>>> (4 + 3) * 5
35


(2) 単項のマイナスは、数値の符号を反転させます。同じように単項のプラスもあります。たとえば、Python は +5 の意味を理解しいます。x が -17 という値を持つとき、+x はどのような値を持つべきだと思いますか。符号には手をつけない方がよいのでしょうか。それとも絶対値関数と同じように、マイナス符号を取り除くべきでしょうか。Python シェルを使って、Python のふるまいを確かめてください。
>>> def f(x):
... return +(x)
...
>>> f(-17)
-17
<見解>
+について考えさせられた。僕たちは初等教育で、”+ (-17)” => “(+1) * (-17)” と考えるように教えつけられている。つまり、”- (-17)” => “(-1) * (-17)” で数値の符号が反転する。そういう考えで良いと思う。


(3) a. 新しい変数tempを作り、値24を代入してください
b. tempの値に1.8をかけ、32を加えて、摂氏から華氏に編案してください。
そして、計算結果の値をtempに代入してください。

>>> temp = 24
>>> temp = temp * 1.8 + 32
>>> temp
75.200000000000003


(4) a. 新しい変数 x を作り、値10.5を代入してください
b. 新しい変数 y を作り、値4を代入してください
c. x とy の合計を計算し、結果をxに代入してください

>>> x = 10.5
>>> y = 4
>>> x = x + y
>>> x
14.5
>>> y
4


(5) xの値が3の場合、 x += x - x という文をPythonが評価するときに起きることを箇条書きにして説明してください。
<見解>
・新しい変数xを作り、値3を代入
・x - x を評価する (結果は0)
・上で評価した値をxに加算する
>>> x = 3
>>> x += x - x
>>> x
3


(6) 関数名を付けるときの自分の考えを述べなさい
<見解>
例:convert_fahrenheit_to_celsius
カ氏温度をセ氏温度に変換する際の関数名。僕は、動詞を関数名の頭文字に持ってくるほうが、具体的に何を表す関数名かがすぐに理解できるので、そうするようにしています。


(7) アメリカでは、1ガロンあたりのマイル数で車の燃費を測ります。しかし、メートル法では、100kmあたりのリットル数で計算されるのが普通です。
  1. 1ガロン当たりのマイル数から100km当たりのリットル数に変換するconvert_mileageという関数を書いてください
  2. 20, 40 MPG(マイルパーガロン)について、関数が正しい値を返すことをテストしてください
  3. 正しい値を調べるためにどのような方法を使いましたか?
<solute_problem_2_7.py>
#encoding: utf8

def convert_mileage(mile):
        
'''1ガロン当たりのマイル数から100km当たりのリットル数に変換する'''
      
        # 1ガロンからリットル数に変換 (1ガロン = 約3.785リットル)
        # 1マイル数からkmに変換(1マイル = 約1.609メートル)
        # 数学的に解いてみる
      
        convert_literage = ( 3.785 * 100) / ( 1.609 * mile )
      
        
return convert_literage

>>> solute_problem_2_7.convert_mileage(20)
11.761963952765694
>>> solute_problem_2_7.convert_mileage(40)
5.8809819763828468

Google 電卓機能で確かめました。
        20 (mile / gallon) = 11.7607292 liter/100km
        40 (mile / gallon) = 5.88036458 liter/100km



(8) 仮引数と実引数の違いを説明してください
仮引数:関数定義時に使用される引数
実引数:その関数を実際に使用するときに関数に引き渡される引数

上の問題を例とすると
def convert_mileage(mile):  → mile が仮引数
>>> solute_problem_2_7.convert_mileage(20) → 20 が実引数

(参考:http://www.cc.kyoto-su.ac.jp/~yamada/ap/parameter_argument.html)


(9)
  1. km単位の距離と車の燃費を表す値を引数として、その距離を移動するために必要なガソリンの量をリットル単位で返す liters_needed という関数を定義してください。litters_needed関数は、前の問題で作ったconvert_mileage関数を呼び出さなければなりません
  2. liters_needed(150, 30) が 11.761938... 、liters_needed(100, 30) が 7.84129.... を返すことを確かめて下さい。
  3. 100と30を引数として、liters_needed を呼び出したとき、convert_mileageの引数はいくつですか?
  4. liters_needed(100, 30) という関数呼び出しは、convert_mileage 関数呼び出しを引き起こしますが、これら2つの関数のうち、さきに実行を終了するのはどちらですか?
<solute_problem_2_9.py>
#encoding: utf8

import solute_problem_2_7

def liters_needed(kilometer, mileage):
        
'''km単位の距離と車の燃費を表す値を引数として、その距離を移動するために必要なガソリンの量をリットル単位で返すliters_neededという関数を定義します'''
      
        # 与えられた燃費をもとに、100kmあたりのリットル数を求めます
        convert_mileage = solute_problem_2_7.convert_mileage(mileage)
      
        
# 与えられたkm単位の距離をもとに、必要なリットル数を求めます。
        liters_needed = (convert_mileage * kilometer) / 100
      
        return liters_needed


>>> solute_problem_2_9.liters_needed(150, 30)
11.761963952765694
>>> solute_problem_2_9.liters_needed(100, 30)
7.841309301843796

3) convert_mileageの引数は30
4) convert_mileageがさきに実行を終了する

(10) 組み込み関数abs, round, pow, int, float を使って次の式を解きなさい
>>> pow(3,7)
2187
>>> int(34.7)
34
>>> int(round(34.7))
35
>>> float(abs(-86))
86.0

『始めてのコンピューターサイエンス』O'REILLY出版

51WbHnaX0tL._SL500_AA300_-2011-02-12-01-01.jpg

今、ちまたで話題の『Python』。←ぼくが時代遅れ?
何やら、JavaやC++に並んで、Googleの3大プログラミング言語らしいぞ。
そんな話を聞いて、Pythonの入門書買いました。


一通り、読んでプログラミングコードを書いて動かした感想。
とても分かりやすい!←本書の内容もだけど、Pythonの言語が。


まず、Pythonを書いて動かすまでに手間がかからなかったことです。
これは、どの言語でもいえることなのですが、プログラミング言語を広く普及できる要素として、誰でも簡単にセットアップできること、が挙げられます。
Pythonは、ダウンロードしてすぐ、ターミナルなりXcodeなりで簡単に実行できました。


次に、視覚的にプログラミングコードを読みやすくなったことです。
Pythonでは、“{ }” がほとんどなくなり、インデントで整理するようになっています。

カ氏温度からセ氏温度に変換するプログラムをPythonでは以下のように表現できます。
#encoding:utf8

'''温度を操作する関数'''

def to_celsius(t):
        
'''カ氏からセ氏に変換します'''
        return round((t - 32.0) * 5.0 / 9.0)

def above_freezing(t):
        
'''セ氏表現の温度が氷点下以上ならTrue, そうでなければFalseを返します'''
        return t > 0

これがJavaだと以下のようなコードになります
public class test {

        
public float to_celsius(float t){
                
return round((t-32.0) * 5.0 / 9.0);
        }
       
        
public boolean above_freezing(float t){
                
if(t > 0){
                        
return true;
                }
else{
                        
return false;
                }
        }
}

Pythonは、中括弧やセミコロンがなくなり、だいぶ見やすくなったことが分かります。


とくに、プログラミング言語を学び始める人は、Pythonを勉強した後に、JavaやC++を勉強すると効率が良いと思います。
なんといっても、データベースやオブジェクト指向やGUI といったこともPythonで学べるので。

さすがは、Googleで使われている言語だけはあるな、と思いました。
まだ僕は、Pythonで出来ることが思いつかないので、もっと勉強しないとです。

2011年1月30日日曜日

『ソフトウェア開発工程管理』 竹山寛 著

ソフトウェア開発の工程を理解するため、『ソフトウェア開発工程管理』を手に取りました。内容は、ソフトウェア開発工程・管理者のあり方・品質管理といったものでした。管理者といったプロジェクトを指揮する人が読む内容が多かったです。

PastedGraphic-2011-01-30-07-01.jpg


僕が、プロジェクトの管理をする(リーダーなりマネージャーなり)立場になったときのことを想像しながら読んでいきました。管理者って大変な仕事なんだと理解しました。開発の手順・方針をドキュメントにまとめ、チームを指揮し、チーム内での意識を高める、それでいて責任は全て管理者にある。大変な仕事です。

ソフトウェア開発は必ず納期に間に合わないといった話があります。前もって計画していないのか?と思う人もいますが、そんなことはありません。まだ出来て間もない手法を用いることが多いので、これから改良の余地はまだまだありますが、計画自体は緻密に計算されています。

ソフトウェアが、一つの製品にさまざまなプログラミングが絡み合ってできている特殊性がゆえに、一つの誤りが全体に影響します。複数の人が作ったプログラムが絡み合って、上手く動くことを期待しない方が良いのです。そのために、多くの時間がテストにさかれるわけです。

どのようにしたら、影響の少ない・品質の優れた製品を作ることができるのでしょうか。そのために管理者としてすべきことは何なのか。そのことが本書には書かれています。難しい内容ではなかったので読みやすかったです。管理者の立場になったらまた読みます。

2011年1月29日土曜日

パソコン解体記

『ハードディスクの知識と実務』を読んで以来、ずっと楽しみにしてた「パソコン解体」やりました。

もちろん、パソコンをまた組み直し再利用するという計画だったので壊さない程度に分解しました。なので、基板やら、のっかっているトランジスタ・ダイオード・抵抗などには一切触れないように注意しました(パソコン使えなくなったら触りたい)。結果、無事生き残ることができたので、安心してLinux使えます。


パソコンの紹介
まず、パソコンの紹介です。

RIMG0137-2011-01-29-11-34.JPG

僕は、Mac愛好家なのでWindowを使ったことがありませんでした。ただ、バイト先でWindowsを使うので慣れなきゃ、ということで中古PC買ったのですが使いこなせないうちにお蔵入りになった可哀想なPCです。(やっぱWindows分かんない!で諦めた・・・)

富士通のFMV-C8200です。
http://www.fmworld.net/biz/fmv/product/hard/blb0504/c8200/
メモリが256MBでは何もできない!と思って、メモリを拡張してもらいました。お蔵入りになるんだったら、Macで ”Boot Camp” 使ってWindows使えば良かったと後悔していたのですが、ここでまさかの活躍。といっても分解されるだけなんですが。

その下にあるドライバは、今回PCを分解するために使われたものです。



PCを分解する
・まずはじめに
電源を抜いて、PCの裏にあるバッテリーを外しておきましょう。
手は清潔にして、しっかり乾かしておきましょう

・キーボード上部の部分を外す
まず、裏面のネジは全て外しておきました。キーボード上部のスピーカーの隣にゴムパッキンがあるので、とってネジを外します。画面を180度に開いて、ヒンジカバーを外します。

RIMG0106-2011-01-29-11-34.JPG


・キーボードを外す
中は両面テープで固定されているので、気をつけながら外します。

RIMG0133-2011-01-29-11-34.JPG



・キーボードの真下です。

RIMG0111-2011-01-29-11-34.JPG


上の写真のフラッシュメモリを拡大してみました。
SSDにはSamsung製のMLC NAND型フラッシュメモリ「K4H511638B-TCB3」
書き込みや消去を高速に行える記憶装置です。やはりSamsung強し。個人的には東芝であって欲しかったです。

RIMG0126-2011-01-29-11-34.JPG


・パソコンの表面のカバーを外す
キーボードに続いて表面のカバーを全て外してみました。

気付くこと:ドライブが多いとかなり場所を取るんだな・・・
ドライブをかなり外すことで、軽量化を成功させたのがMacAirなのかな。(ちなみに、MacのPCはこういった組み立て方とは大きく違います)

RIMG0116-2011-01-29-11-34.JPG

内蔵されているハードディスクです。

RIMG0118-2011-01-29-11-34.JPG



・裏面のカバーを外す

ここで、メモリの増設を行います。
他のWindowsPCがどうなのかは分からないのですが、FMV-c8200では、1GBまでのメモリ増設ができます。ぼくは、購入時に512MBのメモリ増設をしています。

RIMG0134-2011-01-29-11-34.JPG




最後に
組み立て直したが、ネジが5本余っている・・・。不思議現象ですね。でも無事に使えるので良かったです。これからLinuxをインストールして動かすことにします。
お蔵入りは可哀想なのでなるべく使ってあげます。

ものすごく楽しかったです。ハードディスクについての知識が増えたと思います。心残りは、もっと分解したかった・・・。ただ内部を見ただけ、って感じでした。新しくPC買ったりしたら、さらに分解して、手にとって見ていきたいです。

PCを実際に作ってみたいとは思うのですが、今は市販のPCの方が軽いし使いやすいみたいですね。

2011年1月26日水曜日

『ハードウェアの知識と実務』 矢沢久雄 著

『ネットワークの知識と実務』に引き続き、『ハードウェアの知識と実務』を読みました。このシリーズ好印象です。どんどんはまっていく自分がいます。『データベースの知識と実務』、『オペレーションシステムの知識と実務』も読むかもです。とにかく分かりやすかったです。

51S%2BKjBBBYL._SL500_AA300_-2011-01-24-21-30.jpg

まず始めに、ハードウェアを学ぶことは意外に大変でした。身近にあるというか、毎日手で触れているものの、その仕組みは興味を持たないと学ぶ気になれないのではないでしょうか。僕もPCの中まで覗こうなんて考えたこともなかったです。なのでこの本を読んで思ったことは、見たことのない機械との遭遇ばかりだったな、ということです。

しかし、細かく物を見ていくと、一つ一つの部品にそれぞれの役割があり、それが集まってPCができあがっていることが分かりました(当たり前のことだけど)。でもそれが大事なのです。一つ一つの部品がどの役割を果たしているか、それを理解することがハードディスクを理解する早道なのです。

本を読み終わる頃には、”パソコンを分解したい” という気持ちを強く抱きました。しかもちょうど良い、古いPCが家にある!これはやるしかない。ということで、週末はPCを分解します。無事生き残れば、Linuxをインストールしようと思っています。←結構本気で、Linux使いたいので、必ず生かします。

2011年1月22日土曜日

『ネットワークの知識と業務』 村嶋修一 著

今日は1日中『ネットワークの知識と実務』村嶋修一著 を読んでいました。

ここ最近、セキュリティを学ぶことが楽しくなってきたのですが、深く学ぶためには、様々な知識が必要ということに気付きました。セキュリティに関連する知識として、ネットワークは必須分野ではないでしょうか。なぜなら、セキュリティ対策を施すにあたって、もっとも警戒すべきとこはネットワークといった外部からの攻撃だからです。

ということで、読みやすそう&セキュリティにも触れているネットワーク本ということで、この本を選びました。



内容は期待以上のものでした。読むとこ全てが新鮮で(何も知らなかったので・・・)、それでいて分かりやすかったです。今日読んだのは、「知識編」です。ネットワークに関して知っておくべき知識が書かれています。その後、「実務編」に続くのですが、実際にIPアドレスを調べたり、トラブルの処理などについて書かれています。今から、やります。すごく楽しみです。

この本読んで、ここに簡単にまとめる予定が、知らない内容ばかりで、うまくまとまってません。話題があっちこっち飛んでいます。なので、ぜひ購入して読んでみてください。



追記: 匿名コメントより
貴重な意見をありがとうございます。
著者の意見を僕が間違った解釈をしていました。
たとえば、
「この、ルータの中継をどのようにして最短距離を探しあてるか、がgoogleの使命なのです。」
これはまったくあっていません。

「最短経路演算アルゴリズムは何度も改善されており、これからも改善を続けていくことでしょう。」
これも「?」です。

これは本に書かれたことではなく、自分でまとめています。章の内容を自分なりにまとめていて、その際に間違った記述をしていました。

僕の書き方が悪かったです。章ごとにまとめるから、読者からすると、まるで著者の意見のように感じとられます。僕の解釈で、著者の印象が悪くなりそうなので、このブログ全体書き直すことにしますね。(なのでコメントも削除させてもらいました。ごめんなさい)

今日のコメントは非常に嬉しかったです。僕も勉強になりました。これからも、コメント期待しています。メールアドレスを自己紹介に載せています。意見・質問があれば、どんどん送ってきてください。

『事例で学ぶ情報セキュリティ』

情報セキュリティとはよく聞く言葉だが、なかなかぴんとくる人は少ないではなかろうか。
何回も被害にあってるっていう強者はなかなかいません。僕も、まだセキュリティに関して実際に被害を被って困ったという経験がないので、どのような被害例があるのか知りたくなりました。



本書では、事例を踏まえて、どのようなセキュリティ対策をすれば良いのかが分かりやすくかかれています。分量も少ないので、セキュリティ初心者の方にお薦めです。

組織に属していると、自分一人が被害にあうと、全体に迷惑がかかります。ただでさえ、社会は情報漏洩に厳しいです。大手企業が、個人情報を少しでも漏洩させると、新聞の一面を飾ることになります。一人一人がセキュリティを意識すること、会社でセキュリティを万全にしておくこと、このことが大事なのだと思います。

日本では、セキュリティやネットに関する法律が完璧に配備されているとは言いがたいです。ハッカーやウイルスなどの加害者を特定するのは困難です。それゆえ、被害者であるはずの企業が、取引先の会社に責められたり、社会の信頼を失う。今は、そんな怖い世の中なのです。法配備を訴えるより、一刻も早くセキュリティ対策を施すことが必要になってきます。

セキュリティ、もっと勉強しよう、そう思いました。
この本を簡単に以下にまとめてみました。


2011年1月15日土曜日

『インターネット・セキュリティとは何か』① 板倉正俊著

『インターネット・セキュリティとは何か』板倉正俊著


ぼくのまわりでちらほら聞こえてくること・・・量子コンピュータの出現やリーマン予想の証明により、今のセキュリティのシステムだと危険なのではないか。確かに、現代のセキュリティは、とても大きな数の素因数分解やら離散対数問題の解法といったコンピュータにとって困難(かなり時間がかかる)という前提で、暗号化してセキュリティの武器として利用しています。なので、技術や学術が進歩し、コンピュータであっという間に計算できるようになれば、クレジットカードやその他もろもろの暗号はすぐに解読され、安心して生活することすらできなくなるでしょう。技術や学術の進歩は時として、私たちの生活システムの基盤を崩す可能性があるのも否めません。
もしかしたら、近い将来、別のシステムに変える必要が迫られるかもしれません。というか10年以内には、確実に別のシステムに変わると個人的に思っています。なぜなら、技術と学術はものすごい勢いで成長しているからです。

とはいえど、過ぎ去っていく今のセキュリティシステムだから学ぶ必要はない、そんなわけはありません。ということで、この本読んでみました。
セキュリティ関連の本は、昔少し読んだけどもさっぱり理解できなかった思い出があります。知らない用語の羅列・様々な知識(数学・ネットワーク・ハードウェア等)を前提とした説明に投げ出しました。なので簡単そうな本を選んでみました。実際、とても読みやすかったです。おすすめの一冊。



第1章 インターネット・セキュリティの考え方

セキュリティの本質
インターネットセキュリティにおいては、完璧を求めては、お金がいくらあっても足りません。また、そこまで手間をかけていられません。そうして点を勘案して、「何を守らなければならないのか」を考えると効率的だということに気付きます。
つまり、インターネットセキュリティの一つの基本として、守るべきものをよく考えた上でセキュリティ対応の検討に着手するということが挙げられます。
といっても、何が重要で何を守るべきか、ということはなかなかピンとこないと思います。そういうときは、自らが構築したサイトの仕組みや取り扱うデータの種類を正確に洗い出し、それらをインターネットの特性に重ね合わせてみる作業が必要です。
そうして、守るべきものを特定した後にセキュリティを施すのです。


インターネット・セキュリティという分野では一般人には慣れない語句ばかりが登場します。
ですので、ここでは、語句の定義と、その由来・課題・具体例を添えて紹介することにします。


インターネット上の脅威
インターネットセキュリティを達成するということは、以下に挙げる悪党たちから、自分あるいは自社のwebサイトを守り抜くことになります。

インターネット上の脅威について、語句の定義をします。
定義(ハッカー)
かつては純粋にコンピュータ技術に魅せられた、高度な知識を身につけているコンピュータ・マニアを意味してた。
現代では、ネットワークに奥深く入り込み悪さをするネットワーク犯罪者のことを指すことが多い。

由来:
米国MIT(マサチューセッツ工科大学)では、正規のプログラムをチューニングするプログラムのことをハック(hacks)と呼び、「ハッカー」はこうした素晴らしいプログラム技術を持つ尊敬するべき人々への敬称でした。

定義(クラッカー)
人のシステムに入り込んで不正を行う人のことを指す。

具体例:
商用のソフトウェアに対し、リバースエンジニアリングを行い、シリアルナンバーを勝手に偽造したり、不正使用排除機能自体を取り去ったりして無料でソフトを使えるようにしてしまう。

定義(ネット詐欺師)
インターネットの世界で、人を欺罔して錯誤に陥れ、財産を騙取したり瑕疵ある意思表示を行わせる人を指す。

課題:
クレジットカードの盗難などあるが、インターネット関連の法律が未整備な状況であるため、物理的な世界に比べて、被害者救済や犯人検挙が難しい。

定義(産業スパイ)
企業の機密情報を違法に収集・地用することによって、利益を得ようとする犯罪者。

課題:
1999年にフォーチュン1000社を対象として、機密情報を盗まれたことによるアメリカ企業の損失規模は450億ドル以上にのぼる。それにも関わらず、表面化されないのは、被害に遭った事実を隠蔽したがる傾向にあるからです。そのことが、産業スパイがますます増加する原因にもなっています。

定義(マフィア)
組織的な犯罪を実行する人々のことを指す。

具体例:
ロシア・マフィアによる米Citibank資金横領事件。このマフィアは、Citibankから1040万米ドルを世界中の銀行口座に分散移動させたという事件のことです。

定義(内部犯罪者)
内部犯罪とは、社内・企業内の事情に精通する内部者が悪事を働くこと。その人を指す。

具体例:
FBIとCSIの共同捜査によると、ネット犯罪・不法行為の55%が内部犯罪者だという。

定義(サイバー・ストーカー)
物理的な世界でいわゆる「ストーカー」がやっているのと同じことをネット上で行う人を指す。

原因:
「お互いの姿が見えない」がサイバーストーカーを増加させる可能性がある。

定義(コンピュータ・ウイルス)
人のパソコンに侵入すると同時に悪事をするように作られた小さなプログラムを指す。

感染経路:
主に電子メールからといわれている。外部のプログラムを受け入れる可能性が一番高いのがメールだから。




被害のかたち
インターネットの被害の種類は、以下の9つで大抵のことはカバーされます。ネットの犯罪として問題になっている事件の原因は、以下の9つの類型のどれか一つもしくは複合された状態に分類できます。インターネットセキュリティをまかされた場合は、以下の9つを全てカバーできれば十分です。むしろ、ここで挙げた全てに完璧な対応をすることが、大変なのです。

被害のかたちについて、語句の定義をします。

定義(盗聴)
ネット上で行き来するデータの盗み読みを指す。

盲点:
意外と認識されていませんが、暗号化しないかぎりインターネットで送受信するデータはいとも簡単に盗聴されてしまいます。ほとんど全てのメールは他人に読まれているものだと認識すべきです。

定義(改ざん)
行き交うデータの中身を変えてしまう行為を指します。

盲点:
盗聴と同様この改ざんも、データを暗号化せずに裸のまま送った場合にはいとも簡単にやられてしまいます。

定義(なりすまし)
他人の名やメールアドレスをかたってデータを送信したり、ホームページを開くことを指す。

盲点:
赤の他人である犯罪者だけでなく、なりすましは内部でも起こり得ます。

定義(事後否認)
取引後、自らその取引を否認すること。

対策:
本当にその人が注文したかどうかを証明するのは、大変難しい問題でしたが、今では、「認証」を使ってその問題を解決しています。

定義(データ破壊)
とにかく他人のデータを壊してしまうこと。

具体例:
コンピュータウイルス。

定義(ホームページの乗っ取り)
管理者用のパスワードを盗み出したりして、他人のホームページに不当なアクセスをすること

具体例:
気象庁のホームページが乗っ取られ、天気情報の変わりに卑猥な画像が掲載されたことがあります。

定義(不正アクセス)
不正アクセスは実際の権限者ではないのにwebサイトに入ってくることを指す。

具体例:
証券会社のサイトで「会費を支払っていただいている会員に限っては、分析情報まで閲覧可能」というサイトに、勝手にパスワードを盗んで、会員専用ページに侵入すること。

定義(スパムメール)
欲しいと思っていない人たちに宛ててメールを発信することを指す。

具体例:
自動発信機能を利用して数百万通といったサイトの処理能力の限界を超えるようなものすごい通数のメールを企業の取引サイトへ送り付け、サイト全体をダウンさせ、営業妨害を行うという事例もアメリカで起きています。
一時期はやった「不幸の手紙(1時間以内に10人以上に送りなさい)」といったチェーンメールもスパムメールの一種。

定義(サイバーテロ)
物理的な世界でのテロをインターネットを用いて実現させることを指す。

具体例:
・強力なコンピュータウイルスの短期間での広範は散布
・インターネット網の基幹部分のハッキングやクラッキング
・公安や国防関連のインターネット施設への不正侵入や破壊行為





インターネット・セキュリティの実現
セキュリティ技術とは、その名の通り、技術によってセキュリティを実現することをいいます。インターネットの世界の特殊性を反映して、インターネット・セキュリティの技術には結構特殊なものがあります。
以下、そのような技術を紹介していきます。

定義(監視)
ネットワーク上をどういった信号が行き交うのかをモニタリングすること。

具体例:
・ソフトウェアでの監視
        「危なさそうなパターン」のアタックを発見する、対応は限定的。
・人間による監視(専用のソフトウェアは必要だが)
        熟練したエンジニアになると、行き交う情報を大局的に分析し、経験に基づき危険を察知することができる。

欠点:
どちらにせよ、Webサイトは24時間運用が当たり前で、人員を雇ったり、ホスティングサービスにそのようなオプションをつけるとなると、費用はそうとう高いものになるという覚悟は必要。


定義(ログ取得)
ログ取得とは、自分のサイトに出入りした交信の履歴を記録しておくこと。

具体例:
侵入経路や操作の履歴が記録されるため、それを基に不正アクセス者をつきとめることができます。さらに、そのような悪者に対しての、威嚇にもなります。

欠点:
行き交う情報を捉えて後で解析可能な状態にしてディスクに書き込むために
・高いCPU性能が必要
・膨大なディスクの容量も必要
大抵は、どのレベルまでログを取るのかを予め決めておき、そのレベルにあわせてソフトウェアの設定をすることになります。


定義(暗号化)
暗号化は、「鍵」と呼ばれる暗号化のためのタネの数字と、「暗号アルゴリズム」(暗号化ロジック)と呼ばれる計算式を用いて、送信するデータをまったく異なる別のデータに変換すること。

具体例:
・電子メールで目にする「S/MIME」や「SSL」
・ブラウザの「HTTPS」

例題:「公開鍵暗方式」
公開鍵暗号方式とは、暗号化と複合化で鍵が違うということ。
例えば、家のドアの鍵について、「ドアを開ける専用の鍵」と「ドアを閉める専用の鍵」を作るのと原理は一緒です。自分が「ドアを閉める専用の鍵」を持っていて、弟が唯一その「ドアを開ける専用の鍵」を持っていたとします。私は、「ドアを閉める専用の鍵」家を閉じて、数時間後、ドアが空いていることを確認しました。それは、絶対弟の行為だと分かるわけです。
このような原理を数学的技術を使ってコンピュータに実現させたのが公開鍵暗号方式です。


定義(認証)
認証とは、インターネット上で出会った相手が誰かを判別する技術のこと。

具体例:
インターネット上で相手の存在や、身元を確認できる技術が必要となりますが、これが「認証技術」と呼ばれるものです。ただ、認証は画一的な技術ではなく、以下のようにいくつかのレベルに分類されます。
・実在確認(相手が本当にいるかどうかを確認する技術)
・本人確認(交信してきた相手の身元を確認する技術)
・権限確認(交信してきた相手が、どの程度の権限を持っているかを確認する技術)

また、その他にも、送られてきたメッセージが完全かどうかを確認する「メッセージ認証」などもあります。


定義(アクセス・コントロール)
アクセス・コントロールとは、自分のサイトにアクセスしてくる人たちに、それぞれ別々の権限を与えること。
必要な人に、必要なところにだけアクセスさせるということ。

具体例:
・会員制のサイト
        会費を払っている人にだけ重要なデータの置かれている領域に入ってもらう仕組みなど


定義(ウイルス・チェック)
ウイルス・チェックとは、自分のところのコンピュータが前述のウイルスに感染していないかを検査すること。

例題:(新種のウイルス対策)
新種のウイルスは毎月かなりの数発見されています。当然発見される以前に開発されたウイルス・チェックソフトでは、新しいウイルスは発見できないため、ウイルス・チェック・ソフトは頻繁にアップロードしなければなりません。

例題:(インターネットの場合)
インターネットの場合、「水際」でウイルスを阻止するのが肝要なので、インターネット用に使用しているサーバーにウイルスチェックソフトをインストールしたり、外部から取り込まれるメールやデータを徹底的にチェックする必要があります。


定義(サイバー・パトロール)
警視庁ハイテク犯罪対策総合センターの捜査員が行っているもの。

具体例:
違法サイトなどを縦覧するというもの

2011年1月14日金曜日

『情報を力に未来価値を創る』 朝純裕著

本書は、情報学分野における我が国唯一の総合研究所である国立情報研究所で独創的な研究に取り組む研究者たちの、日常生活から研究内容にいたるまでを取材したものです。ユニークな研究内容・研究者としての誇り・意外な一面などを垣間見ることのできる本です。



僕はこの本を読むまで、情報学を取り扱う国立研究所があるなんて知りませんでした。この研究所は、東京・神田にほど近い高層ビルで、創立されてまだ10年しか経っていない新しい研究所で、伸び盛りの研究者を積極的に採用して、国立からは想像もつかないようなユニークな研究をしています。4つの研究系、7つの研究センター等に、80名の精鋭研究者、多数の客員教授を擁し、IT関連の研究を中心に、幅広い分野について「情報」という視点から研究をしています。

本書を読んで、思ったこと。日本は、インターネットや携帯といった端末が生活に当たり前のように浸透しており、世界でも情報・ネットワークのインフラが最も進んだ国です。それにも関わらず、ソフトウェア・ハードウェアの分野で遅れをとっています。このような情報を取り扱った学問がかなり低い水準であるかのように思えます。人材不足や、そもそも情報系の分野に憧れる人が少ないという背景もあります。

しかし、日本から生まれる研究者は素晴らしい知能と想像力をもった人ばかりだということが分かりました。今でこそ、そのような優れた人材はGoogleやMicrosoftなどといった欧米の企業に抜き取られてしまいますが、その分野で第一線として活躍している日本人がたくさんいるということを忘れないでください。

日本の近代の物理学・化学の発展は目を見張るものがあります。ノーベル賞には、毎年のごとく日本人が選ばれています。日本には、様々な分野でトップを取るだけの才能が数多く存在するのです。情報学もその一つ。本書にもあるように、ここ国立研究所では、情報学を数学や物理といった学問みたいに体系付けようと研究に没頭している研究者や、世界でも最先端の技術を集結して量子コンピュータを開発を進めている研究者など、世界トップクラスの研究者が集結しています。この人たちは、決して自分たちの研究だけに没頭するのではなく、持っている知識を後継者に伝授すること・指導することにも積極的です。

決して2位に甘んじてはダメなのです。この分野では、トップを取れるだけの実力のある日本が、自ら負けフラグをたてて何になるのでしょうか。

色々話は脱線してしまいましたが、とても面白い本でした。

2011年1月10日月曜日

『システムはなぜダウンするのか』① 大和田尚孝著

とても読みやすかったです。
私たちは、ネットがつながらない・電車が止まった・ATMでお金を降ろそうとしたらエラーが発生した、といった問題が起きても気にとめることはありません。「あ、そうなんだ。不便だなー」と思うぐらいでしょう。しかし、実は様々な事情が何重にも重なりあって引き起こされるのであって、開発者の人たちは毎日頭をかかえているのです。こうした裏事情?に触れることができるとても興味深い一冊だと思います。



まとまってないから、とりあえず1、2章だけ。


1章 システムが止まった・・・ 
                ーダウンとは何か



停止=ダウンは誤解
本書では、以下の定義を与えることにします。
定義1.1
ダウンとは、システムが本体の役割を果たせていない状態のこと

例題:
OSやミドルウェアは問題なく動作しているが、一部のアプリケーションの機能だけが止まったときもダウンとみなします。利用者から見れば、「システムの一部の機能が使えない」という状態だからです。

例題:
点検のためにあらかじめ決めた計画に従ってシステムを止めることはダウンとは言いません。
「システムが本体の役割を果たせていない」というわけではないからです。

例題:
システムが不意に停止しても、待機系のシステムがすぐに起動して処理を引き継ぐなど、システムが途切れなく動き続けている場合は、ダウンとは言いません。ダウンを回避できたと言えます。これも定義通り。

なぜダウンするの?
一番の疑問でしょう。理由は突き止めれば、ただのテスト不足です。
この条件でダウンするということを開発時に分かっていれば、少なくともその条件ではダウンしないように設計し直すことができるからです。
しかし、テストをする人を責めるのは酷です。
なぜなら、テストを完全にこなすのは現実に不可能だからです。
前提条件の組み合わせによって、テストケースは膨大な数に膨れあがるからです。

ダウンは原因から4種類に分類できる
実は、ダウンの原因は4種類に分類することができます。以下のグループに分類できます。
①ソフトウェアの不具合
②性能・容量不足
③設定・操作ミス
④不慮の事故

ダウンが起きたとき、ダウンの発生状況等を考慮して上の4つから原因を突き止めることになります。


2章 きちんとテストしたはずなのに・・・
                ーアプリケーション・ソフトの不具合



バグとダウンの関連性
バグとは、アプリケーションソフトの不具合です。
バグはテストで見つかれば「不良」として処理されます。表面化せずに本番稼働をむかえると「バグ」のまま残ります。それが本番稼働中に表面化すると「不具合」が発生し、システムがダウンします。

しかしながら、以下の定義を与えないわけにはいきません。
定義2.1
どんなにテストを繰り返してもバグは残る

例題:
メガバンクの合併に関わる大規模なシステムの総合テストで、考えうる100万を超えるテストケースを最大6000人がかりで、10ヶ月をテストだけに費やしました。
それでも、バグはゼロになりません。複数のプログラムからなるソフトウェアにおける処理ルートと入力データお組み合わせは、100万をはるかに超えるからです。

重要なことは、「あれだけテストをしたのだから、バグは残っていないだろう」と考えるのではなく、時間の許すかぎりのテストをするのと並行して、バグが表面化したときの対処方法をあらかじめ講じておくことです。


盲点:日付問題
簡単な紹介で終わりにさせてもらいます。
面白い内容なので、是非調べてみてください。

・うるう年
うるう年の正確な条件を知っていますか?ここでは取り上げませんが、プログラムによっては、正しい動作をしないこともあるみたいです。有名な”2100年問題”もこれにあたります。なぜなら、2100年はうるう年ではないですから。

・2038年問題
これはUNIX系のOSで、経過秒数を格納する領域の桁数が足りなくなるのではないか、という点です。実際に2004年日本で、その問題が表面化されATMの機能が一部時間切れになりました。

・2007年問題
面白かったです。終戦直後の1945年から数年間に生まれた「団塊の世代」が定年を迎え大量に退職することにより、ベテラン技術者のノウハウが消失し、何十年も稼働を続けているシステムに以上が発生したときの原因の究明などができなくなる危険を指摘して言葉です。意外に笑い話ではないかもしれませんね。