2017年12月21日木曜日

リア充のクリスマスについて

あいさつ

こんにちは。リア充です。ありがとうございます。

今日は「皆さん」があまり知らないクリスマスデートについて、男性目線でお話します。
機会があれば役立ててください。


ぶっちゃけトークその1:イルミネーションはメインではない。

よくイルミネーションを見るため、クリスマスデートで東京駅とか行く人がいます。
しかしこれはやめたほうが良いです。

理由は3つあります。

1つ目の理由は「寒い」からです。

ふざけているように聞こえますが、大真面目です。
クリスマスは真冬のイベントです。それに加えてイルミネーションを見るのは夜なので、気温は5°以下になることもあります。
そんな中、イルミネーションを長時間見ることは危険です。


2つ目の理由は「疲れる」からです。

まず大前提として、クリスマスは満員電車に乗ります。
そして寒い中、歩いてイルミネーションまで行きます。
イルミネーションの周りは、大抵の場合、混んでいるので休むことはできません。
帰りには、また満員電車に乗ることになります。
体育会系カップルで無ければ、確実に疲れます。
疲れていたら楽しくないですし、ロマンチックのカケラも感じません。

3つ目の理由は「そうでもない」からです。

人によると思いますが、イルミネーションはすごい衝撃を受けるほど綺麗ではありません。
写真で見ると綺麗ですが、実際は、そこに人混みと色んな人の雑音がセットになっています。よくわからないキャッチにも捕まります。
あんまり良い雰囲気にはならないです。

考えなしにイルミネーションに行くのはやめましょう。

ぶっちゃけトークその2:クリスマスが成功するかは、レストランの予約で決まる。

クリスマスデートで最も重要です。むしろこれが全てと行っても過言ではない。
クリスマスを成功させる鍵は「レストランの予約」です。

「当日に空いている場所を探せばいいや〜」とか「ノリでいけるっしょ」とかすると、大抵の場合は痛い目を見ます。
クリスマスなのにあまり人が入っていないよくわからないお店で、ご飯を食べることになります。味や雰囲気はお察し。

逆にしっかりレストランの予約ができていると、クリスマスデートはほぼ成功します。
寒くて疲れていても、暖かい場所でゆっくりご飯を食べることで全回復。
「特別な人と」「特別な日に」「特別な場所で」「特別なご飯を」というような、女性の大好きな「特別」を実現できます。

なので、クリスマスデートのプランは早めに立てて、事前に「レストランの予約」をしましょう。

まあそうは言っても「皆さん」は「レストランの予約」とかしたことないからよくわからないと思います。
なので上級者リア充のこの僕が、クリスマスご飯の予約についてQ&Aでお話します。

Q1. いつまでに予約すれば良いの?

「高レベルリア充の僕」的には、2週間前くらいには予約しておかないとまずいですね〜。

Q2. 予約サイトは何を使えば良いの?

「短所がないことが短所の僕」のオススメは「OZmall」というサイトですね。
カップル向けのレストランが掲載されています。評価が高い場所はまず失敗しないです。

Q3. どのくらいの価格のものを予約すれば良いの?

「リア充の中のリア充の僕」の意見ですが、一人5000円以上、安くても一人4000円以上ってところです。良さげなコース料理が食べられます。
安くても一人4000以上のほうが良い理由は、一人3000円くらいで予約できる場所は飲み屋や居酒屋だからです。ご飯が美味しいわけでも、雰囲気が良いわけでもないです。
それならどちらかの家で、一人2000円くらいのケーキを食べたほうが良いですよ。

Q4. 場所は?

「小学5年生からバレンタインチョコをもらわなかった年はない僕」的には、池袋・新宿・渋谷らへんは注意したほうが良いです。
そこらへんは安いお店と高いお店の違いが比較的強いと思います。一人4,5000円くらいのお店に行くときは、よく調べたほうが良いです。
オススメは麻布十番です。一人5000円くらいで綺麗なお店が多いです。個室も多いですよ。

まあなんとなくわかってもらえたことでしょー
とりま、クリスマスはレストランを予約。


ぶっちゃけトークその3:クリスマスに「皆さん」が期待するようなことはできません。

彼女「今日は楽しかった!ありがとう!でも今日は帰りたくないな〜(チラッ)」
皆さん「フォー!!朝帰りだぜー!!」
とはなりません。

ないです。

それは僕たち上級者リア充が既に部屋を予約していて、「皆さん」の部屋がないからです。
残念ですね。

先ほどもお話したように、クリスマスは事前に予約しないとだめです。
本人たちが盛り上がっていても、部屋は満室です。
お互いの家に行くか、大人しく他の日にしましょう。


「上位互換リア充の僕」が考えるさいきょうの
クリスマスでぇーと

これまでのお話を通して、クリスマスの現状をお伝えしてきました。
ここでは現状を踏まえた上で、良い感じのクリスマスデートを教えます。

準備しよう

1. お互いの予定を確認しよう。

変にサプライズをしようとか思わないで、しっかり予定を確認しましょう。
でないと予約できません。(予約第一)

2. レストランを予約します。

「一人5000〜10000円」「完全個室」「コース」「来店時間17:30〜18:00」の条件で、レストランを予約します。
「一人5000〜10000円」「コース」は「特別」を実現するためです。
「完全個室」にする必要は、「コース料理でもマナーに気を取られないで良い」「二人で写真を取れる(女の子は自慢したい、思い出大好き)」「二人きりになれるから雰囲気が良い」という理由からです。
「来店時間17:30〜18:00」は、来店時間が早いと満員電車に乗らないで済むからです。大抵クリスマスの食事は2時間滞在なので、帰りも19:30〜20:00くらいになり、丁度よく帰れます。

3. プレゼントを買います。

よくクリスマスディナーがプレゼントとかいう人がいますが、クリスマスディナーはプレゼントではありません。別に用意します。

プレゼントは持ち運びできる小さなものにします。大きいと荷物になるからです。
腕時計・アクセサリー・手袋・マフラーなどです。

服とかぬいぐるみはやめましょう。
服は好みが別れるため、一緒に買ったほうが良いです。
ぬいぐるみがダメなのは感じ取ってください。(もう大人でしょ。)
→彼女はぬいぐるみが好きなんだ!
→ほとんどの場合、恋人からもらいたいとは思いません。翌日いきなり別れられ、あなたのあげたぬいぐるみはメルカリに。

あと流石に安物はやめましょう。ここでケチると台無しになります。
7,8000円以上のブランド品ぐらいは買いましょう。


4. 予約したレストランの近くで、イルミネーションがないか探しましょう。

イルミネーションはメインにはなりませんが、レストランの前のムード作りには最適です。
レストランに行く前に少しだけ見て行きましょう。

クリスマスデートしよう

1. 無難な格好をしよう。
レストランを予約した場合、変な格好をしてはいけません。
お互い場違いにならないように、無難な格好をしましょう。

男性は、チェスターコート・セーター・黒いパンツなどが良いです。
なるべくジーンズとかもやめたほうが良いです。


2. 彼女にあったらまず褒めよう。

ほとんどの場合、女性は気合いを入れているはずです。
気合いの入っている場所を見つけて褒めましょう。

大抵、髪か服です。たまにアクセサリーです。

ちなみにここで褒めるのを間違えると彼女は暴れ出します。
気をつけてください。


3. 疲れないように行動しよう。

張り切って歩き回ると夜までに疲れてしまいます。
なるべく多く休憩をとりましょう。
結構、重要なポイントですよ。


4. イルミネーションを見ながらレストランに向かいましょう。

これから個室でコースを食べるのです。ドヤ顔でレストランに向かいます。

5. ご飯を食べ終えたえらプレゼントを渡しましょう。

個室で二人きり、雰囲気が絶好調の時です。
素晴らしい1日にするため、最後にプレゼントを渡しましょう。

6. 家まで彼女を送りましょう。

夜遅いので、彼女を家まで送りましょう。
めんどくさくても駅前でお別れとかはなしです。台無しになっちゃいます。

お疲れ様です。
ここまでできたら「皆さん」も「上位互換リア充」です。

最後に

長文だったのにここまで読んでくれてありがとうございます。
クリスマスデートの基礎をお話しさせていただきました。
うざかったと思いますが、ここまで読んだのは絶対に無駄ではないです。
僕のお話を元に、ぜひ「皆さん」らしいクリスマスデートをしてください。
クリスマス楽しんでください!

2017年12月20日水曜日

Ansibleをやってみた

田胡研アドベントカレンダー20日目の記事です。

ブログ初投稿のB18 ryosk83です。
知識も文章力も皆無ですがお許しください。

今回はAnsibleをやってみました(触れるを通り越して舐めた程度ですが…)
Ansibleは夏季のインターンで扱ってもっと触りたいな〜って思ってやってみました。B18の人もやりたいって言ってる人が多くAnsibleブームですね。


Ansibleって何?

 Ansibleは多数のサーバやクラウドインフラを統一的に管理できる構成管理ツールです。
流行りのInfrastructure as codeってやつです。
インフラ構築、管理もコードで扱っていこうってやつです。

 AnsibleではPlaybookというYAML形式のテキストファイルに定型業務をタスクとして記述します。それを実行させることで様々な処理を行うことができます。
タスクはサーバの構成管理だけではなく、ネットワークやロードバランサー、クラウドインフラに対する制御を行うことができます。


Ansibleを使うとどう幸せ?
・手動オペレーションによるタイムロスの削減
・メンテナンス時におけるオペレーションミスの発生を低減させることができる
・運用後における手順の変更が反映されていないことによる作業漏れの低減
・直接ログインする機会を最小限にすることによるセキュリティの向上

長々と書いていてもあれなのでとりあえずやってみる…
今回はAnsibleの環境構築とslコマンドのインストールをしたいと思います。(時間が足りませんでした…お許しください…)

 Ansibleのインストール

 Centosの標準レポジトリにはAnsibleが含まれていないのでEPELレジストリを利用します。ってことで下記のコマンドを実行します。
#yum install epel-release

次に実際に下記のコマンドで
#yum install ansible
ansbleをインストールしていきます。

その他鍵の登録など諸々がありますが今回は省略させて頂きます…

Ansibleを使ってslコマンドのインストール
yumでslパッケージをインストールするためのplaybookはこんな感じです。









hosts:allでは/etc/ansible/hostsに記述した操作対象サーバに対して全て実行しますといった命令です。(今回は一つのサーバしかhostsに記述してないのでallにしてあります)
become: trueではsudoユーザとして実行します。
tasks:以下では実際にyumでslをインストールしています。
こんな感じのplaybookを下記のコマンドで実際に実行します。
#ansible-playbook sl.yml

ansibleを走らせたら実際対象サーバにログインを行い、slが実行できるか試してみます。
#sl
とやると下の画像のように無事slが走りました。











最後に…
今回はslコマンドをAnsibleで入れるだけのゴミ具合発揮しましたが本当はwordpessの環境構築、smtpサーバ構築のansibleで記事を書く予定でした。しかし若干ゴニョってしまい記事にすることができませんでした…お許しください…
完成し次第記事にしたいと思います!!!
次回からはしっかり記事を書いていきたいと思います。
ありがとうございました。

[参考サイト]
https://thinkit.co.jp/article/9445









2017年12月17日日曜日

mrubyやってみる

# mrubyやってみる

田胡研アドベントカレンダー17日目の記事です。
ブログ初投稿となります。B18のtachanです。
変なところがあれば教えてください。
本屋で技術誌を漁っていた時にたまたま目に付き、ちょうどrailsを触っていたのでどんなものか気になり調べてみました。
## mrubyとは
mrubyとは2012年にrubyの作成者[Matz](https://twitter.com/yukihiro_matz?lang=ja)が発表した省メモリ版のRubyです。
mrubyの作られた経緯は日経[ITPro](http://itpro.nikkeibp.co.jp/article/COLUMN/20120622/404824/)の記事で説明されており、内部設計は[IIJ](https://www.iij.ad.jp/company/development/tech/activities/mruby/index.html)の記事にまとめて記載されています。
現時点ではまだリリースされていません。[github](https://github.com/mruby/mruby/)で開発されています。
mrubyはC言語などのRuby以外のアプリケーションにも組み込みやすいという特徴があります。
例えば、大体のソフトが持っている設定ファイルをmrubyで作ることができます。mrubyで設定ファイルを実装することで、一般的な設定ファイルだけどプログラミングもできるという扱いやすい設定ファイルとしてアプリに組み込むことが出来ます。
mruby自体は単体でも使用可能ですが、ほとんどは他のアプリに組み込んで使います。
## なぜ省メモリ?
それはメソッドやクラスの少なさから最小限の機能で動作しているからです。
mrubyはそもそも組み込みを前提としたリアルタイム性を向上させるものです。
unix等のプラットフォームに依存しないように設計されているためファイルやネットワークなどのクラスが含まれていません。
## Rubygemsがない代わりにmrbgems
mrubyというRubyGemsのようなmrbgemsという仕組みがあります。
mrgbemsはRubyGemsと違い、`require`で読み込まずコンパイル時に読み込まれます。
`build_config.rb`に`config.gem`を設定すると、そのmrbgemsが本体と一緒にコンパイルされます。
## mrubyのビルド方法
今回はwindows8での導入となります。しかし、まだ私が導入できていないので、できているところまでの紹介となります。
参考にしたサイトは、[こちら](https://qiita.com/ko2a/items/b29acc616f67738465ea)
[Visual Studio 2017](https://www.visualstudio.com/ja/downloads/)をインストールします。 今回は個人で扱う場合は無償のものをインストールします。 インストーラからインストール後、スタートメニューにある「開発者コマンドプロンプト for VS2017」を使用しやすいようにタスクバーにピン留め(好み)しておきます.
次にrubyのインストールします。[公式サイト](http://rubyinstaller.org/downloads/)よりRuby Installerをインストールします。セットアップ後、rubyの環境変数のPathを設定します。
環境変数の設定方法は[こちら](http://next.matrix.jp/config-path-win7.html)
次にBisonのインストールを行います。Bisonとは構文生成プログラムです。
[公式サイト](http://gnuwin32.sourceforge.net/packages/bison.htm)から「Complete package, except sources」をダウンロードします。
使えないと警告が出ますが許諾してインストールします。
デフォルトのインストールパスにスペースが含まれているためインストール先を参照しましょう。(今回はC:\tools直下にインストールしました)
インストールしたアプリのbinまでの環境変数Pathを設定します。
次にmrubyをビルドします。
上記で示したように[github](https://github.com/mruby/mruby)からソースコードをダウンロードします。
ダウンロードしたZIPを解凍し置きます。(今回はC:\src\mruby-masterに置きました)
先ほどピン留めしたコマンドプロンプトを起動します。
C:\src\mruby-masterに移動し`ruby .\minirake`を実行します。
エラーが出なければ`mruby -v`を実行しバージョンが表示されたらビルド成功です。
## 最後に
初投稿で拙い文章力と技術力の低さですみません。自分の計画性のなさを改めて実感したいい機会でした(いつも思ってる)
今回時間と私の力不足で導入が終わらず出来ませんでした。申し訳ありません。
もしできたら追記したいと思います。
もしrubyやwebアプリケーション、組み込みシステムに興味のある方はmruby是非使ってみてください!
明日は3年生のgreninjaさんです。ブラウザをJSでコントロールしてみるそうです。楽しみですね。

2017年12月13日水曜日

OpenPose

# OpenPose

研究の方がたしかヤバくなっているB17のLuuvaです。
研究で使っている(使っていないかもしれない)OpenPoseを折角なので紹介します。

## OpenPoseの導入
Githubはこちら、[CMU-Perceptual-Computing-Lab](https://github.com/CMU-Perceptual-Computing-Lab/openpose)

ビルドするにはちょっとCaffeとかPython2系列とか入れる必要があったので、
既にバイナリで公開しているWindowsのDEMO版を使います。
http://posefs1.perception.cs.cmu.edu/OpenPose/OpenPose_demo_1.0.1.zip

その前にOpenPoseを動作させるには最低GTX10XXのグラボが必要です。

## OpenPose DEMOの動作
解凍したらまずはモデルデータを落としてきます。
models/getModels.bat or sh を実行すれば落ちてきます。

あとは端末等で
bin\OpenPoseDemo.exe --video examples\media\video.avi
とかで実行すれば動きます。

マニュアルならGithubに転がっているので参照してください。

## そもそもOpenPoseって
「DeepLearningを使った、単眼カメラでのスケルトン検出アルゴリズム」らしいです。
Webカメラを使ってリアルタイム(激重)で骨格データをjsonとかに吐き出してくれます。
現在取得できるデータは身体・手・顔の特徴点です。

## 研究の方
OpenPoseをそのまま動かすと激重なので、事前処理として動く物体を検知して、そのエリアだけ適応させる感じになっています。
結果としては毎フレーム0.03秒ぐらいですが早くなっています。
この勢いで学習データ無しで個人特定を行いたいとは思っています。

2017年12月7日木曜日

Google Maps API を使ってみた

Google Maps APIを使ってみた

アドベントカレンダー6日目の記事です。

あいさつ

こんにちは。初めてブログ書きまっする。何か変だったら教えてください。
ブログ書いている人が変なのは許してください。なんでもしますから。

Google Maps APIを使ったお

APIの種類は、Google Maps JavaScript API v3。
みんな大好きの地図API。
地図の表示・経路探索・マーカーの設置など、地図系のやりたいことがほとんどできるすごいやつ。
でも使ってみると意外と詰まる場所・よくわからん場所があった。(めちゃプログラミングできないマンの意見)
この記事では、そこらへんをご紹介する。

と思ったけど、ブログ書くの意外と大変だから「マーカーについて」だけ書くことにした。 まあ初めてだししょうがないよね。

Google Maps APIのマーカーとは?

マーカーの使い方は こ↑こ↓(マーカーのドキュメント) に書いてある。

ちなみにさっきから言ってるマーカーは下みたいなやつのことです。一応ね?
マーカーの例
で?マーカー使って何ができる?ってなりますよね。
私は「情報ウィンドウ」と「イベントの追加」を使ったので、お話ししますね。

マーカーの上に情報ウィンドウのお話

まず情報ウィンドウというのは、下みたいなやつのことを言います。
情報ウィンドウの例
マーカーに情報ウィンドウを設定することで、説明文っぽいのが出せます。

これを見るとええやん!使えそう!ってなるじゃないですか〜?
実際使うと結構難しいです。理由は情報ウィンドウのデザインのしにくさです。

情報ウィンドウのデザインですが、htmlタグを文字列で渡すことで行います。
やばい匂いがプンプンするぜ!
実際に試す のサンプルコードより抜粋
情報ウィンドウのサンプルコード
なんか緑色ばかりでよくわからないっすね。
実際書いてる途中で何がなんだかわからなくなる。

結論... 情報ウィンドウは一言説明をするために使おう。

イベントの追加のお話

情報ウィンドウの追加でも使っていたように、addListenerでmarkerにアクションを追加できる。
addEventListenerではないよ!
こっちは使い勝手がすごく良いので使ってくださいな

終わり

すみません。今回はもう勘弁してください。
次はもっとちゃんと書くよ。
今日は閉廷します。ドドンッ!

2017年12月5日火曜日

アドベントカレンダー3,4,5日目

アドベントカレンダー

アドベントカレンダーページはこちらです。 => https://adventar.org/calendars/2429

忙しくてこっちのブログに記事を反映させられていませんでした。 すみません。 田胡研AdventCalenderとして投稿された3,4,5日目の記事を早速紹介していきます!!

3日目

3日めはM1のmagrainさん! 


プログラマーが目にするマスコットアニマル`s
https://qiita.com/magrain/items/1f7cb465fa7b8dcb5b12

色々なソフトとかのマスコットキャラについて調べてまとめてくれました。 アイコンとしては知っていてもキャラクター名とかまで詳しくは知らないことが多いのではないでしょうか? 私はMySQLのいるかが可愛くて好きです。 Gitlabは狐娘ちゃんをアイコンに採用するべきだと思いますね。 そうしたらみんな真面目に働くし業務効率も上がるんじゃないでしょうか。 最近はあのアイコン抽象化されたのであれが狐娘ちゃんのアイコン。 そう考えればやる気も出る?

アドベントカレンダーに登録された時はマスコットキャラについて書くとあったので私は”田胡研”のマスコットキャラ ひでおとか について書いてくれるのかなーと思っていましたが実は違ったらしい。 ひでおはNDA違反なのでちょっと紹介できませんね。

4日目

4日めは再び3年のuutarouくんが書いてくれました!

S3 + Route 53 + CloudFrontで静的サイト配信する(with HTTPS)
http://yurufuwa-tech.hatenablog.com/entry/2017/12/04/173931 

AWSでイケイケなサイトを配信するイケイケなチュートリアル記事です。 AWSの記事はいっぱいありますけど大抵古くなってUIが変わっていたりして最新のものがあると嬉しいですよね。 

それにしてもドメイン名に闇を感じる

5日目

5日目は再びなまずんが書きました。

田胡研とジェンガとXXX 
http://namazu-tech.hatenablog.com/entry/2017/12/05/232452

研究室カルチャー記事。 技術ブログのつもりだったが完全ネタ記事を書いてしまった。 最近はやりの田胡研ジェンガについて書いたり、ここ最近の辛いカップ麺を載せました!

明日

3年のsekunがイケイケな技術記事を書いてくれるそうです。 ご期待ください。


2017年12月2日土曜日

WebAssemblyをちょろっと触ってみる記事

アドベントカレンダー2日目


こちらです。 => https://adventar.org/calendars/2429


アドベントカレンダー今日は二日目です。
個人のブログある勢は個人ブログに書いたりしていますが、ここに書くのも大歓迎ですよ!

2日目


2日目の今日は4年のなまずんが書きました。 昨日ちゃんと書けるかなーなんて言ってましたが、なんとか書くことだけはできてよかった

WebAssemblyをちょろっと触って速度測ってみる。
http://namazu-tech.hatenablog.com/entry/2017/12/02/012600

WebAssemblyをさらっと触ってどんなものか知ってみた記事。 Unityとかをつかってゲーム作ってブラウザで動かしたりしたかったんですが諦めました。 Cの高速なライブラリとかをブラウザ移植なんていうのもおもしろそうでもう少し工夫しがいあったかなーって。 

もっと濃い内容にしてブラウザの構文解析の速度比較とか最適化の手法とかかければよかったけど力足らず断念。

明日

M1の@margrainさんが書いてくれます。 田胡研のマスコットキャラクターについて公序良俗に反しない程度に紹介してくれるそうです。 ご期待ください!!

2017年12月1日金曜日

2017アドベントカレンダーはじめました。

今年もやります。 冬のアドベントカレンダー。


こちらです。 => https://adventar.org/calendars/2429



個人のブログある勢は個人ブログに書いたりしていますが、ここに書くのも大歓迎ですよ!


個人のブログに書かれた場合は私が、このブログにリンクと軽い紹介記事を書いて更新していこうとおもいます。 目指せ25日まで空きなし!

一日目


一日目の今日は3年のuutarouくんが書いてくれました。

田胡研を支えるSlack emoji作成技術入門
 http://yurufuwa-tech.hatenablog.com/entry/advent-calender-2017-slack

Slackの絵文字職人の知見。 スケッチでうまい感じに文字絵文字を作る知見等についてです。
それにしてもとんがらし麺の画像を貼るのはちょっとNDA違反じゃないですかね。 来年の3年生に怖い研究室だと思われてしまうかもしれない。。。


明日

なまずんがWebAssemblyについて書きます。 書く予定です。。。。。 フロントエンドの人なはずなのに、サーバしか触っていませんでした。 ちょっと置いて行かれている感があるのでアドベントカレンダーで色々触ってみて追いつきたいです。 それではもうすぐ日がかわるけどちゃんと公開されることを祈って。

2017年7月19日水曜日

田胡研のサーバ紹介 2017年ver

# 田胡研のサーバ紹介 2017年ver 最近は早期配属の3年生も入ってきていろいろ楽しげなことが始まりそうな田胡研です. 今日は田胡研のサーバ(物理)の紹介をしようと思います # 田胡研のサーバ 田胡研は片柳研究所塔の11Fの角に部屋を持っていてそこをサーバルームにしています. ここにはCSCと同じ数ほどのサーバがあります. サーバは用途別にいくつかの系統に分かれていて * VM用サーバ * Fileサーバ * 実験用サーバ * Dockerクラスタサーバ などの目的ごとに配置しています. # VMサーバ,Fileサーバ IBM製(古い)のラックにブレードサーバが4枚とFileServerが1台あります. IBMのThinkPadのようなKVMがありそれぞれにアタッチできるのですがとても時代を感じます. このラック内のブレードサーバは主に研究室の主要サービスに使われており * FrontWebServer(Nginx) * DNS * Mail * Wiki * Gate * LDAP 等サービスをホストするVMサーバと * Zabbix * backup 等の監視・重要ファイルのミラーリングに使われています. ファンがうるさいです. 一番下にあるのがFileServerで自作したものになっています. FreeNASを入れてありRAID6構成ZFSでストレージプールとしiSCSIやNFSでVM等にファイルやボリュームを供給しています. FireServerはリプレイス計画があり1ヶ月内に倍以上の容量になる予定です. # 実験VMサーバ IBM製ラックの横にはアルミラック上にまな板で組んだサーバがありこれらは実験用のVMを供給するサーバとして使われています. 実験用VMサーバは現在2台あり,1台は個人で使ったり、いろいろな用途に使うよう,もう一台は学生PortalのコピーをホストするVMとして利用しています 本学で8000人が利用している学生Portalは田胡研製なので田胡研内でも学生ポータルが開発用にホストできるようになっています. 学生Portalの他にもCSCで運用しようとしている開発中のサービス等もこのVM上のリソースを利用したりしています. 下にあるPCケース入りのPCはCS学部のサーバになっていて田胡研の管轄外なのですがおいてあります. 学部サーバはカーネルのバージョンがとても古いと聞いたことがあります. # 実験サーバ, Dockerクラスタサーバ etc VMサーバがあるアルミラックの横に更にアルミラックがありそこにはたくさんのまな板のサーバがあります, これらは個人の実験用に使われています. 現在では * DockerCluster(Kubernetes)のノードとして6台 * 田胡研の次期インフラ基盤として期待しているOpenStakサーバ(in Gentoo) * 田胡研が作ったFileSystem(Elton)が動くサーバ 等に使われています. このラックにも追加するサーバをこの前発注したので近いうちにPCが増える予定です. PCはどんどん移り変わっていくのでこの時こんなんだったんやでってのが残ってるといいなって記事にしてみました. 今日はこれでおしまい. あまり期間があかないように書いていけたらなぁ...

2017年7月11日火曜日

田胡研SlackBot その2

# 田胡研SlackBotその2 ちまちま間が空いてしまいますができる限り書いていこうかなって 今日は前回に続いて田胡研Slackで使えるBotの紹介と東京工科大生は使えるかもしれないAPIの紹介をします. # 田胡研SchoolBusBot 田胡研のSlackではバスの時刻を知ることができます. 大学のスクールバスの時刻は http://www.teu.ac.jp/campus/access/006644.html#bus で公開されていますが正直見づらくアクセスしに行くのも大変です. そこで田胡研ではSlackBotに話しかけることでバスの時間を知ることができるようになっています ![slack_bot](https://gyazo.com/32c09eff219b2b93d4d0cb13ab334e3c.png) こんな感じに. * 行こうか => 八王子駅-大学 * 帰ろうか => 大学-八王子駅 * 買い出しかな => 大学-八王子みなみの * 歩こうか => 八王子みなみの-大学 という感じにラッキービーストに話しかければ時間がわかります. バスの時間知りたい時に使ってくれれば幸いです. # 東京工科大学スクールバスAPI このSlackBotは大したことないのですがバスの時刻データAPIを作るのが少し大変でした. 時刻表は大学のホームページで公開されているだけなのですが臨時運行があったりするので決め打ちだとよろしくありません. そこで時刻表のページをスクレイピングしてDBに保存しておきそのデータを問い合わせ可能なAPIを作りました. APIは公開しており, ソース: https://github.com/namazu510/teu-school-bus-api APIDoc: https://namazu510.github.io/teu-school-bus-api/ な感じです. 利用はフリーです. 弊学学生でなんか面白いもの作るのに使えそうなら使ってください. サーバ側で日1回新着のデータがないかチェックしています.

2017年7月8日土曜日

田胡研SlackBot その1

# はじめに この記事は田胡研初夏のAdventCalendar 8日目の記事です. 前回から間が微妙に空いてしまいましたが今日は前回のluuvaくんのvoiceroid apiに被せてそのapiを利用して田胡研SlackBotを作った話を書こうと思います. # 田胡研Slack 田胡研ではSlackをコミュニケーションツールとして使っています. 昔はIRCを使っていたらしいですがSlackに一本化しました. 基本コミュ障の集団なのでよくSlackで喋ったりしています. Slackはその便利さに加えてエンジニアとしてはいろいろなBotを作ることができるのが楽しいところです. 田胡研SlackにもいろいろBotが作られていて * Logger * ラーメン屋決定機 * 大学スクールバス時刻案内 * Voiceroid音声を研究室内で流せるBot などあります. スクールバス時刻案内BotはまたこのAdventCalendar期間中に書くとして,今日はVoiceroid音声をSlackから流せるBotについて書きます. # voiceroid-slackbot ## 利用手順 はじめにこのBotの利用ステップと動作を示します. 1. Slack上でBotにメンション付きで喋ってほしいテキストを送信する 1. SlackBotがVoiceroidAPIをcall 1. VoiceroidAPIから音声データがバイナリで飛んでくるので保存 1. 音声データを再生する (Botは研究室内のサーバで動いているのでそのスピーカから音声が流れる) という感じです. ## ソース slackbotはnodeで動かすことにしました. エコシステムのおかげでslackbotはほんと一瞬で作れてしまいます. ```js const RtmClient = require('@slack/client').RtmClient const WebClient = require('@slack/client').WebClient const RTM_EVENTS = require('@slack/client').RTM_EVENTS const exec = require('child_process').exec const axios = require('axios') const fs = require('fs') const token = process.env.API_TOKEN || 'DEBUG-TOKEN-HERE' const rtm = new RtmClient(token, { logLevel: 'error', autoReconnect: true, autoMark: true }) rtm.start() const web = new WebClient(token) rtm.on(RTM_EVENTS.MESSAGE, function handleRtmMessage(message) { console.log(message); let text = message.text // DM check if (text.indexOf('<@U5QCWJ64B>') === -1) { console.log('this is not direct message') return } text = text.replace('<@U5QCWJ64B>','') // play special sound if(text.indexOf('あけて') > -1){ randomNumber = Math.random(); let file_name = 'open_1.wav' if(randomNumber < 0.1){ file_name = 'open-gd.wav' } play(file_name) return } // play voiceloid sound axios.get('http://192.168.133.40:60334/voice', { params: { msg: text } }).then((res) => { return res.data }).then((data) => { // decode and save let sound = Buffer.from(data.sound, 'base64') let filename = `response.wav` fs.writeFile(filename, sound, (err) => { play(filename) }) }) }) function play (filename) { exec(`aplay -D plughw:1,0 ${filename}`, (err, stdout, stderr) => { if (err) { console.log(err) } console.log(stdout) }) } ``` ただ書き連ねたコードですが, あけて(研究室のカードロックを解除して!)というSlackのメッセージだけはVoiceroidを使わずたまにアニメ音声が流れるようになっています. こういうのは他にもいくつか追加できたらと思います. ## 使ってみて感想 * 深夜とかにスピーカーから音声を流せて中にいる人をおどかせる * ルイズコピペをどっからか流してテロが起こせる * カードキーを忘れて開けてほしいケースだとスマホも忘れていて結局Slackメッセージ経由で開けてもらえない * 研究室の中にいる人に確実に気づいてほしいメッセージを飛ばすのに便利 面白いものを思いついたらまたどんどんSlackBotを作って遊んでみたいですね. 今回はここでおしまい.

2017年7月6日木曜日

VoiceroidAPI

# VoiceroidAPI
B17のLuuvaです。
VoiceroidをAPIサーバーとして外部に音声を出力する機構を作りました。
![VOICEROID+ 結月ゆかり EX](https://lh3.googleusercontent.com/-8Pj3DV-7SgE/WVnFyNK_NvI/AAAAAAAAABM/IABZq2IZeoA_Ah5XJ9i0a6f0GfMfBbsIACEwYBhgL/w140-h51-p/mainimage.jpg "結月ゆかりさん")

# APIサーバーの使い方
以下のサイトにAPIドキュメントがあります。
研究室内のネットワークのみアクセス可能です。
[VoiceroidAPI(Network_KenA)](http://192.168.133.40:60334/)
場合によっては動いていなかったり、移転されている可能性もあります。

2017年7月4日火曜日

LDAPをRubyから触る

# はじめに この記事は田胡研初夏のAdventCalendar2017 4日目の記事です. 今日はRubyでLDAPの認証を利用したりしたときの話とちょっとしたサンプルコードを晒します. # RubyでLDAPを使うとき RubyでLDAPを使う際便利なGemはいくつかあります. * ruby-ldap (http://ruby-ldap.sourceforge.net/) * net-ldap ( https://github.com/ruby-ldap/ruby-net-ldap ) * active-ldap ( https://github.com/activeldap/activeldap ) などです. この内どれを使うか悩んだのですがnet-ldapを使うことにしました. 理由としては * なんか一番情報が多かった( コードサンプルとか ) * LDAPの問い合わせ操作がLDAPに近くLDAPを触るようにRuby上のコードがかける ことです. まず先にどんな感じで書けばLDAPの情報が引けるのか示します. # 単純にログインチェック net-ldapはgemで公開されているのでGemfileに書いて持ってきます. そしてこんな感じのコードを書きます. ```ruby require 'net/ldap' ldap = Net::LDAP.new ldap.host = LDAP_SERVER_HOST ldap.port = LDAP_PORT # アクセスのベースディレクトリを指定 ldap.base = LDAP_BASE # ログインするldapidとpassword username = params[:username] password = params[:password] # LDAP上での名前に luname = "uid=#{username},LDAP_BASE" ldap.auth luname, password # このbindがtrueならログインできる, falseはログインできない. ldap.bind ``` 思ったより複雑ではなかったです, ライブラリ様様ですね. # ユーザの属性取得 ログイン試行のコード例はいろいろあるのですがそれ以外があまり情報がなく少し手間取りました. ユーザの属性取得はFilterを利用してこんな感じ. ```ruby # 前述コードのldap.authのあとから ldap.open do |conn| filter = Net::LDAP::Filter.eq('uid', username) @entry = conn.search(filter: filter).first end # @entryはMapで回すと属性が取れる. @entry do |key, value| p key p value end ``` LDAPのクエリを少し調べないといけないのですがLDAPのクエリのサンプルはそこそこ転がっていて,それをRuby上のコードにするのは簡単でした. あるユーザの所属するグループ一覧を出すクエリなどは実現方法がわからずLDAPのデータを引いてきたあとにRuby側でフィルタするということを行って実現しました. # 田胡研のLDAPサーバのラッパーAPI ここまで示したようなコードを使ってLDAPのクエリを書いていけばRubyからLDAPの情報を引いてくることができます. ただLDAP自体メジャーな技術ではなかったり触るのが少し癖があったりで皆が手軽に利用するのは大変なので, 田胡研では今回書いたような方法でLDAPにアクセスし認証を行ったり,LDAPの情報をJSONで返す(WebAPI)を用意しています. APIでは以下の情報が取得できます. * ログイン試行 (userid+password or token) * 自分の情報 * 自分の所属するグループのリスト * 任意の人の情報(セキュアなものはないので弊研のLDAPはログインさえできれば他人の属性も引けます) このAPIを利用しいくつかのサービスを田胡研では開発しています. ( 田胡研メンバでLDAP認証系利用したいような人がいればswagger-doc等のリンクはnamazuさんのwiki個人ページにあるので参照してください. )

2017年7月3日月曜日

田胡研のGA

# はじめに この記事は田胡研初夏のAdventCalendar2017 3日目の記事です. 昨日はcut-terさんが書くとか言っていたけれど忘れていて空いてしまったようです. (´・ω・`) 3日目今日はしょうもないのですが田胡研WebのGAのレポートを軽く晒してみようとおもいます. # 田胡研のGA 田胡研のオフィシャルなWebサイトは基本的にはGA(GoogleAnalitycs)でアクセス解析をしています * 田胡研web ( http://www.t-lab.cs.teu.ac.jp ) * iot webサイト ( http://iot.k.t-lab.cs.teu.ac.jp ) などです # 最近の傾向とか 最近は研究室公開期間なこともありぐんと(しょぼいけど)アクセスがありました. こんな感じです. 一気に伸びたときには3年生への研究室配属説明のページがアップされた時と重なっていて意外とみんな田胡研のサイト見に来てるんだなーってわかります. ページリストは こんなかんじになっていましてみんながどこ見てるか分かります. 田胡研WEBサイトには田胡研診断っていうしょうもない問題があるのですがそのアクセス数が意外に多いのが面白いです. アクセス元ISPは弊学からのアクセスが全体の6割程度で後はまばらでした. ブラウザ分布に面白いところが見られてFirefox(37%)Chrome(30%) Safari(25%)程度で最もFirefoxが多く面白いです. 端末はモバイルが20%程でした. 意外とみんなスマホから大学の情報見てるんだなーってわかります. 私個人としては大学の情報なんてみんなPC持ってるんだからそれで見るだろうと思っていたのですがモバイルで研究室サイトにアクセスする人も多く, 大学のポータルとか(これから)触る私としてはモバイルの重要性はかなり重要なんだと再発見できました. 今日はこんなんで終わりにしようと思います.

2017年7月1日土曜日

田胡研のnginxとシングルサインオン

# はじめに この記事は田胡研初夏のAdventCalendar2017 1日目の記事です. ここに記事を書くのは12月のAdventCalendar以来になります, 最近やったことをあまり整理できていなかったので整理するためにも, またナレッジを少しでも溜めていくためにも7月にAdventCalendarをやることにしました! 1ヶ月間色々書いていけたらと思います. 1日目はnamazuさんです. # 田胡研のnginx 田胡研ではReverseProxyを行うWebServerとしてNginxを利用しています。 Nginxを流行始めたらしい2012年頃から利用しており、 現在田胡研Domain(t-lab.cs.teu.ac.jp)で外部公開するWebサービスについてはすべてNginxを利用して内部の各サービスへReverseProxyすることで公開しています。 公開している物としては * 田胡研web ( http://www.t-lab.cs.teu.ac.jp ) * iotプロジェクト ( http://iot.k.t-lab.cs.teu.ac.jp ) * lifehubプロジェクト ( http://lifehub.t-lab.cs.teu.ac.jp ) など外向きのものや * wiki * gitlab * webcam streaming など内向けのサービスを数え切れないくらい公開しています. これらはすべてnginxを経由しインターネットに公開しています. # シングルサインオン 田胡研では内向けの外部秘なサービスもインターネット経由でアクセス可能にしているため,内向けのサービスでは認証が必要です. 田胡研では所属メンバーに対してLDAPのアカウントを発行しているため,LDAPサーバへの問い合わせを行うことで正規アクセスかどうかを判定できます. このLDAP問い合わせを内向けサービスにそれぞれ実装すればいいのですが,実装が面倒だったりサービス毎にそれぞれログインが必要と非常に勝手が悪いので **一度LOGINサーバでログインしておけばあとは田胡研の内向けすべてのサービスをログイン処理なしで閲覧・操作できる**というシングルサインオンを用意しています. # 田胡研のシングルサインオンの歴史 前に田胡研では2012年頃からnginxを利用していると言いました, 当時nginxにはシングルサインオンを実現するためのモジュールは存在しておらず, 独自にmoduleを開発しperl製のLDAP認証ページと組み合わせたシングルサインオンを利用していました. 2017年になってnginxの更新に取り組んだのですがビルドコンフィグやnginxのmoduleのソースコードが失われていてこの再利用は困難でした. またモジュールも増えておりnginxに独自モジュールを組み込まなくても狙いのシングルサインオンは実現可能になっていることが分かりました. そのためnginxは正規(centos用の最新リリース物)をそのまま利用し,新しく追加された機能を用いてシングルサインオンを実現するようにしました. # nginxのシングルサインオン 現在nginxを利用したシングルサインオンの実現方法は数種存在します. nginx_auth系のmoduleには例として * nginx_auth_basic_module * nginx_auth_ldap_module のようなものがあってbasicではbasic認証を,ldapではldap認証を利用可能です. ただしこのようなものはカスタマイズ性に欠けるのが難点です. 見た目もブラウザのダイアログが出てくるような物なのであまり望ましくありません. そこで今回は [nginx_auth_request_module](http://nginx.org/en/docs/http/ngx_http_auth_request_module.html) を利用することとしました. このモジュールは公開サービスへReverseProxyする前にサブリクエストを任意のサーバに送信することができ, サブリクエストのステータスコードが200外である場合公開サービスへのReverseProxyを行わないようにすることが出来ます. つまりサブリクエストの送付先にLDAPを利用したログインページ兼認証サーバを置き,ReverseProxy前に認証サーバで既にログイン済みかをチェックし, ログイン済み(認証サーバが200応答)であればそのままReverseProxy, 非ログイン(認証サーバが401応答)であればログインページへリダイレクトするという処理が可能です. 田胡研は現在この方法でシングルサインオンを行っています. サブリクエストの送付先を田胡研ではRails製のLDAPサーバへ問い合わせるアプリケーションに設定していますが, サブリクエストの送付先は任意で設定可能なのでGoogleOpenID認証を利用したり等色々と幅が広いmoduleです. # nginx側の具体的設定例 LDAP認証を利用するログインページ等はまた後日記事を書こうと思っているのでどんな感じにnginxの設定がなされているかだけ今回では書いておきます. ```internal.conf auth_request /auth; error_page 401 = @auth_redirect; location /auth { internal; proxy_set_header Host LOGIN_SERVER_INTERNAL_URL; real_ip_header X-Forwarded-For; proxy_set_header Content-Length ""; proxy_pass LOGIN_SERVER_INTERNAL_URL; proxy_pass_request_body off; } location @auth_redirect { return 302 http://login.t-lab.cs.teu.ac.jp/login?request_uri=https://$host$request_uri; } ``` auth_requestでLOGIN_SERVERの/authを叩くようにし 401エラー時はloginページにリダイレクトするようにします. この設定ファイルを各サービス側で読み込んで使ってやることでどんなサービスでも簡単に田胡研のLDAP認証を掛けられるようにしています. 後日LDAPの認証ページをRailsで作る話など書けたらと思います. 明日のカレンダー担当はcut-terさんです.