飯 A/W
こんにちは。iPX川口です。
この前まで暑かったのに肌寒くなってきて年末が近づいているんだなと、一年は早いなと思う今日この頃です。
関係ありませんが、
「え?君、そば派?うどん派じゃないんだ?」という会話にいやどっちでもでしょと心の中でつっこんだ経験、ありますよね。
ちなみに私は温はうどんで、冷はそばです。どっちでもいいですね。
さて、私は趣味で料理をするのですが寒くなってきたこの季節に丁度よいものがあるのでそれをご紹介します。
寒い時に食べたい、そう鍋です。
鍋=美味い
鍋=簡単
美味い+簡単=正義!!!
写真は鴨鍋です。
盛り付けと撮影はセンス無し。けど美味いです。
鴨鍋のレシピ
------------------------------------------------------------
鍋汁
めんつゆ(カツオ) 適当
塩 適当
酒 適当
水 適当
もしくは寄せ鍋の素
具材
鴨
つみれ(お好み)
ごぼう
えのき(他きのこ類でも代用可)
糸こんにゃく(お好み)
長ネギ
豆腐
白菜
春菊(お好み)
下ごしらえ
鴨 肉のにおい消しのために酒に浸しておく
ごぼう 土っぽいにおい消しのために水に浸しておく
調理
いい感じの鍋汁ができたら、火の通り辛そうな具材から投入。
(鴨はごぼうの近くに配置するとお互いでにおいを消し合ってくれます。)
春菊は他の食材に十分に火が通った後に投入し、5分ほど煮込む
完成!
------------------------------------------------------------
うん簡単!
鴨って売ってる?という質問を知り合いにされたことがありますが、スーパーに行くと意外とあります。
以上です。ありがとうございました。
品質管理のお話
こんにちわ、プログ3回目の投稿になります古谷です。
そろそろ技術系のブログを・・・と思いつつもなかなか書くのは難しいと思う日々。
というわけで今回は、業務に直接的には関係ありませんがちょこちょこ耳にするQC(品質管理)について書いていきます。
自分自身もなんだろう?と興味があったので調べてみることにしました。
1.QC(品質管理)とは
品質管理と聞くと、品質管理課の人が商品を検査し改善するもの。と思われる方が多いと思います。私も当初そうだと思っていましたが、これは正しくもあり、広義的にみると違った解釈をすることもできます。
◆広義の品質管理:
顧客や社会の要求する品質を満たし、ニーズに合った製品やサービスを作って提供するための品質管理
どう違うかというと、完成した商品から原因を探っていくより、開発全体を通して品質管理を行う方が有効的ではないかという考え方です。
最近ではこの「広義の品質管理」が一般的になってきているようです。
一例としてTQC(全社的品質管理)があります。
設計の段階から販売、アフターサービスといった全プロセスを総合的に品質管理する手法です。
これにより品質管理は「1部門だけが行うもの」ではなく「企業に属する全員で行うもの」となります。
2.品質管理の考え方
・品質第一:顧客は品質が高くないと購入しない。顧客が求めるものを品質が高い状態で提供する
・後工程もお客様:自分が行う業務だけではなく、その次の工程のことも考えた仕事をすれば全体の品質向上につながる。自分の仕事さえ完了すればいいという考え方は周りに負荷をかけ品質低下を招く。
・プロセスを管理する:良い結果、悪い結果を決めるのは結果までに至るプロセスによるもの。何か問題が起こった時、問題をおこしたプロセス(仕事のやり方)に原因がある。
品質管理の考え方をここでは3つ挙げてみました。他にもありますがどれも重要なことばかりです。文章で書かれると「己はしっかりできているのか」と心に響くものがありますね。
3.分析手法
今まで考え方を書いてきましたが、次は分析手法(問題解決手法)についてです。
分析する方法は有名なものとしてQC7つ道具、新QC7つ道具と呼ばれるものがあります。
中身については割愛しますが、2つの使いわけについて説明していきます。
QC7つ道具:数値データ特化の分析手法です。
例)商品の重量のばらつきをグラフ化して分析
新QC7つ道具:数値化できない言語データ特化の分析手法です。(一部数値データを扱います)
例)作業手順をチャート化し、見える化を図る
まとめ
最初は単なる興味から調べてみた品質管理ですが、自分を見つめなおすいい機会となりました。
特に品質管理の考え方は社会人になる前から知りたかった内容でした。
意識するしないで大きな差となってくることでしょう。
というわけで、品質管理のお話でした。ではでは。
視覚のオハナシ ”皆さん脳に騙されてますよ!”
iPX mazdaです。(3回目の登場です)
本日の前置き。
最近、運転する機会が増えましてウキウキしております。
山奥や海辺や雪山へ。
アウトドア&ドライブが好きな私ですが、アルコールもとても好きなのです。
アルコールを嗜みたい時、自動で運転してくれたらな…と思い始めた今日この頃。
さて本日の本題に。
“視覚”について書き綴ります
導入バナシ
大学で少々視覚をテーマに研究しておりました。
運転には限りなく視覚が重要なファクターとなります。
「あ、あそこに好みの女の子がっ!」と言ってよそ見をしてはいけません。
とてつもなく良い視野角・反応速度は持っていても注視する所が偏ってしまうと危険です。
視覚は人間工学や動態学、人類生物学と言った領域の知識が必要な領域となりますが、そんな専門的な領域を学んだ人は少ないでしょう。
何か少ない知識でも賄えたりしないであろうか…。
実は、サリエンシー・マップ、ベイジアン・サプライズマップと言う計算理論的にコンピューター上で人間が注視している部分を再現出来る手法があります。
(南カリフォルニア大学のItti氏が実際に開発されたプログラム)
コンピューター上でも再現できれば色々と応用が利きそうですね~。
個人的には自動車業界もそうですが、サインデザイン・UI/UXに従事している業界の人達にも有効なのではと。
とは言うのも、
転業界して「デザイナーってあんまり検証してないやん。何を根拠にしてるんだ?」と多々思う事がありまして。
しっかりと検証・シミュレーションを行い根拠あるモノを作っていく必要が何に従事していたとしても必要なのではないかなと。
そろそろ、文章だけではつまらないので画を入れていきます。
視覚は脳を騙してます
「みる」という事はそもそも光が無ければ出来ない事ですが、その編は詳しくないので割愛して、
入って来る光が錐体細胞を刺激して色の判別をし、視神経を通して電気信号を脳に届けています。
脳内で三次元情報へと変換され、視覚世界が構築されています。
つまりは、脳の独断と偏見で視覚世界が構成されているのですよ!
その根拠として、こちらをご覧ください。
チョコ好きの皆さん、どちらのチョコを手に取りますか?
無論、私は上の方を選びます。
しかしながら残念なお知らせをしますと、上下とも同サイズなのです…。
※※※Photoshopで編集なんてしてませんよ、現実です※※※こういった類の現象を“錯視”と言います。
今回の例はポンゾ錯視です。
何で騙されるんだ?
それはですね、食いしん坊だからです(嘘)。
少しでも大きい方が嬉しいのは間違いないのですが、何故大きく見えてしまうのかと言いますと、脳は奥行を感じてしまっているからです。
脳の偏見
「な、なんでなんだ私の脳みそ!これは二次元の画じゃないか!」
二次元と分かっていながら、手前と奥を認識して勝手に脳が三次元変換しているのです。
実際、人間自体は三次元ですし住んでいる世界も三次元なので脳も自動的に三次元変換を加えているのでしょう。
手前と奥を感じたからと言って何故大きく見えるかはまだ疑問としてあるでしょう。
少々解説しますと黒い線がカギとなっています。
奥(尖がっている方)は狭い・小さいと感じている為、比較対象となるチョコレートが大きく認識してしまいます。
一方、手前のチョコは比較対象が大きな空白(空間)として捉える為、小さいと認識します。
互いに誇張されている感じですね。
まだまだ他にも錯視の法則がありますので調べてみて下さい。
世間ではトリックアートなんて流行っていますが、錯視の法則を利用していますよ!
今回の視覚について第1弾は閉幕とさせて頂きます。
次回、乞うご期待。
YammerでHubotを利用する(Hubotプログラミング入門編)
前書き
2本目の投稿です。iPXのabikoです。
前回から引き続きHubot〆の記事としてお送りします。
下準備
EC2とローカルでファイルのやり取りをする場合は、WinSCPなどのツールがあると便利です。
(viなどで直接編集する方は不要です。)
WinSCPでEC2に接続するには、Putty同様ホスト名・ユーザ名・秘密鍵の設定をする必要があります。
秘密鍵の設定箇所は「設定」から「SSH」>「認証」の「秘密鍵」の項目です。
ここにEC2にアクセスするために使用している.ppkファイルのパスを指定すれば完了です。
スクリプトの配置場所とサンプルの利用
作成したスクリプトは Hubotのルートディレクトリ/scripts に置いていきましょう。
(これまでの私の記事ですと ~/YAMMERBOT/script)
ここにはサンプルとして example.coffee が入っております。
このファイルのコメントアウトを外しながら少しずつ改変していくと手っ取り早く理解が進むのではないでしょうか。
(私はCoffeeScriptはおろかJavaScriptの経験も乏しく、どうしてもサンプル頼りです)
また、以降の私のスクリプトを試したい場合には、 example.coffeeに下記「ここに追加」箇所に追加することで試せます。
※CoffeeScriptはインデントの階層でブロック(C言語で言う 中括弧{})を表現します。追加の際はお気をつけください。
module.exports = (robot) -> (ここに追加) # robot.hear /badger/i, (res) -> # res.send "Badgers? BADGERS? WE DON'T NEED NO STINKIN BADGERS" ・・・(略)
CoffeeScriptは最終的にJavaScriptに変換されて実行される、JavaScriptを簡潔に記述できるようにした言語です。
なんとJavaScriptと比べ1/2~1/3の記述量で済むとか何とか。(利点は他にも色々あるようですが、ざっくり)
下記のページの上部メニュー「TryCoffeeScript」に移動すると、右側に書いたCoffeeScriptがリアルタイムでJavaScriptに変換され左側に出力されます。
CoffeeScriptになじみの無い方は使用してみるとイメージがつかめるかもしれません。
いざ、Hello World!
これは基本のping→pongの発言内容が変わったバージョンですね。
robot.respond /Hello/i, (res) -> res.send "World!"
サーバに編集したファイルを配置したらHubotを起動します。
スクリプトの読み込みはHubotの起動時に行われ、コードに記述ミスなどの不備があると起動できずにエラーになります。
つまり、コードを書き直すたびにHubotの再起動が必要です。
また、コードを試すだけであればYammerで発言しなくともコンソール上で確認可能です。
$ ./bin/hubot ・・・(略) YAMMERBOT> YAMMERBOT Hello YAMMERBOT> World!
かならずYAMMERBOTってつけないとダメなの?
YAMMERBOT ~ って書くのが煩わしいぞ!会話を自然にしたい!
と思ったそこのあなた、
robot.respond を robot.hear に変えて試してみましょう
robot.hear /Hello/i, (res) -> res.send "World!"
実行してみます。
$ ./bin/hubot ・・・(略) YAMMERBOT> Hello YAMMERBOT> World!
要望はかないましたが、デメリットもあります。
文中にHelloが含まれていても反応するのです。
YAMMERBOT> HogeHogeHelloFugaFuga YAMMERBOT> World!
よく使われるワードを使用すると、意図しない発言に反応してしまう可能性があるので注意が必要です。
また、respondとhearで受け取った発言内容を返したい場合、若干実装が異なってきます。
#hearの場合のコード robot.hear/Hello/i, (res) -> res.send res.match[0] #実行結果 YAMMERBOT> Hello YAMMERBOT> Hello #respond の場合のコード robot.respond /Hello/i, (res) -> res.send res.match[0] #実行結果 YAMMERBOT> YAMMERBOT Hello YAMMERBOT> YAMMERBOT Hello
msg.match[0] と書くと、発言内容の「全文」を取得できます。
そのため、respondで使用すると、呼び出しの文句(YAMMERBOT)まで取れてしまいました。
なんといいますか、このままでは使い勝手が悪そうです。
この問題については、括弧でくくる、と解決します。
respondやhearの引数になっている /~/ は正規表現で解釈されるため、(Hello) とくくることによって、Hello が正規表現の1つめの要素になるんですね。
あとはmsg.match[1]として1つめを取得すると、hearと同じ様な結果が得られるようになる、というわけです。
#respond で呼び出し文を除いて発言内容を返答 robot.respond /(Hello)/i, (res) -> res.send res.match[1] #実行結果 YAMMERBOT> YAMMERBOT Hello YAMMERBOT> Hello
では相手の発言の一部を返答に組み込む例をひとつ
#{}でくくると変数の中身を展開できることも利用します。
#相手の発言内容の一部を返答に組み込む robot.respond /Hello, I am ([a-z]+)/i, (res) -> res.send "Hi, #{res.match[1]}! I am YAMMERBOT!" #実行結果 YAMMERBOT> YAMMERBOT Hello, I am abiko. YAMMERBOT> Hi, abiko! I am YAMMERBOT! YAMMERBOT> YAMMERBOT Hello, I am HogeHoge. YAMMERBOT> Hi, HogeHoge! I am YAMMERBOT!
中学校の教科書の最初に出てきそうな受け答えができました!
ちなみに /~/i の i は大文字小文字を無視する(ignore)意味があります。
これまでの紹介してきたコードの場合、呼び出しの文句を含め大文字にする必要は無いのです。
[a-z]としていても、大文字小文字によらず英字を判定してくれます。
おみくじ
続いておみくじの実装に入ります。
実はこの課題、とてもコード上は簡単なんです。
robot.hear /おみくじ/i, (res) -> res.send res.random ["大吉", "吉", "凶", "大凶"]
random の引数にランダムにしたい配列の内容を渡すだけなんですね。
拍子抜け、と言うほどあっという間におみくじができてしまいました。
では、早速確認してみます。
$ ./bin/hubot ・・・(略) YAMMERBOT> おみくじ YAMMERBOT> 大吉
大吉でした!(ヤッタネ!)
scriptに日本語を書く場合は、ファイルの文字コードをUTF-8にする必要があるようです。
(SJISだと反応が返ってきませんでした。)
終わりに
ここまででHello Worldを含め、Hubotを一通り動作させることができました。
スクリプトについては超入門レベルでしたが、目標は達せられたかなと思います。
様々苦戦しましたが、その甲斐もあり?いい勉強になりました。
今のままだと常時稼動できないようなのでデーモン化するなど課題もでてきますが、次回取り上げるかは未定です。
ここまでお付き合い頂きありがとうございました。
それではまた、次の記事でお会いしましょう。
今回主立って参考にさせて頂いたサイト様
CoffeeScriptとはなんぞや?
CoffeeScript入門メモ
robot.respondでmsg.matchを使う場合は単一でもキーワードを()で囲まなければならない
Hubot + CoffeeScript ではじめるやわらかプログラミング入門 · GitHub
ありがとうございました!
Re:YammerでHubotを利用する(環境構築編2)
前書き
ご無沙汰となりました。iPXのabikoです。
またしても大分間が空いてしまいました。
一体何時から続いているのか、というHubot記事ですが、今回と次回を2本立てでお送りして一旦〆たいと思います。
さて今回の記事は...
前回の環境構築編も一年も前の記事となり、現在ではサーバを立てるまでの画面遷移など諸々が様変わりしています。
その環境構築について見ていくと、終わりが見えないので前回記事終了時点「Amazon EC2が起動しておりSSH接続ができている」ところから話を進めます。
前回の記事
Re:YammerでHubotを利用する(環境構築編1) - iPX社員によるブログ
前々回の記事
社内で利用するYammerにbotを作りたかった(環境構築編) - iPX社員によるブログ
実は今回、Hubotのインストールに大苦戦しました。
過去インストールできた方法が通用せず、エラーばかりだったんですね。
そのエラー達への対処は横に置いておき、最終的にインストールできた方法をご紹介していきたいと思います。
エラーで?マークが出ていた私を救ってくれたはサイト様はこちら。
AWS EC2でNodeを動作させる
上記のサイトではEC2の起動から、Node.jsによるHTTPサーバの作動まで、とても丁寧に紹介されております。
※少々昔の記事なので現在と多少の違いはありますが、かなり参考になるかと
Hubotのインストールのための準備
基本的には前述のページどおりに進めていけば準備完了です。
コマンドを実行して環境を整えつつ、必要なものをインストールしていきます。
# システムアップデート $ sudo yum -y update # 開発ツールのインストール(コンパイラやらGitやら) $ sudo yum -y groupinstall 'Development Tools' # nvmのインストール $ git clone https://github.com/creationix/nvm.git ~/.nvm $ source ~/.nvm/nvm.sh # Node.js のバージョン一覧の表示 $ nvm ls-remote v0.1.14 v0.1.15 ・・・(略) v10.11.0 # Node.jsのインストール(2018/10/08 時点の最新版:v10.11.0) $ nvm install v10.11.0 $ nvm use v10.11.0 # バージョンの確認 $ node -v v10.11.0 $ npm -v 6.4.1
nvmのパスの設定(source ~/.nvm/nvm.sh)は今回のセッションでのみ有効です。
次回以降はログイン時に自動で設定されるよう、~/.bash_profileに下記を加えます。
# nvm if [[ -s ~/.nvm/nvm.sh ]] ; then source ~/.nvm/nvm.sh ; fi
いざHubotをインストール
以降はこちらのページを参考に進めました。(前回も参考にさせて頂きました)
Hubot を Amazon EC2 にセットアップして Yammer に投稿する
# インストール $ npm install -g yo generator-hubot ・・・(略) Everything looks all right! + yo@2.0.5 + generator-hubot@0.4.0 added 839 packages from 300 contributors in 27.223s # 初期設定 $ mkdir YAMMERBOT $ cd YAMMERBOT $ yo hubot ? ========================================================================== We're constantly looking for ways to make yo better! May we anonymously report usage statistics to improve the tool over time? More info: https://github.com/yeoman/insight & http://yeoman.io ========================================================================== No _____________________________ / \ //\ | Extracting input for | ////\ _____ | self-replication process | //////\ /_____\ \ / ======= |[^_/\_]| /---------------------------- | | _|___@@__|__ +===+/ /// \_\ | |_\ /// HUBOT/\\ |___/\// / \\ \ / +---+ \____/ | | | //| +===+ \// |xx| ? Owner abiko ? Bot name YAMMERBOT ? Description A simple helpful robot for your Company ? Bot adapter yammer create ・・・(略) _____________________________ _____ / \ \ \ | Self-replication process | | | _____ | complete... | |__\\| /_____\ \ Good luck with that. / |//+ |[^_/\_]| /---------------------------- | | _|___@@__|__ +===+/ /// \_\ | |_\ /// HUBOT/\\ |___/\// / \\ \ / +---+ \____/ | | | //| +===+ \// |xx| ・・・(略)
はじめは匿名での使用統計の送信有無を聞かれます、今回は n としています。
その後の必要情報の入力ですが、Bot name(任意の名前)とadapterの項目以外はEnterキーで飛ばしてしまって大丈夫です。
間違えてしまっても後から修正できますのでご安心ください。
修正するには作成したディレクトリ配下のpackage.jsonファイルを編集します。
また、adapterの項目をEnterで飛ばしてしまった場合は次の方法でインストールできます。
$ npm install hubot-yammer
ひとまず起動する
$ ./bin/hubot [Mon Oct 08 2018 12:35:35 GMT+0000 (Coordinated Universal Time)] WARNING Loading scripts from hubot-scripts.json is deprecated and will be removed in 3.0 (https://github.com/github/hubot-scripts/issues/1113) in favor of packages for each script. Your hubot-scripts.json is empty, so you just need to remove it. [Mon Oct 08 2018 12:35:35 GMT+0000 (Coordinated Universal Time)] INFO hubot-redis-brain: Using default redis on localhost:6379 [Mon Oct 08 2018 12:35:35 GMT+0000 (Coordinated Universal Time)] ERROR hubot-heroku-keepalive included, but missing HUBOT_HEROKU_KEEPALIVE_URL. `heroku config:set HUBOT_HEROKU_KEEPALIVE_URL=$(heroku apps:info -s | grep web.url | cut -d= -f2)` YAMMERBOT> YAMMERBOT ping YAMMERBOT> PONG
ワーニングなど目に付きますが、ひとまず返答が返ってくるところまで動作確認ができました。
Yammerと連携するためのトークンの取得
前述のページの通りに進めると接続に必要なトークンが取得できます。
Hubot を Amazon EC2 にセットアップして Yammer に投稿する
発言者になる予定のユーザでyammerにログインした状態で、下記URLにアクセスします。
https://www.yammer.com/client_applications
「新しいアプリの登録」を押した先の入力項目を埋め、作成されたアプリ項目の「このアプリケーションの開発者トークンを生成する」を押します。
現れたトークンをメモ帳などにコピペしておき、情報取得は完了です。
Yammerと連携する設定
環境変数に情報を設定していきます。
今回は投稿用のグループとしてHubotグループを作成しました。
# アクセストークンは先ほどメモしたトークンを設定 $ export HUBOT_YAMMER_ACCESS_TOKEN="xxxxxx-xxxxxxxxxxxxxxxxxxxxx" $ export HUBOT_YAMMER_GROUPS="Hubot" $ export HUBOT_HEROKU_KEEPALIVE_URL="https://www.yammer.com/api/v1/users.json"
いざ、起動して確認!
$ ./bin/hubot -a yammer -n "YAMMERBOT" ・・・(略) groups list : Hubot groups_ids list : 11178894
./bin/hubot -a yammer -n "Hubotの名前"
で起動できます。
では反応を見てみましょう。
Hubotグループにて、「YAMMERBOT ping」と発言してみます。
すると・・・
無事、返信がありました!
長い道のりでした。
因みに
ここでもまた大苦戦したんですが、Hubotはデフォルトで自分自身には返答しない仕様とのこと。
永久ループを防ぐためだと思いますが、Hubot用アカウントを用意できない、という方もいるのではないでしょうか。(私がそうです)
この問題は環境変数の設定で回避できますので、よしなにお使いください。
$ export HUBOT_YAMMER_REPLY_SELF=1
次回
このあたりで力尽きたので、次回までしばし休憩です。
次回で一旦〆になります。
Hello Warldをするところから始まり、簡単にスクリプトに触れていきたいと思います。
それではまた、お会いしましょう。