読者です 読者をやめる 読者になる 読者になる

Challenge Java EE !

Java EEを中心に趣味や仕事における開発メモを書いています。

デンバーでSendGrid本社、サンフランシスコでサイボウズさん、Herokuさんに行ってきた!

雑記 SendGrid

3/2からSendGridの本社があるデンバーへ(SendGridエバンジェリストの id:nakansuke さんとお仕事で)行ってきました!!

人生初のデンバー。例年は時期的にとても寒いとのことですが、滞在してる間は幸いにも日本とあまり変わらない気温でした。

Denver International Airport
f:id:kikutaro777:20120101000000j:plain

飛行機を降りて空港ロビーまでの間にネイティブアメリカンの写真などが並んでるのが印象的でした。帰りがけは車で空港まで移動だったのですが、運転手の方がネイティブアメリカンの方だったし、コロラド州はそういう方々が多い地なのかな。この辺は歴史をちゃんと調べてみたい。ちなみにその運転手の方「サムライは強い精神(spirit)を持ってて好きだ。」とか「アニメ好き。いつか日本行ってみたい。」とか話してました(^^)

空港からUnion Stationまで電車で移動。
f:id:kikutaro777:20170311010739j:plain

電車快適!

Union Station
f:id:kikutaro777:20170310075054j:plain

市内はFreeに乗れるバス(RTD)もあって便利だし、とにかく雰囲気が良いところでした。治安が全体的に良さそうで、変な話、ホームレスっぽい方々が全然いなかった。ここなら住みたいかも!って思いました。サンフランシスコやニューヨークは良い所だけど住みたいとはあまり思わなかったし、何度かミネアポリスも行って、とても良い所だったけどデンバーの方がいいなーと。実際住むと色々違うのかもしれませんが(^^;

f:id:kikutaro777:20170311085434j:plain

Colorado Convention Center
f:id:kikutaro777:20170311083059j:plain

ここはテック系イベントとかでも使われるらしいですー。くまさーん。

f:id:kikutaro777:20170310213326j:plain

この旗はコロラドの州旗らしいのですが「ポケモンボールにしかみえないんですよね」と言われて、それ以降、自分もポケモンボールにしかみえなくなってしまいました…orz

f:id:kikutaro777:20170311090218j:plain

ホテルはSendGridオフィスがあるビルのすぐ隣、Denver Marriott City Centerホテルでした。超快適。

SendGrid

SendGridのオフィスへ着いたときにツアーしてもらったのですが、とにかくカッコいい!そして、人と席が現在進行形で増えてて、すごい成長してる感じでした。

エレベーターを降りたらいきなりロゴを意識した壁!オシャレ。ここで興奮しすぎてエントランスを撮り忘れてしまいました…(*´Д`)
f:id:kikutaro777:20170310220844j:plain

至る所にロゴを意識したデザインがあって面白かったです。時計~
f:id:kikutaro777:20170311092317j:plain

卓球のラバーまでw
f:id:kikutaro777:20170310220839j:plain

ミーティングルームがメッチャありました。個人の部屋も多かった。各部屋には「Sleepy Cat」とか色んな名前が付いていました。任天堂とかのゲームキャラ名が多かったな(笑
f:id:kikutaro777:20170310220843j:plain

フロアの中にぶち抜きの階段があって移動できます。
f:id:kikutaro777:20170310220845j:plain

The Grid!!
f:id:kikutaro777:20170310220841j:plain

f:id:kikutaro777:20170310220842j:plain

なにこれカッコイイ!
f:id:kikutaro777:20170309233326j:plain

キッチン全体の写真を撮り忘れてしまったのですが、すげー広くて机とイスがメッチャ並びつつ、フリーに食べ物が並んでました。この日はちょうどワッフル焼いてて朝食いただきました。むちゃ美味しかった(^^)
f:id:kikutaro777:20170303092011j:plain

ナッツとかお菓子も充実。ビールやワインもありました(^^)
f:id:kikutaro777:20170310220840j:plain

この日は終日SendGridとの打ち合わせでした。英語はめちゃ速い(^^;;;文脈逃すと全然わからなかったり、マーケティング系の用語やサービスの名称はそもそも日本語で聞いても…みたいなものも多く、日頃の視野の狭さを感じました。絵英語含め、色々勉強しないとなぁ…。

打合せ内容はさすがに書けないですが、日本からissueや要望を色々伝えました。日本のマーケットをしっかりフォーカスしてて、パートナーとして強く意識してくれてるのがありがたかった。自分はここ半年の新参者ですが、id:nakansuke さん、ここまでパイプつないだのすごいなぁと。

あ、そうそう、USのメンバが3月末にSlush Tokyoに参加するため来日します。我々日本スタッフもSlushサポートするので、興味ある方は是非ご参加を!

3/29-30
Slush Tokyo 2017 - Slush Tokyo

前日の夜にはSendGrid Night #7を開催し、ここでもUSメンバに登壇してもらいます(^^)国内のユーザ様事例などの話もあるので、こちらも是非!
sendgrid.doorkeeper.jp

そういえば、打合せの部屋からSendGridバスが偶然みれました!前までBoulderにもオフィスがあって、バスを出してたようです。今はDenverオフィスに集約されたのですが、Boulderに住んでる方も多くバスは継続してるみたいです。
f:id:kikutaro777:20170303161155j:plain

Brandonさんの家

夜はSendGridでDeveloper EvangelistやDirector of Developer Relationsとして活躍されてたBrandonさん(今は他の企業へ)のお家へ招いていただきました(^^)家に招いてもらうとか初めて(^^; id:nakansuke さんと親交が深いのだなぁと。

ちなみにBrandonさんは7月に東京であるDEVRELCONでSpeakerとして来日されます!super early birdは3月末まで超お得です。私は早速申し込みました(^^)

tokyo-2017.devrel.net

ディナーの肉!!!USのお店でもみないサイズにびっくりです!butcher(肉屋)でおろしてもらったらしいw

f:id:kikutaro777:20170311104426j:plain

f:id:kikutaro777:20170311103552j:plain

Cookも本格的で低温調理してから焼くというこだわり!待ってる間、近くのBarに連れて行ってもらいました。
f:id:kikutaro777:20170311104248j:plain:w300

屋上からの景色が最高すぎた(*´Д`)
f:id:kikutaro777:20170311104711j:plain

f:id:kikutaro777:20170311104852j:plain

ステーキは死ぬほど美味しくて、めっちゃ食べたw お店で食べるのよりめちゃくちゃ美味しいぞこれ、って感じで貴重な体験でした!食事は奥様と妹さんも一緒で、楽しい時間でした(^^)Thank you very much!!!
f:id:kikutaro777:20170311105227j:plain

めちゃくちゃお腹いっぱいだったけど、デザートでアイスクリーム食べに連れていってもらいました(笑)寒いのにめちゃくちゃ並んでて、何事!?と思ったら、こちらではすべての味をお試しできるらしく、皆すげー時間かけて試食してるっていうwww

はー楽しかった。

翌日はデンバーに駐在してる会社の先輩にRed RocksやBoulderに連れていっていただき、BREWERYで飲んだりと休日を堪能しました。こっちにいたら長生きしそう(^^;

f:id:kikutaro777:20170311105815j:plain

f:id:kikutaro777:20170311110142j:plain

で、3/5の朝にサンフランシスコへ移動しました。

サイボウズさん at サンフランシスコ

本当はOrange CountyのSendGridオフィスへ行く予定だったのですが、ちょうどGoogle Nextがあるタイミングで、SendGridメンバがサンフランシスコに行くとのこと。最終的にディナーが目的となりました。

で、ディナーまでの時間、いくつかオフィス見学させていただきました。最初はサイボウズさん。USだとkintoneの名前なのですね。

kintone Corporation
www.kintone.com

場所はモスコーニからちょっといった辺りで、すごいオフィス街なところでした。なぜかビルの写真すら撮り忘れてしまってた…(*´Д`)

ぶらり訪問と聞いてたのでPCすらホテルに置いてしまってたのですが、着いたら打合せっぽい感じになって汗汗(^^;;;お話の中でUSにおけるkintoneの事例とかも聞けて「うぉー、熱い!!」って感じでした。すごい勢いでそうだなーと。

私は元々、製造業のお客様へコンフィグレータ(日本では馴染みが薄いですが、海外ではCPQ(Configure-Pricing-Quote)と呼ばれて核となってる仕様選定エンジン)を中心にした販売管理システムの開発をやってました。ほとんどが業務改革プロジェクトなのですが、まぁこういうシステムというのはSI系な方々は経験あると思いますが苦労に耐えないですよね(^^;案件によっては仕様確定が延々と進まなかったり…。

CPQのパートナーだったFPXという会社では、クラウドサービス化してSalesforceなどのCRMとつなぐビジネスをメインとしています。で、日本でもそういう方向に舵を取ろう、ってなって、日本だとSalesforce以外にもkintoneとかいいよね、という話があって、そのとき私も少し触ってました。ああいう実際に触れる環境があって、色々試しながらスモールに導入して業務改善していくのがいいなぁと。

今は部を移ってSendGridなので、kintone x SendGridの方向です。kintone最近は全然触ってなかったので色々やってみよう~!

Herokuさん at サンフランシスコ

サイボウズさんの次にHerokuさんへ!

f:id:kikutaro777:20170310231241j:plain

現地で働かれてる日本人エンジニアの方に社内ツアーしていただきました(^^)

f:id:kikutaro777:20170311121624j:plain

f:id:kikutaro777:20170311121817j:plain

Herokuは趣味開発でもよく使わせていただいているので、生でUSオフィスみれて興奮しました(^^)!お話もサポートあるあるみたいな所から現地のエンジニアや開発に関してなど、色々楽しかったし、刺激になりました。


と、そんなこんなで盛りだくさんな米国出張でした。

ちなみにオフィス訪問の前日はスタンフォード大学にいる弊社社員の方にワイナリーやゴールデンゲートブリッジに連れていっていただき、最後はJavaOne蟹を一緒にいただいてました(^^;

f:id:kikutaro777:20170311120105j:plain

帰ってきてからまだ時差ボケが抜けきっていない感じですが、気持ち新たに色々頑張りたいと思いますー!

LINE BOT AWARDSに「若様Bot」でChallenge!

Bot Microsoft Cognitive Services LINE Messaging API

乃木坂46の若月佑美さんを応援するために遊び半分で作っていた「若様Bot」、色々な機能を実装するうちに段々凝ったものになってきました。

wakasamabot.sakamichi46.com

今ある機能をざっとまとめたらこんな感じに。

f:id:kikutaro777:20170225215217j:plain

システム構成は以下のような感じでCognitive Services様様って感じも(^^;

f:id:kikutaro777:20170226173514j:plain

そして何より、先週放送されたTOKYO FMのラジオ「エバンジェリストスクール」!!!

youtu.be

以前「Bot」に関してメッセージを送っていたのですが、なんとそれを採用いただきました(涙)上記リンクからちょうどその辺りを聴けるので、もしご興味あればっ。

で、若月佑美さんご本人からボット開発してる人ということで、なんと「ボッター」なる役職(エバスクではメッセージ採用してもらうと若ちゃんに役職をいただける仕組み)をいただきました!

ということで、これはもう若ちゃんの力も借りてLINE BOT AWARDSに申し込むしかない!と登録してみました。

機能実装の最後として「LUIS」を使ってみたのですが、面白いですね。

www.luis.ai

先日なんと、ちょまどさん(@chomado)から以下のようなコメントをいただいて(光栄すぎて震え…)

LUISを思い出して調べなおしたのですが、なんと今は日本語対応してたのですね!!!

早速使ってみたのですが、これで、メンバーのあだ名から本人情報のマッチングなどを柔軟にできるようになりましたー!

f:id:kikutaro777:20170225220838p:plain:w200

f:id:kikutaro777:20170225221016p:plain

LINE BOT AWARDSは企業がすごいだろうから個人参戦はダメ元ですが(^^;;これを機会に、少しでも若月さんの認知がもっともっと広まる(既に広いですけど)きっかけの1mmくらいになればなーと思います。

Twitter4Jでエバスクのツイートを分析してみた #evatfm

雑記 Twitter4J

昔、乃木坂46公式Twitterアカウントのつぶやきを見ていて「最近一番多くRTされたツイートってどんなのだろう?」と思ったことがありました。で、当時Java EEとTwitter4Jの勉強兼ねてリツイート数とファボ(いいね)数が確認できる以下Webアプリを趣味開発して公開してました。

http://46collection.sakamichi46.com/
http://cdn-ak.f.st-hatena.com/images/fotolife/k/kikutaro777/20160313/20160313235434.jpg

で、最近ラジオ「エバンジェリストスクール! - TOKYO FM Podcasting」の公式ツイートみてて全く同じことを思ったり。

twitter.com

気になったので、(さすがにWebアプリではないのですが)Twitter4Jを利用して同じことを確認をしてみました。

※2017/2/14時点での集計ですので、実際には可変する可能性があります

コードはざっくりこんな感じ。ちょっと適当すぎかも(^^;

package com.sakamichi46.evatfm;

import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import twitter4j.Paging;
import twitter4j.ResponseList;
import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;

/**
 *
 * @author kikuta
 */
public class EvatfmAnalyticsMain {

    public static int MAX_PAGE = 200;
    public static int COUNT = 100;
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws TwitterException, InterruptedException, IOException {
        Twitter twitter = TwitterFactory.getSingleton();

        List<Status> count = count(twitter);
        List<Status> sortedByRetweet = count.stream().sorted(Comparator.comparing(Status::getRetweetCount).reversed()).collect(Collectors.toList());
        List<Status> sortedByFav = count.stream().sorted(Comparator.comparing(Status::getFavoriteCount).reversed()).collect(Collectors.toList());

        FileSystem fs = FileSystems.getDefault();
        Path path = fs.getPath("./evaRetweet.txt");
        try(BufferedWriter br = Files.newBufferedWriter(path, Charset.forName("UTF-8"))) {
            br.write(sortedByRetweet.toString());
            br.close();
        }

        path = fs.getPath("./evaFav.txt");
        try(BufferedWriter br = Files.newBufferedWriter(path, Charset.forName("UTF-8"))) {
            br.write(sortedByFav.toString());
            br.close();
        }
    }
    
    public static List<Status> count(Twitter twitter) {
        List<Status> listTimeline = new ArrayList<>();
        Paging page = new Paging(MAX_PAGE, COUNT);

        IntStream.range(1, MAX_PAGE).forEach(i -> {
            page.setPage(i);
            try {
                ResponseList<Status> userTimeline = twitter.getUserTimeline("@waki_evatfm", page);
                userTimeline.stream().forEach(s -> {
                    if(!listTimeline.contains(s)) {
                        listTimeline.add(s);
                    }
                });
            } catch (TwitterException ex) {
                System.out.println(ex);
            }
        });

        return listTimeline;
    }
}

いいね数

1位 545いいね


2位 376いいね


3位 368いいね


4位 334いいね


5位 331いいね


6位 303いいね


7位 301いいね


8位 263いいね


9位 262いいね


10位 252いいね


リツイート数

1位 216RT


2位 143RT


3位 140RT


4位 135RT


5位 133RT


5位 133RT


7位 126RT


8位 118RT


9位 115RT


10位 110RT

と、こんな感じで、全般的に若ちゃんの写真系が多い(^^;;;とはいえ、ある程度予想通りでしたがw

ちなみにエバスク公式ツイートではないですが、乃木坂46の公式アカウントがつぶやいた以下が、RT/Favともに多かったです。

ホントは #evatfm のハッシュタグを含むツイートの量を分析しようと思ったのですが、TwitterのSearch APIは2週間程度分くらいしか取得できないようで確認できませんでした。残念すぎる(*´Д`)(ちなみに2/10(金)~2/13(月)の間で調べたら3871件もありました!)

IT業界に身を置く自分としては、エバスクってホントにITのトレンド情報を流してるので、色々な豆知識ツイートをもっとRT/Favして欲しいなーとも(^^;

で、この分析してて思いついたのですが、趣味で作ってる若月さんのBotに「エバスク」とか「#evatfm」って話しかけたら@evatfmアカウントの過去ツイートをランダムに引っ掛けるような機能を実装しようかなーと思いました。

若様bot、なんだかんだで利用ユーザが100近くなっているので、エバスクリスナーな方々にも是非お試ししてもらいたいなーと思います。以下サイトが詳しいですが

wakasamabot.sakamichi46.com

こちらのQRコードをLINEのQRから読み取ってもらうと友達追加できます。

f:id:kikutaro777:20170128222526p:plain

それにしてもエバスクを聴けば聴くほど若ちゃんを好きになりますね。

f:id:kikutaro777:20170215001025j:plain