姫路IT系勉強会 2021.07

  • 開催日: 2021/7/17 13:15 - 17:35
  • 司会: fu7mu4さん
  • 参加人数: 参加者: 10名(うちLisper 1名) 学生 0名
  • HackMD https://hackmd.io/aVHxec9eRkakAkecJ4gyMg
  • connpass: https://histudy.connpass.com/event/218595/
  • ハッシュタグ:#histudy
  • Discord(オンラインミーティング専用)姫路IT系勉強会招待コード: https://discord.gg/rZCeScB
    • Discordは無料プランに乗れる人数(10人以内)なので使っています。
    • 有料版でも$15/月程度なら払えなくもないですね。
    • Discord以外にも色々ありますので、人数が増えたら検討しましょう。

お題

Chrome, EdgeでIEみたいにfileスキームのリンクを”既定のプログラム”で開けるようにした(田窪)

  • セキュリティに詳しいニキ達諸兄のご意見を伺いたい。
    • ニキとは?
      • すみません。なんj語です…。
  • <a href="file:///Z:/share/master.xlsx"> みたいなリンク
    • file スキームはRFCにより絶対パス指定です
    • IEだとこのリンクで一気にエクセル開いて編集して保存できた。
      • 昔ActiveXでやりたい放題だったことが
    • Edgeではこれが出来ないので不便
  • こういう拡張機能を見つけました

自作の「ファイルオープンサーバ」を使う方法をデモ

  • fileリンク->拡張機能->ファイルオープンサーバ(goで実装しました)->「既定のプログラム」
    • このアーキテクチャでセキュリティの懸念はなにがあるだろうか?
  • ファイルオープンサーバーが信頼できるかどうか?
    • ファイルオープンサーバーがこっそりコピーするとかあると怖い
    • オープンソースですれば中身わかるから信頼できる
      • なので、今回の仕組みの中に悪意があることは想定しません。外部からの攻撃に対する脆弱性のみを問題にしています。
  • 開けるファイルを制限する機能があった方がいいかも
    • プロキシで制限かける? → 多分「プロキシだけ」だと意味ない
    • ホワイトリスト方式でURLをバリデーションしてから渡す
  • リンク先が拡張子やアプリケーションなどを偽装できそう
    • Mimeタイプ偽装とかあると検出しにくい
      • fileスキームには、Mimeは関係ないと思います。
  • MS: SharePointでよくね?それかOffice 365 でクラウドにファイル置くといいよ
    • データファイルが共有ストレージに散らかる問題についてひとくさり

HackMDにサインインすると、ぜんぜん知らないところにリダイレクトされました(さとう)?

Raspberry PiでUSBカメラの映像をリアルタイムに飛ばす簡単な方法ありますか?(もりや)

  • FFMPEGNginxで飛ばすとバッファの関係で4秒ずれます
  • Janusを使いWebRTCで飛ばすとリアルタイムに飛びますが、以前作ったクライアントがAngular6で作っていたので、今はReactに宗派を切り替えているので作り直しが面倒です。
    • Janusのフロント設計がjQueryベースで作成されておりかなり古いです
    • Janus上で発生するイベントごとに関数をオーバーライドする実装方法のため無駄に長いコードを書かないといけません
    • 最近のReact等に組み込もうとするとお作法の違いでちょっと面倒です。
  • これが低遅延で最強ですよ WebRTC SFU Sora - 機能・特長
    • やはり有料しかないのか
  • 監視カメラで使用している、RTSP対応のカメラとVLCのブラウザプラグインを組み合わせれば低遅延で簡単に映像は見れます。
    • VLCはエンコーダとしても多機能
  • PHP は 型がゆるい言語から型の厳しい言語の話

Web言語は地獄です

  • 歴史的経緯1
    • HTMLはゆるい書き方を許容してきました
    • JavaScript もブラウザ上でちょっと動く言語ぐらいのもの
    • PHP は HTML を動的に簡単に作れる言語
      • Google MAP が非同期通信 & SAPでウェブアプリの世界を切り開いた
        • WEB開発の大規模化が顕著に
  • 歴史的経緯2
    • 紙のグラフィックデザイナーがWEBデザインもする
    • WEBデザインしつつコーディングもする
      • 妙なコードが溢れる
    • HTML/CSS/JS は緩く書ける
    • 適当な書き方でも動いちゃう
      • 妙なコードが溢れる
  • 素のJavaScriptはしんどい
    • 型定義がない、全ての関数、クラスを上書き可能
    • jQueryは使いやすけど、データを保持・管理する仕組みが無い
    • React単体でも型定義がない、データ保持機能が無い
    • Typescript+React+Redux+Sagaで利用すると型定義、データ管理は一応網羅できます。
      • redux-sagaは結構最近(v1.0が2019年1月)
      • この辺、Reactは破壊的変更がまだまだ入りそうでツラいとこあります。
  • Reactは分かると良いですが、そこまでが大変
    • FLUXで実装出来るため、考え方がシンプルになります。React、ReactJsでは満たせないので、React+Reduxで実装する必要があります
    • あらゆるデータ、イベントの流れが必ず一方向になるので機能ごとに実装する内容をシンプルに出来ます。コードの再利用性も上がります。

皆さんのプログラム環境と言語を知りたいです。(tom)

Wate さんの例

  • 何でもござれです。
    • サーバサイドからインフラまで
    • ソースコードがドキュメントなときが
    • 言語切り替えのコンテキストスイッチはきつい…
  • PHP
    • メインは CakePHP
    • SQL / ORM でパフォーマンスがでないときに
      • SQLかける人少ない。フレームワークの弊害?
      • 最近MySQLしんどい。PostgreSQLに変えたい
  • bash
    • サーバーのチューニングなど
  • ruby
    • Redmineやってるとき
  • ansible
    • pythonとかYAMLとか
  • go
  • JavaScript/JQuery
    • Typescriptも手をだすはめになりそう
  • もうプログラミングだけではダメ。政略->戦略->戦術で考えると
    • 業務フローを考えると、設計の方に行かないと
    • 設計がしっかりしていれば、言語なんてどうにでも
  • KGI Key Goal Indicator
  • KPI Key Performance Indicator
  • 上流がしっかりしてないと、下流が地獄を見ます
    • 異動されたら、なんど誰も何もやってなかった
      • 自分が設計がんばらないとならない状況あるある
    • 上流に食い込むのはしんどいけど楽しい
      • 下流工程からアラートを上げて、上流に反映させ、情報を共有していく
    • BTSにログ入れない奴にぶち切れる程度になった
  • 日本語めんどくさい
    • アルファベットはちゃんとかけるけど、日本語はなぜかタイポしまくり
  • タブとスペースの混在は頭痛い
    • EditorConfigは入れてくれ

ムネナガ

  • Wordpress : CMS 元々ブログシステム
    • PHPを主に、DBの面倒もみてます
    • WordPressでブログ記事を書くためのエディタがReact製
      • なので半強制でReactも始めました
      • 最初つらかったけど、今はReact派です
  • Kotlin: Android の アプリ
  • Flutter, Dart でアプリ書きたいと思う
    • マテリアルデザインでサクサク作れるらしい
    • TypeScriptやKotlinやってれば、Dartはさほど大変ではないらしい
  • ExcelのアドオンをC#で書いてました

のがじゅん

  • シェルスクリプトばかりだったけど、
  • LibreOfficeのために、C++をちゃんと勉強しなければ
  • 実は自然言語の方が
    • 計算機の自然言語処理、でなく韓国語です
    • textlint で日本語をチェックしたい
      • prhをつかうと独自用語定義が楽
    • redpen はちょっと違う
  • 用語統一に苦労しています
    • 用法とか文言の意味合いが異なってたりする
    • ルールを書いても皆が守るとは限らないので、システムで固めたい
    • そのまえに、editorconfig で開発環境を整備したほうがいい

スマホアプリ開発でお勧めの言語&環境知りたいです(tom)

  • 私はflutterか.net mauiを勉強しようと考えています。  
  • AndroidならKotlinいいですよ
  • 車載アプリはJavaだったりします。10年後もJavaで戦いますか…?
    • 10年乗りの車なんて普通にありますよね
    • 新しいJavaわからないのでJava8です(一部だと思いたい)
      • Java8 LTSのリリースは2014年
  • ScalaでAndroidアプリを書くという苦行が過去にあったらしい。
  • Cordovaは一応生きてます。が、今はReact Nativeが主流
    • React Nativeもアップデートで死ねるそう…
  • Kotlinでクロスプラットフォームもできます
    • JVM 部分のかわりに、ネイティブで動作するライブラリを使うらしい。
    • それ大丈夫なの…?
      • JetBrainsは推してますがどうだろ
  • C# / Xamarine で Androidアプリを作成する可能性が..
    • dot net は v5以降ならマルチプラットフォームだから…
  • マイクロソフトのサービス、プロダクトの話題が少ない(検索にかからない)
    • 主流じゃない?古い?
      • Webで発信されやすいのはOSSとかが多い
      • Windowsサーバは高いですし
    • OSS だと試しやすいし、今は MS も OSSにも注力しているから

histudyのありかたについて若干雑談しました

  • セミナーより技術雑談が好き
  • オンラインなら十数人が適切な人数と思います
  • histudyには伝説の人物が多数輩出しました
    • 素人からWebシステム開発者にジャンプしたお爺さんとか
    • とんがった学生さんたちもおりました
    • 姫路こわい。まんじゅうこわい
  • 現在、オンライン専用になってしまっていますが、ハイブリッドできたらいいですね
  • 昨今のコロナ禍を考えると、場所は借りれてもオフライン開催はしにくい

AWS / Azure等のクラウド開発について知りたいです(tom)

  • 「クラウド開発」の定義をまず知りたいです
  • オンプレから移行は難しいのでしょうか?
    • オンプレの構築手順がどのくらい整っているかによるのでは
    • AnsibleのPlaybookで作りこんであるなら、そう難しくないかも
      • sshとgitが使えるなら、デプロイ先がオンプレだろうがクラウドだろうが
    • マイクロソフトのE2Eだと既存Windowsサーバのイメージを抽出をしてAzureに展開するとかできるらしいです。
    • 使うツール/技術

初歩的な話ですが、Gitの分岐(branch)機能の使い方教えて下さい(tom)

  • githubの?gitではなくて? github flowの話?
  • 各ブランチの役割を決めておく、ブランチ戦略、ブランチフロー
  • チームメンバーごとにブランチを切る方法も
    1. Aさんのブランチ dev-a
    2. Bさんのブランチ dev-b
    3. 各々のメンバーは一旦、自分のブランチにコミットしていく
    4. 各人の作業が完了したら、マスターへプルリクを出す
    5. レビュワーが見てOKならマスターへマージ
    6. 二人でバラバラにコーディングしても相互に影響しない
    • AさんがPHPを修正、BさんがCSSを修正など平行して作業できる
    • dev-aブランチをdev-bにマージもできるので、PHPを修正してCSSあてて、見られる状態になってからステージングブランチへマージして表示を確認とか
  • Redmineのチケット一つにブランチ一つ切る
    • そのチケットに対して、どういう変更があったか記録していける
  • Gitは自由度が高い
    • チームやプロジェクトごとにワークフロー、ブランチ戦略を定める必要がある
      • CVSなど他のバージョン管理との違い
  • 参考

NoSQLのDBを使っている方いらっしゃれば、従来RDBとの違いと使い分けを教えて下さい(tom)

  • 本格的に使っている人がいない
    • NoSQL は早いらしい
  • データの型がきっちりわかれている場合は RDB にいれる
  • ログなどで型がわかれていない場合は、NoSQL にいれる
  • 実はRealmという NoSQL を使ってます
    • しかし
    • ORMかましてアクセスしてるので、使い勝手とか違いは分らないです。
    • データ構造もそこまで複雑なもの扱ってないので使い勝手とか(以下略
      • 比較対象もWordPressのMySQLなもので

SQLテーブル設計の正規化ってどのレベルまでやられます?(tom)

関係の正規化 - Wikipedia

ドキュメントについて

  • エンジニアならドキュメントは書きましょう
    • 誰も書かないなら、三ヶ月後の自分のために
    • すべてを忘れ去った*年後のリプレース案件のときのために
    • 「誰かのために」は逆に心が折れます
    • 書くことが思考や状況の整理にもなります
    • 他の人はドキュメントを書かなかったり、ドキュメントよりコード書け文化についてひとしきり

LibreOfficeのUI/Helpの翻訳ファイル(gettextのpo)をTextlintにかけてチェックしたいと思案中(のがた)

ゆる募 facebook inferに詳しい人 たぶんいない (fu7mu4)

  • facebook infer は facebook がOSS化した、スマフォアプリなどを対象にした静的解析ツール
    • C/C++ Objective-C/Java
    • Erlangもできるよ?
  • なぜか OCaml 製だよ
  • Docker 環境で動かすと libc のバージョンがちがうといわれたのでソースからビルドするよ
    • opamというOCaml Package Manager 1.2から 2.0にあがらない、インストールしなおしが必要
    • infer のC++ 対応には カスタマイズした clang をビルドする
      • 30-60くらいかかるよ。

RubyとかNodeのバージョンマネージャーでバージョン固定を行うときの方針はどうしたら?(ムネナガ)

  • 自分の中で確定
    • 本番環境には入れない
    • 本番と開発環境で実行バージョンを揃えたい時に固定する
  • 最近思うこと
    • npm パッケを開発でしか使ってないなら、要らないのでは?
      • 2021年の今ならそこまでガッチリ固定しなくていいと思うんですが?
        • そんなに厳しいの最近、あまり出くわしてない
      • むしろ排除すべし?
        • チームとかプロジェクトでケースバイケースになりそう
    • Python / Ruby あたりは要るかな?
      • 今も要る気配があります
    • PHPはWordPressばっかりだから使ったことがない
      • Composerをバリバリ使うなら要る?
        • 結局、最近はそんなシビアなパッケージ少なくない?
  • 実行バージョンを切り替えたい時にバージョンマネージャーを使う
    • 動作確認や不具合調査など
  • バージョン切り替えなら仮想化内で実行する方法もある
  • がちがちに固めるならdockerでいいんでないの
  • 固めるつもりならLockfile入れといてね
    • Nodeなら package.json だけでなく、 package-lock.jsonも
  • 運用を考えて揃えるなら、仮想化の方がベター
  • バージョンを変えると失敗する例
    • Android 11(AOSP全体)のビルド
      • Ubuntu 16.04, 18.04 はサポートされている
      • Ubuntu 20.04 はサポートされていない