スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ちょっとまておかしいだろ

TwitterアカウントMSに教えるようなことしていないのに、MSNのトップページに自分のつぶやきが表示されてる…!!!???

いつの間に抜かれたんだ?
スポンサーサイト

Google App Engine 触りに行ってみた

snapshot-app-engine

** Google App Engineを触ってみた感想とか
某日曜の面々と、某Pythonの勉強会に行ってみた。
本来はDjangoというWEBフレームワークの勉強会だったのだけれど、たまたまハンズオンでGoogle App Engineを取り扱っていたのでそちらを見てみた。

今日一日では、まだDjango自体も把握しきれなかったけれど、とりあえず一度導入すると色々な部分が楽になりそうだというのは把握した。

6月に、javaの方のApp-Engine勉強会があるとのことで、そちらの方は要チェック。
またPHPの滑らない話(※)みたいなのを見てみたい。


※PHPの上にPythonインタプリタを実装してDjangoを動かそうとする話とか、javaの上にPHPインタプリタを展開してGoogle App Engine上でPHPを展開してみようなどの、PHPの中の人がする滑らないお話。ちなみに、中の人曰く"PHPの"コードはあまり書かないで、"PHPを"書いているそうな。


* * *

やっぱり居るところには居るんだな。
面白い人々が。

70人近く人がいるのに、非Mac(=:Windows)が明らかにマイノリティでワラたよ。
しかも、数少ない非Macの人も、どういうわけかOSx86入れてたりCentOSでやってたり、VMで違うOSでやってたり何か妙な光景だったよ。
Python自体はインタプリタ方式の言語だから、プラットフォームさえ整ってればOSとか関係無いはずだけれど、リンゴが机一列に並んでるの見たときは吹いた。

あと意外だったのは、emacs派よりvim派の方が結構居たこと。
vimは非常用くらいの認識でしかなかったけれど、これを機会に少し触る時間設けてみようかな。


重大な勘違い?

今まで考えていたインフラと、人工知能関連の話の間に、何か重大な勘違いがあったかもしれない。
まだ整理し切れてないけれど、書き途中のトピックも載せて見る。

**何を思って論文を調べているのか

以前調べた論文では、
「提案されたモデルに一連のパターン候補――系統樹、線形順序、多次元空間、環、順位制、クリークなどにデータを流し込み、データに最も適合する関係性の型を判定する」
という部分で、汎用的なデータマイニング、メタコンピューティング的な何かに惹かれたんだと思う。

今自分が感じているのは、
今日の「人工知能的な分野」とされている様々な取り組みは、それぞれの方法がある分野における局所最適解のようなソリューションになりはしても、それぞれ単体の方法では本来目指している強い「人工知能」のようなものにはなりえないのだと思う。

だって、実際うまくいった例がないんだもの。
ローブナー賞を取っているプログラムですら、残念な事に実生活に密着したファンクションと結びついて有用な機能を提供しているわけではない。

それに、既存の人工知能ぽいソフトウェアは、いずれも稼働時間が極端に短い。
人間の子供ほど長い時間学習を続けて定量的な出力を出しているモノはそうはないのではないだろうか。

また、40億以上のオブジェクトを並列動作させ、長期間活動させて定量的な出力を得ようとしたと言う話も見たことが無い。

単に知らないだけだけれども、それで何か面白いことが起きたという話も今のところ見かけない。
Earlangなどはその良いテストヘッドになりそうだけれど…まぁ40億のHelloWorldを持ったオブジェクト作ったらどうなるか一度試してみないことにはなんとも言えない。

見た目だけなら殆どヒューマノイド的なモノは既に産総研が作ったけれど、肝心の頭の中身は相変わらず人間がリモコンを握っている。


だから、それぞれの突出した「人工知能的な分野」に進むより、もっとメタコンピューティング的な、もう少しモノを組み合わせるなり、あるいは汎用的なデータマイニング(構造パターン分析?この辺も曖昧で…)のような手法を取るなり、といったような方向を勉強してみたい。

もちろんそれぞれの細かい分野は一通りさらう必要があるだろうけれど、それはそれぞれの分野をチューニングしていくようなリサーチの仕方ではなくて、あくまでも使い方とそれぞれの意味を知るという点にとどめたいと思う。
あるいは、もしかしたらその過程で何か面白いものが見つかるのかもしれない。


---- ここから非常にあやしい -----

人間は非同期な超分散処理のプラットフォームである。
非同期処理は、同期処理の上で一応シミュレート可能なはず。

理由:
* ハードウェアが同期処理を取っている以上、非同期はシミュレートである
* ハードウェアが同期を取る処理である以上、その上にソフトウェアで同期を取る処理を行うレイヤがあっても、その上に非同期をシミュレートするレイヤを展開可能である。

人間が非同期の分散処理プラットフォームならば、コンピュータ的には働くプログラムは当然パラレル(並列)であることが必要であると考える。

ここで、「強い人工知能」が働く仕組みを考えたとき、人工知能とは一種の仮想化されたレイヤの上で動く、一定の領域を持った「式」での表現が可能なのではないかと思う。

仕組みの根底は非常に単純な数式になりそうだけれど…この辺はまだもやもやしてる。

命題として、
「必要な計算リソースを、必要なだけ提供されるメモリ空間Aがあったとして、そこで実装された強い人工知能が稼動する」
と考えたら、少なくともその要素として

* メモリ空間Aに「強い人工知能」のための領域Dを持つ
* ある「強い人工知能」は自身に関連したサブ領域をD内に持つ
* それぞれの計算は非同期に生じる
* 領域Dから離れたサブ領域は、領域Dにおける「強い人工知能」の処理と相関を持たない
* 定量的な出力とは、出力のための領域OUTに集約されてある一定時間内にまとまって得られたものである。

実際はそれぞれが非同期に写像を取ったり、領域間で連携(接続)や領域自体の成長などが考えられる。
メモリ空間だと分かりづらいなぁ。
要は線形台数と応用解析がごっちゃになったような状態。
単位メモリあたりのそれぞれの計算は線形台数の行列のよう(当然それぞれは線形独立)だし、領域間の関係は複素関数のようだ。(実際に内包されていなくても、計算の末尾にアドレス解決を入れればもう物理的な場所は関係なくなる)
非同期とはいえ線形的な構造を取れれば、処理の予測や産業連関的なこと、定理証明にタスク間連携を取るなど何かありそう。


グリッドやコンカレント(並行)インフラを調べているのは、つまり、上の命題で言う「必要な計算リソースを、必要なだけ」ロードバランシングされる環境 = 人工知能のためのレイヤを考えてのことだ。

計算のためのコンポーネント(要素というかモジュールと言うか)それぞれの負荷は大分違うにしても、いくら非同期とはいえ定量的な出力を得るためには最終的な旗振り役が必要だ。
そのためのコンカレントなインフラで、これは非同期処理のための一種の仮想化であると考える。

下はコンカレントで上はパラレルなインフラの例としては、今のクラウド・コンピューティングはOS環境ですら仮想化したイメージをリソースプールに動的にロードすることによってユーザに提供(Amazon EC2など)している。
ユーザは、それぞれ任意のタイミングでOSのイメージをクラウド上に展開するが、その下で動いているハードウェアの連携は、グリッドコンピューティング的なものに支えられているのだ。


そしてまた、このインフラが提供する仮想化のレイヤの機能は出来る限りプラットフォームに依存する形ではいけないのだと思う。
レイヤは、プラットフォーム間の違いを吸収できなければならない一方で、スケールアップ・スケールダウンの妨げになってはならない。
コンピュータ・ソフトウェアの強いところは、リソースが許す限りいくらでも拡張が可能なこと。
その強みを抑える必要は無いと思う。

そしてこのレイヤに求められる仕様はシビアで、文字通り計算機のあらゆるリソースへの最大限のアクセスが可能でなければならないと思う。
そのためには、プログラミング言語間の違いを超えなければならないし、必要なら外部から実行したりラッパーを挟んででもその機能を引っ張ってこれるようでなければならない。
その試みは、去年CASIOPEAというjavaのOSモドキを作って、予め定義していないクラスのメソッド、インターフェースの機能をJVMの実行中にロードして、javaの型制約に縛られずに引っ張ってこようとした(ある程度はうまくいったが、完全ではない)事で何とかしてみようとしたことがあった。
何でjavaかというと、単に様々な言語の技術をうまくバインドするために都合が良いだけ。
その点ではC#も有りかもしれないが、制約が強いモノの上により自由なレイヤを被せるほうが安全な気がする。


いずれにせよ、何らかの形で人工知能が実装されるとしたら、今自分達が使っているコンピュータの仕様に新しいレイヤを重ねるような形になるのではないかと思う。

過去に、Unixの次を目指したPlan9というOSがあったけれど、今やその機能は既存のOSに新しいレイヤとして取り込まれただけで代替されてしまった。
だから、わざわざ既存のコンピュータ環境の一番下の層を置き換える様とするような事をしても、パフォーマンスの改善や構造の美しさを得たところで、極論を言えばWindowsを置き換えるほどの市民権を得ることが出来るとは思えない。
それが出来るとしたら、今までのモノとは動作概念が全く異なるプラットフォームが出た場合のみ。

フォン・ノイマンコンピュータを捨てればいいのかしら。

…フォン・ノイマン型コンピュータを捨てる程の、余りあるメリットがあるとしたら何だろうね。


結局、色々複雑な事がインフラ的なレイヤとして存在はするのだけれど、そのレイヤの個々のコンポーネントは間違いなく独立して然るべきだし、その上で動く人工知能のプログラムは非常にコンパクトな数式に収まるのではないかと踏んでいる。

もしかしたら、人工知能は一種のネットワークプロトコルなのかもしれない。
あるいは、物事の自動化を推し進めた究極的に行き着く先のインターフェースなのだと思う。

---- ここまで非常に怪しい ----

結局のところ、計算リソースが問題の本質じゃない。
データやパターンの解析から何らかの構造を導き出すなど、非同期に解析した上での状態変化の方が問題。

何より、計算時間がかかろうともある程度頭の良い人工知能ならば、コンピュータのコントローラが人間と同じ数だけあれば(キーボード、マウス)それ以上の拡張は必要ないのかもしれない。
あらゆるローカルリソースへアクセス可能なのはアドバンテージとしては有効だけれども、必須ではないのかもしれない。

バインドとして様々な機能へのアクセスする余地を残すことはプラットフォームとして非常に重要だけれども、全部へのアクセスは時間的に厳しい気がする。

この辺が何かおかしいな。
先ほどもこの記事書いていて、コンカレント(並列)とパラレル(並行)がごっちゃになっていたし。
言葉の使い方も相当気をつけてみたつもりだけれど、前提が間違ってそうだし、定義にせよ何にせよ、話がうまくまとまりきらない辺り半人前以下ですぉー…

自動バックアップ(rsync)

**概要
データのバックアップを自動化するための方法について。
*nix/windows 両方対応。
1個目の参考URLに殆ど書いてあるので、あんま細かく書きません。
ここではそれぞれの内容について注意点や説明を紹介。



**参考URL
* rsyncとsshで別のマシンにバックアップ
* はじめてrsyncを使う方が知っておきたい6つのルール
* 【 crontab 】 プログラムを定期的に実行するcrondの設定ファイルを編集する
* タスク・スケジューラとWSHで定例処理を実現する



**利用ツール
rsync、ssh、cronを使う。

rsync は、サイズがすぐ大きくなるファイルの転送に適したオープンソースのユーティリティです。
一回目のバックアップ以降はデータに変更があったものだけ(差分)を取ってきます。
通信には、デフォルトでsshを使います。
ssh は、暗号の技術を利用して、安全にリモートコンピュータと通信するためのユーティリティです。※1
cron は、 *nix系OSで使われるタスクの自動実行をするためのデーモンです。※2

※1 正確にはプロトコルだが、ここではOpenSSH辺りをさしていると思えば良い。
※2 windowsでは、タスクスケジューラで代用する。

[ *nixの場合 ]
大抵は ports,apt,yum などパッケージで入手可。

  • rsync
  • ssh
  • cron

[ windowsの場合 ]

cwRsyncという、cygwinの最小機能を同梱したものを利用できます。
これの良いところは、cygwinのインストールをしないでその機能が利用出来る点です。

  •  cwRsync
  •  タスクスケジューラ(スタート > プログラム > アクセサリ > システムツール > タスク)

    cwRsyncのインストーラがココから手に入ります。
    インストールしたら、Windowsの環境変数に C:\Program Files\cwRsync\bin\ を追加する。

rsyncとsshはバックアップ元とバックアップ先の両方にインストールされている必要がある。特に接続先となるPCにはサーバプログラムの sshd が立ち上がっている必要がある。




**sshによる自動ログイン

リモートのPC(sshdを立ち上げている事が前提)で、ssh-keygen コマンドでパスフレーズの無い鍵を生成する。
パスフレーズが無いだけで、鍵が同一になることは無い。
デフォルトでは、1024bitのRSAキーの秘密鍵(id_rsa)、公開鍵(id_rsa.pub)のペアが~/.sshに生成される。
生成された公開鍵(id_rsa.pub)は、デフォルトでは~/.sshにあるため、これを authorized_keys に追記する。

  cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  chmod 700 ~/.ssh/*
  sudo /etc/rc.d/sshd restart 


また、秘密鍵(id_rsa)はもう一方のPCの.ssh以下辺りにコピーしておく。
これらのファイルは実行時にOwner権限が必要なのでchmod 700を忘れないこと。



**rsyncによるデータ転送
rsyncの基本的な構文は以下のようになる。

  rsync [オプション] コピー元 コピー先


コピー元とコピー先をひっくり返せば、そのままバックアップからリストア(復元)のコマンドにすることが出来る。
実際使うときはこんな感じ

  $rsync -avr --progress -e "ssh -i ~/.ssh/id_rsa" user@192.168.0.1:~/serverdata ~/backups


手前がリモート、後ろがローカル(バックアップ先)。
この方式では、データを外から引っ張ってくる感じになる。

なお、この例で指定したオプションは
-a : パーミッションなどのデータの状態をそのまま保持して転送する、通称アーカイブモード。
-v --progress : 転送状態を表示する
-r : 再帰的にディレクトリを取り出す
-e "シェル名 シェルオプション" : sshをオプション付きで実行。

ssh -i で、指定したrsa秘密鍵を使用する。
ここでさらに、--deleteオプションを指定すれば、バックアップ元で消滅したファイルがあれば、バックアップ先のファイルも消滅する、完全同期が可能となる。
ただし、ホームディレクトリなどでうっかりやると他のデータが飛ぶので注意が必要。

・・・自分は、危うくシステムデータ吹き飛ばしかけた。



**バッチファイル/シェルスクリプト
先のコマンドを、何かのシェルスクリプト/バッチファイルに書いておいて保存しておきます。
後で、このスクリプトをタスクスケジューラやらcronやらに自動実行させれば良いです。
ここでは、[年月日付]という名前のディレクトリにバックアップを取るスクリプトを紹介します。

[ *nixの場合 ]
backup.sh

  #/bin/sh
  DAY=`date "+%y%m%d"`
  $rsync -avr --progress --delete -e "ssh -i ~/.ssh/id_rsa" user@192.168.0.1:~/serverdata ~/backups/$DAY


特にdateコマンドの周辺はバッククオート「`」ですよシングルクォーテーション「'」じゃないですよ。
特にdateコマンドの周辺はバッククオート「`」ですよシングルクォーテーション「'」じゃないですよ。
特にdateコマンドの周辺はバッククオート「`」ですよシングルクォーテーション「'」じゃないですよ。

大事な事なので3回太字で書きました。
過去にこの違いに気づかなくて、うん時間もうなっていた事がありましたので。(阿呆

[ windowsの場合 ]
backup.bat

  SET DAY=%date:~-8,2%%date:~-5,2%%date:~-2,2%
  $rsync -avr --progress --delete -e "ssh -i ~/.ssh/id_rsa" user@192.168.0.1:~/serverdata ~/backups/%DAY%



指定したパスに存在しないディレクトリは、ローカルだろうがリモートだろうが勝手に生成してくれます。
それにしても、winのバッチファイルの書きづらさは最悪さ・・・日付出力のオプションが無いため、後ろから出力された文字列を削ったのを3回連結してるんです。
区切り文字に変更不可の / を入れるの考えたの誰だよ。



**タスクの自動化
windowsならタスクスケジューラに、*nixならcronにスケジュールを登録するのが妥当。

[ *nixの場合 ]
sudo crontab -e コマンドで、vi が起動してcrontabを編集出来る。
sudo したのは、root権限でなければデータ転送に支障がでるから。
cronの構文がよくわからなければ、これを使うと早い。
基本構文は [ 分 時 日 月 曜日 コマンド ] でワイルドカード指定など可能。

  0 0-23/12 * * * ~/backup.sh # 12時間毎
  0 0 * * * ~~/backup.sh #24時間毎



[ windowsの場合 ]
タスクスケジューラに登録しませう。(投




個人的な方針として、バックアップを取っていることを悟られないようにするために、日付毎のプル型バックアップを紹介しました。
リストアはバックアップ元と先を入れ替えるだけです。
本文では便宜上バックアップと書きましたが、気持ち的にはデータの同期を取る感じです。

大雑把に書いたので、不備があったらごめんなさい。

SI と Network Security

ネットワークセキュリティHacks 第2版 ―プロが使うテクニック &ツール 100+ネットワークセキュリティHacks 第2版 ―プロが使うテクニック &ツール 100+
(2007/06/18)
Andrew Lockhart

商品詳細を見る


先日、某所でサーバのセキュリティ周りの相談話が挙がったので読んでみた。
当面の目的はログの収集の効率化だが、通読してみた感じではもう少し突っ込んで対策を練る必要がありそうだ。

しかし、これだけのツールとノウハウがそろっていながら、何故これらをまとめて自動設定するような類のものが存在しないのか。
あるいは、それをまとめて管理するモノが存在しないのか。
単にライセンスの問題だけだろうか。
今まで、いくつかのネットワークサービスの仕組みを見てきたが、どれも導入のためにソフトウェアが分かれすぎている。
そして、皆同じようなHowToを読んで同じ様な事を手打ちで行っている。

無駄。
はじめは勉強にはなるが、安定した環境を構築できたならば同じ手順は何度もいらん。
make を否定するつもりではない。
パッケージを使わないのならば最初の一回のbuildは必要だし、取得した本番用バイナリが収まったworkディレクトリの収まったports の tarボールを作っておけばいい話。
しかし、ソースコンパイルには1つのアプリケーションに付き、導入に際して必要なコマンドは大抵以下で
cd, configure,make, make install, cp, chmod xxx ,etc...
どんなに少なくても、make,make install,cp(設定ファイルの数だけ) は必須。
こう考えると、大抵のプログラムの設置・設定手順は実装のおき場所が異なるだけで
殆ど一緒だと分かると思う。

何で決まったソースコンパイル手順やらリストアに何度もコマンドを打たねばならないのか。
こういった作業は、仕組みが分かっているならばまとまりとして扱った方が早いはずだ。
(なお、ここでsysinstallやaptを思い浮かべる人が居るかもしれないが、あれは単なるインストーラで、基本的に環境の構築やリストアのためのものではない。)

この本でセキュリティについてざっと調べただけでも、その必要部分を網羅しきった上でシステムの利用を始めるためには時間のコストがかかりすぎる。
安全のために支払うべき対価であることは確かだが、何故これだけのノウハウが文書に出来て同じような作業を皆一からやるのかよく分からない。
システムのゴーストを吸い出すほうが手っ取り早いにしても、導入の手間としては二回目以降は全部楽にして然るべきだと思う。
人が良く使うアプリケーションほど、運用のためのノウハウと実アプリケーションがバイナリとして密接に結び付けられて提供されている例を殆ど見たことがない。

インストール、コンフィグ、アップデート、パッチ、バックアップ、リストア

この辺の自動化と管理の統合がミソのような気がする。
まぁ当面必要な事はおよそ把握したものの、きちんとした形を考えるにはもうしばらく頭を整理しないとまとまりそうにない。

運用の事もあるわけで。

----

学科の勉強がヒト段落したら、春休み辺りに、そろそろ集合知プログラミングとゲームAIの本、物理シミュレーションの勉強も始めたい。
(どれも実用的な良い本を見つけた。仕組みを勉強しつつ実装面を掘り下げていきたい。とにかく実力つけたい。言語毎の実装の違いとか凄い研究したい。ゲームが絡むと、大抵パフォーマンスを要求されるような問題に対する考え方が良く書かれていて参考になると思う)
これまでインフラの仕組みをずいぶん掘り下げてきたが、そのインフラを使って動かしたいものについての勉強が殆ど進んでいない。

インフラ周りでは、セキュリティとパフォーマンスの改善、データベースの取り扱いの勉強を重点的に行っていかねばならない一方で、やはりその上で動くものの勉強もせねばならぬ。

学科の勉強ともリンクさせる時間も作らなければならず、さらにそれをうまく体系化してまとめておかないと役に立たない。
それとは別に、今まで取り組んできたことを一度整理する必要もあるわけで。

時間がぁぁぁぁぁぁぁ
院に行きたい。

カウンター

プロフィール

Hatabon

Author:Hatabon
日々精進。
基本的に管理人はゆるやかな人です。
コメントへの返信もゆるやかです。

Twitter on FC2

最新記事

最新コメント

月別アーカイブ

カテゴリ

検索フォーム

全記事表示リンク

RSSリンクの表示

リンク

  • pagetop
Copyright © Hatabon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。