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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Kouji Matsui
PRO
October 29, 2022
Programming
460
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
nuget-server - あなたが必要だったNuGetサーバー
kekyo
PRO
0
1.1k
maplibre-gl-layers - 地図に移動体たくさん表示したい
kekyo
PRO
0
1.1k
chibiccを CILに移植した結果 (完全版)
kekyo
PRO
0
240
chibiccをCILに移植した結果 (NGK2025S版)
kekyo
PRO
0
390
F# Epoxy
kekyo
PRO
1
590
F# Epoxy (English translated)
kekyo
PRO
0
850
ビジュアルでわかる最初のGit (第一部)
kekyo
PRO
1
470
ビジュアルでわかる最初のGit (第二部)
kekyo
PRO
1
1k
A Proposal for an Interactive Shell Based on a Typed Lambda Calculus
kekyo
PRO
0
100
Other Decks in Programming
See All in Programming
Agentic UI
manfredsteyer
PRO
0
140
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
150
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
0
210
dRuby over BLE
makicamel
2
330
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
710
依存関係から依存物へ―Dependencyという言葉の歴史をひも解く
j_lee
0
110
技術記事、 専門家としてのプログラマ、 言語化
mizchi
4
2.4k
エージェンティックRAGにAWSで入門しよう!
har1101
8
1.4k
DynamoDBには集計系のクエリがないけどなんとかしたい
musan
1
130
Claspは野良GASの夢をみるか
takter00
0
180
メソッドのジェネリクスでGoの夢は広がるか? / Kyoto.go #65
utgwkk
3
680
Datadog × OpenTelemetry 入門と実践のあいだ
kn_to_maxpno
1
150
Featured
See All Featured
Mobile First: as difficult as doing things right
swwweet
225
10k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
160
Statistics for Hackers
jakevdp
799
230k
Docker and Python
trallard
47
3.9k
4 Signs Your Business is Dying
shpigford
187
22k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
1
340
Balancing Empowerment & Direction
lara
6
1.2k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
410
The World Runs on Bad Software
bkeepers
PRO
72
12k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
420
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