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
muon first impression
kekyo
PRO
0
6
nuget-server - あなたが必要だったNuGetサーバー
kekyo
PRO
0
1.2k
maplibre-gl-layers - 地図に移動体たくさん表示したい
kekyo
PRO
0
1.2k
chibiccを CILに移植した結果 (完全版)
kekyo
PRO
0
250
chibiccをCILに移植した結果 (NGK2025S版)
kekyo
PRO
0
390
F# Epoxy
kekyo
PRO
1
600
F# Epoxy (English translated)
kekyo
PRO
0
860
ビジュアルでわかる最初のGit (第一部)
kekyo
PRO
1
470
ビジュアルでわかる最初のGit (第二部)
kekyo
PRO
1
1.1k
Other Decks in Programming
See All in Programming
軽量Java基盤の設計 DIコンテナに頼らない、長期保守と1秒起動の実現 JJUG CCC 2026 Spring
macha64
0
600
AIで効率化できた業務・日常
ochtum
0
150
技術的負債解消で開発者の未来を開く- AIの力でコード刷新
kmd2kmd
0
120
Datadog × OpenTelemetry 入門と実践のあいだ
kn_to_maxpno
1
180
気づいたらRubyで100作品 ー クリエイティブコーディングが生活の一部になるまで / 100 Ruby Sketches Later: How Creative Coding Became Part of My Life
chobishiba
3
610
気圧・高度・GPSを記録&可視化するアプリ「Koudo」を作った話
hjmkth
1
320
Spec Driven Development | AI Summit Lisbon
danielsogl
PRO
0
210
JavaDoc 再入門
nagise
1
420
Javaの型とAI時代に型が大事な理由 / java types and type in AI era
kishida
2
150
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.8k
脅威をエンジニアリングの糧にして――現場編 / Turning Threats into Engineering Fuel — Field Edition
nrslib
0
300
作って学ぶ、 JSX (TSX) ランタイムの基本
syumai
7
1.7k
Featured
See All Featured
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
620
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.7k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.5k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
440
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.9k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
240
The Pragmatic Product Professional
lauravandoore
37
7.3k
Mind Mapping
helmedeiros
PRO
1
260
YesSQL, Process and Tooling at Scale
rocio
174
15k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
310
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