Windows 2008 Server をクライアントとして使ってみた

勝手に

Windows 2003 Server <=> Windows XP

Windows 2008 Server <=> Windows Vista

かと思って,Vistaの代わりに使ってみた.

印象としては,これはサーバ用OSであってクライアントとしての利用は駄目(カスタマイズすれば使えるかも知れんがデフォルトでは無理かと).

まず,クラシックのテーマが個人的には使いにくいので無理なのと,セキュリティの設定が高すぎ.

Vista以上にセキュリティ絡みの警告がうざい.

ということで,1日使ってあきらめてVistaに戻した.

今,アカデミックアライアンスで手元に

  • Windows Vista
  • Windows Vista x64
  • Windows 2003 Server
  • Windows 2003 Server x64
  • Windows 2008 Server
  • Windows 2008 Server x64

があるので,いろいろ試し放題.

Webページの応答を異常に遅らせる方法

管理しているWebページで,見ることはできるのに,なぜか異常にレスポンスが悪い,ソースコードも正しく受信しているのに,なぜか画面にレンダリングされない,ということが起きていました.

原因を探った結果,存在しないcssファイルを参照していたことが原因でした.cssファイルにアクセスしたときに,ファイルが無いためにリダイレクトされてNotFoundなページに飛ばされ,それを受信したけどCSSとして読めない,みたいな.

無事その参照している部分を削除したらレスポンスが戻りました.

テレビ出演

作ったプログラムがテレビ出演&新聞に載りました.

テレビはほとんど先生へのインタビューで終わった….

NHKの記事はこちら

防犯カメラの映像を自動的に処理して、映っている人を棒のような画像に置き換えるシステムを、京都大学などの研究グループが開発しました。グループは、このシステムを利用すれば、プライバシーを保護しながら、防犯カメラの画像をインターネットに公開して活用することができるとしています。

研究的には,プライバシ問題を気にすることなくカメラなどのセンサ情報を公開してどこからでも誰でもアクセスできるような枠組みであるセンシングウェブを目指すものです.

そんなプロジェクトで研究・開発やってます.

i18nizer.cpp

C++でもi18nizer作ってみた.

文字列の区切りに正規表現を使えなかったので,ちょっと仕様が変わりました.

#include <string>
#include <iostream>
#include <sstream>
std::string i18nizer(const std::string& str){
std::ostringstream oss;
bool isPeriod=false;
int length=str.length();
if(str[length-1]=='.'){
isPeriod=true;
length--;
}
if(length < 3) return str;
oss << str[0] << str.substr(1,length-2).length() << str[length-1];
if(isPeriod) oss << ".";
return oss.str();
}
int main(int argc,char *argv[]){
std::string line,token;
while(std::getline(std::cin,line)){
std::istringstream iss(line);
while(!iss.eof()){
iss >> token;
std::cout << i18nizer(token) << " ";
}
std::cout << std::endl;
}
return 0;
}

Pythonでi18nizer

Python勉強中なので,Pythonでi18nizer.pyを作ってみた.

コードは以下.

#!/usr/bin/env python3
import sys
import re
def i18nize(token):
length=len(token)
if(length > 2):
val=str(len(token[1:length-1]))
return token[0:1]+val+token[length-1:length]
else:
return token
r = re.compile(r"[A-Za-z0-9]+|\.|,")
while 1:
line=sys.stdin.readline().strip()
if not line:
break
list=r.findall(line)
for token in list:
print(i18nize(token),end=" ")
print()

Python3版です.慣れない言語だとスマートに書けない..

スーパーカリフラジリスティックエクスピアリドーシャスに対してi18nizer

長い単語で有名な Supercalifragilisticexpialidocious に対して,i18niserを実行してみると・・・

S32s

が正しく出力された.

ついでに,世界一長い英単語(1913文字)

Methionylglutaminylarginyltyrosylglutamylserylleucylphenylalanylalanylglutaminylleucyllysylglutamylarginyllysylglutamylglycylalanylphenylalanylvalylprolylphenylalanylvalylthreonylleucylglycylaspartylprolylglycylisoleucylglutamylglutaminylserylleucyllysylisoleucylaspartylthreonylleucylisoleucylglutamylalanylglycylalanylaspartylalanylleucylglutamylleucylglycylisoleucylprolylphenylalanylserylaspartylprolylleucylalanylaspartylglycylprolylthreonylisoleucylglutaminylasparaginylalanylthreonylleucylarginylalanylphenylalanylalanylalanylglycylvalylthreonylprolylalanylglutaminylcysteinylphenylalanylglutamylmethionylleucylalanylleucylisoleucylarginylglutaminyllysylhistidylprolylthreonylisoleucylprolylisoleucylglycylleucylleucylmethionyltyrosylalanylasparaginylleucylvalylphenylalanylasparaginyllysylglycylisoleucylaspartylglutamylphenylalanyltyrosylalanylglutaminylcysteinylglutamyllysylvalylglycylvalylaspartylserylvalylleucylvalylalanylaspartylvalylprolylvalylglutaminylglutamylserylalanylprolylphenylalanylarginylglutaminylalanylalanylleucylarginylhistidylasparaginylvalylalanylprolylisoleucylphenylalanylisoleucylcysteinylprolylprolylaspartylalanylaspartylaspartylaspartylleucylleucylarginylglutaminylisoleucylalanylseryltyrosylglycylarginylglycyltyrosylthreonyltyrosylleucylleucylserylarginylalanylglycylvalylthreonylglycylalanylglutamylasparaginylarginylalanylalanylleucylprolylleucylasparaginylhistidylleucylvalylalanyllysylleucyllysylglutamyltyrosylasparaginylalanylalanylprolylprolylleucylglutaminylglycylphenylalanylglycylisoleucylserylalanylprolylaspartylglutaminylvalyllysylalanylalanylisoleucylaspartylalanylglycylalanylalanylglycylalanylisoleucylserylglycylserylalanylisoleucylvalyllysylisoleucylisoleucylglutamylglutaminylhistidylasparaginylisoleucylglutamylprolylglutamyllysylmethionylleucylalanylalanylleucyllysylvalylphenylalanylvalylglutaminylprolylmethionyllysylalanylalanylthreonylarginylserine

に対してやると,

M1911e

と正しく出力された.

i18nizer

どんな文字列もi18n な表記に変えてしまうスクリプトをRubyで書いてみた.

#!/usr/bin/env ruby
# i18nのような表記に変換するブロック
i18nize=lambda do | token |
if token.length > 2
num=token[1..token.length-2].length
token[0,1] + num.to_s + token[token.length-1,1]
else
token
end
end
# メイン部分
print $_.scan(/[A-Za-z0-9]+|\.|,/).map(&i18nize).join(" ")+"\n" while gets

これをi18nizer.rbとして,サンプル文字列(test.txt)

This is a sample.
Kore ha Test desu.

という文字列を入力として実行してみる.実行方法は次の通り.

% ./i18nizer < test.txt

すると,

T2s is a s4e .
K2e ha t2t d2u .

という結果が出力される.

i18n

i18n(internationalization, 国際化)という言葉がある.

似たものに,L10N(Localization, 地域化)という言葉がある.

Wikipediaによれば,

情報処理における国際化と地域化(こくさいか (英語: Internationalization または Internationalisation、i18n と ちいきか(英語: Localization または Localisation、L10N)は、ソフトウェアを開発した環境とは異なる環境、特に外国や異文化に適合させる手段である。国際化はソフトウェアに技術的な変更を加えることなく多様な言語や地域に適合できるようにする、ソフトウェア設計の工程である。地域化は地域固有の構成部品や翻訳テキストを追加することによって、ソフトウェアを特定の地域や言語に適合させる工程である。

つまり,簡単に言えば各国語対応バージョン.

ところで,なぜ internationalization が i18n なのか?以前からこのi18nという文字列の意味は気になっていたが,昨日たまたま本を読んでいたらその由来が載っていた.

i nternationalizatio(18文字) n.つまり,iとnの間に18文字!L10Nの方も,L ocalizatio(10文字) N.

なんと.