Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
F#で作るカメラアプリケーション
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Kouji Matsui
PRO
October 29, 2022
Programming
470
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
F#で作るカメラアプリケーション
Kouji Matsui
PRO
October 29, 2022
More Decks by Kouji Matsui
See All by Kouji Matsui
muon first impression
kekyo
PRO
0
30
nuget-server - あなたが必要だったNuGetサーバー
kekyo
PRO
0
1.3k
maplibre-gl-layers - 地図に移動体たくさん表示したい
kekyo
PRO
0
1.4k
chibiccを CILに移植した結果 (完全版)
kekyo
PRO
0
280
chibiccをCILに移植した結果 (NGK2025S版)
kekyo
PRO
0
400
F# Epoxy
kekyo
PRO
1
610
F# Epoxy (English translated)
kekyo
PRO
0
860
ビジュアルでわかる最初のGit (第一部)
kekyo
PRO
1
480
ビジュアルでわかる最初のGit (第二部)
kekyo
PRO
1
1.1k
Other Decks in Programming
See All in Programming
どこまでゆるくて許されるのか
tk3fftk
0
520
Go言語とトイモデルで学ぶTransformerの気持ち / fukuokago23-transformer
monochromegane
0
140
Hatena Engineer Seminar #37「言語モデルの活用に関する研究」
slashnephy
0
540
ITヒヤリハットを整理してみた ~ライフサイクルと原因から考える再発防止策~
koukimiura
1
110
エンジニア向け会社紹介/Findy Company Profile
findyinc
6
360k
初めてのKubernetes 本番運用でハマった話
oku053
0
130
AI時代のPHPer生存戦略 ~「言語、もうなんでもよくない?」に本気で向き合う~
vivion
0
140
Embedded SREと共に達成した会員管理システムのAWS移行 - SRE NEXT 2026 ランチスポンサーセッション
niftycorp
PRO
1
2.9k
「正の参照」と 「負の導出」で組む ハーネスエンジニアリング
cottpan
1
150
生成AI導入の「期待外れ」を乗り越える ー 開発フロー改革が目指す、真の組織変革
starfish719
0
1.7k
使用 Meilisearch 建立新聞搜尋工具
johnroyer
0
160
Claude Team Plan導入・ガイド
tk3fftk
0
220
Featured
See All Featured
Prompt Engineering for Job Search
mfonobong
0
380
Claude Code のすすめ
schroneko
67
230k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
370
Leo the Paperboy
mayatellez
8
1.9k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
1k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
190
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.4k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
550
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.5k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
730
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
Transcript
(c) 2022 Kouji Matsui F#で作る カメラアプリケーション 2022.11.29 FUN FAN F#
7 IN TOKYO - KOUJI MATSUI @KOZY_KEKYO
(c) 2022 Kouji Matsui Kouji Matsui – kozy, kekyo •
NAGOYA city, AICHI pref., JP • Self employed • Center CLR organizer. https://centerclr.connpass.com/ • .NET/F#/IL/metaprogramming or like… • Bicycle rider
(c) 2022 Kouji Matsui (c) 2022 Kouji Matsui Agenda 最近のアウトプット
F#でGUIアプリケーションを作る ライブデモ
(c) 2022 Kouji Matsui 最近のアウトプット ここ1年程で新規に作ったり継続してメンテナンスしているOSS プロジェクトを、10個ほど紹介します。 ほぼ全部のプロジェクトを、何かしらのお仕事で使っています ◦ 非公開案件ですが、OSSで公開したプロジェクトを仕事で使用OKして
貰っているので感謝。 ここに挙げてないプロジェクトもまだいくつか…
(c) 2022 Kouji Matsui 最近のアウトプット RelaxVersioner ◦ パッケージ導入だけで、完全自動で、Gitのタグやブランチ情報をコー ドに埋め込みます。 ◦
Gitだけでバージョン管理出来ます。 ◦ C#, F#, VB.NET, C++/CLI ◦ もちろんCI対応。SourceLink併用可能。 ◦ パッケージへの適用も自動。 ◦ もう結構長くやってて、ずっと使っています。 ◦ https://github.com/kekyo/CenterCLR.RelaxVersioner
(c) 2022 Kouji Matsui 最近のアウトプット DupeNukem ◦ ガワネイティブで使うWebViewのJavaScriptと、非同期双方向RPCが手軽 に出来る、WebViewの実装に依存しないライブラリ。 ◦
WebViewに要求されるのは、文字列の送受信のみ。 ◦ C#でもJavaScriptでも、async-awaitで同じようにコードが書けます。通 信アーキテクチャについて悩まなくても良くなった。 ◦ Edge WebView2 ◦ CefSharp ◦ Xamarin Forms (Xam.Plugin.Webview) ◦ etc… ◦ https://github.com/kekyo/DupeNukem
(c) 2022 Kouji Matsui 最近のアウトプット Marionetta ◦ DupeNukemを使って、アウトプロセスサンドボックスでライブラリを 駆動するための、IPCライブラリ。 ◦
直接メインプロジェクトに組み入れることが出来ない、以下のような コードを、出来るだけ簡単に扱えるようにします。 ◦ どうしようもない負債コード ◦ 古いアーキテクチャのライブラリ ◦ 32ビットで縛られているライブラリ ◦ .NET Framework固定のライブラリ ◦ https://github.com/kekyo/Marionetta
(c) 2022 Kouji Matsui 最近のアウトプット ILAsm.Managed ◦ 公式のILAsmがネイティブコードで扱いにくいので、monoのILAsmをマ ルチプラットフォームで使えるように移植したもの。 ◦
公式ILAsmは、ディストリビューション毎にパッケージが分割されていてちょっと… そこに NuGet CLIの制約が組み合わさって、使い物にならない… ◦ マネージコードなので、Windows, LinuxどちらでもOK。 ◦ つまり、CIフリー。 ◦ https://github.com/kekyo/ILAsm.Managed
(c) 2022 Kouji Matsui 最近のアウトプット ILCompose ◦ CILアセンブラ言語で書かれたコードを、直接C#などのアセンブリに挿 入します。 ◦
C#で言うところの、partial classによる合成をCILで出来るようにしたも の。イメージ的には、ソース分割されるインラインアセンブラ。 ◦ かつてのILSupportが扱いにくいので、パッケージ導入だけでマルチプ ラットフォームで使えるようにしました。 ◦ CIフリー。 ◦ https://github.com/kekyo/ILCompose
(c) 2022 Kouji Matsui 最近のアウトプット ILRepack.FullAuto ◦ ILRepack (Successor of
ILMerge) を、完全自動で使えるようにしたパッ ケージ。 ◦ 多種多様な亜種がありますが、いろいろ問題が発生したりするので、 とにかく現在の環境で完全に使えるように。 ◦ Linuxでも行けるので、CIで使えます(要: monoランタイム) ◦ https://github.com/kekyo/ILRepack.FullAuto
(c) 2022 Kouji Matsui 最近のアウトプット SkiaImageView ◦ SkiaSharpの各種オブジェクトを、バインディングだけで表示できるコ ントロールです。 ◦
WPFのImageコントロールに似せてあります。レイアウトの制御方法も ほぼ同じです。 ◦ Source=“{Binding Image}” ◦ SKBitmap, SKImage, SKPicture, SKDrawable, SKSurface ◦ 文字列またはUriで非同期ダウンロード表示 ◦ WPF, Xamarin Forms ◦ https://github.com/kekyo/SkiaImageView
(c) 2022 Kouji Matsui 最近のアウトプット FlashCap ◦ マルチプラットフォーム対応のビデオキャプチャ(フレームグラバ) ◦ Windows
(DirectShow, VFW), Linux (V4L2) ◦ 完全に自前でP/Invokeするので、依存ライブラリなし。 ◦ 多くのデバイスと環境でテスト。 ◦ 簡潔かつ拡張可能なインターフェイス。 ◦ https://github.com/kekyo/FlashCap
(c) 2022 Kouji Matsui 最近のアウトプット Epoxy ◦ 様々なプラットフォームで使える、直交的なMVVMライブラリです。 ◦ WPF,
Avalonia, OpenSilver, UWP, WinUI 3, Xamarin Forms, MAUI ◦ F#も行けます!(WPF, Avalonia) ◦ どの環境でも、一様に同じAPIインターフェイス ◦ ViewModelのイベント発火は、ビルド時に自動的にCILコード挿入を行 うので、完全スタティック動作。 ◦ 個々の機能は完全に独立していて、自由に組み合わせることが出来ま す。 ◦ そのため、他のライブラリとの併用も問題ありません。 ◦ https://github.com/kekyo/Epoxy
(c) 2022 Kouji Matsui (c) 2022 Kouji Matsui Agenda 最近のアウトプット
F#でGUIアプリケーションを作る ライブデモ
(c) 2022 Kouji Matsui F#でGUIアプリケーションを作る カメラアプリケーションを作ります: ◦ USBカメラを接続して、映像がプレビュー出来るところまでが目標 ◦ F#でWPFのアプリケーション
◦ Epoxy, FlashCap, SkiaImageViewを使います ◦ コードビハインドは一切使いません ◦ そもそも、F#とWPFの組み合わせでは出来ません。 ◦ Epoxyがあれば簡単です。
(c) 2022 Kouji Matsui (c) 2022 Kouji Matsui Agenda 最近のアウトプット
F#でGUIアプリケーションを作る ライブデモ
(c) 2022 Kouji Matsui ライブデモ YouTube: https://youtu.be/bhXDUpG8xSg
(c) 2022 Kouji Matsui 以下の展望が持てるかも? キーか何かでシャッターを切って、画像を保存するのは簡単 に出来るはず? ◦ XAMLにボタンを配置して、Commandをプロパティで公開しておけば、 ボタンクリックが検知できる。
◦ 直近のSKBitmapを保存しておく。 ◦ SKBitmap.Encode()で任意の画像フォーマットでファイルに保存。 Zxingにかければ、バーコードをリアルタイムで認識出来そ う? ◦ ZXing.Net.Bindings.SkiaSharpのSKBitmapLuminanceSourceを 使えば、SKBitmapから直接バーコード検出が出来ます。
(c) 2022 Kouji Matsui 以下の展望が持てるかも? 少しの変更でAvaloniaでも行けそう? ◦ SKBitmapの代わりにAvaloniaのBitmapを使えば簡単に行けます。 C# &
XAMLの様々な知見が応用できそう? ◦ 課題も、対応する情報もウェブ上にいっぱいあります。 ◦ F#固有の問題は (Epoxyを使う限りは) そんなに多くないです。
(c) 2022 Kouji Matsui 質疑応答 デモ実装例: https://github.com/kekyo/fffsharp-demo-cameraapp