tarotaroのエンジニア生活

技術ネタとか日々の仕事の話とか

株式会社メルカリに入社しました

LINE株式会社を退社して、フリーのエンジニアとして、ペダルをこぐVRシステムを仕事として提供して、Innovative Technologies+ 2017 に採択されたり、VTuberという言葉がまだなかったなか、VTuberのシステムを某システム上に作ったり、某モーションスーツ用のUE4のライブラリや、iOS用のライブラリを作成したり、ソーシャルゲームのシステムの開発をしたりして、1年があっという間にすぎた頃、メルカリ社でVR面接というのをやってるというのを見て、面白そうな取り組みだなぁと思い、色々メルカリ社を調べていると、副業OK、最近R4Dという、新しい技術研究部署をちょと前ほどから、開設してこれから、やっていくとのこと、というわけで、Cluster.のVR面接でケモミミ女の子のモデルに扮して面接をして、ちょっとひかれたりしながら面接を通過し晴れて入社ということになりました。日本の世の中のVRは、Vtuber一色ですが、xR分野で色々な取り組みのお手伝いをメルカリ社で7/1よりやっていくことになりました。副業の方もIoT系の仕事とかiOSの仕事、VRの仕事とかもやってたりするし、お仕事のほうもリモートでよければお手伝いしてきますので、お仕事募集してます、 よろしくお願いします。

LINE株式会社を退職しました

  • LINEブログから、データの移行ができなかったので、こちらに再掲しました

本日2017/7/11でLINE株式会社を退職しました、振り返ると、2011年6月に当時livedoorにJOINして、スマートフォンエンジニアとして、6年間お世話になりました。それまでは、コンシューマなどのゲーム業界で主に働いていた自分でしたが、初めてのWeb業界ということで色々わからないこともあったり、Web業界の開発、リリースの速度の速さに驚いたり、ゲーム業界にいた時よりの裁量の大きさを感じて嬉しかったりと自分には新鮮なことばかりでした。 リリースしたものを振り返ると、まず始めに担当したのが、ロケタッチというサービスでした、ロケタッチは当時位置情報を利用したスマートフォンサービスとしては、かなりユーザーを集めていたサービスで11年12月には10万ユーザーを突破して大変喜んでいました(LINEが裏でユーザーを獲得していることを知らずでしたが)その後、livedoorニュースのアプリ及び三面貴族という2つのニュースアプリをリリースした後、その当時流行っていたポイントを与えてダウンロードしてもらう型の紹介型のアプリAppMaxを担当しました、もちろん、LINEもポイント紹介アプリの対象になっていたりしました。その間LINEはユーザー数を伸ばし続け、TV CMを行いユーザー数をより伸ばしたのは、散々語られているので書きませんが、所属がNHNになったのがその頃でした。その次にLINEのサービスが伸びたということで、そのファミリーアプリとして開発担当したのがLINEマンガでした、開発を終わらせて、引き継ぎをした後LINEマンガは世界的にもアプリでの売り上げ上位に位置し続けるなど順調にきました。ここまでは、Androidアプリのエンジニアとして、アプリを担当していましたが、iOSの方も自分は経験があったので、次のファミリーアプリとしてLINEニュースのiOS版の担当になりました。リリースが2013年7月で今年6月までなので、4年近く担当していました。その間、ダウンロード数は最初のうちは良かったのですが、他のニュースアプリに比べ、プロモーションなどは行わずにいたためか、ユーザー数が伸び悩みました、LINEのメッセージでも同時にニュース配信を行なっていたのですが、そちらをアップグレード(画像型にした)させた結果(今のLINE NEWSアカウントです)ユーザー数が一気に増え、勢いのままアカウントメディアなどを始めこれがまたあたり、現在のLINE NEWSとして成り立ってます。そんな濃密な6年でした。 そんな感じでアプリ中心に6年間やってきてスマフォアプリ(ゲーム以外)はもういいかなぁというのと、スマフォアプリ(ゲーム以外)は業界的に伸びきった分野(自然になかなかアプリをみんなダウンロードしてくれない状態になっているなぁと)と感じているので、スマフォアプリとは違うこれから伸び代がある分野にこれからは突っ込んで行くことに決めて、LINE株式会社を退職させていただきました。LINE株式会社の皆さんは、みんないい人ばかりで、大変お世話になりありがとうございました。環境も素晴らしく自由で、今までのサラリーマン人生の中で一番楽しめた会社の一つで、自分が今まで一番長く在職していた会社でした。退職というよりも卒業させていただくという感じでした、そして、最後にお世話になった方々にもう一度、ありがとうございました。

skullcady crusherを買った

普段、SHURE512LEを使っててイヤフォン派なのだけれど、今回、とある理由で安く手にいれることができるというのを聞いて、Skullcandycrusherが売ってる店舗に行ってきた。位置的には、原宿駅からちょっとだけ歩く位置に店舗があった。
IMG_1936
店舗は若い方が運営してるようで、閉店間際にいったわりには、活気があったように思った。
ヘッドフォンの色の種類はいろいろあったのだが

IMG_1937
自分の作品のVR物に使おうと思って買いに来たのが今回の目的だったので、自分の作品のVRで使っている自転車のデザインが赤がベースになってるので、自分は赤を選んだ(あと普段使いで使うとしても好きな色なので)

IMG_1942
店舗で体験できる装置があったのだが、装置自体が震えるので正確に体感できないのと、ソースが悪いのか、電池がなくなっていたのか、あまり震えるのを体感できなかった。とりあえず、買って家で試すことにした。で、数時間使ってみてすごくいいと思ったので、レビュー的なのを書きたくなった。音質的には140000円ぐらいの値段相応の音のヘッドフォンではあるものの、ウーハーが付いていて震えるというのが売りのヘッドフォンなのだが、これがすごくいい。マンション住まいとかだと、ウーハーってなかなか付けられなくて映画とか見るときや音楽を聴くときに物足りないなぁと感じる場合が多いのだけれど、これはヘッドフォンなので、そういうのを気にせずにウーハーを直に感じられる。しかも耳直下という敏感なとこについているので、映画館で映画を見たときに感じる音が震える感じがせまい自宅でも感じられるという体験が得られる。さっそくVR作品に使おうと思う。個人的には今の所、そこそこの値段でいい体験が得られたので、今年一番コスパが高い製品を買ったなぁという印象。映画館で映画見るの好きな人で空気が揺れるのが好きな人とか、ゲーム好きの人とか、VRで使用したりするのに是非おすすめしたい商品だと思う。ちなみに、ちょっとだけ音漏れするので、普段使いはちょっとだけ難しいかも。

リストバンド型ヘルスセンサー Mio Fuseを買った

絶賛開発中のMFT2016のイベントのゲームで使うハートレートセンサーMio Fuseを買いました。なかなか、かっこいいかつ使えるデバイスだったのでレポを載せます。箱はマイナーデバイスの割に高級感があってワクワクさせてくれます。
IMG_1734
最初フタを開けたところがこんな感じになります。かなり丁寧に梱包されてます。
IMG_1735
充電するためのUSBデバイスは、箱の底に入ってます。HRの腕輪の裏側に端子がぴったりくっついて充電できるようになってます。
IMG_1736
実際にHRモニターを表示したところ、マトリックスのLEDになってて、夜間でもすごく見やすそうですね。ちなみに、リストバンド部分をタッチできるのとHOLDできるようになってて操作するようになってます。
IMG_1737
個人的なお勧め度ですが、胸につける型のHRセンサーをこれまで使ってたのですが、リストバンド型は汗かいて気持ち悪くなること少なそうなので、胸につけるHRセンサーよりも気に入りました。あととにかく表示部分がカッコイイ、あと、それぞれのお気に入りのヘルスアプリ(Cats Eye Cycling,LIveCycling,Stravaとか、Runkeeperとか)と連携できるのでカスタマイズ性もかなりあったりとか公式アプリももちろん使い勝手は良いと思います。

スマートドールさんに行ってきた

今日のアキバは、アダルトVRで混んでいたようですが、そこには行かず、スマートドールが割引価格で買えるワークショップの下見を兼ねてスマートドール Danny Chooさんのお店がどんな感じなのか、行ってみました。黒いドアを入って、後ろを振り向くと、ピンナップ
ちなみに、土禁で入り口で靴を脱ぎます。

IMG_1709

眼前に広がるのは、多数のフィギュア、フィギュア自体の大きさは、標準サイズのフィギュアと比べたら、満足感ある大きさだなぁ。これ、持って街歩いたら、すごい目立つなぁ、きっと。
IMG_1686

机の上に置かれているのをじっくり見ていく。
IMG_1705 手をつないでて可愛い。
IMG_1706 棚にもたくさんの洋服が様々なので、洋服屋さんで着まわしのサンプル見てるみたいで 楽しい(自分男だけど)
IMG_1681
IMG_1688
IMG_1680
ディスプレイの仕方、小物を含めおしゃれ感あるよなぁ。
IMG_1707
IMG_1696
等身大のSWのドールがなぜか、フィギュアの体パーツを IMG_1683
ドレス娘三人衆、かわええなぁ。
IMG_1685
シースルーのフィギュアもあったり
 111
IMG_1699
なぜか、Iron Manの手が
IMG_1701
ロードバイクとフィギュア
IMG_1708
等身大のフィギュア
IMG_1711
オフィスレディ
IMG_1712
着ぐるみ着てるのも可愛いね。
IMG_1716
アパレルの陳列
IMG_1691
壁に立てかけてある、フィギュアも洋服がすごいフェミニンで可愛い。
IMG_1692
ちなみに洋服の一つの値段はこのぐらい。いい値段するねぇー
IMG_1717
グッズのTシャツ
IMG_1698 ウィッグ的な髪の毛
IMG_1693
ロボ化するための試作と商品化するための色々
IMG_1715
IMG_1713
IMG_1714
ロボ化のお話とそれを商品にするための過程のお話(失敗談)とそれが、新作のUSBハブドールになったお話をちょっとだけ聞いてきた。
IMG_1690 ちなみに個人で改造をやるぶんには簡単だよって言ってたけど、サーボとか部品も作ったって言ってて、簡単じゃない気が(ry
というわけで、スマートドールさんでした。
ちなみに、パーツ売りもすぐにするそうなので、改造して失敗しても大丈夫だね
(お財布が大丈夫じゃない)
改造とかのコミニティ作りたいって言ってましたよー。
関連リンク
スマートドール -Danny Choo

C++を使ったSocketを使った通信周りの書き方

 この記事はUnreal Engine 4 (UE4) 其の弐 Advent Calendar 2015 の17日目の記事です。昨日は、@tempkinderさんの「Stationary Lightの影について」でした。影関係はモバイル等も混じってくる、出たり出なかったりするので、実装の違いが載っていてなぜでないのかなとか考える指針にもなるのでありがたい記事でしたね。

 今回は、前々回のぷちコン、前回のぷちコンで外部のデバイスと通信するために使ったSocket通信について解説したいと思います。UE4マルチプレイの実装については、以前、UE4Unreal Fest2015で@alweiさんが話していて大変勉強になるものでしたが、たとえば、PC側でゲーム画面を、iPadと通信して現在位置のMapを表示したいだとか、僕の場合のように最近はIotデバイス(Arduino等)が流行っているので、それらと通信したいとかいう時、必ずしも、マルチプレイの方法では実装できるとは限らないのでそのような場合にSocketを使った通信を実装しようというものです。

早速、解説していきたいと思います。詳細のソースに関しては、githubをみてもらうとして、要点だけ説明したいと思います。


 まず、SocketでつなぐBP用のメソッドを作ります。 

bool ABikeSensorCommunicationActor::connectBikeSensor(const FString &IP,const int32 &port){
    ConnectionSocket = CreateTCPConnection(IP, port,1024);
    if(!ConnectionSocket){
        return false;
    }
    

    if(TimerHandle.IsValid() == false){
        GetWorldTimerManager().SetTimer(TimerHandle, this,
                                        &ABikeSensorCommunicationActor::TCPSocketListener, 1.0f / 60.0f, true);
    }
    
    
    return true;
}

ここでの、SetTimerは、Socketをつないだ後、別スレッドで、通信スレッド(TCPSocketListener)を作っています。1/60秒で通信をチェックするように
します。


次に、それぞれのOSのSocketSystemを取得し、IP,Portなどを設定してConnectします。そして、FSocketのオブジェクトを作り返しています。

FSocket* ABikeSensorCommunicationActor::CreateTCPConnection(const FString& TheIP, const int32 ThePort,const int32 ReceiveBufferSize)
{
	FSocket* retSocket = NULL;

	ISocketSubsystem* SocketSubsystem = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM);

	if (SocketSubsystem != NULL)
	{
		retSocket = SocketSubsystem->CreateSocket(NAME_Stream, "SensorConnect", true);
	}

	FIPv4Address ip;
	FIPv4Address::Parse(TheIP, ip);
	auto addr = SocketSubsystem->CreateInternetAddr();
	addr->SetIp(ip.GetValue());//setIP
	addr->SetPort(ThePort);

	if (!retSocket->Connect(*addr)){
		return NULL;
	}
	
   
    return retSocket;
}
ここで、Socketのオブジェクトが生成されれば、接続が成立します。

そして、実際にデータを送るスレッドのListenerです。
void ABikeSensorCommunicationActor::TCPSocketListener()
{
    //~~~~~~~~~~~~~
    if(!ConnectionSocket) return;
    //~~~~~~~~~~~~~
    
    
    int32 sendType = 1;
    int sent;
    ConnectionSocket->Send((uint8 *)&sendType,sizeof(sendType),sent);
    
    //Binary Array!
    uint32 Size = 0;
    
    while (ConnectionSocket->HasPendingData(Size))
    {
        TArray ReceivedData;
        ReceivedData.Init(FMath::Min(Size, 65507u));
        
        int32 Read = 0;
        ConnectionSocket->Recv(ReceivedData.GetData(), ReceivedData.Num(), Read);
        if(ReceivedData.Num() <= 0)
        {
        }else{
            const FString ReceivedUE4String = StringFromBinaryArray(ReceivedData);
            FormatReceiveDataToNumber(ReceivedUE4String,iBodyRate,iRotaion,fSpeed,iDirection);
        }
        
    }
    
}

ここで、データをSendしたり、データが送られてきているならデータが溜まってる分だけ受け取って、それぞれ処理をします。 

 以上、駆け足でSocketについて説明してきました、ちなみに今回説明したのはどちらかというと、Client側の処理なので、Peer To Peer で UE4 to UE4 で通信するときにはサーバ側のUE4の処理を書かなければいけませんけど、そのあたりはUE4 のComminityのほうのVictoryPluginの作者さんのページに解説があります。

最後まで読んでいただきありがとうございます。

最後にSocketを使ったサンプルのYoutube動画のリンクを貼っておきます。またソースに関してはgithubにあります。




明日は@Usui_KKYLさんによる「VictoryPluginの中身をざっくり紹介させていただきます。」です。VictoryPluginは自分も愛用していますが、かなり色々なことができるようになってて把握するのが大変なのでありがたいです、楽しみですね。