プロクラシスト

今日の寄り道 明日の近道

プライムデーに向けて、タイムセール用商品カードを作ったよ!(テストページ)

こんにちは、ほけきよです。

いよいよプライムデーが近づいてきました!!

www.procrasist.com

いやはや、楽しみですね。お祭り騒ぎになりそうです。

せっかくのお祭りなので、今年は少し遊んでみることにしました。 なんか作りたいなと思って、

javascriptを勉強中

最近、いろいろあってjavascriptを勉強中です。なので、いい練習機会になると思って、プライムデー専用の商品カードを作ってみました。

カードがこちら(デモ)

見方はこちら

f:id:imslotter:20180715025533p:plain

ポイントは

  • 必要な情報をなるべく簡潔に載せる
  • 直感的に、視覚的に把握できるようにする

あたりです。bootstrap4を使い、カードタイプにしてみました。 実際はこんな感じ*1

3,000円
49.8%OFF!!
  • ちょっとしたスペースにもピッタリ
  • リーズナブルな価格
  • モバイルバッテリーを買うとどこでも持ち運べる!
  • 8,000円
    33.2%OFF!!
  • おしゃれなスマートスピーカー
  • フェルトのスピーカなので、部屋のインテリアにも!
  • 今ならxxx%OFF!
  • 15,200円
    0.5%OFF!!
  • 電子書籍リーダ
  • Amazon Kindleとの連携が密
  • 長寿命!バッテリーが数週間持つ
  • 3,480円
    30.1%OFF!!
  • prime videoをTVにつないでみられるスグレモノ!
  • アプリによる拡張でYouTubeniconico動画とも連携
  • マイク内蔵音声による操作も可能
  • 技術詳細

    少々技術についても。

    • テンプレートはbootstrap4がメイン。ちょこちょことcssを当てる(画像のhoverとか)
    • 商品カードで、valueに時間をもたせている。idにamazon商品idをもたせている。
    • classに"timer "を追加し、jQueryでカウントダウン。idが一意なので、すべてのカードに非同期的なカウントダウンが可能。valueを読み取って、現在時刻との差分を取る
    • いちいちhtmlを書くのは面倒なので、pythonで半自動処理。商品画像URLのスクレイピング/割引率計算etc...はバックエンドで自動抽出
    • 記述するアイテムリストの変更差分を少なくするために、csvにて商品シートを管理(商品名, ID, 訴求ポイントなどを管理するシート)
    • webサービス化してみたかったけど、いろいろと考慮することが多すぎて時間内では断念。時間があるときにするかも?

    参考までに、時刻カウントダウンのスクリプトを載せておきます。javascript勉強しているところなので、もっと良い書き方あればご指摘ください。 文法とか、valueの使い方とかあっているかは知りませんが、とりあえず動いています。

    <script type="text/javascript">
        $(function() {
            countDown();
        });
        function countDown(obj) {
            obj = document.getElementsByClassName("Timer");
            var startDateTime = new Date();  
            for(var i = 0;  i < obj.length;  i++){
                var endDateTime = Date.parse(obj[i].getAttribute("value"));
                var left = endDateTime - startDateTime;
                if(left<0){
                    left = 0;
                }
                var a_day = 24 * 60 * 60 * 1000;
                var h = Math.floor((left / ( 60 * 60 * 1000))) ;
                var m = Math.floor((left % a_day) / (60 * 1000)) % 60 ;
                var s = Math.floor((left % a_day) / 1000) % 60 % 60 ;
                var id = obj[i].getAttribute("id");
                $("#"+id).text("残り : "+h+":"+m+":"+s);
                }
                if(left<3600*1000){
                    document.getElementById(id).className = "btn btn-danger float-right badge-pill Timer";
                }
            setTimeout('countDown()', 1000);
        }
    </script>
    

    まとめ

    javascriptを触れるようになると、また表現の幅が広がりますね。きちんと勉強しようと思いました。

    こういうの作っていたら(特にデザインのところ)、細かな修正が無限にできるので、キリが無くなります。まだ直したいところはいくつかあるのですが、、

    とりあえず月曜日まではまだ時間があるので、もうちょっと気になるところを直して実際に使いたいなと思います。

    プライムデー楽しみましょう!ではではっ

    *1:動作確認も兼ねています。

    【AWS, 統計, デザイン, ...】上半期に買ってよかった技術本たちの動機と感想!

    こんにちは、ほけきよです。

    早いもので、2018年も半年が経ちました。

    この上半期、転職して新しいタスクもかなり増えたので、色々と勉強しなければなりませんでした。 なので、今回は上半期に買ってよかった技術本をご紹介します!

    こんな技術本が良いよ!っていうのがある人は教えてください。

    AWS/コンテナ

    自社で運用しているサービスがAWS上にDockerコンテナを構築して動いています。

    AWS、名前は聞いたことがあるけど、動かしたことはない…

    状態からのスタートだったので、書籍、qiita、クラメソブログ、ハンズオン、ウェビナーとかにで知識を獲得していました。

    合格対策 AWS認定ソリューションアーキテクト

    合格対策 AWS認定ソリューションアーキテクト - アソシエイト

    合格対策 AWS認定ソリューションアーキテクト - アソシエイト

    動機

    まずAWSとはなんなのか、から理解せねばならなかった。 ソリューションアーキテクト*1取りたいなと思ったので、初学のために購入

    感想

    • クラウドコンピューティングとはなにか?AWSとはなにか?から学べる。
    • よく使われるもの(EC2, RDS, S3, ...)が網羅的にまとまっていた。初学にはとても良い。
    • これだけでソリューションアーキテクトを取るのはとても難しいらしいので、さらなる勉強が必要。

    AWSは日々進化するので、情報のアップデートはwebのほうが良いかもしれないと思いました。*2最新のサービスも使いたい!という人に関しては、この本をベースに、Amazonが開催するイベントでいろいろと聞きまくるのが一番いい気もします。

    AWS Lambda実践ガイド

    AWS Lambda実践ガイド (impress top gear)

    AWS Lambda実践ガイド (impress top gear)

    動機

    Alexaで遊びたかった*3のだが、どうやらlambdaとかいうAWSサービスを使うと良いらしいということが判明したので、辞書がわりにと、一冊

    感想

    • コードを書く以外の各種設定、他サービスとのつなぎ方などが、かなり勉強になった。
    • Pythonでかかれているのも、個人的にはありがたい*4

    Lambdaの使われ方がわかった。FaaS*5は、これから主流になっていくだろうから、勉強できてよかった。

    AWSによるサーバーレスアーキテクチャ

    AWSによるサーバーレスアーキテクチャ

    AWSによるサーバーレスアーキテクチャ

    動機

    自社サービスを見直す時期が来ているので、アーキテクチャのお勉強をしようと思ったら、このベストセラーを見つけた 動画配信サービスをサーバーレスで構築することを目標に、手を動かしながら進められる様。

    感想

    • データ量増加などのシステム面の根本解決は、やはりアーキテクチャの設計。
    • 用途に応じたいろんなアーキテクチャパターンが紹介されていて、なぜこうなるのかの説明もあるので実感を持って読めた。
    • 実際に使っていないと理解が難しいと思うので、運用してる人、本当にしようと思っている人が読むべきかな。

    AWSなどのクラウド環境は、物理マシンの用意/環境構築など、本来めちゃくちゃ気にしないといけないところが簡単にできる。アーキテクチャ設計に集中できる素晴らしさを理解して読むと、とても深みの増す一冊になると思った。

    コンテナ・ベース・オーケストレーション

    コンテナ・ベース・オーケストレーション Docker/Kubernetesで作るクラウド時代のシステム基盤

    コンテナ・ベース・オーケストレーション Docker/Kubernetesで作るクラウド時代のシステム基盤

    動機

    サービスをコンテナで管理している(Docker+Kubenetes)。

    工数低減のためにそうしてるはずなのに。コンテナやオーケストレータが分からなさすぎて工数が変わらないという現状を打破するために勉強

    感想(途中)

    • 結構情報量多い。読み応えはあるけど、読み進めるのには、かなり時間がかかる
    • コンテナ運用が主流に至った歴史が書かれていて、ナルホドとなる。
    • 実際にサービスを運用していないと、実感を持つのは難しいだろうなと思う。*6

    概念の理解をしながら読まないと意味がないので、実際に手を動かしながら、ゆっくり読み進めていきます。

    統計/機械学習(初心者レベル)

    数をきちんと扱える。バズワードの出来ること、出来ないことをきちんと理解できる人を増やしたいと思い、課題図書選定のために読んでいた。

    この世で一番おもしろい統計学

    この世で一番おもしろい統計学――誰も「データ」でダマされなくなるかもしれない16講+α

    この世で一番おもしろい統計学――誰も「データ」でダマされなくなるかもしれない16講+α

    感想

    • アメコミ調のマンガ形式で進んでいくので、初学には読み進めやすい
    • 統計の専門用語を比喩しながら進めてくれるので、イメージに良い

    たまに、字だけ柔らかくして初学者を釣り、内容は専門用語のオンパレードみたいなパッケージ詐欺の統計本もあるが、これは内容もわかりやすかったと思う。実際に初学者にも好評だった一冊

    嘘を見破る統計学

    ウソを見破る統計学―退屈させない統計入門 (ブルーバックス)

    ウソを見破る統計学―退屈させない統計入門 (ブルーバックス)

    感想

    • 数式はあまり使わず比喩表現を用いた説明を徹底してくれていて、とてもわかりやすい*7
    • 普段扱わないレアな統計手法も出てきたりする。これを読めば、100m走の限界値が統計的に存在することがわかる!

    いろいろな統計手法がわかりやすく登場して、面白い。 とはいえ、初学は正規分布を理解するところからまず始めるべきだとも思うので、それができたあとに手に取る一冊かな。

    デザイン

    Google流資料作成術

    Google流資料作成術

    Google流資料作成術

    動機

    上司に勧められ買った一冊。Googleのデザインはおしゃれだし嫌にならない。

    感想

    • わかりやすい上に、超実践的。すぐに真似ができることが多い。
    • Googleのデザインがなぜ美しく見えるかがわかる。

    上半期、一番オススメの本を選ぶならこの一冊!ほんとにわかりやすい。 多分また記事を書きますが、ノウハウがいっぱい詰まった本なので、非常におすすめです。

    まとめ

    技術本、あと何冊かあるけど、書くの辛くなってきたのでとりあえずこのくらいにします!

    新しいことを学ぶと、新しいことができるようになる。とくに技術に関してはそれが顕著だと思います。 クラウドアーキテクチャ、コンテナ運用などは、馴染みが無くてハードルを感じた(今も少し感じている)けれど、 「なぜそんな技術が生まれたのか」がわかってくると、応用可能性が広がり、とたんに楽しくなってきます。

    上半期はそれを感じ始めたので、引き続き本を読み、技術を実践していきたいと思っています。ではでは!

    ちなみに、レビュー記事を書くのは読んだ本の復習にとっても良いですよ!

    *1:AWSのサービスをいろいろ組み合わせてサービスを構築、運用するために、必要な知識を見るための試験

    *2:8月に試験内容がupdateされるらしいです

    *3:【Alexa】ゼロから解説!Amazon Echoでメモアプリを作ってみた - プロクラシスト

    *4:普通はnode.js

    *5:Function as a Service

    *6:一年前の自分が読んでも、95%意味不明。

    *7:たまに家族の会話でスベっているところが見受けられたが、わかりやすさの代償ということで、、、笑

    Hannover Messe 2018探訪記

    f:id:imslotter:20180429202031p:plain

    こんにちは、ほけきよです。

    4/23-4/27まで、ドイツのHannover Messeという展示会に行ってきました。 初めて知ることもいろいろあったし、課題もいろいろ持ち帰ることができたと思う。

    探訪記と感想を。

    Hannover Messeとは?

    世界最大の製造業の展示会。 ビジネス目的で集まってくるお客さんがほとんどなので、その場で契約が発生することもざらにある。

    どのくらい世界最大かというと、ビッグサイト級の会場が20個くらいある感じ。 期間も5日間と長く、私は3日目にかかとにタコができました。 必ずスニーカーで行くことをお勧めします。

    ※2019年は4/1から4/5らしい。

    ドイツ

    展示会メインだったので、2時間くらいしか観光していないけど、普通の街並みもヨーロッパ感があり、とてもよかった。

    あと、プレミアムエコノミー、初めて乗ったけど超よかった。アレに慣れたらエコノミー乗れなくなるね。怖い。

    花粉

    これは本当に不意打ちだったのだが、ドイツに行ってからひどい花粉症に見舞われた。調べると白樺っぽい。

    絶望的だったのは、どこにもマスクを売っていないこと。ヨーロッパではマスクしていると重病人におもわれてめちゃくちゃ嫌な顔をされるみたい。それでも、いやな顔をされてもいいからマスク欲しかった。

    皆さんも行くときは気を付けてくださいね!

    ごはん

    おいしかったレストラン@ドイツを二件紹介する。

    Rotonda

    一件目はRotondaというイタリアン サラダからすでに美味。カルボナーラ、細い麺だったの、結構珍しいと思う。 お客さんがピアノを弾き始めたりして、とてもおしゃれな雰囲気漂うお店だった。

    Amici Miei

    二件目はイタリアンのお店。 ここ、肉もパスタもサラダもすべておいしい。 けれど、なんといってもおすすめはコレ!

    トリュフの香りと、チーズ、マッシュルームの塩気が絶妙に絡み合った絶品。 メニューにないらしいので、この写真を見せればいいと思う。

    また、軽食でいえばBalzac Coffeeのアボカドラップはとてもおいしかった。毎朝食べていた。

    感想

    デモの見せ方

    特にIT界隈だと、webデザイン、UIにとても気合を入れているところが多かった。ダッシュボードをきちんと作り、いろいろなデータを一挙にみられるようにする。デモに出すのであれば、まずは足を止めてもらうコトが大事なので、きちんと作っておいたほうが良いなと感じた。今度JSのダッシュボードライブラリ触ってみよう...!

    ちなみに、ロボットもド派手な展示が結構ありました。これとかすごかった。

    業界や英語をきちんと知らなければいけない

    IoTなんて、どこの企業も表層的には一緒の構想になるはずで、技術者としては根幹となる技術についての質問や議論ができるようにならないといけない。これはかなり難しい。

    英語もわからないし、業界のスタンダードもあまりわかっていない状態で臨んだので、会話の中で得られる情報の質はあまり高くなかった気がする。

    良い情報を得るには良い質問が大事だよね。語学力と質問力鍛えねば。

    大企業とIoT

    名だたる巨大企業が展示を行うHannover Messe。大企業は自分たちのできることを掲げ、何をやるのかというパートナーを探しているようだった。

    小さな企業は観点と素早さで勝負を仕掛けていかなければならん。

    心理障壁との闘い

    ここも今後の大きな争点になると思う。

    実際に導入していくうえで、変革を嫌う現場の人の心理障壁をいかに下げられるかは大事。

    ラインの完全自動化やラインの可視化など、大きな改革は大きな効果が期待されエルガ、初期導入コストがかなりかかるので、それを浸透させるためのUIや、想定効果の説明はめちゃくちゃ大事になるだろうなと感じる。

    まとめ

    こまかな技術的なコトはまだまだ書き足りないけど、こんな感じ。結構考えさせられることの多い、いい展示会になりました。

    来年も行きたいな、イタリアンを食べに。

    【Alexa】ゼロから解説!Amazon Echoでメモアプリを作ってみた

    こんにちは、ほけきよです。

    Amazon Echoが一般発売になりましたね。 これで、だれもが簡単にスマートスピーカーに触れられるようになったわけです。

    スマートスピーカーが手に入ると、することはただ一つですね。 そう、ハックです。 自分でいかようにも操作できるようになるので、Smarter, SmartestなAmazon Echoに仕上げましょう。 今回は、Amazon Echoをハックする方法を、ゼロから説明しようと思います。

    今回は、こんな感じのアプリを作っていきます。(画質音質荒くてスミマセン!)

    www.youtube.com

    それではいきましょう!

    Amazon Echoとは

    Amazonが出しているスマートスピーカーAmazon Music等、Amazonの持つサービスと密に結びついているのが良きポイント。

    3種類のラインナップがある。三者三様なのでお好きなのをどうぞ。

    シリーズ 値段 特徴
    Amazon Echo Dot 5980 持ち運び便利、micro usbで動く。音質はいまいち
    Amazon Echo 11980 デザインが一番おしゃれ。音質も良くバランスが良い
    Amazon Echo Plus 17980 でかい。低音の響きはやはり抜群

    また、Echoを持っていなくてもAlexa開発は可能です。

    Alexaとは

    Echoを賢くしている脳みそみたいなもの。ある意味スマートスピーカーの本体。 開発でさらに賢くもできる。

    登録しなければならない3つのサイト

    始めるにあたって結構混乱するのが、ここ。3つのサイトを使いながら開発をしていく。これがかなり面倒。 簡単に役割と特徴、登録方法を見ていく

    サイト 役割 登録方法
    Alexa設定ページ Echo購入後、初期設定する用の画面。後々、自分で作ったアプリの登録を行う。 こちらのセットアップ解説記事がとてもわかりやすい
    開発者コンソール(Alexa Skill Kit : ASK) Alexaをどう呼び出すのか、どういう命令を入力するかなどの辞書作りを行う。 公式テキスト6~9ページがわかりやすい
    AWSコンソール Alexaから入力された命令を処理する(Lambda)。 公式テキスト18~20ページがわかりやすい

    ※注 : 開発者コンソールにおいて、英語アカウントと同じemailとパスワードを使っていると、勝手に英語アカウントと紐づいてややこしいことになるので、違うPWにしておくこと。

    【開発】メモ帳を作る!

    まず読め!

    • ハンズオンに使うテキストは非常によくできている。今回の記事もこれに準拠する形で開発を進めているので、必ず読んだほうが良いとてもよくわかる
    • ただ、こまかいところはハマる可能性があるので、一度ハンズオンに行くのがおすすめ。とてもよくわかる

    1. Skillを作成する

    【開発者コンソール(Alexa Skill Kit : ASK)】を使います。

    • まず、ASKにアクセス
    • 『スキル開発を始める』ボタンを押す
    • 『スキルの作成』ボタンを押す
    • スキルの名前を決める。また、スキル作成時のデフォルトを日本語にしておき、『次へ』を押す
    • 『カスタム』を選択し『スキルを作成』を押す

    するとこんな画面になる

    ここから、ようやくスタートです。

    2. Alexaに言葉を覚えさせる

    Alexaを呼び出すときの言葉は次のような感じです。

    Alexa、メモを開いて
    メモしたい内容は何ですか?
    明日はブログを書く、とメモをする

    コチラをざっと分解してみると以下の通り。

    言葉 名前 役割
    Alexa ウェイクワード Alexaを起動させる
    メモ 呼び出し名 Alexaに用意した命令(Intent)を実行させるトリガー
    メモしたい内容はなんですか? レスポンス Alexaからの返答。変数(slot)を入力するための準備
    {}とメモをする インテント Alexaに実行させる命令(関数)
    明日はブログを書く スロット Alexa入力時、自由に入力できる変数部分

    尚、すでに初めから入っているインテントもあります。例えば「Alexa、とめて」というと、Alexaの動作がストップします。これを「AMAZON.CancelIntent」といい、はじめから備わっています。

    • 呼び出し名 : AlexaにIntentを実行させる準備をする段階です。今回は「メモ」と入力します
    • インテントを作成します。 MemoIntentという名前で登録します。
    • インテントをどうやって呼び出すかです。様々なパターンに耐えられるよう、なるべくたくさん書いておきましょう。
    • {contents}はスロットです。変数もスロットタイプといって、日付や地域など、初めから特別な意味を持たせることもできます。今回のアプリの変数は特に意味を持たせなくても良い文字列なので、SearchQueryにしてみました。*1

    ここまでして、「モデルをビルド」ボタンを押します。入力側はこれでOKです!

    2. Lambda関数の作成

    続いて、「Alexaから入力が入った後の処理」を作る段階です。ここでは、AWSlambdaを使います。手順は以下の通り

    • AWSにログイン後、Lambdaを開く
    • 「1から作る」か「設計図」を選ぶ
      • 本記事をコピペするなら「1から作る」でOK
      • 自分でいろいろ作りたいなら「設計図」を借りる。Pythonならalexa-skills-kit-color-expert-python がおすすめ*2
    • 関数を作成をクリック
    • 関数名を記入(今回はmemoxa_blogとする)
    • ランタイムは選択肢の中から自分が好きな言語を選ぶ(今回はPython3.6)
    • 「テンプレートから新しいロールを選択」する
      • ロール名は適当に入れる(myAlexaRoleなどでOK)
      • ポリシーテンプレートは使うサービスにあったものを選ぶ(今回は「シンプルなマイクロハーネスのアクセス権限」にしてみた*3 )

    こんな画面になったら、「関数の作成」をポチ

    3. LambdaとAlexaを結びつける

    この段階でLambdaとAlexaはまだ連携されていません。連携するためには、先ほどのSkillのページから、Skill IDなるものをLambdaに覚えさせなければなりません。これは、下図の手順でやります。

    LambdaがどのAlexaスキルを実行するかを指定できました。

    3.5 Slackにメモを飛ばす方法

    さて、紐づけができたので、実際にコードを書いていきます。 が、その前に準備。

    今回はSlackにメモを飛ばすという機能を持たせたいので、webhookというものを使います。 slackにメッセージを送るためのURLを作るイメージですね。

    こちらのQiita記事が非常にわかりやすいです。

    こちらの記事ではslackwebというものを使っていますが、URLがわかってしまえば素直にPOSTするだけでもOKです。(詳しくは実装をご覧ください)

    ※注 : webhookのURLは他人にみられちゃダメです!

    4. コードを書く

    コードの中身を書きます。MemoIntentが呼び出され、Slotに入っている{contents}を聞き取ってslackに反映させるというコードを書いていきましょう。設計図に従っているので、大枠はすでに出来上がっています。ありがたい。

    slackのwebhook URLをtake_memourlの中に入れれば、コピペで動くはずです。

    コードをみる
    #coding : utf-8
    """
    This sample demonstrates a simple skill built with the Amazon Alexa Skills Kit.
    The Intent Schema, Custom Slots, and Sample Utterances for this skill, as well
    as testing instructions are located at http://amzn.to/1LzFrj6
    
    For additional samples, visit the Alexa Skills Kit Getting Started guide at
    http://amzn.to/1LGWsLG
    """
    
    from __future__ import print_function
    import urllib.parse
    import urllib.request
    
    
    # --------------- Helpers that build all of the responses ----------------------
    
    def build_speechlet_response(title, output, reprompt_text, should_end_session):
        return {
            'outputSpeech': {
                'type': 'PlainText',
                'text': output
            },
            'card': {
                'type': 'Simple',
                'title': "SessionSpeechlet - " + title,
                'content': "SessionSpeechlet - " + output
            },
            'reprompt': {
                'outputSpeech': {
                    'type': 'PlainText',
                    'text': reprompt_text
                }
            },
            'shouldEndSession': should_end_session
        }
    
    
    def build_response(session_attributes, speechlet_response):
        return {
            'version': '1.0',
            'sessionAttributes': session_attributes,
            'response': speechlet_response
        }
    
    
    # --------------- Functions that control the skill's behavior ------------------
    
    def get_welcome_response():
        """ If we wanted to initialize the session to have some attributes we could
        add those here
        """
    
        session_attributes = {}
        card_title = "Welcome"
        speech_output = "メモをしたい内容を教えてください"
        reprompt_text = "もう一度。"
        should_end_session = False
        return build_response(session_attributes, build_speechlet_response(
            card_title, speech_output, reprompt_text, should_end_session))
    
    
    def handle_session_end_request():
        card_title = "Session Ended"
        speech_output = "Thank you for trying the Alexa Skills Kit sample. " \
                        "Have a nice day! "
        # Setting this to true ends the session and exits the skill.
        should_end_session = True
        return build_response({}, build_speechlet_response(
            card_title, speech_output, None, should_end_session))
    
    
    def take_memo(intent, session):
        try:
            memo = intent["slots"]["contents"].get("value")
            url = 'URL for webhook'
            params = urllib.parse.urlencode({"payload": {"text":":memo:"+memo}}).encode("utf-8")
            f = urllib.request.urlopen(url, params)
            speech_output = "Slackにメモをしました"
        except:
            speech_output = "失敗しました"
    
        session_attributes = {}
        reprompt_text = None
        should_end_session = True
        return build_response(session_attributes, build_speechlet_response(
            intent['name'], speech_output, reprompt_text, should_end_session))
    
    
    # --------------- Events ------------------
    
    def on_session_started(session_started_request, session):
        """ Called when the session starts """
    
        print("on_session_started requestId=" + session_started_request['requestId']
              + ", sessionId=" + session['sessionId'])
    
    
    def on_launch(launch_request, session):
        """ Called when the user launches the skill without specifying what they
        want
        """
    
        print("on_launch requestId=" + launch_request['requestId'] +
              ", sessionId=" + session['sessionId'])
        # Dispatch to your skill's launch
        return get_welcome_response()
    
    
    def on_intent(intent_request, session):
        """ Called when the user specifies an intent for this skill """
    
        print("on_intent requestId=" + intent_request['requestId'] +
              ", sessionId=" + session['sessionId'])
    
        intent = intent_request['intent']
        intent_name = intent_request['intent']['name']
    
        # Dispatch to your skill's intent handlers
        if intent_name == "MemoIntent":
            return take_memo(intent, session)
        elif intent_name == "AMAZON.HelpIntent":
            return get_welcome_response()
        elif intent_name == "AMAZON.CancelIntent" or intent_name == "AMAZON.StopIntent":
            return handle_session_end_request()
        else:
            raise ValueError("Invalid intent")
    
    
    def on_session_ended(session_ended_request, session):
        """ Called when the user ends the session.
    
        Is not called when the skill returns should_end_session=true
        """
        print("on_session_ended requestId=" + session_ended_request['requestId'] +
              ", sessionId=" + session['sessionId'])
        # add cleanup logic here
    
    
    # --------------- Main handler ------------------
    
    def lambda_handler(event, context):
        """ Route the incoming request based on type (LaunchRequest, IntentRequest,
        etc.) The JSON body of the request is provided in the event parameter.
        """
        print("event.session.application.applicationId=" +
              event['session']['application']['applicationId'])
    
        """
        Uncomment this if statement and populate with your skill's application ID to
        prevent someone else from configuring a skill that sends requests to this
        function.
        """
        # if (event['session']['application']['applicationId'] !=
        #         "amzn1.echo-sdk-ams.app.[unique-value-here]"):
        #     raise ValueError("Invalid Application ID")
    
        if event['session']['new']:
            on_session_started({'requestId': event['request']['requestId']},
                               event['session'])
    
        if event['request']['type'] == "LaunchRequest":
            return on_launch(event['request'], event['session'])
        elif event['request']['type'] == "IntentRequest":
            return on_intent(event['request'], event['session'])
        elif event['request']['type'] == "SessionEndedRequest":
            return on_session_ended(event['request'], event['session'])
    

    大事なところは3箇所

    • welcome_responseに、はじめのAlexaからのレスポンス(今回はメモの内容)を書いておく
    def get_welcome_response():
        ...(中略)...
        session_attributes = {}
        card_title = "Welcome"
        speech_output = "メモをしたい内容を教えてください" #ココ!
        reprompt_text = "もう一度。"
        should_end_session = False
        return build_response(session_attributes, build_speechlet_response(
            card_title, speech_output, reprompt_text, should_end_session))
    
    • on_intentに、MemoIntentが呼ばれた時の挙動を書く
    def on_intent(intent_request, session):
        ...(中略)...
        # Dispatch to your skill's intent handlers
        if intent_name == "MemoIntent": #ココ!大文字小文字に注意!
            return take_memo(intent, session)
        elif intent_name == "AMAZON.HelpIntent":
            return get_welcome_response()
        ...(中略)...
    
    • MemoIntentで呼び出されたintentは辞書形式で値が入っているので、それを考慮した上で関数を作る。URL for webhookには自分がメモしたいslack URLを貼りましょう。
    def take_memo(intent, session):
        try:
            memo = intent["slots"]["contents"].get("value") #ココ!
            url = "URL for webhook" #URLは自分で設定!
            params = urllib.parse.urlencode({"payload": {"text":":memo:"+memo}}).encode("utf-8")
            f = urllib.request.urlopen(url, params)
            speech_output = "Slackにメモをしました"
        except:
            speech_output = "失敗しました"
    
    ...(略)...
    

    これを、Lambdaの関数コード欄にコピペします。

    5. Alexaのエンドポイントを指定

    Skill開発者コンソール画面に戻り、最後の仕上げをします。Alexaの命令をどこに送るかのエンドポイントの設定をします。

    • LambdaにはSkill IDを
    • SkillにはLambdaのARNを

    それぞれ登録することで、1対1で関数が紐づくわけですね。登録の仕方は画像の通り。 ARNも絶対に他人に見られないようにしてくださいね。

    6. 書いたLambda関数をEchoで使えるようにする

    最後、EchoとSkillをつなぎます。

    Alexa設定ページに行き、下図のように、作ったSkillを有効化しましょう。

    6. 実行

    最後に実行です。ご自身のEcho dotを使って、試してみましょう!

    Echoを持っていなくても、テストをする環境はあるようです。詳しくはコチラ

    まとめ

    以上、いろんなプラットフォームを使うので、なかなか混乱しがちですが、1から順を追って進めていけば完成するはずです。

    尚、自分のスキルを全世界に公開したい!となると、いろいろな制約があるようです。詳しくはこちらのページを参照。β版として自分自身で使うのとは別のことに注意しなければならないので、しっかりチェックしておきましょう!

    本記事を参考に、思い思いのスキルを使ってみてはいかがでしょうか?

    Alexaから広がる無限の可能性、ワクワクしますね!ではではっ

    *1:他のスロットタイプのが良いなどあれば教えてください。

    *2:自分のコードもこちらを参考にした

    *3:DynamoDB使うわけじゃないから別のでもOKかも

    冬季オリンピックでメダルを取れる国の条件を、重回帰分析で探る!

    f:id:imslotter:20180225094049p:plain

    こんにちは、ほけきよです。

    冬季オリンピック、今日で閉会式ですね。*1 連日、各国選手の美しいプレーには感動しています。

    データによれば、 日本は獲得メダル数過去最高らしいです!

    そこで、ふと気になることがありました。

    冬季オリンピックって、どういう国がメダルをたくさんもらっているのだろう??」

    今回は、過去のオリンピックのデータを用いて、冬季オリンピックの強い国の条件を大雑把に分析してみます!

    考えられる要因のリストアップ

    今回、冬季オリンピックに強い国になりうる理由を、4つ考えてみました

    気温

    やはり、寒い国が勝つのは、直感的にも正しそうですよね? 赤道直下じゃ雪なんか降らないですものね。

    今回は簡単に、各国の首都の年間平均気温を用いることにします。

    GDP

    スポーツが強いのは豊かな国だという話はよく聞きます。 日々の生活ができて初めて、スポーツはできますからね。

    豊かさを表す指標は様々あると思いますが、ここではGDP(国民総生産)を要因として挙げてみます。

    人口

    単純に分母が大きいと、才能ある選手が生まれる可能性が高いのでは??

    という仮説の元、人口もデータとして使います。

    開催地からの距離

    個人的な感覚ですが、「開催国はかなりメダルが多くなる傾向にありそうだし、開催地からの距離が近いほど、メダル増えるんじゃない?」

    と思っています。現に日本のメダルは長野と平昌の時に多いですし。

    • 距離の計算方法はこちらから取得

    分析

    手順

    下記手順で分析しています。(少し専門的な用語を含みます)

    • 1992年~2010年までのオリンピックを対象とする
    • 過去オリンピックでメダルを獲得した国だけを抽出する
    • 取得した各要因データを変数として扱うためつなぎ合わせる*2
    • 人口データとGDPデータの対数を取る
    • 各要因データを、平均と標準偏差で正規化する。
    • 重回帰分析を用いて、各変数の回帰係数を割り出す

    なお、メダルは金・銀・銅があるので、下記のようなポイントを割り振って計算しています。

    ポイント = 金*5 + 銀*3 + 銅*1

    GDPと人口のlogを取るのは、正規化の効果をちゃんと出すためです。例としてGDPを挙げてみると、左(log無し), 右(log有)でグラフの形が大きく異なることがわかると思います。

    f:id:imslotter:20180225015311p:plain

    平均と標準偏差で正規化する場合は、分布の形が正規分布に近い時に威力を発揮するものだと思ってるので、こういう処理をしておきました。

    重回帰分析とは

    一つの目的変数(今回はメダルポイント)に対して、複数の変数がどのようにかかわっているかを計算したものです。

    重回帰分析の仕組みはTJOさんの記事がわかりやすかったので、復習がてらちらちらと読みました。

    ただ、実行に関してはpythonのsklearnモジュールを使っただけです。

    from sklearn.linear_model import LinearRegression
    

    で、できますね。簡単!

    sklearnの使い方はこちらの記事などもご参考にしてください。

    結果 : どの要素が一番強いのか?

    分析の結果がこちらです!

    メダルポイントの式

    名前 係数
    気温 -24.3
    GDP(log) 31
    人口(log) -4.1
    開催地からの距離 2.1

    f:id:imslotter:20180225024206p:plain この結果からわかるのは、まずは気温が低いほど、冬は強いということですね。やっぱり気温は相当関係しているようです。 また、GDPも関係しているようです。豊かな国であるほどメダルも獲得しやすくなるのですね。

    しかし、人口や距離はあまり関係がないらしいです。むむ、予想が外れた。 なにか他にも要因があるのかな...!

    精度はどうなの?

    こちらが主要国のポイント状況。predictが回帰分析の式に当てはめた予測値。

    f:id:imslotter:20180225021245p:plain

    GDPが大きく影響しているので、中国はその伸びに従って上がっているのがわかります。USAは毎回安定のメダルラッシュ。 日本は、本来もっとメダルとれるのでは??と思っちゃいますね。

    また、次表のように、寒さが際立つロシアでは、GDPよりも寒さが大きな要因となって、メダル予想も高く出ていることがわかります。

    f:id:imslotter:20180225023938p:plain

    まとめ

    いかがでしたか?簡単な重回帰分析でも、いろいろとわかることはありますね。

    いろいろ工夫する*3ともう少し精度は上がりそうだなとおもうのですが、まずはこのくらいで!! 個人的には、各大会ごとに大きく変わる変数を見つけたかったです。それが開催地との距離かと思ったのですが、はずれちゃいましたね。。

    メダル獲得云々は関係なく、世界一を目指し全力でプレーする選手は素晴らしいですよね。 メダルを取れた選手も、惜しくも届かなかった選手も、本当に尊敬します!フィールド違えど、自分も頑張らないとな。

    なお、今回用いたスクリプトとデータはgithubに上げていますので、オリンピックデータに興味があればお使いください。 github.com

    だれか、もっと精度を上げてください!!ではでは

    *1:本当はいくつかオリンピック×データ分析ネタ、書きたかったんですが。。。とりあえず一つだけでもと思い。

    *2:正直これがめんどかった

    *3:気温を冬だけにするとか、ほかの要素を追加するとか...

    トヨタ生産方式は、なぜ製造業のバイブルとなったのか。

    f:id:imslotter:20180130193937j:plain

    こんにちは、ほけきよです。

    最近トヨタ生産方式を叩き込まれる機会があったので、自分なりに本を読んだり実践したりして、なぜすごいといわれるのか、どうすごいのか、なぜ製造業で使われるのか。を自分なりに理解してかみ砕いたので、内容をまとめてみました。

    トヨタ生産方式の起こり

    トヨタ生産方式(TOYOTA Production System : TPS)とは、トヨタが提唱する製造業でのモノづくりの仕組みである。

    戦後、トヨタが車を発展させたいというときに、アメリカと生産効率が天地ほど違うことに気づいた。そのうえ、アメリカは車文化が根付き始め、大量生産方式が採用された。いわゆる「たくさん作れば安く売れる」業界になっていた。一方で、トヨタはというと、誰が何を買ってくれるかもわからない状態で物を作らないといけない。いわゆる少量多品種生産。

    大量に作ったとしても買ってもらえなかったら儲からない。そして頭をひねって作り出されたのがトヨタ生産方式なのである。

    なので、トヨタ生産方式は、誤解を恐れずに言うと、「業界内で立場が弱い企業」の戦略とも言える。

    トヨタ生産方式の理念「原価低減」

    最も重要な前提が、「製品の価格は自分たちで決められない、買い手が決定する」というところ。利益 = 売値 - 原価 なので、利益を上げるためには原価を下げるしかないことになる。

    原価を下げるために大事なことが無駄を省くこと。在庫、労働時間、材料費...原価にかかわるムダを品質を維持したままで削っていく。特にトヨタ生産方式では、二つのムダに大きくフォーカスしている

    • 在庫を抱えるムダ
    • むやみな労働時間のムダ

    徹底的に利益を追求するのが、トヨタ生産方式。生産性が上がっても、在庫になってしまうと意味がない、必要なものをどれだけロスなく作れるか、を根底とした戦略である。

    在庫を減らすための、Just in Time方式

    いつ受注が来るかわからないのに、材料を大量に買い占める。それが結局在庫になってしまう。そんな問題を対処しようとに考案されたのが「Just In Time」。必要なものを、必要な時に、必要な量だけ作る方式である。

    どうすればそれが実現できるのか、ヒントはスーパーマーケットにあった。 スーパーマーケットは、だれが何を買うかわからない。なので、商品が少なくなったら足すという仕組みになっている。これを製造業にも応用した。

    つまり製品が一個組み立て終わったら、前に材料を取りに行くようにしたのだ。前の人ができたら後ろの人に渡すだと、作りすぎがおこるが、完成品ベースで後ろからさかのぼることで、在庫を極力減らせられるようになる。

    人には付加価値の高い仕事を。自働化

    もう一つが、自働化である。機械が自ら働くとは、どういうことか。

    製造業であってはならないことの一つがラインの異常による事故不良品の生産である。機械が自動になっても、これを人がいちいちチェックしていては労働力が減ったことにはならない

    異常事態のときは止まり、人に知らせられる機械じゃないと働いていることにはならない、最後までちゃんと面倒をみられるような機械じゃないとダメだ。というのがニンベンに込められている。

    トヨタ生産方式が輝ける「条件」

    データ分析業界で働いていた私は、ふと、「あの界隈でトヨタ生産方式で聞かないな」と気づいた。しばらく働いていると、両者の違いに気づいた。

    トヨタ生産方式には輝ける条件がある。

    私が思うその条件は、以下の3つ

    • 買い手と原料供給者が異なっている
    • 製造過程が多段
    • 在庫に賞味期限がある

    これら3つの条件と、データ分析系業界が少し相性が悪いのでは?と思う。*1

    買い手と原料供給者が違う

    いわゆる「仕入れ」である。

    データ分析業務などは、原料を握っているのはクライアント側である場合が多い。クライアントが必要だと思う量のデータなんだから、無駄はなく、もとから在庫など抱えることはない。それに付加価値をつけて提供するのがデータ分析業務である。

    その一方で、製造業は、発注をかけられたら、その分材料が必要になり、別の業者に発注をかける。必要量は各々が判断しないといけないので、判断を誤ると大変なことになる。 *2

    製造過程が多段

    次に、製造過程が多段であることがあげられる。 多段であればあるほど各段階に能力のばらつきが起きやすくなる。 能力の低いところがボトルネックとなって、無駄な在庫が増えてしまったりということがある。

    また、各過程でのばらつきは、後ろに行けば行くほど拡大していく。*3

    そんなときは、ボトルネックとなっているところを見つけやすくしたり、 ばらつきを抑えるように うまく調整するような仕組みが必要となってくる。

    在庫に賞味期限がある

    作ったものがいずれ必ず使われるのであれば、心配せずに在庫をどんどん生み出せばいい。暇なときに作り置きすればいい

    しかし、モノに賞味期限があるときは話は別である。食品は腐る。製造業でいえば、在庫が消化される前に注文の商品が変わるなど...

    そういうことが起こるようなときは、やはり過剰な在庫はムダになってしまうのである。

    なぜトヨタ生産方式が製造業のバイブルなのか

    もちろんシステム自体よくできていて、トヨタ生産方式が輝ける条件に製造業はほぼほぼ当てはまるわけだが、頭のいい人たちならこのくらいの仕組みはトヨタの社員でなくても思いつくのではないのか?と思ってしまう。

    数週間実際に体験して、なぜトヨタ生産方式が製造業ですごいといわれるのかが少しわかった気がする。

    • 言葉遊びのような用語
    • 誰にでもわかる平易な説明
    • 誰にでもできる平易なシステム

    これらには、作った人の強い哲学めいたものを感じる。

    言葉遊びのような用語

    トヨタ生産方式には、「トヨタ用語」と呼ばれる言葉がいくつも登場する。 印象的なのは、既存の言葉をいじった言葉遊び的な用語が多いこと。例を挙げると

    トヨタ用語 一般用語 違い
    自働化 自動化 機械がただ作業するだけでなく、人の負担が減るように動作すること
    可動率 稼働率 生産能力に対しての割合が稼働率、一日に生産しなければならない個数に対しての割合が可動率
    死料 資料 伝わらない資料は無駄な死料

    トヨタ生産方式が目指すべきところをたった漢字一文字で印象付けられる。このように、用語が洗練されているところが、強い。

    誰にでもわかる平易な説明/システム

    頭のいい人たちが行う説明や、作るシステムは、現場の人にとっては使いづらくなることがままある。しかし、トヨタ生産方式には、そのようなことがない。工場で働く人でもわかるように、わかりやすい言葉、何度やっても絶対に間違えないようにするシステムが出来上がっている。

    不必要な説明を省き、必要な説明だけ残す。複雑な工程をうまくシステム化して簡単に見せる。

    ぱっと見て、簡単に作れそうだと思うが、たぶんほとんどの人はまねできない。 上司に言われたことは、「手順はなるべく3つまでで完結させること。それ以上は忘れるから。」と。そういう思想が根付いている。だらだらと書くのは案外簡単である。本質を失わずに簡潔なものを作るのは、思った100倍難しい。

    トヨタ生産方式の説明には、ある種「引き算の美学」のようなものを感じる。

    まとめ

    トヨタ生産方式についてまとめてみました。目まぐるしく移りゆく時代の中で、トヨタ生産方式が古いという意見もあります。もちろんメインのシステムは60年も前に確立されたものなので、確かに現代に通用しないところもあります。ですが、トヨタ生産方式の核となるところは方式そのものではなく、「なんでトヨタ生産方式を編み出したのか」、「なんでトヨタ生産方式が広まったか」をたどったところにあると感じました。

    方式の丸暗記というよりかは、そのあたりのある種哲学的なところを理解すると、結構応用範囲も広がってくるのではないかと思います。

    そういう哲学に一貫性があるがゆえに、製造業のバイブルとなっていったのではないかと思います。内容もさることながら、いろいろと学ぶべきところは多いなと感じました。

    この記事だけでもかなり書きましたが、もっと興味のある方は是非、勉強してみてください。ではではっ

    トヨタ生産方式――脱規模の経営をめざして

    トヨタ生産方式――脱規模の経営をめざして

    *1:私が知らないだけでもしかしたら使われているところもあるのかもしれませんが、、、

    *2:たまにコンビニでお菓子を一桁多く発注して大惨事になったみたいなニュースをみますね。ああいう感じです

    *3:これをBullwhip effectという

    Google Homeを英会話の無料トレーニング教材にしてみる

    こんにちは、ほけきよです。

    我が家に、Google Home Miniが届きました!*1

  • Google Home Mini

    友人がプレゼントしてくれたものです。スマートスピーカープレゼントに最適だと思うんですよ。

    新しくて、興味はあるけど、よくわからないし、自分では最後のひと押し踏み込めない。

    けれど、あればかなり楽しいです。 この辺はAmazonのAlexaとかも一緒かな?

    もらってかなり嬉しかったですし、使ってみて更に感謝が深まった商品でした。

    で、こいつの効果的な活用法を考えて見たのですが、 英語の練習に使えないかなと思って、色々試行錯誤しています。

    今回は、スマートスピーカーの使用例の一つとして、参考にしてみてください。

    Google Home Miniの設定

    • 本体の電源をいれる
    • Google Home Appをいれる
    • Wifiとかいろいろちょこまかと設定する

    これで使えるようになります。ここで

    言語設定を英語にする

    ことで、英語の練習が自然にできるようになります。

    設定の仕方

    設定⇛デバイスで言語の選択ができます。

    More setting

    Device(デバイス)を選択

    Assistant Languageを変更

    利用例

    気温や時刻を聞く

    普段何気なく聞くことも、英語だとどうやって聞くんだろう?ってなりますよね? 大体のことは彼が答えてくれますので、どんどん聞いてみましょう。

    Hey Google! What is the temperature in Tokyo?
    50 degree.
    !?

    どうやらファーレンハイトで計算されるようです。セルシウスにしてくれェ.... でもまあ、海外の文化が分かるってことにしましょう!ちなみに

    What is the temperature in Tokyo in degrees Celsius?

    とかって聞くとちゃんと℃で返してくれます!*2

    アラームをセットする

    アラームをセットして!とかって言うのも、英語でどういうか、パッと出てこないものですよねぇ。

    • Wake me up at 7 o'clock

    とかで十分です。Google Home が勝手にアラームをセットしてくれます。 なお、アラームが鳴ったら

    Let me sleep 10 more minutes...!

    とか適当に言うと、彼が

    OK, I'll give you 10 more minutes.

    と言ってくれる。主従関係...

    寝起きでも、なんとかもっと寝させてもらおうと、意外と英語が出てくるものです。睡眠欲っていうのは素晴らしいですね!ところで、アラームが鳴っているとき、Google Home耳が遠くなる。結構叫ばないと反応しない。狙ってやってるのかな?

    ニュースを聞く

    Today's news?

    と聞くと、ニュースが延々と流れます。英語で。 普通のニューススピードなのでかなり殺人的な速さですが、慣れている人にはいい練習になると思います。なにせ延々と喋り続けてくれますから。

    ゲームをする

    もっとインタラクティブなコミュニケーションをしたいという方は、ゲームGoogle Homeとしてみるのもいいと思います!

    OK, Google. Let's play the game with me.

    と話しかけると、Google Homeがゲームをはじめます。

    実際まだあんまりやったことないのでゲームの内容はよくわかってないのですが、結構インタラクティブにコミュニケーションしながら進めていくゲームもありました。わりと難易度高めでしたがやってみては?

    英語学習用アプリ

    ベストティーチャーという、英会話スクールの会社が、Google Homeでの英語練習用アプリを無償で提供しています。

    japan.cnet.com

    TOEICの会話問題のような内容。現状は100問しかないが、今後のアップデートも考えられるので、是非やってみてはいかがでしょうか。

    尚、この練習をするには、一度Google Homeの設定を日本語に戻す必要があります。日本語にして「ベストティーチャーと話す」というだけで、アプリが起動されます。

    英語のまま話しかけると、、、

    OK google, I'll talk to best teacher.
    Sorry, I don't know how to help that yet...

    まあそうか、よく考えたら英語で英語学習アプリ開かないか。。。

    まとめ

    はじめは全然聞き取ってくれないので心が折れますが、次第に慣れてきて英語も出てくるようになります。 小さなことからコツコツとやってみるのが大事ですからね。スマホの設定を英語にするのと一緒の感覚です。

    いいのは、スピーキングの練習になるところ。発音良くなかったりすると聞き取ってもらえなかったりしますからね。

    お持ちの方はこんな使い方もしてみてはいかがでしょうか?ではでは!

  • *1:2ヶ月前

    *2:ちなみに、ファーレンハイトは25を引いて2で割ると大体セルシウスになるみたいです。50F ≒(50-25)/2=12.5℃

    【Soundpeats】コスパ最強のワイヤレスイヤホン!「Q12」レビュー

    こんにちは、ほけきよです。

    ワイヤレスイヤホンがほしいと思って、イヤホンに造詣の深いブロガーたぐちさん(id:taguchikun)にオススメイヤホンを聞きました。 そのときに紹介してもらったのがこのイヤホン

    私の要望は

    • ワイヤレス
    • 音質もそこそこ
    • 見た目もかっこいい
    • 値段がそこそこ(コスパ重視)

    でした。んで、3ヶ月くらい実際使ってみたんですが、一度なくしました。悲しい。 けれど、また同じイヤホンを注文してしまいました。それくらい使いやすかったので、ご紹介します。

    個人の感想ですが、ご参考に!

    概要

  • Soundpeats社
  • インナーカナル型イヤホン
  • ワイヤレス(Bluetooth接続)
  • 価格3000円前後、コスパ最強
  • SoundPEATS(サウンドピーツ) Q12 Bluetooth イヤホン 高音質 apt-X対応 マグネット搭載 マイク付き スポーツ ブルートゥース イヤホン ブラック

    外観

    外観はこんな感じ。色はブラック、ホワイト、レッド、ブルーの4色から選べます。

    このイヤホンの特徴は、イヤホンの背面同士が磁石でくっつくところ。

    バイスとつながっていないので、無くしがちなワイヤレスイヤホン。 でも、こういう風にくっつけられれば首から掛けるときにも心配が要りません。そして、絡まる心配もほとんどありません!!

    といいつつ、一回無くしているのですが...でもでも、なかったらその3倍は無くしてると思います!!w

    使用感

    装着感

    カナル型だが、正直フィット感は正直もう少しほしいところ。 単純にサイズが合っていないだけなのかもしれないが、つけたとき少し浮いているような感覚になる。

    といっても3-4時間ずっとつけていても気にならないほどには、耳になじんでくれる。

    操作性

    下図のようなボタンがあり、基本操作ができる。

    メインの操作は以下のとおり

    役割 操作方法
    起動 再生ボタン長押し(3~4秒)
    ペアリング 再生ボタン超長押し(6秒以上)
    再生/停止 再生ボタン
    音量調整 +/-ボタン
    曲送り +/-ボタン長押し

    どうやら最近バージョンアップしたようで、前はおっさんの声で「デンゲンヲ、オンニシマス」など操作の音声が流れていたが、 いまは外国人のお姉さんがスタイリッシュな声で「Power On」などと言ってくれる。すこしスタイリッシュな気持ちになれる。

    バージョンアップの効果はもうひとつあって、ボタンが高くなって、押しやすくなりました。これにより、押しミスが減った。


    比較 (左:昔 右:今)

    ワイヤレスの届く範囲

    遮蔽物がなければ、10-20m程度なら軽く届く 普通に家の中を歩き回るのにもほとんど困ることはないでしょう。

    遮音性

    音を聞く際のノイズキャンセリング機能はないが、インナーカナル型なので、音がしっかり耳に届く。周りがうるさくて聞こえないなんてことはない。

    音質

    私の耳は高音質かそうでないかを判断できないけど、おおむね満足はしている。しっかり高音も響いているイメージ。ただ、高級イヤホンとか、ウーファー付スピーカーと比べると、低音の響き(ベースやドラム)はもう少しといったところ。まあこの値段でこの音質ならすばらしいと思います。

    充電

    ワイヤレスの弱点のひとつである充電。

    音楽を鳴らし続けているとき、大体4から5時間くらいでバッテリー切れになる印象。8hはたぶん持たない。 音楽を流していないとき(待機状態)はの充電の持ちかなりよく、平気で2-3日放置していても使える。これもバージョンアップしてかなり持ちがよくなった気がする。

    なお、充電はmicroUSBで行う。2時間でMAXと、すこし時間がかかるので、聞いていないときはこまめに充電するほうがよいかもしれない。


    DC INからmicro USBを差し込む

    まとめ

    いかがでしたか? 3000円にしては、めちゃくちゃよく考えられていますし、とても使い勝手の良いイヤホンだと思います。

    この値段でこのクオリティ...ベストセラーになる理由がわかります。私にいたってはリピーターですしね。笑

    そこまで音にこだわるわけではないけど、いいものがほしい!という方は、ぜひ試してみてはいかがでしょう。

    ではでは!

    【Loctek】オシャレで快適なデュアルディスプレイ!モニターアーム「D8D」レビュー

    こんにちは!ほけきよです。

    ブロガーやプログラマの皆さんは、自分のデスクにこだわりを持っている人も多いかと思います。

    かくいう私も作業効率をUPさせるためデュアルディスプレイ*1なわけですが、やっぱり自分のデスク、スタイリッシュで効率的に行いたいですよね。

    デスクを快適に使うことが出来るモニターアームを入手したので、レビューしていきます!

    Loctek D8D

    今回紹介するのはコチラ

    ロックテックLoctek ガス圧式デュアルモニターアーム D8D

    概要とポイント

  • デュアルディスプレイモニターアーム
  • 30インチまで対応
  • USBポート付き
  • 価格は14000円程度
  • 私は27インチディスプレイ*2を二枚使っているので、2枚とも取り付けられるこのタイプを選びました。

    開封の儀

    届いたので、開封してみます。

    中身を空けるとこんな感じ。一つ一つビニールで丁寧に梱包されています。

    梱包を取り外すと、こんな感じ。他の記事ではキズや汚れありと書かれているものもありましたので、少し心配でしたが、私のはキズなどはありませんでした。

    こうしてみると結構重厚感がありますね!

    組み立て・取り付け

    組み立て・取り付けですが、二人で行うほうが良いと思います。モニターアームが重いので、一人でも出来なくはないですが、そこそこ苦労しました。

    デスクへの取り付けはクランプタイプグロメットタイプの二種類あります

    クランプ グロメット
    方法 机の端で挟み込む 机に穴を空けて挿す
    特徴 簡単に取り付けられる しっかりと固定される
    クランプのほうが簡単に取り付けられるので、位置がはっきり決まっていないうちはクランプで固定でいいと思います。

    机に固定が終わると、モニターの装着です。モニターに付いているネジを一旦外して固定しましょう。

    モニター背部の幅が装着可能な幅かどうかは、予めチェックしておきましょう。

    装着すると、こんな感じ!とてもスッキリ!!

    D8Dモニターアームのいいところ

  • 省スペース
  • 自在に動く
  • 便利なUSBポート
  • 利用前と比べて、ディスプレイの土台がない分、かなりデスクの上がスッキリとしました。

    また、自在にディスプレイを動かせることで、いろんな使い方が出来ます。例えば、画面を90°回転も簡単に出来るので、コードを書くとき、文書を読むときなど、縦長のほうが良いときなどは重宝します!*3

    このアームの真ん中にUSBポートがあるのもうれしいですね。USBメモリを装着したり、充電をする時など、いちいちデスクトップ側のポートを使わなくても良くなりました。

    モニターアームのイマイチなトコロ

    一つだけ、イマイチな点は

    • 左右のディスプレイをくっつけるには奥行きが必要

    なところ。


    (上から見た図)

    こんな感じで、くっつけるためには結構な場所をとるので、奥行きが必要になります。 構造上仕方ないのですけどね。どうしてもディスプレイをくっつけたい人は、机の間を空けるか、奥行きの大きな机で利用しましょう。

    まとめ

    モニターアーム、組み立てがめんどそうだなと思って、入手してからしばらく放置していたのですが、意外と簡単に取り付けられました。 前からほしいと思っていたので個人的に、とても満足です。

    • ディスプレイを快適に動かしたい方
    • 机をスッキリさせたい方
    • 机の上をオシャレに見せたい方

    などは一度検討してみてはいかがでしょうか?

    無くても生きてはいけるけど、あったらデスク作業がますますはかどります!是非検討してみては!ではではっ

    ロックテックLoctek ガス圧式デュアルモニターアーム D8D

    *1:片方がだいたいYouTubeな事は内緒。

    *2:Dell ディスプレイ モニター P2717H/27 インチ/IPS/6ms/VGA,DP,HDMI/USBハブ/3年間保証

    *3:ちなみにWindows10では画面回転のショートカットがあって、Alt+Ctrl+方向キーで簡単に回転ができます。

    頑張れ受験生!受験直前にするべき7つのコト

    こんにちは、ほけきよです。

    そろそろ大学受験シーズンですね。 これまで一年間、成績に伸び悩んだ人、成績が急上昇した人。それぞれでしょう。

    それでも、明日1年間受ける人のほとんどが自分の意思でその道を選び、努力してきたと思います。 遊びたい気持ちを抑え、頑張ったと思います。目標に向かって努力する人はかっこいいですよね!

    そこで今日は、本番まであと少し、そういう時に何をすればいいかを自分の経験を踏まえ書いてみます。 受験直前期に大事なのは問題をときまくるよりもメンタルコントロールと、凡ミス撲滅です。

    どうすれば気持ちを整えられるか、自身を持って臨めるかをまとめました。

    多くの人が、自分の実力を出し切れることを祈っています!

    1. 忘れ物チェック

    • 受験票
    • 鉛筆、シャーペンと芯、消しゴム
    • 時計

    など、絶対に忘れられないものだけは、試験当日にバタつかないように、必要な物はきちんと前日までに用意しておきましょう。

    2. 親や友達など信頼できる味方に弱音をはいておく

    本当に最後の最後、どうしても心落ち着かないときは、信頼出来る人に弱音をそっと吐きましょう。 その人はあなたの一年間をちゃんと見ています。そういう人の言う「大丈夫」に、根拠もないのに案外救われたりします

    また、自分を少しでも下に見ている人・嫌いな人とは話さないでおきましょうね。「嫌いな人とも付き合う」のは社会に出てからでいい。大一番の前に心がざわつくことになります。臆病な自尊心で上等!プライドを傷つけられないようなるべく近寄らないようにしておきましょう。

    3. 絶対解ける問題を解く

    本当の直前の問題演習は、解ける問題の復習に当てましょう。

    この段階で問題を解くのは弱点を克服するためではありません、安心するためです。今までに習ったことを反芻しながら、解けるという自信をつけてから試験に臨みましょう。英単語などもおすすめです。

    4. 腹痛と風邪に注意、体調管理

    体調は集中力に影響するので、なるべく万全な体制で臨みたいですね。

    • いつも通りの睡眠時間
    • 加湿やマスクを忘れずに
    • 試験の3時間前には起床
    • 油物はあんまり食べない

    などなど。わたしは緊張でお腹を壊しやすかったので、直前期は梅干しのおにぎりをずっと食べてました。胃腸に良いらしいと聞いたので!笑

    5. ゲンを担ぐ

    自分が試験前に行うと上手くいくというジンクスなどがある人はそれをしましょう。わたしの場合、試験前にエナジードリンクを飲むです。今でも大一番の前には続けています。

    お守りも効果的です。神様のご利益もありますが、例えば人からもらったものなら、「あの人が応援してくれている」という安心した気持ちにつながると思います。

    6. 今までの参考書とノートを積み上げてみる

    「かなり/まあまあ頑張った」とかだと、イメージしづらいので、努力を定量してみてください。 勉強記録をつけている人なら、1年で何時間勉強したか、とか。

    私のオススメはこの参考書とノートを積み上げることです。一年間って、かなりの勉強と演習を積んでるんだ。となると思います。

    写真を撮ってトップ画にしておくと、お守り代わりになるかもしれません。

    7. 4月に大学生の自分をイメージ

    センター試験に不安で悩むぐらいなら、4月以降の受かった自分を想像しておきましょう。 進む大学、入るサークル、出会う運命の人、挫折を味わう日々、挫折を乗り越えた研究成果など。 イメージの力は強大です。強い想いが、必ず良い方向に導いてくれるでしょう。

    頑張れ受験生!

    受験で実力以上のものが出ることはまずないです。 本番に強い人というのは、実力通りの力を出せる人です。

    実力は1年間の努力分。あとは集中力や緊張、体調などの要素次第です。 今まで通りの力を出し切れるよう、頑張ってください!応援しています。

    2017年の振り返りと2018年のテーマ

    こんにちは、ほけきよです。

    ちょっとアドベントカレンダーで燃え尽きていた&プライベートでバタバタしていたもので、更新が滞っていました。 新年一発目ということで、去年の振り返りと今年の目標的なものを。

    2017年の振り返り

    年が明けました。皆様今年もよろしくお願いします。 昨年は「放」をテーマにしていました。 自分自身を変え、新たな挑戦をどんどんして行くという目標は、ある程度達成できたと思っています。

    ブログでいえば、『技術×情報発信』ということで、プラグイン作ったり、自動記事作ったり、アドベントカレンダーしたり、色々しました。 この辺ふりかえって見ると、なんか楽しそうだな自分、、、という気になります。笑

    どれも楽しそうなので、覗いてみてください!

    また、オフ会に結構参加しました。こうやってブログを通じてたくさんの人と価値観に触れられたのは、自分の今後を考えるいい機会となりました。

    去年1年の教訓は

    • 特に必死で頑張っているときに出来た繋がりは、良縁なことが多い
    • 運がいいというのは、行き当たりばったりではなく、チャンスを掴める準備をすること
    • 自分の過去の意思決定を振り返ると、結構自分の価値基準や行動理念が見えてくる

    特に最後。結構やりたいことなんか無くて、適当に生きてると思ってたんですけど、案外一貫した基準があるんですよねー。私の価値基準は2つ

    • その選択が、振り返ったときに失敗しても「面白い」と思えるか
    • 自分が取りうる最大の難易度の場所か

    はっきりとした目標がない人、結構いると思いますが、振り返って見ると案外知らない自分がわかるかもですよ。

    2018年のテーマ:『届』

    今年は去年とまた環境がガラリと変わりました。

    今年のテーマはです。

    • 言葉を届ける : 英会話・マネジメント・プレゼン
    • 文章を届ける : 記事、執筆
    • サービスを届ける : webアプリケーション

    とかかな。ウェブアプリとか作って一発当てたい気もする。。。笑 *1

    人に言葉、文章、サービスを「届ける」ことを意識して仕事も趣味もブログも頑張ります。

    皆さんに面白いと思ってもらえるコンテンツを届けられるよう、またいろいろとネタを仕込んでいきますので、本年もプロクラシストをよろしくお願いします!

    *1:もちろん、技術メモについても引き続き書いていく予定です!

    知識0だった僕がデータ分析をこれまでどう学び、これからどう使うのか

    f:id:imslotter:20171225203840p:plain

    長かったデータ分析ガチ勉強カレンダーも最終日*1

    自分のこれまで歩いてきた道を軽く振り返ったあと、自分が思う機械学習/データ分析のあり方について書き連ねたいと思う。あくまで一つの価値観として楽しんでもらえればと思います。

    データ分析って何?状態から

    データ分析業務を行うにあたって、まずはじめの難関は、言葉の壁だった。ほぼコンピュータと無縁の世界で生きてきた私は、「Linuxって何?Vimって何?」っていうのを毎日繰り返していた。

    データ分析を実務で扱うには、アルゴリズムを知っているだけじゃどうしようもない。 列挙すると下記のようなものが必要になってくる*2

    • アルゴリズムを動かすプログラム、用意する環境(Linux, VM, サーバーなど)
    • サーバーでコードを動かすための知識、ネットワークの知識
    • 計算量の見積もり、高速に動かすための並列化技術
    • データのin/outを扱うDBやqueueのシステム
    • プログラムの死活を監視するシステム
    • 分析アルゴリズムの理解
    • 複数の処理に対応するトランザクションの知識
    • サービスとして提供するアプリケーションの知識
    • 複数人で開発を進めていくプロジェクト管理技術

    などなど。。。今だからこそ、そこそこ俯瞰的に見られるようになってきたが、はじめはまるで言葉が分からなかった。

    じゃあ、どうやって知識を獲得していったのか。 自分が意識的にやってたことを振り返ってみる。

    やったこと

    わからないところを聞くレベルに達するまで

    はじめは、どこが分からないかすら分からない状態。質問しろといわれても質問できない。だから、下記のことを行っていた。

    • ひたすら単語をメモ帳にメモしまくって、ググる。飲み会の間も分からない単語はメモしてた。調べるたびに分からない単語が増えるけど、耐えるしかない。辛抱強くメモ
    • その道のもっとも簡単な本を専門家に聞くサルでもわかるようなやつ。
    • 染み付くまで訓練を重ねる。一朝一夕でコマンドは打てるようにならない。Linuxコマンドなどは、lsさえ知らなかったので、無意識に基本コマンドが打てるようになるまで体に叩き込んだ。

    そうすれば、ぼやっと聞きたいことくらいはわかるようになってきた。

    わからないところが分かるようになると

    ある程度のことが分かるようになると、このあたりから少しずつ楽しくなってくる。こういうときには、以下のことを意識していた。

    • 人に聞きまくる。わからないことだけじゃなくて、わかったことが正しいかの確認も込めて聞く。
    • 詳しい人が実際にコードを書いたり、デバッグしている過程をよく観察する。結果としての物よりも、過程に知見が詰まっていることが多い。ショートカットの使い方だとか、バグ取りにつかっているコマンドとか。とにかく、観察して、盗む
    • 知っている範囲内の言葉で説明ができないか試みる。「これはつまり~~ってことだな。」と、自分の言葉で納得するまで考える。
    • 複雑な要素は根気強くほどく。世の中の大半が実は難しくなくて、簡単な要素がたくさん組み合わさっていて難しく見えているだけ。
    • 訓練を重ねる。自分がやっていることは大したことではないと思えるレベルまで、理解と実装を重ねる。

    とにかく、自分の言葉で説明できるっていうのに重きを置いていたように思う。あとはやっぱり、ひたすら手と頭を動かした。

    アルゴリズムをどう理解したか。

    物理出身ということもあって、数式の理解には少し自信があった。なのでアルゴリズムの理解はいろいろな技術領域の中でも自分の強みとしたかった。

    • 大事な理論は数式レベルで理解する。基礎的な理解は低レイヤーでの思わぬつながりを産み、未知の状況に対する応用のロバスト性**が高いように感じる。ここの式をこういじれば...みたいなイメージができるようになると強い。
    • 実装はデータのinput/outputを重要視する。特にディープラーニングにおいては、ここはベクトルで入っているのか?それともスカラーなのか?はたまたテンソルかもしれない...それをうやむやにすると魔法の箱化してしまう。あくまで演算にすぎないという意識を持つ。
    • アルゴリズム既存のものとの差分を意識する。何が変わったのか(精度向上、次元拡張、スピードアップ、対象拡大)、どうやって変えたのか(システムレベル、アルゴリズムレベル)などを意識して読む。

    この中でも一番意識したいのは、魔法の箱じゃなくて、計算を行っているに過ぎないということ。だから、どういう計算過程なのかを強く意識した。そうすることで、何が出来て何が出来ないかがぼんやりと分かる。

    自分が思う、これからのデータ分析

    今まで分析業務に従事したり、一ヶ月間ガチで勉強してきたデータ分析を実務で使うものとしての視点で書く。

    良いデータが集まるところに価値が生まれる

    データ分析は料理みたいなものだと思う

    • データは食材、前処理は調味料、アルゴリズムは調理器具。
    • アルゴリズムはすぐに汎用化される。arXivにあげられた論文が1週間後にはgithub上で誰かが上げられている状況。
    • 調理器具の使い方をいち早く理解すること、元となるおいしい食材を集めるところが最重要課題。

    つまり、データが集まるプラットフォームを作れるかどうかが今後のデータビジネスのカギとなってくると思う。メルカリとかお見合いアプリとか理想的だと思っている。人の心理をデータによって数値化できる基盤が整っている。特にスタートアップなどは、真似できないようなデータ収集プラットフォームをどうつくるか、ここに大きな労力を割くべきではないのかと思っている。

    実務のデータ分析は高い精度よりも低コストと高い説明能力

    現場において、ディープラーニングを果たして使うのか?というと、難しいのではと想像する。

    • 失敗原因がわからない怖さ
    • コストと納期の関係

    が原因。実際データサイエンティストの泥臭いフィーチャーエンジニアリングの過程は、それ自体に価値があったりする。だからこそ現場の最前線でロジスティック回帰*3が用いられる。一方で分からないけどいい結果というのは、なによりもクライアントの不安を増長する恐れもある。

    でも、だからといって、ディープラーニングが使われないのは、あまりにもったいなさ過ぎる。 あれだけの精度をわけも分からなく産めるものを、今後実務で使うためには、結果を説明出来る技術が必要だと思う。 機械学習の意味付けの研究はこれから実務的にも重要で、発展していくのではないかと思う。*4

    データ分析はトップダウン

    物理をやっていたものからすると、ボトムアップ的アプローチも利用していきたいものである。

    • データから推論できること、出来ないことをはっきりさせる
    • システムの隠れた状態などをうまくモデリング出来たら、強い
    • トップダウン的に分析し、ボトムアップ的に仮説を立てて実験をすることで、より本質的な理解となる

    と思っている。 大量のデータがあって、それを魔法の箱に突っ込めがなんかしらの良い結果が出る時代にはなってきている。 しかし、データに頼りすぎず、どこが本質的に重要かをミクロな観点から見極めながら、分析できる能力は身につけておきたい。

    あくまで人間の補助、人間とのシナジーを考える

    最後に、私はあまり人間が得意なことを機械でやらせようとは思わない。 そういうことに労力を割くよりは、機械が得意な領域を磨いていくほうが、生産性が高いと思っている。

    意思決定、連想、ばかみたいな発想、人との関わり。こういうのは人間が得意とするところだろう。 データ分析はこれを最大化する方向に利用したい。

    • 自動化できるところ、自動化出来ないトコロを明確に
    • 事務作業は自動化で良い。サービス的な要素は消えない。
    • 職人が自発的にひねり出したアイディアは、独創的で面白い

    まとめ

    とりとめもなく終わりますが、これが数年間データ分析技術を学んで、また現場で実践して考えているところです。 自分が数年後道を見失ったときに読み返せるようにと、書いてみました。

    技術の進歩は著しく、データ分析の技術はこれからますます楽しみになっていきます。 それについていけるようこれからも精進していきたいと思っています。

    これまでのアドベントカレンダーをマージして、ゼロからデータ分析を学べるようなサイトマップを作りました。

    データ分析に興味を持った方は、コチラで勉強してみてはいかがでしょうか。ではでは。

    *1:ながかった、、、ガチだった。。。

    *2:レベル感のばらつきはお許し下さい

    *3:回帰の最も簡単な手法

    *4:発展していって欲しい。

    PROCRASIST