つくるの大好き。

つくるのが大好きな人の記録。

ちょまどさんの筋肉ボイスを動かしてみた

Google Home Miniを貸していただく機会があったので、Microsoftエヴァンジェリストの千代田まどかさんが公開している「筋肉ボイス」を動かしてみました!

ちょまどさん作成のオリジナルソースに少し手を加えたソース一式はGitHubに公開しています。

github.com

ソース以外のAzure FunctionsやActions on Googleの設定を残しておきます。 両方ともほとんどはじめて触ったのでもっと良いやり方があれば教えください。

Azure Functions の設定

Azureへのデプロイ

ソースコードのデプロイはVisual Studioのソリューションエクスプローラーでプロジェクトの右クリックメニュー、「発行...」で行いました。

f:id:peugeot-106-s16:20180512071021p:plain

初めAzure Portalで手動でApp Service等を作ってデプロイしてみたのですが変なエラーが出て動かなかったのですが、ウィザードにおかませしたところ一発でした(笑)

アプリケーション設定

Azure PortalでAzure Functionアプリの「アプリケーション設定」→「アプリケーション設定」にVoiceTextのAPIキーを設定します。

f:id:peugeot-106-s16:20180512072008p:plain f:id:peugeot-106-s16:20180512072137p:plain

関数URLの控え

Azure Portal で「GoogleHome」関数の「関数のURLの取得」からURLを控えておきます。これはGoogle側に後ほど設定します。

f:id:peugeot-106-s16:20180512072727p:plain

ストレージのアクセス許可の変更

デプロイ時に自動作成されたストレージアカウントのBLOB内にmp3ファイルを格納するコンテナを作成し、アクセス許可を与えておきます。

f:id:peugeot-106-s16:20180512073421p:plain

Actions on Googleの設定

Actions on Googleはほんと初めて触ってなんかできたくらいの感じなのですが、一応設定をぺたぺた張っておきます。

  • 言語を日本語に f:id:peugeot-106-s16:20180512073807p:plain

  • 起動フレーズを設定 f:id:peugeot-106-s16:20180512073913p:plain

  • Actionの設定はデフォルトのままで f:id:peugeot-106-s16:20180512074036p:plain

  • DialogFlowではデフォルトIntentにfollow-upとしてfallbackのIntentを追加 f:id:peugeot-106-s16:20180512074357p:plain

  • Contextの設定とWebhookを有効に f:id:peugeot-106-s16:20180512081753p:plain

  • Webhookの設定にAzure Functionsの関数URLを設定 f:id:peugeot-106-s16:20180512080029p:plain

うごいた

f:id:peugeot-106-s16:20180512082439p:plain なにこれめっちゃたのしい

うんこボタンとHoloLensを繋げてみた <後編>

うんこボタンはこの度Makuakeでのクラウドファンディングに成功したインターネットボタンです。 前編ではこのうんこボタンに独自のプログラムを送り込むところまでを扱いました。

satoshi-maemoto.hatenablog.com

ソースコードはこちらで公開しています。

github.com

うんこサーバーの構築

システム構成図におけるサーバーサイドの構築を始めましょう。

f:id:peugeot-106-s16:20180415100423p:plain

サーバーサイドはASP.Net Core 2.0をフレームワークとし、RESTのAPIとWebSocketを実装します。 VisualStudio2017のプロジェクトの作成では[Visual C#]-[Cloud]-[ASP.NET Core Web アプリケーション]をテンプレートとして選択します。

f:id:peugeot-106-s16:20180415213138p:plain

次のダイアログでは [API] を選択し、REST API用コントローラーを備えたプロジェクトを作成します。

f:id:peugeot-106-s16:20180415213408p:plain

さらに、WebSocketを備えたサービスにしてゆきます。
基本的にはこちらの記事とサンプルを参考にさせて頂きました。

tamafuyou.hatenablog.com

幾つか変更点に言及してゆきしょう。

コントローラーで使いたいSingletonオブジェクトを追加

アプリ全体で共有したいシングルトンなオブジェクトはStartup時のConfigureServices()で追加できます。 うんこぼたんからのRESTリクエストをコントローラーが受けた際、WebSocketのサーバークラス[WSServer]にアクセスし、接続中全クライアントへの一斉通知をさせるためにこのようにしています。

UnkoButton/Startup.cs at master · satoshi-maemoto/UnkoButton · GitHub

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
    services.AddSingleton<WSServer>();
}

するとコントローラーのコンストラクタでオブジェクトを受け取ることができます。

UnkoButton/UnkosController.cs at master · satoshi-maemoto/UnkoButton · GitHub

public UnkosController(WSServer wsServer)
{
    this.WSServer = wsServer;
}

このUnkosCotrollerのPost()メソッドでWSServerに全クライアントへのdidUnko通知を依頼しています。

public void Post([FromBody]string value)
{
    this.WSServer.BroadcastMessage(new Message()
    {
        MessageType = "DidUnko",
        ClientName = "UnkoButton",
        What = "Unko",
    });
}

WebSocketクライアント間のオブザーバーパターン

元々参考にさせて頂いたチャットサンプルがWebSocketクライアント間のイベント通知をReactを使ったオブザーバーパターンで行うようになっており、とてもスマートな感じになっています。
はじめはうんこボタンもWebSocketクライアントの一つとして、双方向リアルタイムにやりとりをしたいと思ったのですが、Wi-Fi接続やコネクションを保持したままスリープしないのは電池消費につながるのでワンショットのREST方式としました。
なので、オブザーバーパターンは現状それほど生きていないのですが、今後HoloLens複数台やその他のリッチなデバイスがうんこクライアントになった際には双方向にうんこを投げ合うなどの楽しいことができそうです。
HoloLens側でうんこを投げたらうんこボタンが光る、というのをまたそのうちやりたいです。

なお、今のコードではうんこを送ると他クライアントすべてにブロードキャストしつつ自分にもエコーバックでうんこが投げ返されてくるクソ仕様となっています(笑)

HoloLensアプリ

HoloLensアプリはうんこサーバーにWebSocket接続を行い、didUnko通知を待ち受けます。 UWPでWebSocketを利用するため、下記のようなクラスを作成しました。 Unityへの依存はないので、どのようなUWPアプリでも利用できます。

UnkoButton/UnkoServiceClient.cs at master · satoshi-maemoto/UnkoButton · GitHub

using System;

#if NETFX_CORE
using System.Threading.Tasks;
using Windows.Networking.Sockets;
using Windows.Storage.Streams;
#endif

namespace UnkoService
{
    public class UnkoServiceClient
    {
        public delegate void MessageReceivedEventHandler(object sender, string message);
        public event MessageReceivedEventHandler OnMessageReceived;

#if NETFX_CORE
        private MessageWebSocket WebSocket { get; set; }

        public void Initialize()
        {
            this.WebSocket = new MessageWebSocket();
            this.WebSocket.Control.MessageType = SocketMessageType.Utf8;
            this.WebSocket.MessageReceived += this.MessageReceived;
            this.WebSocket.Closed += this.Closed;
        }

        public void Connect(Uri uri, string connectedMessage)
        {
            Task.Run(async () => {
                await Task.Run(async () =>
                {
                    await this.WebSocket.ConnectAsync(uri);
                    await this.SendMessage(connectedMessage);
                });
            });
        }

        public async Task SendMessage(string message)
        {
            await this.SendMessage(this.WebSocket, message);
        }

        private async Task SendMessage(MessageWebSocket webSocket, string message)
        {
            var messageWriter = new DataWriter(webSocket.OutputStream);
            messageWriter.WriteString(message);
            await messageWriter.StoreAsync();
        }

        private void MessageReceived(MessageWebSocket sender, MessageWebSocketMessageReceivedEventArgs args)
        {
            var messageReader = args.GetDataReader();
            messageReader.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf8;
            var messageString = messageReader.ReadString(messageReader.UnconsumedBufferLength);
            this.OnMessageReceived?.Invoke(this, messageString);
        }

        private void Closed(IWebSocket sender, WebSocketClosedEventArgs args)
        {
        }
#endif
    }
}

リポジトリには入れていませんが、このUnkoServiceClientをUnityのスクリプトからは下記のように利用します。

    private UnkoServiceClient unkoServiceClient;

    void Start()
    {
  #if NETFX_CORE
        var context = SynchronizationContext.Current;

        this.unkoServiceClient = new UnkoServiceClient();
        this.unkoServiceClient.OnMessageReceived += (s, m) =>
        {
            context.Post((state) =>
            {
                this.GenerateUnko();
            }, null);
        };
        this.unkoServiceClient.Initialize();
        this.unkoServiceClient.Connect(new Uri("ws://xxxx.azurewebsites.net/ws"),
        JsonConvert.SerializeObject(new JoinMessage() { ClientName = "HoloLens", MessageType = "JoinMessage" }));
#endif
    }

まとめ

以上でうんこボタンを押すとうんこが出せるようになりました。 なんかうんこうんこ書きすぎて気分が悪くなってきましたww


Unko button feat HoloLens

IoTデバイスとHoloLensを連携させる際の参考にしていただければ幸いです。

うんこボタンとHoloLensを繋げてみた <前編>

うんこボタンとは

うんこボタン。なんというパワー感あふれるネーミング!
うんこボタンはこの度Makuakeでのクラウドファンディングに成功したインターネットボタンです。
赤ちゃんの排泄情報をボタンを押すだけで記録してくれるデバイス&サービス。
我が家もこの前まで排泄のたびに手帳に手書きで記録をしていて、地味ながら結構大変な作業でした。
でもあとで見返してみるととても良い思い出なんですよね。

www.makuake.com

そして今回ぼくは「ハッカーコース」を支援し、無事にキットが到着しました!
このキットにはうんこボタン自体の機能は入っていません。
でも普通にESP8266+物理2ボタンのデバイスとしてArduino IDEで自在にプログラミングを行うことができるのです!
なんでもつくれるのはワクワクしますね!

f:id:peugeot-106-s16:20180415094718j:plain f:id:peugeot-106-s16:20180415094756j:plain

今回作るもの

うんこボタンなので押すとうんこがでるものを作ってみます。
リアルに出ては大変なので、ホログラムのうんこをHoloLensから発射するのがゴールです。


Unko button feat HoloLens

うんちの3Dモデルはうんちマンさんから別プロジェクトでご提供いただいたものを使わせて頂いています。

www.unchiman.net

システム構成はこんな感じ。

f:id:peugeot-106-s16:20180415100423p:plain

  • Azure上に中継用のうんこサービスを構築する
  • うんこサービスにはうんこボタンからのリクエストを受け付けるRESTインターフェイス、HoloLensに通知を送るためのWebSocketインターフェイスを設ける
  • HoloLensはうんこサービスとWebSocketのコネクションを張る
  • うんこボタンはボタン押下時にうんこサービスのPOSTを呼び出す(PUTにするか悩んだ)
  • うんこサービスは接続中のすべてのWebSocketクライアントにdidUnko命令を通知する
  • HoloLensはうんこのホログラムを生成する

ソースコードはこちらに(HoloLens側は全Assetを公開できないため、WebSocketのクライアントスクリプトのみ)

github.com

うんこボタン側スケッチ

UnkoButton/unko_btn_trigger.ino at master · satoshi-maemoto/UnkoButton · GitHub

#include <ArduinoJson.h>
#include <ESP8266HTTPClient.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>

// Wi-Fi接続パラメータ
const char* ssid = "xxxx";
const char* password = "xxxx";

const char* uri = "http://xxxx.azurewebsites.net/api/unkos";
    
// IOピン宣言
#define LEFT_BTN 14
#define RIGHT_BTN 12
#define ACTIVE 16
#define RBOOTED 13
#define LBOOTED 5
#define LEFT_RED_LED 15
#define RIGHT_RED_LED 4
#define LEFT_GREEN_LED 2
#define RIGHT_GREEN_LED 0

bool lBooted;
bool rBooted;
int batteryLevel;
HTTPClient http;
ESP8266WiFiMulti wifiMulti;
DynamicJsonBuffer jsonBuffer;

// 定形初期化処理(理解するまでは変更しないで)
void boot() {
  Serial.begin(74800);
  // pin setup
  pinMode(LBOOTED, INPUT_PULLUP);
  pinMode(RBOOTED, INPUT_PULLUP);
  pinMode(LEFT_RED_LED, OUTPUT);
  pinMode(RIGHT_RED_LED, OUTPUT);
  pinMode(LEFT_BTN, INPUT);
  pinMode(RIGHT_BTN, INPUT);

  // スリープから復帰するのに押されてたボタン状態を取得
  lBooted = digitalRead(LBOOTED) == LOW;
  rBooted = digitalRead(RBOOTED) == LOW;

  // アクティブモードへ移行
  digitalWrite(ACTIVE, LOW);
  pinMode(ACTIVE, OUTPUT);

  // ACTIVE==LOWのあとでしか緑LEDを使えない
  pinMode(LEFT_GREEN_LED, OUTPUT);
  pinMode(RIGHT_GREEN_LED, OUTPUT);

  // バッテリーレベル取得(アクティブモードでないとダメ)
  batteryLevel = analogRead(A0) * 3000 / 1024;  // [mV]

  // 電池が消耗していたり、通電のみだった場合はすぐにスリープする
  if (batteryLevel < 2300 || !lBooted && !rBooted) {
    ESP.deepSleep(0);
    delay(500);
  }
}

void setup() {
  boot();  // 必ずsetup関数の最初に実行

  if (lBooted) {
    digitalWrite(LEFT_GREEN_LED, HIGH);  // left green on
  }
  if (rBooted) {
    digitalWrite(RIGHT_GREEN_LED, HIGH);  // right green on
  }

  Serial.println();
  Serial.println("left: " + String(lBooted) + " right: " + String(rBooted));

  // Wi-Fi connect
  WiFi.mode(WIFI_STA);
  wifiMulti.addAP(ssid, password);
}

void loop() {
  if (wifiMulti.run() != WL_CONNECTED) {
    delay(500);
    return;
  }
  String message;
  if (lBooted && !rBooted) {
    message = "{ \"message\":\"うんこボタンの左を押した\" }";
  } else if (!lBooted && rBooted) {
    message = "{ \"message\":\"うんこボタンの右を押した\" }";
  } else if (lBooted && rBooted) {
    message = "{ \"message\":\"うんこボタンの両方を押した\" }";
  }
  if (message.length() == 0) {
    return;
  }

  Serial.println(uri);
  http.begin(uri);
  http.addHeader("Content-Type", "application/json");

  int code = http.POST(message);
  String content = http.getString();
  http.end();
  Serial.println(String(code));
  Serial.println(content);

  JsonObject& resp = jsonBuffer.parseObject(content);
  // タスクが終了したら必ずディープスリープすること。
  ESP.deepSleep(0);
  delay(500);
}
  • ボタンを押すとデバイスはスリープ復帰する
  • 押されたボタン側のLEDを点灯する
  • Wi-Fiへ接続する
  • うんこサービスへメッセージをPOSTする  一応どのボタンを押したかを通知している
  • POSTが終了したらデバイスはスリープする

ボタン押下ごとにWi-Fi接続し、スリープするシンプルな処理なので通知に時間がかかります。
一定時間スリープせずにWi-Fi接続を保持し、押下待ち受けするつくりにすれば応答性が上がりますが、今回はふんばる感があるのでこれでいいかなと思っています(笑)

うんこボタンへのデプロイ

ボードのピンの解説、PCとの接続について書かれているこちらをよく読んで進めれば問題なくできると思います。

https://unkobtn.com/news/press/article/5/

PCのUSBと接続するにはUSB->シリアル変換アダプタが必要なので用意しましょう。

www.switch-science.com

そして規定通りに結線します。
ファームの書き換えモードに入るにはJP2をショートさせ、電池の抜き差しをしてリセットすればOKです。 f:id:peugeot-106-s16:20180415103941j:plain f:id:peugeot-106-s16:20180415104631j:plain f:id:peugeot-106-s16:20180415104312j:plain

Arduino IDEWindowsストアから最新版をインストールしました。

www.microsoft.com

あとはボードに書き込むだけです。 f:id:peugeot-106-s16:20180415105126p:plain

前編まとめ

うんこボタンの紹介とうんこボタン側スケッチの用意についてお伝えしました。
次回、うんこサーバー側とHoloLens側の実装についてお伝えします。

World Tour Report - バルセロナ MWC2018へ行ってきました 02

ワールドツアー・バルセロナ編。続きを書きます。

4YFN スタートアップイベント

Mobile World Congressは豪華でガチエンタープライズな本会場と、少し離れた4YFN会場で開催されていました。4YFNはスタートアップが集まるイベントでした。

www.4yfn.com


今回は(多分後になると時間なくて行かないような気がしたので)別会場から攻めてみることに。

f:id:peugeot-106-s16:20180406122741p:plain

 

距離的には結構あり、シャトルバスで向かいます。バモ~ス!

f:id:peugeot-106-s16:20180406123058j:plain

youtu.be

f:id:peugeot-106-s16:20180406123209j:plain

 

4YFNには日本からもスタートアップやってきており、"JAPAN Rising Startups"ブース群がありました!
久しぶりに日本語で会話ができ、息継ぎができた(笑)!

f:id:peugeot-106-s16:20180406123407j:plain

prtimes.jp

でもMWC全体を通し、ソニー富士通といった大企業を除くと日本のブースはとても少ないです。多分ここだけ。
深圳や韓国の企業ブースは本会場にもたくさんあったので勢いの違いを感じさせられました。

Japanese foodは散見されましたけどね(笑)
でもきっとこれは地雷なので日本人は食べないほうがいいかも。

f:id:peugeot-106-s16:20180406123859j:plain

その他色々ありましたが、VIVEを使ったVRものとかもちらほらとありました。
4YFN会場は活気が溢れていて気楽に楽しめる雰囲気で楽しかったです!

f:id:peugeot-106-s16:20180406125141j:plain

f:id:peugeot-106-s16:20180406125319j:plain

 

さて、4YFN会場のすぐ近くにはオリンピック会場にもなったムンジュイックの丘やカタルーニャ美術館がありました。
小雪の舞う中さくっと寄ってからまたシャトルバスで本会場へ。

f:id:peugeot-106-s16:20180406124120j:plain

 

本会場 HALL5-8

本会場、全8ホールのうち4ホールは比較的小さな企業や世界中の国々が自国のブースを出しているような感じでした。
HALL1-4が一言さんお断りな感じで中にも入ることさえできないブースが多かったのに比べると気楽で楽しかったですw

幾つか面白かったものを動画で挙げてゆきます。

 

SMART ROPE
縄跳びのジャンプ回数をカウントし、空間に表示してくれる。

youtu.be


塗るだけでスマホ画面が強くなる魔法の塗り薬

youtu.be

 

恐らく SAMSUNG Odyssey っぽいWin-MRのゲームコンテンツ

youtu.be

 

HTC VIVEのワイヤレス

youtu.be

 

大型ルームでのHTC VIVE クロマキー

youtu.be

 

HTC VIVI PRO

youtu.be

 

回転するファンの上にホログラム

youtu.be

 

サーモカメラ

youtu.be

 

と、この辺りで体力切れ(笑)
東京ビックサイトが何個もあるわけで一日ではさらっと回るのも無理。
また次回!

World Tour Report - バルセロナ MWC2018へ行ってきました 01

先日ですがちょっくら2週間ほどワールドツアーをしてきました!

最初の1週間はスペイン・バルセロナ。世界最大のモバイル系展示会「Mobile World Congress 2018」(MWC2018)への参加。

www.mobileworldcongress.com

そして次の1週間はアメリカ・シアトル。Microsoft本社にて「Microsoft MVP Global Summit 2018」への参加です。

 

都合で一瞬の成田帰国(衣類の洗濯)を挟んだので地球を東へ西へ反復横跳びした格好です。

 

バルセロナ

ヨーロッパに行くのは新婚旅行のイタリア以来で、その時はツアーだったので何も考えなくてよかったのですが今回は自前手配のビジネストリップです。
バルセロナへのフライトはドバイ経由のエミレーツ航空をチョイスしてみました。

f:id:peugeot-106-s16:20180320142605j:plain

でかい。。エアバス380でかい。。
これ飛べるんですかねw

 

そんな心配はよそにちゃんと飛ぶどころか、機体が大きいので揺れも少なく音も静か。かなり快適でした。
あとCAさん美人。いきなり外国に行った感がありました。

 

f:id:peugeot-106-s16:20180320142710j:plain

ドバイ到着。

国際的なハブ空港なので実に様々な人種の方々が行きかっています。一歩出てみると日本人というのは実にレアな人種だなと思いました。

買い物をするにあたって学んだのはドバイはAEDUAEディルハム)という通貨なんですね。
最初てっきりドル表記だと勘違いしていて、うおお、水が1000円以上するのか!水を飲むことさえ庶民には許されないのか!と驚きましたがそんなことはなかったですw

 

f:id:peugeot-106-s16:20180320143433j:plain

ドバイで乗り換えてバルセロナへ。
ペルシャ湾を飛びクウェートが近づくと、どう見ても明らかにキュイーン!と急カーブw
綺麗にイラクを避けて飛ぶんですね。
やっぱ真っすぐ行くとミサイルとか飛んでくるんですかね。
旅に詳しい方に話すと、よくドバイ周りで行ったね(笑)という方もおられました。
何も知らずに楽しそうだからとドバイ経由のチケット手配した結果ですが、無事何事もなく快適でよかったです。

ただし飛行時間は長いですね。家を出て24時間を過ぎてもまだトルコ上空。

 

f:id:peugeot-106-s16:20180320144054j:plain

バルセロナ・エルプラット国際空港に到着。
空港内にMWC2018のチケット受け取りカウンターが特設されていました。

 

f:id:peugeot-106-s16:20180320144325j:plain

レジストにはちゃんとした顔写真が必要なのですが、HoloLensをウェーイ!と装着した写真で登録を行っていたのでここで注意を受けました。でもご容赦頂き無事にバッジは受け取ることができました。
人によってはここでストップが入っていたかもしれないな。危ない危ない。

 

f:id:peugeot-106-s16:20180320144631j:plain

まずはホテルへチェックイン。
あ、これはホテルの近所の教会です。まだまだ建設中ですねー。当分。

 

f:id:peugeot-106-s16:20180320144856j:plain

TVでも盛んにMWC2018の特集が放送されていました。
楽しみだ。

 

MWC2018へ

翌日、早速会場へ。
MWC期間中使える地下鉄のフリーパスが与えられていたので展示会だけでなく観光にもとても助かりました。

そして、事前にGoogle Earth VR on Windows MR で会場近辺の予習をしてから望んでいるのですが、VRで見たのと同じ光景がリアルにちゃんとそこにあるのを見られるのはやはりすごいことだなと思いました。

f:id:peugeot-106-s16:20180320145040j:plain

f:id:peugeot-106-s16:20180320145103j:plain

 

f:id:peugeot-106-s16:20180320145658p:plain

会場は広大です。

全8ホール+別会場。全部回るのは相当大変。
結果的にはざらっとは全部歩けましたがひとつひとつゆっくりというのは無理でしたw

 

f:id:peugeot-106-s16:20180320145810j:plain

 

というわけで、ひとまずバルセロナ MWC2018へやってきました。
次はその膨大な展示の中で気になったものをピックしてお伝えしようと思います。

Win-MR MotionControllerのゴーストを消す方法

最近、MixedRealityポータルにモーションコントローラーのゴーストが現れ、消えないという現象に悩まされていました。

アプリケーションによってはこのゴーストをつかんでしまい全く操作ができません。
またこの時SteamVRには3つ以上のコントローラーが表示されます。

色々調査、試行錯誤しこんな仮説をたてましたが、簡単な解消方法がありました。

 

 

MixedRealityポータルの開発者メニューでシミュレーションのコントローラーを[オン]にして[オフ]にする。

これだけでゴーストが消えました!

f:id:peugeot-106-s16:20180131121215p:plain

2018年のフレンズ・ホロラボ 会社的アレコレ

年末年始の帰省的アレコレがつつがなく終了いたしまして、明日からは本格的に仕事がはじまってきます。

個人的な振り返りなどはしっかりできたのですが、昨年からは株式会社システムフレンドの取締役、株式会社ホロラボのCo-founderとしても動くようになり、基本的にはスタンドプレイ、マルチパラサイトな感じが多いのですが会社の2018年のことも少しまとめて会社のことも考えているという事を世にアピールしつつ明日を迎えようと思います。

 

株式会社システムフレンド

f:id:peugeot-106-s16:20180108164637p:plain

ニックネーム「フレンズ」で上記が会社ロゴです。
正確に言うとぼくが勝手に作ったものですw

最近はかなり浸透してきて真面目にニックネームで呼んで頂けることも増えてきました。

システムフレンドがどんな会社なのかはちょうど社長の朝山さんが書かれたきちんとした記事があったのでそちらをぜひご覧ください。

www.systemfriend.co.jp

特徴としては広島の会社であったり、最近では外国人が増えたというところでしょうか。

広島ではかなり面白い目立った会社という評価が得られてきているという話を聞いていて素晴らしいですね!

グローバル化については重点を置いていて、週一回の全社英語レッスンがあります(

ぼくはなかなか会社におらず参加できないのですが;;)。

言語力、テクニックは全体で向上していると思うので今年はグローバルなマインドを強化できればさらに面白いことになるんじゃないかなと思っています。

最近「広島ではイケている」というワードを聞くことが多いのですが、日本には47都道府県ありますから同じようにイケている会社は雑に言うとあと46あるという状態。

ぼくが東京に出てきたときに「ああ、今までは47分の1の世界しか見てなかったんだなぁ」と思ったのですが、日本全体/世界全体で今どんなポジションに自分たちがいるんだろうという視点を多くの人が持ちつつ、地元を楽しくするということになってゆくと本当にすごいことがおきるような気がします。それは今年なのかもしれない(笑)!

あと東京支社は東京と言いつつほとんど広島人なのでそこは広島ですw
東京や県外の人との関わりを増やせるといいなw

ぼくはとりあえず3月にはMicrosoft MVP Global Summit初参加でシアトルに行き、カルチャーショックを受けてきたいと思っています。

 

株式会社ホロラボ

f:id:peugeot-106-s16:20171222093041j:plain

ホロラボはこんな会社。

これができるのは基本的に1人でも完結できるスキルの持ち主、勝手に日夜スキルを上げていく人たちが集まって、のびのびとした環境の中ゆるく協力し合っているからかなと思っています。

本当に彼らのやりとりを見ていると自分も勉強しないとって焦ってくるし、どんどん教えてもらいたいです!

そんな中で今年はやはりチームで価値を出すフォーメーション構築というのが大きなウェイトを持ってくるのでしょうね。

www.naturalsoftware.jp

きっと今年も色々なニュースがここから飛び出すんじゃないかなって思っています。
ワクワクするなぁ。

 

というわけで、簡単ながら今年の会社的アレコレでした!
システムフレンド(東京)とホロラボの社員同士のコラボレーションも増えていて、最近ではボードゲーム部が発足、共有Slackにはboardgameチャンネルができています。

f:id:peugeot-106-s16:20180108172903j:plain

また休日には会社問わず子どもたちがホロラボオフィスに集まって遊ぶイベントもあります。
うちの娘もいろんな人にここで会えるのでたくさんの刺激を受けて社交的に育ってくれるといいなと思っています。

 

それではそれでは、Let's enjoy togeger this year!!