C++幼女先輩

プログラミング成分多め

Windows10 IoT Coreと Windows10 IoT Enterprizeに関して

仕事で必要になったので調べた

japan.zdnet.com

Windows10 IoT Coreは、よくラズパイ等のIoT開発の時にインストールするOSで
OS自体の機能も少なく、アプリもUWPで動く

一方、 Windows10 IoT Enterprizeは、Windows10のフル機能が備わっているため.netのネイティブでも動く

という認識だったが、2021年にそれらを統合するらしい

なるほど、ますます便利になるなあ

ionicでモーダルウインドウを作ってみた

github.com

Generate

ionicでは各種Generateがコマンドから可能
html、css、ts、テストのテンプレートを自動で作ってくれるので利用しましょう

ionic generate - Ionic Documentation

公式の通り
page、component、directive、service の作成ができる
Modalで表示するページを作る

$ ionic generate page modal/streaming

なぜか、generateすると下記のエラーが出るようになった

Could not find an NgModule. Use the skip-import option to skip importing in NgModule.

未解決事件だが、実行する時のパスを src/appからにすると実行できるようになったが
なぜかプロジェクトのルートにファイルが作成されたので、そのファイルを src/app以下に置きなおした
更に、app-routing.modules.tsにて、モジュールのパスを管理しているので、そのファイルを開き正しく直した

Modalを呼び出す

とりあえず tab1にボタンを配置してそこから呼び出す事にした

tab1.page.ts

import { StreamingPage} from '../modal/streaming/streaming.page';

export class Tab1Page {
  constructor(
    private modalCtrl: ModalController,
  ) {    
  }

  async presentModal() {
    const modal = await this.modalCtrl.create({
      component: StreamingPage,
    });
    return await modal.present();
  }
}

ModalControllerモジュールをimportし
presentModalインタフェースを追加した

tab1.page.htmlは下記のようにボタンを追加した

<ion-content [fullscreen]="true">
  <div class="ion-padding">
    <ion-button expand="block" fill="outline" (click)="presentModal()">Streaming</ion-button>
  </div>

  <app-explore-container name="Tab 1 page"></app-explore-container>
</ion-content>

streamingビデオを再生させるために streaming.page.htmlに追記

<ion-content>
  <video width='950' height='700'
    src="https://devstreaming-cdn.apple.com/videos/streaming/examples/img_bipbop_adv_example_ts/master.m3u8" controls
    autoplay playsinline webkit-playsinline></video>

</ion-content>

これで、Modalでビデオが再生できる

Closeボタン

モーダルをCloseするにはdismissを呼ぶだけだ

ボタンを追加し

streaming.pages.html

  <ion-toolbar>
    <ion-title>streaming {{test}}</ion-title>
    <ion-buttons slot="end">
      <ion-button (click)="close()"><ion-icon name="close"></ion-icon></ion-button>
  </ion-buttons>

動作をつける
streaming.pages.ts

export class StreamingPage implements OnInit {
  @Input() test: string;

  close() {
    this.modalCtrl.dismiss();
  }
  ```  
  
  
# CSS  
  
cssClass: 'app-streaming', 
  
だけではダメのようで  modal-wrapperにもCSS適用した    
このあたりはまだよくわかってない・・・  
  
globals.css  
  

.app-streaming .modal-wrapper { width: 100%; height: 100%; display: block;
border-top-left-radius: 15px; border-top-right-radius: 15px; border-bottom-right-radius: 15px; border-bottom-left-radius: 15px; }

  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  

ionicをWindowsで開発し LiveReloadを行う

ionicとは?

1つのソースで、Web、AndroidiOSWindowsネイティブ等の複数のアプリを生成するハイブリッドフレームワークです
ionicの特徴としては、Typescriptで記述し、Angular(React)フレームワークを使い、ネイティブ連携にCapacitor(Cordova)を使う事 つまり、HTML、CSSJavaScriptというWebの資産が利用出来る事にあります
Vueも現在対応中とか!

インストールもnpmで行います

Windowsとの相性

公式曰く

ionicframework.com

In general, we recommend using the built-in terminals. Many third-party terminals work well with Ionic, but may not be supported. For Windows, Command Prompt and PowerShell are supported. WSL is known to work with Ionic, but may not be supported. For macOS, the built-in Terminal app is supported. Git Bash (from git-scm.com) does not support TTY interactivity and is not supported by Ionic.

ビルトインのシェルを使ってくれ(Git bash等は対応していない)
WindowsはCommandPromptとPowerShellは対応している。WSLは動くらしいけどサポートはしないよ

まあ、iOSビルドもあるし、基本的にはMacで開発するのが当然のようだ

Windowsで開発してみた

ionicでserveすると [ERROR] ng has unexpectedly closed (exit code 127). - C++幼女 みやたけゆき
先日記事にかいたが、とあるnodeのバージョンでは、起動時にエラーが出るという問題にピンポイントにぶつかったが
基本的には問題なく動いた

が、ライブリロードが効かないのである!!

Ionic live reload not working. · Issue #495 · microsoft/vscode-cordova · GitHub
など、様々なページでWindowsだとLiveReloadが効かないという話が出ている

ionicの起動はお世辞にも速いといえない(私のMBPで30秒かかる)ので、これは何とかしたいものだ・・

WSL2を使ってみた

公式からはサポートしないと言われているWSLを使ってみる
私はWSL2にしているので、WSL1はどうなるかわからない

まず、Windowsパス(/mnt/c の下)でionicを実行したが LiveReloadがされない
このパスはWSLからみるとCloud9でマウントされたネットワークドライブなので
挙動に問題があっても仕方がない

次に、Linuxパス(例えば ~/ の下) でionicを実行すると LiveReloadが実行された!!
しかも ionicは10秒で起動する
とても快適な環境が構築された!

ionicのチュートリアルをする

github.com

ionicのチュートリアルを空き時間に勉強している

初めての Ionic アプリ: Angular - Ionic Framework 日本語ドキュメンテーション 最初なので上記の記事をみながらかいている ただし、日本語化がされておらず、単純にコードをコピーするわけでなく
多少頭を使う(英語を読む)部分もあるので、一筋縄ではないが
これはこれで、多少頭を使って、単なるコピペにならないようになり
私も、記事を書くときに参考にしようと思う

だいたい一通りはわかったが、英語なのでよくわからないので
結局最後はコードをみて調べることにする

今は、iOSAndroidへのネイティブビルドまでいったが
iOSビルドをするために cocoapodsが必要であった

そういえばそんなもの、2光年前にインストールしたけど、環境リセットで消したんだった

まだ実機でのビルドはしていないが、だいたいわかってきた

ionicでserveすると [ERROR] ng has unexpectedly closed (exit code 127).

ionicを起動しようとしたときに下記のエラーがでた

[ERROR] ng has unexpectedly closed (exit code 127).

nodeのバージョンは下記
node v13.3

$ node
でコンソールに入り

const uuid = require('@loopback/context').uuid

と入力してエラーが出れば、node_modules\uuid が無い

諦めてnodeを別のバージョンにすれば解決

ionic frameworkを触ってみる

緊急なお仕事が入ってきまして、ionic frameworkを触っています

ionic frameworkとは

Web/iOS/Android/PC のハイブリッドフレームワークの1つです
PWAのようなWebViewではなく、完全にネイティブコードの出力を行います
いわゆる下記の仲間になります

ハイブリッド

PhoneGap(Cordova)、Monaca、Capacitor

クロスプラットフォーム

Xamarin、React Native、Flutter、Kotlin Native・・

ハイブリッドとクロスプラットフォームの違いはここでは
ハイブリッドはUIをHTML+CSSで作り
クロスプラットフォームは専用のUIで作る事とします

ハイブリットフレームワークにした理由

スケジュールの関係から、WebデザイナーにUIを作ってもらう方がよかったからです
そのため、必然的にionicを採用することにしました

ionicインストール

インストールは非常に簡単でした
今回はAngularとCapacitorを使います
まずnodeとnpmを新しくしておき

npm i -g ionic 
npm install @ionic/angular@latest --save
apt install ng-common
npm uninstall -g ionic
npm install -g @ionic/cli


ionic start test_app --type=ionic-angular

これでテンプレートを作成できる

typeオプションでは下記の設定が可能だ

  • angular
    ionic-angularとの違いがまだわかってない
  • react
    reactも対応したらしい
  • ionic-angular
    angularとの違いがまだわかってない
  • ionic1
    過去の遺物なのでもう使わない

今後 Vue等も対応されるようだ

今回はTabアプリを選んだ

実行

ionic serve

これでブラウザで実行できる

f:id:murasame-labo:20200822044725p:plain

AWSのAmazonLinuxで色々はまる件

nginxで簡単なサーバをデプロイするタスクで、色々とはまった

タスク

nginxでRTMP通信を受けて、別のRTMPサーバにリレーするサーバの構築
ローカルのUbuntu(WSL)ではあっさり動いたので、AWSでもすぐできると思ったが、いろいろなハマリポイントがあった

インスタンス作成から設定

テストなのでmedium程度のインスタンスを作成しセットアップ
OSに悩んだが、なれたUbuntuもいいが、AmazonLinuxにした
インバウンド、アウトバウンドを設定する
RTMPなのでTCP1935を開け、疎通確認やHLSの取得に80も開ける。sshも開ける

インストール

nginx-rtmpモジュールはnginxをビルドする必要があるので、yumで開発ライブラリを入れる
AmazonLinuxはCentOS系で、yumで入れられるものが極端に少ない&古い
そのため、速攻でEPELを有効化する
そして yumを行うがyumがエラーになる
調べてみると、AmazonLinuxはyumのパッケージリポジトリにS3を使うらしく、VPCの設定からS3の許可をする必要があった
エンドポイントすら作成してなかったので、VPCにエンドポイントを作り、S3の許可を与える
yum出来た

開発に必要なツールをyumで入れ、nginx、nginx-rtmpのソースを落として、ビルド

www.servermania.com

Ubuntu例だが、設定は同じなので。

ソースビルドして実行するもエラー
このあたりはCentOS特有のセキュリティ強いので設定をする

nginx関連のユーザやグループを設定し、ファイルやフォルダに適切に権限を与え
存在しなく怒られていたディレクトリを作成
などなど行い、やっとHTTPが動くように

そこからnginxにRTMPの設定を行うも
vimの表示が壊れたり、コピーペーストするとゴミが入ったりで苦労した

結論

CentOS系はセキュアな反面、色々とハマる