2008/11/30 日曜日

新幹線0系終了のおしらせ

Filed under: 開発メモ — admin @ 23:39:38

新幹線の初代から走ってきた0系の運転が今日で終了となる。

アナログからデジタルまでのかけはしとして日本のトップレベルの技術力がふんだんに使われ、常に日本の象徴として親しまれてきたものだ。

NHK動画ニュースさよなら0系
http://www.nhk.or.jp/news/t10015700071000.html

そういえば、いつのまにかNHKにも動画ニュースページができていた。最近はメディアのWeb進出が目立つようになってきたのでこれはいいかもしれない。

新幹線の話に戻すとデジタル化により、現在の新幹線の位置を知ることのできる新幹線マップというものがある。簡単に説明するとGoogleMAP-APIと新幹線の位置情報(GPS)をもとにして合成し、MAP上に表示しているもの。リアルタイムに表示されているので、ちょこちょこ動くのが面白い。

新幹線マップ
http://marukan.nayutaya.jp/

ちなみに、新幹線内の無線LANが2009年の春から開始される。高速移動中のネットアクセスではアクセスポイントが時速300Km/hで次々と変わってしまうといった問題点があったが、どうやら技術的に解決されたみたいだ。一人当たりの使用帯域は200kbps程度、動画サイト系は見れないが、電子メールやwebサイト閲覧などはできそうだ。

●情報ソース
・新幹線内無線LAN2009年春から ITPro
http://itpro.nikkeibp.co.jp/article/NEWS/20060629/242122/

2008/11/21 金曜日

ニコニコ動画 戦略

Filed under: 開発メモ — admin @ 13:00:06

ニコニコ動画の今後の開発目標がわかるニコニコ動画戦略MAPが公開されていた。

ニコニコ動画戦略マインドマップ niconico_memo.pdf

ニコニコ動画自体の黒字化計画はまだ進行中と見てられるが、上の戦略を見る限りではインフラ面よりソフトウェア強化の傾向がみられる。ニコブログでは回線コストより人件費に回す資金のほうが膨れ上がっているとのこと。

ネットサービスではソフトウェア開発スピードが命であり、使用期限が2年周期とされているため、ソフトウェア機能強化の傾向が強い。

しかし、機能が増えてる反面、すべてを使いきれていないといった意見も挙げられているので、今後どのような変化があるかが見ものだ。専用のヘルプページでも設けるのか、このままの状態で続行するのか、それは管理者次第といったところだろう。

●以下参考文献

・ニコニコ動画
http://www.nicovideo.jp/

・ニコニコ動画開発者blog
http://blog.nicovideo.jp/

2008/11/12 水曜日

ISP規制突破 ブロードバンド

Filed under: テクノロジー — admin @ 13:51:53

初めてのブロードバンドコンテンツと言えば、winnyしかなかったわけだが、最近になってようやくブロードバンドコンテンツといえるものが色々登場するようになってきた。

しかし、その反面、ISPなどにとっては回線の増強などの必要性に迫られたため、膨大な回線コストが必要になり、速度規制が開始されている。ネットコンテンツ提供側にとってはP2P通信方式をとることによってサーバ負担、回線負担を減らすことができるが、クライアント側ではISPによる特定通信規制によりネットコンテンツが思うように使えなかったりする。

図1 今までの回線


図2 ブロードバンド回線

図1のように今までの回線では回線が細かったため、必要最低限で低速だったため、回線を増強する必要性もなかった。しかし、2001年のe-Japan戦略から光ファイバーによる高速回線の一般普及が爆発的に広がり、100Mbpsというアメリカではクレイジーといえるような高速回線が一般家庭に普及した。(アメリカでは2008年現在でも2Mbpsが普通)

また、winnyなどの継続的な通信を行うP2Pソフトウェアの登場により、ISP間の通信や、ISP内での通信が継続的に行われるようになり、回線の“占有” 状態が目立つようになってきた。当然、回線使用量が増えれば回線を増強しないといけないため、ISPにコスト負担が高まり、弱小ISPにとっては悲鳴を上げるほどになってきた。

そこで始まったのが速度規制というものだが、これには3パターンがある。通信ポート規制型、転送量規制型、特定アプリケーション規制型の3つだ。

・通信ポート規制型はウェルノウンポート(0~1023ポート)以外を速度制限するというものや、80番ポート以外を全規制するといった鬼規制もある。

・転送量規制型は“一日15GB以上超えたら通信止めますよ”といったものや、“一か月2TB以上は速度制限しますよ”といったものもある。

・特定アプリケーション規制型は“winny、share、BitTorrentなどの特定通信アプリケーションは遮断しますよ” といったもの。通信パケットが独自形式のものを遮断したりする。

●さて、それではどうやってこの規制を突破すればよいのか。

転送量規制以外ならいくつか方法はある。

1.無規制のISP回線にサーバを置き、そのサーバを経由してネットを使う。(Proxy型)

2.ISPを乗り換える。(王道型)

3.アメリカまでパケットを飛ばし、アメリカ経由でネットを使う。(経由型)

の3つがあげられるが、1は手間がかかる上、初心者には向かない。2は費用が少々かかるが、もっとも王道に即している。じゃあ、3しかないじゃないか!ってことで、今回は3の方法を紹介する。

今回の経由型にはいろいろあるが、中でも有名なのが、SecureIXやHotspot Shieldだ、SecureIXのほうはいろいろとアカウント設定などが面倒なので、最も簡単なHotspot Shieldを紹介。

●Hotspot Shieldダウンロード

難しい設定などは必要なく、そのまま解凍し、インストールするだけ。 途中検索バーをインストールするか聞かれるのでチェックをはずす。インストール時にVPNの仮想LANポートを追加するかどうかを聞かれるので続行をクリックしインストール。

※検索バーをインストールするか聞かれるのでチェックをはずす。





※VPN仮想LANポートをインストールするか聞かれるので、続行をクリックしてインストール。



インストールが完了するとタスクバーに月マークのアイコンが表示される。これを左クリックし、Connectionで接続される。

Connectするとブラウザが開き、自動的にVPN経由通信が実行され、アメリカ経由でインターネットへ接続できる。ブラウザのTOPにヘッダレベルで広告の割り込みが入るが、気にしない方向で行くしかない。

水色のところに自分のローカルIPが割り当てられる。(IPは接続する度に変わる)

また、WiFiなどの無線LAN環境が整っている場合はHotspot Shieldというものを追加でインストールする必要がある。

※yahooツールバーを追加でインストールするかどうか聞かれるのでチェックをはずす。



インストールが完了したので、実際にgoogleまでの通信経路を試してみる。

正常に発信元IPアドレスがアメリカ経由になっている。IPは固定でないため、アクセスする度に変わる。

●通信経路のイメージ

・実際にはVPNによってどのような通信が行われているのかピンとこない人のためにイメージ図を作ってみた。

VPNサーバ(HotSpotサーバ)までVPNの仮想専用線をひき、パケットをすべてVPNサーバを経由してアクセスしたいサーバへアクセスするといった形だ。これにより、自分のISPの通信規制を回避することができる。また、この方法は中国などの国家レベルの規制・監視ネットワーク内からインターネットへアクセスする場合にも通信内容を盗聴されないように安全に通信を行いたい場合などにも利用できる。

ちなみにこれらの使用に関しては自己責任で。

●簡単な語句解説

P2P・・・ポイントToポイント接続。端末PC同士を相互につなぐ通信方式。コンテンツ管理等が非常に難解。

ISP・・・インターネットサービスプロバイダー。回線を提供する人たち(OCNとかPlalaとか)

VPN・・・仮想回線網、インターネット回線を専用線として使うための技術。

●参考文献

・動画の流行で「負け組ISP」が苦境に~インターネットタダ乗り論
http://it.nikkei.co.jp/internet/news/index.aspx?n=MMITbf000010112008

2008/11/11 火曜日

日本の歴史~古代から現代~吾輩はエコである。

Filed under: 未分類 — admin @ 16:45:40

勉強になるなぁ( ´_ゝ`)

まてまてまてまてwww

2008/11/10 月曜日

システムエンジニアになろう~新入社員研修編~

Filed under: 未分類 — admin @ 15:49:48

システムエンジニアとは?

・IT業界のプロフェッショナルであり、7Kと戦っているうつ病になる確率約9割の職業。現代の職業で最も過酷で責任の重い職業で、ブラック企業などでは自殺者が絶えない・・・。

USB3.0のプラグ

Filed under: テクノロジー — admin @ 1:03:21

USB3.0といえば現状の2.0(480Mbps≒60MB/s)の速度を大幅に増加させた4.8Gbps/s(≒600MB/s)の転送速度を誇る新規格だが、そのコネクタはどんなのか?


奥の金属端子に合わせるといったところだ。

そういえば、4.8Gbpsの転送速度といえばHDDの最新規格のS-ATA3.0 (600MB/s)とおなじ速度で現状の2.0のボトルネックが解消される。

サーバからデスクトップやデスクトップからノートPCへ家の中でファイルを転送する場合には、外付けUSBを使ったり、LAN上でファイル転送をするのが簡単だ。

しかし、RAID0などをしてる人には60MB/sは遅すぎるので、パソコン間のファイル転送には1GbpsのLANを使うのが一番高速だ1Gbpsの場合、ネットワークでの転送速度はだいたい125MB/sぐらいでる。

しかし、そろそろ単体の1TBHDDで123MB/sぐらい出るようになってきたので、単体レベルで1Gbpsにもボトルネックの壁が近づいてきた。

USB3.0が市場にいきわたるのはいつになるのだろうか。何気に待ち遠しい・・・。

2008/11/8 土曜日

プーチン首相の公式サイト

Filed under: 未分類 — admin @ 20:32:58

 プーチン首相の公式webサイトで北方領土が日本になってるというので話題になってるけど…。

http://premier.gov.ru/eng/visits/world/

正直どーでもいいーなこれ。別に帰ってくるわけでもないのにねぇ…

2008/11/7 金曜日

CRON ジョブ設定 Linux

Filed under: 開発メモ — admin @ 16:56:01

cronの設定

コマンドを自動実行してくれるcronの設定です。最近のディストリビューションでcronがインストールされないものはないと思います。ただ、 ひょっとすると動いていないかもしれない(自分で止めていない限り動いていると思いますが)ので、ps ax などでcronが動いているか確認してください。動いていない場合は

/etc/rc.d/init.d/crond start

で動かしてください。

/etc/crontab

cronのデフォルトの設定ファイルは/etc/crontabです。Vine2.5では以下のようになっています。

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

最初の4行が環境設定になっています。

SHELL
/etc/passwordの記述に関係なく、強制的にここで定義されたシェルを使います。
PATH
PATHの設定です。
MAILTO
cronの実行結果をここで指定されたユーザー宛にメールで送ります。ユーザー名を空にするとメールを送信しません。ただし、MAILTOの記述自体をしないと、crontabファイルの所有者にメールを送ります(デフォルトではroot)。
HOME
cronを実行する際のホームディレクトリの設定です。

# run-parts以下がcronが実行するタスクになります。

書式は、

分 時 日 月 曜日 (ユーザー) コマンド

です。(ユーザー)は通常必要ありません。

01 * * * * root run-parts /etc/cron.hourly

上記は、毎時1分にrootユーザー権限で「run-parts /etc/cron.hourly」を実行します。run-partsスクリプトは指定されたディレクトリ以下を全て実行するコマンドです。/etc /cron.~というディレクトリを見てみるといくつかのスクリプトがあると思います。

タスクの登録

自分で新たにタスクを登録するには、/etc/crontabに書いてもいいのですが、それだとrootでしか登録ができません(/etc /crontabの所有者がrootなので)。なので実際には別のファイルにタスクを書きます(何度も書きますが、/etc/crontabに直接書いて しまっても構いません)。

タスクを記述するファイルはVine2.5の場合、「/var/spool/cron/ユーザー名」です。rootの場合、「/var/spool /cron/root」になります。emacs等のエディタでファイルを新規作成しても構いませんが、専用のコマンド「crontab」を使った方が楽だ と(私は)思います。

$ crontab -e

とすると実行したユーザー用のファイルを新規作成して、編集できるようになります。デフォルトではviが起動します。viの操作方法は、viを使い倒そう 等を参考にしてください。

記述する書式は、先ほども書きましたが、

分 時 日 月 曜日 コマンド

です。

0~59で指定します。*(ワイルドカード)も使用可能です。
0~23で指定します。*(ワイルドカード)も使用可能です。
1~31で指定します。*(ワイルドカード)も使用可能です。
1~12で指定します。*(ワイルドカード)も使用可能です。また、月の名前の最初の3文字で指定することもできます。jun、julなど。
曜日
0~7で指定します。*(ワイルドカード)も使用可能です。0と7が日曜日で6が土曜日です。また、sun等の名前で指定することもできます。
コマンド
cronが実行するコマンドです。当然実行可能なものでなければいけません。 日付、時間の部分は範囲指定が可能です。例えば1時、2時、3時なら、時間のフィールドに「1,2,3」と書く代わりに「1-3」と書けます。また、何分 おき(あるいは何時間おき)という場合は「*/」の後に書きます。2時間おきなら「*/2」です。「1,4,7,10」は「1-10/3」と書くこともで きます。

10分おきに特定のコマンドを実行するには、

0,10,20,30,40,50 * * * * コマンド

とします。またこれは、

*/10 * * * * コマンド

と書くこともできます。

注意として、書くフィールドは必ず左側から指定するようにしましょう。例えば、毎日1時にコマンドを実行しようとして

* 1 * * * コマンド

なんて書いてしまうと、毎日1時0分から1時59分まで1分おきにコマンドが実行されてしまいます。こういう場合は

0 1 * * * コマンド

などと「分」の部分も指定しましょう。これで毎日1時0分にコマンドが実行されます。

1時間おきなら、

0 */1 * * * コマンド

としたいところですが、単に

0 * * * * コマンド

でも結果は同じです。

cronは実行結果をメールで送ってきます。これが邪魔だと思ったら、「MAILTO=」を追加します。こうすると全ての実行結果が送られないよう になります。特定の実行結果のみメールの送信を止めたい場合は、「コマンド > /dev/null 2>&1」としてください。

crontab -e でタスクを登録したら、

$ crontab -l

としてちゃんと登録されているか確認しましょう。ついでに

$ crontab -r

とすると全てのタスクが削除されます。

cronは1分おきに設定ファイルを監視しているのでタスクを登録してもcronの再起動をする必要はありません。ただし、監視は1分おきなので、 「1時34分30秒」に「1時35分」に実行するタスクを登録してもcronは実行してくれません。これは「1時35分」に新たなタスクが登録されたと cronが認識するためです。

もし、タスクが実行されなかったら、ログファイルを眺めてください。ログは「/var/log/cron」に出力されています。

参考サイト

JMAN:crontab
http://www.linux.or.jp/JM/html/cron/man5/crontab.5.html

PHP 文字エンコード

Filed under: スクラップ — admin @ 13:07:56

PHP による日本語の文字コード判定スクリプト

文字列の文字コードを判定する場合、PHP には mb_detect_encoding() 関数が用意されていますが、文字列が短い場合、判定に失敗することが多くなりますので、もう少し判定率の良いスクリプトを作成してみました。

mbstring(マルチバイト文字列関数) と mbregex(マルチバイト正規表現関数) が必要です。文字コード範囲が重なるような場合は、SJIS-win を優先させています。

各文字コードの範囲については、Perl メモ:文字の正規表現を参考にしました。

/**
 * 日本語文字列の文字コード判定(ASCII/JIS/eucJP-win/SJIS-win/UTF-8 のみ)
 */
function detect_encoding_ja( $str )
{
    $enc = @mb_detect_encoding( $str, 'ASCII,JIS,eucJP-win,SJIS-win,UTF-8' );

    switch ( $enc ) {
    case FALSE   :
    case 'ASCII' :
    case 'JIS'   :
    case 'UTF-8' : break;
    case 'eucJP-win' :
        // ここで eucJP-win を検出した場合、eucJP-win として判定
        if ( @mb_detect_encoding( $str, 'SJIS-win,UTF-8,eucJP-win' ) === 'eucJP-win' ) {
            break;
        }
        $_hint = "xbfxfd" . $str; // "xbfxfd" : EUC-JP "雀"

        // EUC-JP -> UTF-8 変換時にマッピングが変更される文字を削除( ≒ ≡ ∫ など)
        mb_regex_encoding( 'EUC-JP' );
        $_hint = mb_ereg_replace( "xad(?:xe2|xf5|xf6|xf7|xfa|xfb|xfc|xf0|xf1|xf2)", '', $_hint );

        $_tmp  = mb_convert_encoding( $_hint, 'UTF-8', 'eucJP-win' );
        $_tmp2 = mb_convert_encoding( $_tmp,  'eucJP-win', 'UTF-8' );
        if ( $_tmp2 === $_hint ) {

            // 例外処理( EUC-JP 以外と認識する範囲 )
            if (
                // SJIS と重なる範囲(2バイト|3バイト|iモード絵文字|1バイト文字)
                ! preg_match( '/^(?:'
                    . '[x8ExE0-xE9][x80-xFC]|xEA[x80-xA4]|'
                    . 'x8F[xB0-xEF][xE0-xEF][x40-x7F]|'
                    . 'xF8[x9F-xFC]|xF9[x40-x49x50-x52x55-x57x5B-x5Ex72-x7Ex80-xB0xB1-xFC]|'
                    . '[x00-x7E]'
                    . ')+$/', $str ) && 

                // UTF-8 と重なる範囲(全角英数字|漢字|1バイト文字)
                ! preg_match( '/^(?:'
                    . 'xEFxBC[xA1-xBA]|[x00-x7E]|'
                    . '[xE4-xE9][x8E-x8FxA1-xBF][x8FxA0-xEF]|'
                    . '[x00-x7E]'
                    . ')+$/', $str )
            ) {
                // 条件式の範囲に入らなかった場合は、eucJP-win として検出
                break;
            }
            // 例外処理2(一部の頻度の多そうな熟語は eucJP-win として判定)
            // (珈琲|琥珀|瑪瑙|癇癪|碼碯|耄碌|膀胱|蒟蒻|薔薇|蜻蛉)
            if ( mb_ereg( '^(?:'
                . 'xE0xDDxE0xEA|xE0xE8xE0xE1|xE0xF5xE0xEF|xE1xF2xE1xFB|'
                . 'xE2xFBxE2xF5|xE6xCExE2xF1|xE7xAFxE6xF9|xE8xE7xE8xEA|'
                . 'xE9xACxE9xAF|xE9xF1xE9xD9|[x00-x7E]'
                . ')+$', $str )
            ) {
                break;
            }
        }

    default :
        // ここで SJIS-win と判断された場合は、文字コードは SJIS-win として判定
        $enc = @mb_detect_encoding( $str, 'UTF-8,SJIS-win' );
        if ( $enc === 'SJIS-win' ) {
            break;
        }
        // デフォルトとして SJIS-win を設定
        $enc   = 'SJIS-win';

        $_hint = "xe9x9bx80" . $str; // "xe9x9bx80" : UTF-8 "雀"

        // 変換時にマッピングが変更される文字を調整
        mb_regex_encoding( 'UTF-8' );
        $_hint = mb_ereg_replace( "xe3x80x9c", "xefxbdx9e", $_hint );
        $_hint = mb_ereg_replace( "xe2x88x92", "xe3x83xbc", $_hint );
        $_hint = mb_ereg_replace( "xe2x80x96", "xe2x88xa5", $_hint );

        $_tmp  = mb_convert_encoding( $_hint, 'SJIS-win', 'UTF-8' );
        $_tmp2 = mb_convert_encoding( $_tmp,  'UTF-8', 'SJIS-win' );

        if ( $_tmp2 === $_hint ) {
            $enc = 'UTF-8';
        }
        // UTF-8 と SJIS 2文字が重なる範囲への対処(SJIS を優先)
        if ( preg_match( '/^(?:[xE4-xE9][x80-xBF][x80-x9F][x00-x7F])+/', $str ) ) {
            $enc = 'SJIS-win';
        }
    }
    return $enc;
}

文字コード判定の考え方としては、以下のようになっています。

  1. EUC-JP -> UTF-8 への変換してから、UTF-8 -> EUC-JP を行った場合、逆変換に成功することは少ない
  2. まず、文字コードがあいまいな文字列を EUC-JP として検出させ、1. より、EUC-JP で無いことを確認した場合は SJIS か UTF-8 を判定
  3. EUC-JP での逆変換に成功した場合、SJIS と文字コードが重なる部分は SJIS を優先
  4. EUC-JP でない場合、UTF-8 と仮定して逆変換に成功した場合のみ UTF-8 として検出
  5. 例外は個別対応

この文字コード判定スクリプトには以下の問題があります。

  • 少し重くなる
  • PHP の mbstring に依存している(汎用性がない)
  • EUC-JP のいわゆる半角カタカナ(\x8e[\xa1-\xfc])や、EUC-JP の一部の文字([\xe0-\xea][\xa1-\xfc])のみで 構成される文字列は SJIS-win として判定される
  • UTF-8 の一部の記号(数学記号とギリシア文字の一部)が含まれる文字列が eucJP-win として判定される

使用方法としては、以下のように文字コードが分からない日本語文字列を UTF-8 に変換するような関数を作成する場合に便利です。

function convert_utf8( $str )
{
    $encoding = detect_encoding_ja( $str );
    return mb_convert_encoding( $str, 'UTF-8', $encoding );
}

2008/11/3 月曜日

次世代ネットワーク 1Gbps の世界

Filed under: テクノロジー — admin @ 17:04:44

次世代のインターネットでは携帯が現状のネットワークの速度(100Mbps)を使うのが主流となる。そこで現状の数百倍の通信料になるであろう予想できるが、現状としてはP2Pの帯域で苦しんでいる時点ではどうなのよ…とか思うわけでー。じゃあ、解決方法は何かないの?ってことで、次世代ネットワーク技術の研究文献についていろいろ探してみてたら、参考になりそうな文献を発見。

先進ネットワーク研究成果発表(大学院情報科学研究科)
http://www.anarg.jp/achievements/web2007/research_2net.html

おもしろそうな技術がいろいろ・・・ 実現はいつになるかな?

次のページ »

HTML convert time: 0.184 sec. Powered by WordPress ME