カテゴリー
Network Server Tech

宇宙人と会おう!SETI@homeのすすめ

余らせているPC、スマホありますか?

ありますあります(食い気味)

眠らせておくのももったいなかったのでSETI@homeに登録し、宇宙人発見に貢献しようかと思いました。

SETI@homeとは?


SETI@home(セティアットホーム)はインターネット接続されたコンピュータ群を使うボランティア・コンピューティングプロジェクトで、アメリカ合衆国カリフォルニア大学バークレー校Space Sciences Laboratory
 が運営している。SETI は “Search for Extra-Terrestrial Intelligence”(地球外知的生命体探査)の略で、SETI@homeはSETIの一部である。SETI@homeは1999年5月17日に一般公開された


出典: フリー百科事典『ウィキペディア(Wikipedia)』

宇宙からきた電波を解析して宇宙人を探そうというそういうことですな。

ちなみに、筆者は都市伝説が大好物なのでSETI@homeはいい栄養ドリンクになりそうです。

BOINCを使って環境を手軽に構築する

アカウントの作成

下記サイトからSETI@homeプロジェクトに登録します。

https://setiathome.berkeley.edu/

こんな感じでアカウントを作成します。

BOINCのインストール

使っていないPCやAndroidの端末を用意したら、BOINCのインストールをします。

https://boinc.berkeley.edu/download.php

↑のページからBOINCをダウンロードしましょう。Windows, Mac, Linux, Android多種多様あります。

BOINC Managerの動作と実績

インストールされるとこんな感じでタスクをインターネット上からダウンロードし、分散コンピューティングで計算します。

GPUのあるPCだと、設定によってはGPUも使ってごりごり計算します。

計算の単位は、タスクとして分割されタスクの計算が終了するとインターネット上に結果を送信し検証され、検証OKとなると個々の功績値としてカウントされます。タスクごとの功績値はタスクの難しさによって変わります。

また、一つ一つのタスクをグラフィックとして表示することも出来ます。

今回とってきたタスクには雑音しか入っていなかったぽいですね。

宇宙人発見の功績はいかに?

気になる筆者の功績はいかに?

こんなもんです。

しばらく動かすので功績は増えていくと思います。

カテゴリー
Server Tech

AWS 認定ソリューションアーキテクト–プロフェッショナルに16.5時間で受かる方法

AWS認定ソリューションアーキテクトプロフェッショナルに合格しました。

毎度このたぐいの試験は落ちてもお金が失われる(大事)以外、さほど痛手もないので、準備不足ぎりぎりを攻めるのですが、今回は特にぎりぎりだったので記事にします。

前提

筆者は業務でAWSを使ってます

なので全く触ったことがない人にはあまり参考にならないかもです。

が、プロ資格ともなると知らないことばかり問われます。

そういった意味では初学者でもある程度参考になるかと。

ちなみにオンプレの知識はそこそこあり(仮想化、ストレージなど)、ネットワークの知識もCCNA程度ならあったりします。

わからない問題はとりあえず培ったオンプレ知識からつぶしていく。

そう言ったやり方もあると思うんです。だってブラジルの人…

カテゴリー
Server Tech

Google認定資格データ エンジニアに合格しました。

Google~

受けたら受かりました。

Google Certified Professional DataEngineer

GCPの基礎知識に加え機械学習系の知識が多く求められる認定資格だったと思います。

試験も手応えがあり、落ちたと思って結果送信ボタン押したら受かりました。

 

合格自体は8月にしましたが、Googleからジャージが届いたので写真を上げるついでに記事記載しました。

 

 

 

受けるに当たっていくつかポイントを上げるとしたら、TensorflowについてはEstimateAPIまで知らないと難しいです。

むかしTensorflow触ったから大丈夫という人は最新のTensorflowをもう一度触ってみるといいかもしれませんね。

あと、データベース。正直紛らわしい。

 

カテゴリー
Server Tech

電源障害

UPSが落ちるとこうなる

たぶん監視者が一番いやな状況が目の前で起きたので。

うわあ。前にてきとーに作ったZabbixマップがおもしろい

こうやって見るとどこが悪いか一発でわかるなぁ。

カテゴリー
Server Tech

Elasticsearchのクラスタ監視をZabbixでする

ZabbixでElasticsearchのクラスタを監視したい、したくない?

Elasticsearchのノードを先日1つ追加しましたので、ちょい傾向とかを確認しようと思いZabbixで監視できるテンプレートとかを作ってみました。

 

Elastic_zab

 

使い方

Zabbixには外部チェックという自作で用意したスクリプトをキックしてその実行結果を取得する機能があります。今回はそれを使ってみます。

 

シェルスクリプトをZabbixサーバに配置する

Elastic_zabに同梱しているelastic.shをZabbixサーバのexternalscriptsディレクトリに配置します。実行権限もZabbixユーザにします。

[code]

$ git clone https://github.com/tubone24/Elastic_zab

$  cp -p Elastic_zab/elastic.sh /usr/lib/zabbix/externalscripts/

$ chown zabbix. /usr/lib/zabbix/externalscripts/elastic.sh

$ chmod 751 /usr/lib/zabbix/externalscripts/elastic.sh

[/code]

 

Zabbixにテンプレートをインストールする

Zabbix画面の設定のテンプレートからelasticsearch_zab.xmlをインポートします。

 

うまくインストールできれば、テンプレート一覧にElastic clusterが出現します。

 

Elasticsearchのノードにテンプレートを当てる

Elasticsearchのノードにテンプレートを当てます。

 

合わせて、ElasticsearchのIPとポートをマクロで設定しておきます。

設定するマクロは以下の2つです。

  • {$ESIP} = ElasticsearchのIPもしくはDNSネームを設定します。
  • {$ESPORT} = Elasticsearchのポートを設定します。

 

監視する

うまく監視できるとこんなグラフができます。

 

おまけ Zabbixの予測関数を使ってみた

いくつかの監視アイテムはforecastやtimeleftといったZabbixの関数を利用しています。

予測は線形としています。

予測値はトリガー設定していないのでお好みでトリガーを設定するのもいいのではないでしょうか。

こんな感じで計算アイテムで簡単に実装できるのが魅力ですね。

 

 

カテゴリー
Network Security Server Tech

仮想セキュリティブラウザというものを作った

ランサムウェアとか怖いですよね

多くの企業で大変問題になっているランサムウェアですが、最近は一般男性を語るランサムウェアもあり… もうやめにしませんか。

そんなことを言ってもやめてくれるような相手ではないのは、一般男性含め周知の事実ですので対策しましょう。

多くの会社で導入されている仮想セキュリティブラウザ

仮想セキュリティブラウザとは、ローカルのブラウザを使わずに、仮想マシン上のブラウザを利用し、そこへリモートで画面転送し、万が一ウイルスに感染しても

ローカルPCもしくはLANに影響を与えないようにするものです。

イメージはこんな感じです。

①仮想マシンが動く基盤をLAN内に設置

②DMZ用のVLANを作成する

③LAN内に入れないところ(DMZ)に仮想マシンを設置し、ウィンドウシステムとブラウザを入れる

④仮想マシンの画面をSpiceなどでアクセスすることで転送する。

我が家では仮想化基盤はKVMを使っています。KVMだと、各仮想マシンの画面を転送する方法として、Spiceを使うことができます。

Spiceでは仮想マシン自体にリモデするわけではなく、基盤側にアクセスすることで画面転送を実現できますので、たとえばネットワークから分離した仮想マシンの画面も転送することができるわけです。(基盤へネットワークアクセスさえできればいい)

この機能を応用してあらかじめ仮想マシンに別のVLANを割り当て、LAN内にアクセスできないようにしておきます。また、

仮想マシン自体がインターネットにアクセスできるようにインターネットへの抜け道は設定しておきます。

実際はこんな感じです。

このようにSpiceの画面転送を見るRemoteViewerを利用しネットができます。

最悪ウイルスに感染したとしてもLAN内には感染が広がりませんし、仮想マシンの削除だけで対処できます。

画面の解像度等調整しないと転送コストで遅くなってしまいストレスに感じるかもなのでそこは工夫しましょう!

カテゴリー
Server Tech

Grafana&World Ping を活用して簡単な死活監視をしてみよう

世の中見た目

どうも。GrafanaのUIは結構かっこいいことで有名で、自身もZabbix APIを活用してZabbixのメトリックをGrafanaで見れるようにしております。

こんな感じ。Zabbixのスクリーンと全く同じ内容ですが、妙に「監視している感」がありますね。

ZabbixのデータはZabbixで見ればいいのでは?

はい。おっしゃるとおりです。そもそもそんな監視するほど重要なものがあるかと言われると。。

でも、Grafanaにはもっと手軽にかっこいい画面を見る方法があります。

GrafanaのWorld Pingを使ってみよう。

Grafanaの優秀な点はPlugin機能で簡単にデータソースやパネルを追加することができる点です。

元々、GrafanaはInfluxDBの可視化用みたいな位置づけっぽいですが、データソースプラグインを追加することで、例えばElasticsearch・Graphiteや、CloudWatch、さらにはkubernetesやDatadogなどのコンテナの監視までできるという優れものです。

また、データソースではないですが、World Pingという世界中のエンドポイントからPing・DNS・HTTPなどの死活監視を提供するサービスと連携させることで、簡単にかっちょいい画面を作ることができます。

こんな感じで好きなプラグインをコマンド一発でインストールできます。

インストールしてみる

まず、Grafanaの入ったサーバでrootユーザで

[code]grafana-cli plugins install raintank-worldping-app[/code]

こうすることで、簡単にプラグインが導入されます。

Grafana.net APIを取得しWorld Pingが利用できるようにする

Grafana Web画面の左側のメニューに「World Ping」が表示されていると思いますのでPlugin Configから、Grafana.net のAPIを発行しましょう。

こうすることでWorld Pingが利用できます。無茶な監視をしない限り、無料版で事足りると思います。

エンドポイントを追加する

監視対象のIPまたはドメイン名をエンドポイントと呼んでますが、エンドポイントを設定していきます。

同じく、Grafana Web画面の左側のメニューに「World Ping」⇒「Endpoints」と進みます。

エンドポイントは無料版だと最大3つです。

このようにEndpointにドメイン名を設定し、監視したいサービスを選びConfigureを押します。

細かい設定等でてきますから、設定していきます。

監視間隔、死活監視を投げるインスタンスの国、ポート、HTTPメソッドなど細かく設定できます。

また、閾値を超えた場合に決められたメールに通知することもできます。(あらかじめメールサーバの設定をGrafana.iniでしておきます。)

一応、無料版だと600万回/月しか監視できないようなので無茶な設定はやめましょう。

アップデートボタンを押せば、設定が完了します。

画面を見る

World Pingがすごいのは、あらかじめGrafana画面を提供している点で、設定さえすればすぐ可視化できることです。

同じく、Grafana Web画面の左側のメニューに「World Ping」⇒「World Ping Home」と進むと、設定したエンドポイントが表示されますので

エンドポイント名もしくはハートマークのサービス名をクリックすると画面が表示されます。

かっちょええ。

カテゴリー
Server Tech

今更!! Chainer 1.6.1 でおしゃべりBotを作ろう

1. なるべくコードはかかない。

何の気なしに機械学習とかの仕事はないものかと、ネットの海をさまよっていたら、

LSTMで自然な受け答えができるボットをつくった という記事を見つけ、何となく読んで、やってみようかなと思ってやってみましたが、Chianer周りとか色々上手くいかなかった。というのがそもそもの始まりです。

 

Chainer周りで日本語の受け答えができますよ、的な記事は2015年頃のものが多く、Chainerがバージョンアップしたため、

色々動かないことがありましたので、少しそちらに修正を加えてChainer 1.6.1でもまともに動くように修正していこうと思います。

自分でコードを一から書くのは嫌なので、あくまでもコードは書かない。微修正にとどめるをモットーにがんばるぞい。

 

[panel]

[h2 text='目次']
[list-ordered]
[li]1. なるべくコードはかかない。 [/li]
[li]2. 参考にさせていただいたコードやサイト [/li]
[li]3. サーバを用意する。[/li]
[li]4. 学習に必要なPython環境とコーパスを整える[/li]
[li]5. 学習させる。[/li]
[li]6. APIで話す。[/li]
[li]7. 付属のHubot Scriptで遊んでみよう![/li]
[/list-ordered]

[/panel]

 

2. 参考にさせていただいたコードやサイト

[list] [li-disc]LSTMで自然な受け答えができるボットをつくった :このコードを元にあらかじめ作成したChainerモデルでおしゃべりBotに命を吹き込みます。[/li-disc] [li-disc]yusuketomoto/chainer-char-rnn :Chainer・日本語界隈では知らない人はいないだろうChainerの言語モデル作成コード。こちらを用いてChainerモデルを作成していきます。[/li-disc] [li-disc]Chainerで学習した対話用のボットをSlackで使用+Twitterから学習データを取得してファインチューニング :学習に必要なコーパスを取得するために一部のスクリプトを使用します。[/li-disc] [/list]

 

3. サーバを用意する。

学習にも、会話にも自宅サーバを用います。

ああ、電気代。

 

4. 学習に必要なPython環境とコーパスを整える

Chainer界隈のコードはなぜかPython2 が多く、Python3 は少ないので、直接Python2をインストールしてもいいのですが…。

なんかOS環境を変に汚したくないので今回はPyenvとVirtualenvを使って実施していきます。

学習用のコーパスをダウンロードするスクリプトはどうやらPython 3.4.1で実装されているようなので Python 3.4.1 と Python2.7 の2種類の環境を作っていきたいと思います。

そして、3.4.1の環境にて学習用のコーパスをダウンロードします。

PyenvとVirtualenvはあらかじめインストール済みとしてすすめます。

PyenvとVirtualenvのインストール方法はこちらの記事が参考になると思います。 (pyenvとvirtualenvで環境構築

 

まず、Pythonの環境を作ります。

[code][font-Source-Code-Pro]$ pyenv install 3.4.1
$ pyenv install 2.7
$ pyenv rehash
$ virtualenv -p ~/.pyenv/versions/3.4.1/bin/python3.4 my_env3.4.1
$ virtualenv -p ~/.pyenv/versions/2.7/bin/python2.7 my_env2.7 [/font-Source-Code-Pro][/code]

続いてコーパスをダウンロードします。

今回はChainerで学習した対話用のボットをSlackで使用+Twitterから学習データを取得してファインチューニング を参考にダウンロードします。

コーパスデータはたぶん二次配布とかNGだと思うので、何とか自分でダウンロードしてください。

対話破綻検出チャレンジ

 

ダウンロードしたあとは展開したJSONデータ全部、devフォルダを作成してその中に入れて、listファイル(JSONファイルのパスを記載したやつ)をdata_load.pyと同じところに作っておきます。

 

こんな感じでlistファイルを作ります。

[code][font-Source-Code-Pro]../dev/1404365812.log.json
../dev/1407143708.log.json
../dev/1407143981.log.json
../dev/1407149923.log.json
../dev/1407208809.log.json
../dev/1407209083.log.json

…… [/font-Source-Code-Pro][/code]

 

Linuxのコマンドで

[code]ls -1 ../dev > list[/code]

で作成できるはず。

 

学習データを作っていきます。

[code][font-Source-Code-Pro]$ source my_env3.4.1/bin/activate

$ git clone https://github.com/SnowMasaya/Chainer-Slack-Twitter-Dialogue.git

$ cd chainer-slack-twitter/utils

$ python data_load.py [/font-Source-Code-Pro][/code]

 

player_1.txt , player_2.txt というテキストファイルができます。

統合する前にmecabを使って分かち書きをしておきます。

分かち書きに mecab-ipadic-NEologd を使うと学習が進むそうですので入れてない方は導入しましょう。

めんどくさい人は ただのMeCabでも大丈夫だと思います。

さて、分かち書きします。今回は mecab-ipadic-NEologd を利用します。

[code][font-Source-Code-Pro]mecab Owakati d /usr/local/lib/mecab/dic/mecabipadicneologd player_1.txt > player_1_wakati.txt

mecab Owakati d /usr/local/lib/mecab/dic/mecabipadicneologd player_2.txt > player_2_wakati.txt [/font-Source-Code-Pro][/code]

 

 

次に使う Chainer-char-rnn 用に一つのinput.txt に統合していきます。統合の際に、player1 と player2の会話ごとに空行を入れておきます。

[code][font-Source-Code-Pro]$ paste -d “\n” player_1_wakati.txt player_2_wakati.txt | awk ‘(NR%2==0){$0=$0″\n”}{print}’ > input.txt [/font-Source-Code-Pro][/code]

 

こちらのinput.txtをコーパスデータとして利用します。

 

5. 学習させる。

学習にはyusuketomoto/chainer-char-rnn を使わせていただきます!

Chainer 1.4.1 で実行しようとしたら微妙に実装が変わっていた用なので、こちらに合わせて今回の学習は、Chainer 1.6.1 で実施していきます。(Chainer周りのコードを読んで修正するより、後に使うTornado周りの修正の方がまだわかるからというスキル不足によるもの)

さきほど作っておいたPython 2.7用に切り替えます。Pip でChainer1.6.1 を入れてからChainer-char-rnnを実行していきます。

[code][font-Source-Code-Pro]$ cd

$ source my_env2.7/bin/activate

$ pip install chainer==”1.6.1″

$ git clone https://github.com/yusuketomoto/chainer-char-rnn.git

$ cd chainer-char-rnn

$ mkdir -p data/chat

$ mkdir -p cv/chat

$ cp ../chainer-slack-twitter/input.txt data/chat

$ python train.py –data_dir data/chat –checkpoint_dir cv/chat –rnn_size 1024[/font-Source-Code-Pro][/code]

 

しばらく待ちます。全部が終わるのは途方もない時間がかかります。

学習が進むごとにCheckpointとして Chainer modelファイルがcv/chat 配下にできますので、適当なEpochのところのものを次の「APIで話す」に使ってもいいですし、学習の最新ファイルである

latest.chainermodel を使ってもいいです。もちろん、最後まで待ってからlatest.chainermodelを使ってもいいです。

ひとまず数時間回したところのlatest.chainermodelを使ってみます。

 

6. APIで話す。

LSTMで自然な受け答えができるボットをつくった よりJapanese Talk APIを作っていきます。

この回では少々コードの改変がありますのでForkしたものをGitHubにあげました。

japanese_talk_api_1.6.1

こちらのmodelsディレクトリにChainer modelを投入します。

[code][font-Source-Code-Pro]$ git clone https://github.com/tubone24/japanese_talk_api/tree/chainer1.6.1.git

$ mkdir japanese_talk_api/tornado/models

$ cp chainer-char-rnn/cv/chat/latest.chainermodel japanese_talk_api/tornado/models [/font-Source-Code-Pro][/code]

 

Chainerの他にTornadoも必要になるのでPipでインストールします。

そしてAPIを8787ポートで起動します。

[code][font-Source-Code-Pro]$ pip install tornado

$ python japanese_talk_api/tornado/app.py –port=8787 –debug=True [/font-Source-Code-Pro][/code]

 

あとは起動を待ってから

 

[blockquote text=’http://localhost/?q=こんにちは’]

で受け取れるようにはずです。

学習用input.txtにないことばとか出すとたまにエラー吐きます。

[blockquote text=’ビンビンビンビンビンビンビンビン… チクッ あ・あ・あぁ・ぁああああ↑↑ アーッ…イクッ チ~ン 問いかける言葉には気をつけよう!’]

 

7. 付属のHubot Scriptで遊んでみよう!

LSTMで自然な受け答えができるボットをつくった のHubotScriptをお借りして遊んでみましょう。

あらかじめ比較として同じコーパスを利用しているDocomoの雑談APIをHubotに仕込んであります。

 

発言の上がDocomoAPI 下が今回作ったAPIです。

ちなみに我が家のHubotはSlack上に「智絵里ちゃん」として君臨しております。

智絵里ちゃんマジ天使 [font-Damion size=’36’] I love you [/font-Damion]

 

DocomoAPIに比べると天然というか、不思議系というか… バカですね(直球)

 

お借りした多くのコードや参考にさせていただいた多くのサイト・記事に改めて感謝しつつ、智絵里ちゃんとのラブラブライフを送りますね。