革命のブログ

フレボワークスの社員がブログを通じて情報発信します。

Kinesis Video Streamsを使って、Androidスマホのカメラ映像を配信してみた

どうも、小野です。 今回はAWSが提供している動画配信サービスの「Amazon Kinesis Video Streams」(以下、KVS)を試していきます。 本記事では、余分な説明を極力省いているので、15分程度で動作確認までいけると思います。

KVSについて、詳しく知りたい人は以下のサイトを参考にしてください。 docs.aws.amazon.com

前準備

  • AWSアカウントを取得していること
  • Android Studioがインストールされていること

手順

手順については、以下のサイトにも記載されています。 docs.aws.amazon.com

Cognitoの設定

今回、Androidアプリから利用するので、アプリからKVSを利用するため認証認可が必要になります。一般的にスマホアプリではCognitoを利用することが好ましいです。もちろん、アクセスキー、シークレットキーを持たせて行うことも可能ですが、セキュリティの観点から非推奨とされています。

ユーザプールの作成

f:id:frevo-works:20220413132730p:plain

f:id:frevo-works:20220413132805p:plain

f:id:frevo-works:20220413132833p:plain

f:id:frevo-works:20220413132850p:plain

f:id:frevo-works:20220413134205p:plain

f:id:frevo-works:20220413134220p:plain

f:id:frevo-works:20220413134303p:plain

f:id:frevo-works:20220413134415p:plain

f:id:frevo-works:20220413134447p:plain

f:id:frevo-works:20220413134551p:plain

IDプールの作成

f:id:frevo-works:20220413134609p:plain

f:id:frevo-works:20220413134622p:plain

f:id:frevo-works:20220413134758p:plain

配信アプリの準備

公開されているサンプルアプリケーションのソースをダウンロードします。

git clone https://github.com/awslabs/aws-sdk-android-samples

Android Studioで「aws-sdk-android-samples/AmazonKinesisVideoDemoApp」を開きます。

AmazonKinesisVideoDemoApp/src/main/res/raw/awsconfiguration.json を編集します。 各番号にはCognitoの設定時に記載した番号と同じ内容を入力する。

{
  "Version": "1.0",
  "CredentialsProvider": {
    "CognitoIdentity": {
      "Default": {
        "PoolId": "④",
        "Region": "ap-northeast-1"
      }
    }
  },
  "IdentityManager": {
    "Default": {}
  },
  "CognitoUserPool": {
    "Default": {
      "AppClientSecret": "③",
      "AppClientId": "②",
      "PoolId": "①",
      "Region": "ap-northeast-1"
    }
  }
}

AmazonKinesisVideoDemoApp/src/main/java/com/amazonaws/kinesisvideo/demoapp/KinesisVideoDemoAppを編集します。

public class KinesisVideoDemoApp extends Application {
    public static final String TAG = KinesisVideoDemoApp.class.getSimpleName();
    public static Regions KINESIS_VIDEO_REGION = Regions.AP_NORTHEAST_1; // 変更

動作確認

※スマートフォンのダークモードが有効になっていると表示が見にくい箇所があるので、予め無効にしておいてください。

Android Studioでデバイスを選択して実行し、アプリを起動させます。

配信側の画面

f:id:frevo-works:20220413140624p:plain

f:id:frevo-works:20220413140636p:plain

f:id:frevo-works:20220413140647p:plain

f:id:frevo-works:20220413140659p:plain

f:id:frevo-works:20220413145159p:plain

閲覧側の画面

f:id:frevo-works:20220413145507p:plain

f:id:frevo-works:20220413145233p:plain

↑メディア再生のところです。

おわりに

サンプルアプリが提供されていたので、簡単に試すことができました。Rekognitionとも連携できるので、リアルタイムで顔検出などやってみたいですね。今回はAndroidアプリでしたが、他にもJava、C、C++のSDKが用意されているので、興味がある方は試してみてください。

SpringBoot + Nuxt構成でGoogle認証を実現する

どうも、小野です。今回は、バックエンドがAPIのみ、フロントエンドがSPAの構成におけるOAuth認証とリクエスト時の認証チェックについてです。個人的にSpringBootとNuxtを利用することが多いのですが、この構成でのOAuth認証の実現方法を中々見出せずにいました。SprignBootにはOAuth認証を行う仕組みがSpringSecurityに実装されているのですが、フロントエンドとの連携が複雑化して断念しました。そこで、FirebaseのAuthentizcationサービスを使ってGoogle認証について調査したところ、スマートな方法が発見できたのでご紹介します。

続きを読む

2021年に経験した言語のおすすめランキング

f:id:frevo-works:20211228232920j:plain
フリー素材ぱくたそ(www.pakutaso.com)

どうも。最近、個人開発を始めたくなってきた小野です。

本格的なテレワークが始まってからかれこれ1年以上経過しました。 在宅だと通勤がないので、満員電車のストレスがなくなったのですが、宅配物の受け取りや夕飯の用意など家事が増えてしまいました。 家族にとってはいいことかもしれませんが、自分の時間の確保が難しくなったような気がします。

さて、2021年は新しい言語に触れる機会が多かったような気がします。 そこで今回は、2021年に触ってみた感想をランキング形式で発表していきます。

続きを読む

2021年のふり返りと2022年に向けて

こんにちは。さいとうです!

気付けば2021年もあと3日ですね。年の瀬いかがお過ごしでしょうか。

2021年のふり返りと2022年についてを少し書き出していこうと思います。

 

2021年のふり返り

この時期によく見るものといえば”今年の漢字”です!

私の今年の漢字は

f:id:frevo-works:20211228183640p:plain

”籠”(こもる)です。

在宅勤務や緊急事態宣言の発令など、様々な理由がありますが365日のうち300日以上は家に籠っていました。

一つのところに腰が落ち着いてしまうと色々な場所へ一歩踏み出すのが億劫になってしまいフットワークが重ーくなってしまいました。(体重も増えてしまったのもありますが・・・)

不思議なもので身体的に重くなると頭も重くなってしまうようで考えやアイデアなどがうまく出て来ず固定化しつつあるように思えます。

このままでは良くないと思い色々なところに顔を出したい気持ちはあれど、コロナ等いろいろなもののせいにしてしまい気付けば2021年が終わろうとしています。

 

しかしながらいい点もたくさんありました。

世界で最も無駄な時間こと通勤時間が在宅勤務制度のお陰でなくなったため、朝晩のゆとりの時間がとても増えました。

この時間を使って勉強等に充てる事で着実にインプットすることができた1年でした。

また、今年は色々な技術に触れる事ができた1年でした。

kotlinでのAndroidアプリの開発に始まり、SwiftUIを用いたiOSアプリの開発と広くモバイル開発の経験を積む事ができました。

メンバーの誰も経験がない状態からの手探りでの開発となり自分の頭の中に籠りがちな日々を過ごしていましたが、着実に作ることのできる機能が増え”こうしたい”を叶えられる力をつけることができました。

モバイル開発はまだまだわからないことばかりで勉強中ですがこちらは来年も走りながら考えることを継続していきたいと思います。

 

2022年に向けて

2021年は籠りがちでインプットばかりになってしまっていたので来年はアウトプットに重きを置きながら他の人も巻き込んでいける様な動きをしていきたいと思います。

また、最近は新型コロナウイルスの飲み薬もできてきているようなので本格的にコロナ前の生活が戻ってきたらもっと前向きに動いていきます。

来年の目標の漢字は”動”です。

 

最後に

2020年にひき続き、人生で経験をしたことのない一年でした。

ワクチンが普及して希望がでたかと思えば新しいタイプのウイルスがでてきたりと中々終わりの見えない苦しい一年でした。

そのような環境でもなんとか一年乗り切ることができました。

各所関係者の皆様、今年もお世話になりました。

来年もどうぞよろしくお願いいたします。

【お知らせ】年末年始休暇について

取引先各位

今年も、大変お世話になりました。

今年は、コロナ過の中でのオリンピック開催や、ワクチン接種等で、動きたいが、動くのも、何かと世間体を気にする事が多い1年だったかと思います。

弊社もリモート作業に移行した事から、感染対策上、千代田区から豊島区へ本社を移転するなど、本意ではない行動も多かった年でした。

また、新しい新種のウィルスの発生により、来年以降も感染対策には気を付けて過ごす

1年になるかと思いますが、皆様、どうぞ、良いお年をお迎え下さい。

(年末年始休暇)

 ・令和3年12月29日(水)~ 令和4年1月3日(月)

尚、弊社は現在、ハイブリット(在宅+出勤)変則勤務の為、ご連絡等は、オフィシャルHPのお問合せよりお願い申し上げます。

・来年はガンダム⁉のような、強い日本経済の復活を期待しましょう。

f:id:frevo-works:20211208160401j:plain

横浜ガンダムファクトリー

 

子育てとプログラミング

f:id:frevo-works:20211020143209j:plain

子育てとプログラミングって、全く関係ないようで 実は共通している部分があると思います。

例えば、何かサービスを作るときは、完成したイメージが頭の中にありますよね? 子育ても同じで、自分が思い描く成長後の子供をイメージしませんか? こういう子に育ってほしいなど思い描いて、子育てしませんか?

今回は、開発と子育てを関連づけて話していこうと思います。

子供にはcatchできない例外は多い

子供が小さい頃は、何をするか予想つきません。 食べ物以外のものを口に入れたり、壁に落書きしたり、物を壊したりと、一般的にやらないことを当たり前のようにやります。 そういった予想もつかない行動をしたときに親はどう対応すべきでしょうか?

答えはありません。

その都度、親も子供を知り学んでいくのです。

開発初期の頃は、仕様通りに実装したつもりでも、意図しない例外が起きたりしますよね? 例外という想定外のエラーを知り、改善していくのと同じです。

cacheできる例外処理=叱る

子供が悪さをしたとき、つまりしてはいけないことをしたときは叱りますよね?これは当然のことですし、子育てには必要不可欠なことです。 これは親の頭の中で、子供がこれをやったときには叱るという例外処理が出来上がっているためです。 プログラムでは以下のような表現になります。

try {
  〜
}catch(他の子を叩く例外 e){
  叱る()
}cache(家の物を壊す例外 e){
  叱る()
}

ここで注意してほしいのは、叱るは何もきつく言う必要はなくて、子供に納得させるだけいいのです。 きつく叱ったときに逆に子供が不機嫌になることのほうが多い気がします。

子供が不機嫌になると、親の言うことを聞かなくなる傾向にあります。(経験上) 不用意にきつく言わない方が、子供は聞く耳を持つと思います。

cacheできない例外はどうする?

先ほど、やってはいけないことをやったときに叱ると言いましたが、 では、「やるべきことをやらなかった」場合はどう対応しますか?

やるべきこととは、例えば学校の宿題とかですね。

親の行動として、3パターンあると思っています。これは各家庭の教育方針によって変わります。

  • 叱る
  • 怒る
  • 放置(子供に任せると言う意味で)

叱る

先ほど、「してはいけないことをした」場合には叱る必要があると言いましたが、 今回はやるべきことをやらないについてなので、疑問に思うかもしれません。 しかし、言葉を置き換えてみると、「してはいけないこと」を「宿題をやらないこと」とすると しっくりくると思います。つまり、宿題をやらないことをする=宿題をやらないになります。 この場合の親の中では、宿題をやらないという例外処理ができていることになります。

try{
  宿題をする()
}catch(宿題をやらない例外){
  宿題の必要性を教える()
}

ここでの叱るは、子供になぜ宿題が必要なのかを納得してもらうことです。

怒る

ここで「怒る」という言葉がでてきました。 子育てをする上で、「叱る」と「怒る」を区別することはとても大事なことです。

私は、子育てをする上で「怒る」こと自体、不要だと思っています。 なぜなら、「怒る」は子供が自分の思い通りに行動しないことに対して苛立ち、 子供に強い言葉をぶつけ恐怖心を与える行動だからです。子供にとっても一時的ではあるものの精神的にダメージが大きいと思います。

怒るという行為をプログラミングで例えるなら、意図しないエラーは全て同じ例外にしてしまうことだと思います。

try{
  宿題をやる()
  お風呂に入る()
  歯を磨く()

}catch(子供が言うことを聞かない例外 e){
  怒る()
}

怒ることで子供が思い通りに行動しますか? 本当に行動できる子供は怒らなくてもできるものです。

怒るのではなく、叱るまたは教える必要があります。

親としては考える必要がなく、とりあえず怒る。楽ですよね。 子供にとってはどうでしょう?なんで怒られてるのか理解していないかもしれません。

システムに例えると、全て500エラーで処理することですかね。 利用者はなんでエラーなのか知りたいはずです。子供もなんで怒られてるのか知りたいはずです。

理想は例外ごとに処理を追加することが必要だと思います。

try{
  宿題をやる()
  お風呂に入る()
  歯を磨く()
}catch(子供が宿題をやらない例外 e){
  宿題をやる必要性を教える()
}catch(お風呂に入らない例外 e){
  お風呂に入る必要性を教える()
}catch(歯を磨かない例外 e){
  歯を磨く必要性を教える()
}

もちろん、必要性を教えたところでできるとは限りません。 そのため、その都度、例外を追加するなり、条件分岐などを追加して対応をしていく必要があるのだと思います。

放置する

これは聞こえは悪いかもしれませんが、ここでは子供の意志に任せると言う意味での放置です。 親としては、宿題をやらないことが例外ではなく、正常処理として捉えることになります。

宿題をやる()
if(宿題をやった場合){
  褒める()
}else{
  先生に叱られるかもしれないことを伝える() // なくてもいい
}

基本的に子供の意思に任せますが、親の希望通りの行動をした場合は褒めてあげるようにしましょう。

子供に限らず、人間だれでも褒められると嬉しいものです。 やったことに対して褒められると、もっと頑張りたくなります。 逆にやらないことに対して怒られると、そのときは仕方がなくやりますが、継続はしませんよね。

結局は親次第

子供がどう成長していくかは親次第です。システムもゴールは同じでも中身は開発者によって違います。要はシステムも開発者次第です。

教育に正解はありません。だからこそ、トライアンドエラーの繰り返しが必要にです。 宿題をやらないから、宿題をやりなさいと言い続けても、やるようにはなりません。

宿題をやりなさいと言ってもダメなら、宿題をやったときに思い切り褒めてみようなど、 対応を徐々に変えていくことで子供も変わっていくのだと思います。

プログラムに関しても、この実装は効率が悪いから、別の方法で実装してみようなど開発者にとっては日常茶飯事です。

親はだれでもいい子に成長してほしいと願うものです。開発者はいいモノを完成させたいと願うものです。

子供が無事に独り立ち、つまり無事にリリースされるまで親の教育はとても重要です。

対面展示会再開です!

今日は出展者さんのご依頼やお客さんからの課題解決素材の情報収集により、

約2年ぶりに対面での展示会へ訪問しました。

パートナーさんとの久しぶりの再会で、やっと昔の感覚が戻ってきた感じです。

展示会のお客さん入りは、まだまだですが、同業者さんが頑張っている姿を見ると、

自分のマインドも、スイッチを切り替えなければと感じた訪問でした。

皆様も感染対策をしながら、徐々に行動しましょう。

f:id:frevo-works:20211008155217j:plain

東京ビックサイト