Issie(統合エディターを備えたインタラクティブスキーマシミュレーター)は、デジタル回路の設計とシミュレーションのアプリケーションです。それは、シンプルで楽しい方法でデジタルエレクトロニクスの概念を把握したい学生と愛好家を対象としています。 Issieは、初心者に優しいものであり、明確なエラーメッセージと視覚的な手がかりを介してユーザーを目標に導くように設計されています。 Issieは開発され、Imperial College Londonでの教育に積極的に使用されています。
プロジェクトに関する詳細な情報については、読んでください。このドキュメントは、使用されるテクノロジースタックの類似性を考慮して、部分的に優れたVisual2ドキュメントに基づいています。
Issie Webサイトについては、こちらをご覧ください。
アプリケーションは主にF#で記述されているため、Fableコンパイラを介してJavaScriptに透過されます。その後、Electronは、開発されたWebアプリをクロスプラットフォームアプリケーションに変換するために使用されます。 Electronは、バニラブラウザーのWebアプリで使用できないプラットフォームレベルAPI(ファイルシステムへのアクセスなど)へのアクセスを提供します。
WebPack 5は、JavaScriptの連結と自動構築プロセスを担当するモジュールバンドラーです。電子Webpackビルドは、スクリプトディレクトリの下で既存のスクリプトを使用して自動化されます。
図面機能は、F#に実装され、デジタルコンポーネントに特化したカスタム回路図エディターライブラリによって(現在)提供されています。
アプリのメインプログラミング言語としてのF#の選択は、いくつかの要因によって決定されています。
アプリを実行するだけの場合は、リリースページに移動して、プラットフォーム用の最新の事前に作成されたバイナリ(WindowsまたはMacOS)をダウンロードして実行します。 Issieには、合計200mのディスクスペースが必要です。
Issie.exeアプリケーションをダブルクリックします。Issieはシステムを変更せずにインストールおよび実行します - そのコードはすべてダウンロードするディレクトリ内にあります。これを削除して、後のバージョンのIssieに置き換えることができます。各デザインシートは、プロジェクトディレクトリの下に同様の名前のファイルに保存されます。そこにあるサブディレクトリbackupは、デザインの回復のための多数のバックアップスナップショットが含まれています。これらはIssie操作には必要ありませんので、必要に応じて、それらを削除したり、 backupディレクトリ全体を削除したりできます。
Issie Binariesは、ネットワーク化されたファイルの場所(多くのクラスターマシンで見つかった)から(場合によっては)実行されません。この問題がある場合は、コマンドウィンドウにIssieバイナリを含むトップレベルのディレクトリに移動し、 issie.exe --no-sandboxを入力します。詳細については、#125を参照してください。
Issieを開いて準備ができたら、スタートアップウィンドウからデモプロジェクトの1つを自由に開くことができます。これらは、完全なIssieプロジェクトがどのように見えるかを示すためにあり、ゼロから設計して構築することなく、それを楽しむことができます。デモプロジェクトを再開するたびに、初期状態にリセットされます。
開発者として始めたい場合は、次の手順に従ってください。
ダウンロードとインストール(これらのツールが既にインストールされている場合は、バージョンの制約を確認するだけです)。
npmパッケージマネージャーが含まれているため、これを個別にインストールする必要はありません。Issie Repoをダウンロードして解凍するか、局所的にクローンするか、githubでフォークしてから局所的にクローンします。
.NET 8.x SDK、ノードV20.xを確認してください:バイナリを作成する以上のことをしたい場合は、VS 2022(または最新のコード +イオニド、またはライダー)をインストールしてください。
node -vにノードバージョンが表示されます。 dotnet --versionにdotnetバージョンを表示します。リポジトリマスターブランチルートディレクトリ(このREADMEを含む)から、コマンドラインインタープリターでナビゲートするか、ディレクトリコンテキストメニューから開始します。
windowsまたはbuild.shの下でbuild.cmd実行します。linuxまたはmacos( chmod 755 build.shは、スクリプトの実行許可を与えます)。これにより、すべての依存関係をダウンロードしてインストールし、HMRを使用してDEVモードでアプリケーションを起動します。
File -> reload pagenpm run devを実行します。 DEBUGモードのnpm run debugを実行します(これはDEVよりもはるかに遅くなります)。npm run dist用の分散型バイナリを生成するには。packet.jsonを変更したため、ロックファイルpaket-lock.jsonする必要がある場合は、 npm installを使用します。build killzombies 、異常な終了後にこのビルドチェーンを使用して時々発生する孤立型ノードとドットネットプロセスを終了します(おそらく必要ありませんか?)npm run dist .dist MacOSの場合、ネイティブバイナリをコンパイルするにはPython 3をインストールする必要があります。これを行うために自動プロムが施行されますが、 npm run dist再度実行する必要があります。NB-上記のコンピレーションと並行して、Issieコードは、たとえばVisual Studioから構築することにより、DotNetの下でエラーなしで常にコンパイルされます(ただし)。コンパイルは同一である必要がありますが、なぜエラーがあるのかわからない場合は、VSまたはVSCを使用して.NETの下で現在のコードを構築し、エラーメッセージを見つけやすくなります。同様に、VSまたはVSCは、コンピレーションでテストするコードをリファクタリングするために自信を持って使用できます。コードが電子APIとノードAPIに依存するため、VSまたはVSCの下に構築できません。
package-lock.jsonには正確なパッケージバージョンが含まれており、リポジトリからダウンロードされます。通常、これを変更する必要はありません。上記の標準ビルドでは、パッケージをチェックおよび監査するが、ロックファイルを変更しないnpm ciを実行します。package.json1 ) npm installを使用してロックファイルを再現します。これはリポジトリにプッシュできます。npm upgrade nameまたはnpm [-D] install nameを使用して、単一のパッケージpackage.json便利に変更または追加できます。npm ls nameを使用して、必要なパッケージが使用するパッケージのどれを見つけてください(通常、それらをアップグレードまたは交換すると問題が削除されます)。 クリーンビルドはMacOSでも同様に機能しますが、以前に競合するパッケージをインストールした場合、事態は問題になる可能性が高くなります。
dotnetのレガシーバージョン - 必要に応じてここに削除することができます:
curl -O https://raw.githubusercontent.com/dotnet/sdk/main/scripts/obtain/uninstall/dotnet-uninstall-pkgs.sh
chmod u+x dotnet-uninstall-pkgs.sh
sudo ./dotnet-uninstall-pkgs.sh開発ファイルのルートアクセス許可。 devがスムーズに動作するには、すべての構成ファイルを独自のユーザー名の下にインストールする必要があるため、R/Wアクセスがあります。これは、 sudoを使用してインストールソフトウェアをルート化したことに気付いた場合、または過去にこれを行ったことがある場合に壊れます。その場合、 sudoを使用して管理特権を使用して開発(または生成されたアプリ)を実行することにより、一時的に問題を獲得できます。これは間違ったことです。代わりに使用する必要があります
chown -R `whoami` dir 。通常、開発ディレクトリ.および/usr/local 。dotnetが誤ってインストールされている場合、最新のdotnetのアンインストールと再インストールが役立ちます。
Apple Silicon Macユーザーの場合、最良の結果を得るには、ARM64バージョンの.NETを使用する必要があります。インストーラーを使用して、公式のMicrosoft Webサイトから入手できます。
開発チェーンは複雑ですが、現在はすべてのプラットフォームで非常にスムーズで同一になりました。これらの各手順は、必要に応じて実行できます。
Dotnet SDKとNodeがインストールされる必要があります。 dotnet sdkはf#を提供します。dotnet tool restore 、 Fable Compiler、 Fake Build Automation、 paket DotNetパッケージマネージャーなどの開発ツールが得られます。 (ノードパッケージ管理は、ノードが付属するnpm経由です)。dotnet paket install必要なすべてのdotnetsideパッケージをインストールしますnpm ciダウンロードと監査すべてのNPMパッケージの正しいバージョン。 npm install 、これらが変更された場合にバージョンをやり直し、更新されたロックファイルを生成します。npm run dev 、 npm run dist 、 npm run debug : package.jsonで定義されたスクリプト(HMRを使用)またはFableでの制作コンピレーション、Webpack 5を使用したパッキング。build.cmd and build.shスクリプトパッケージ上記の手順は、通常必要ではないディレクトリのクリーニングを追加します - 問題がある場合は、順番に個別に実行できます。dotnet-tools.jsonを編集します。paket.dependencies最上位レベルで変更し、 paket.referencesに関連する.fsprojファイルのディレクトリに参照します。現在、dotnetパッケージはバージョンに固定されていないため、最新の互換性のあるバージョンが常に使用されています。これはおそらく間違っていますが、うまく機能しているようです。.dファイルからF#インターフェイスを生成する素晴らしい自動コンバーターTS2Fableがあります。これはうまく機能しますが、複雑なものには手動で調整が必要です。発行された電子API .dファイルからこのように生成されたISSIEの電子APIインターフェイスを参照してください - その場合、電子APIが非常に複雑であるため、手動調整は非常に不快でした。電子バンドルクロム(ビュー)とnode.js(エンジン)。したがって、すべてのnode.jsプロジェクトと同様に、 package.jsonファイルは(ノード)モジュールの依存関係を指定します。
さらに、セクション"scripts" :
"scripts": {
"clean-dev-mac": "sudo killall -9 node && sudo killall -9 dotnet && sudo killall -9 issie",
"clean-dev-win": "taskkill /f /im node.exe && taskkill /f /im dotnet.exe && taskkill /f /im issie.exe",
"compile": "dotnet fable src/Main -s && dotnet fable src/Renderer -s --define PRODUCTION",
"debug": "dotnet fable watch src/Main -s --run npm run debugrenderer",
"debugrenderer": "dotnet fable watch src/Renderer -s --define ASSERTS --run npm run start",
"dev": "dotnet fable watch src/Main -s --run npm run devrenderer",
"devrenderer": "dotnet fable watch src/Renderer -s --run npm run start",
"start": "cross-env NODE_ENV=development node scripts/start.js",
"build": "cross-env NODE_ENV=production node scripts/build.js",
"pack": "npm run compile && npm run build && electron-builder --dir",
"dist": "npm run compile && npm run build && electron-builder",
"buildonly": "electron-builder",
"compile-sass": "cd src/renderer/scss && node-sass main.scss main.css",
"testcompiler": "cd src/Renderer/VerilogComponent/test && dotnet fable --noCache && node testParser.fs.js"
}
インプロジェクトのショートカットコマンドを<key> : <value行のセットとして定義するため、 npm run <stript_key>使用すると、 <script_value>を呼び出すことに相当します。たとえば、プロジェクトのルートでは、ターミナルnpm run devで実行されることは、コマンドラインと同等です。
dotnet fable watch src/Main -s --run npm run devrenderer
これにより、Fable 4を実行してメインプロセスを透過させます( --run別のコマンドを実行するFableのオプションです)Script devrendererを実行してJavaScriptに透過し、レンダラープロセスでF#ファイルを視聴します。レンダラーのトランスピレーションが終了した後、start.jsスクリプトが実行されます。これにより、 webpackを呼び出してJavaScriptコードを電子下に詰め込んでLauchで、JavaScriptコードの変更を監視し、これらを実行中のアプリケーションに搭載しています
この結果、いつでも編集されたF#レンダラープロジェクトファイルの原因を(ほぼ)即時保存する:
ビルドシステムは、 Fakeファイルbuild.fsxに依存します。 Fakeは、ビルドタスクの自動化に特化したF#で書かれたDSLです。 build.fsxにはビルドタスクを表すターゲットがあり、通常はdotnet fake直接使用する代わりに、 build.cmdまたはbuild.shを介して実行されます。
build <target> ==> dotnet fake build -t <target> ソースコードは、完全な電子アプリケーションを作成するために、JavaScriptに個別に透過した2つの異なるセクションで構成されています。
したがって、電子は、ブラウザ(HTML + CSS + JavaScript)用に記述されたコードを、2つのプロセス間の通信を介してデスクトップファイルシステムアクセスの追加機能を備えたデスクトップアプリとして実行できるようにします。
両方のプロセスは、ノードでJavaScriptを実行します。
src/Main/Main.fsソースは、電子起動を構成し、ボイラープレートです。ルートプロジェクトディレクトリに透過しているため、電子によって自動的にピックアップできます。
残りのアプリコード(in)
f#プロジェクトソースをrenderer.jsに変えるコードは、複数のJavaScriptファイルを単一のrenderer.jsに結合するノードWebpackバンドラーが続くFableコンパイラです。
コンパイルプロセスは、 .fsprojファイル(f#sourceを定義)およびwebpack.additions.main.js 、 webpack.additions.renderer.jsによって制御されます。これは、変更する必要のないボイラープレートです。通常、F#プロジェクトファイルを変更する必要があるすべてです。
リポジトリのルートにスクリプトがあり、 build_docs.shがあり、FSDOCSを使用してプロジェクトのドキュメントを作成します。ドキュメントを生成する前に、プロジェクトをコンパイル対応にする必要があります。
/docsの下のマークダウンファイルは、ドキュメントサイトの静的ページに変換されます。コード内のXMLコメントは、コードベース内のすべての関数のドキュメントコメントに変換されます。
更新を追加するには、 /docs/updatesフォルダーに移動し、次のヘッダーで新しいマークダウンファイルを作成します。
---
layout : post
title : [title here]
date : [ ISO 8601 UTC datetime, etc 2021-07-04 15:52:01 +0100]
category : Updates
index : [index that decides the order of the update. later updates have greater indexes]
---
# your markdown content below例については、 /docs/updatesフォルダーの他のドキュメントを参照してください。
すべてのXMLコメント( ///から始まる)モジュールおよび関数宣言は、ドキュメントWebサイトのAPIリファレンスセクションに基づいてドキュメントに変わります。
コードでドキュメントコメントを作成するときは、XMLルールに従ってください。つまり、タグ以外の三角形ブラケットの使用はありません。二重引用符も使用しないでください!
build_docs.shまた、 dotnet fsdocs watchに電話して、http:// localhost:8901/でドキュメントをホストするローカルサーバーを起動します。コードの生成されたドキュメントは、「APIリファレンス」セクションの下にあります。
ドキュメントを構築し、再度サーバーにアクセスしたい場合は、ターミナルでdotnet fsdocs watchを実行できます。
サイドノート:通常の
dotnet fsdocs buildではなくスクリプトが使用されます。これは、コンパイラが匿名のレコードを使用して関数用に無効なXMLコードを作成し、名前の「<>」を含む属性を割り当てる文書化されていないバグのために使用されます。これにより、世代が失敗します。<exclude/>を使用しても問題は修正されないため、回避策は、Regexを使用してドキュメントを作成する前にXMLドキュメントからこれらの無効な属性を削除するスクリプトを呼び出すことです。
ここで同様のエラーをスローするGitHubの同様の問題を参照してください。
srcフォルダー| サブフォルダーまたはファイル | 説明 |
|---|---|
Main/main.fs | すべてを設定する主要な電子プロセスのコード - 通常変更されていません |
Renderer/Common/* | いくつかの一般的なタイプとユーティリティ、およびライブラリAPIおよびカスタムライブラリへのインターフェイスを提供します |
Renderer/Interface/* | 低レベルのインターフェイス関数とすべての低レベルのファイル管理が含まれています |
Renderer/DrawBlock/* | F#にすべてのSVGベースの回路図エディターコードが含まれています |
Renderer/Simulator/* | 回路図シートを分析およびシミュレートするロジックが含まれています |
Renderer/UI/* | UIロジックが含まれています |
./renderer.fs | レンダラーコードを駆動するトップレベルファイル:ElmishMVUループと電子メニューコードが含まれています |
Testsフォルダー現在、テストは非常に古く、機能しません。これらはF#expectoテストライブラリに基づいており、原則として、widthinferrerおよびシミュレーターコード(dotnetで実行される)をここでテストできます。
Staticフォルダーアプリケーションで使用される静的ファイルが含まれています。
DocsフォルダープロジェクトドキュメントWebサイトhttps://tomcl.github.io/issie/を制御するソース情報が含まれています。
ISSIEを使用すると、ユーザーはこれらのプロジェクト内でプロジェクトとファイルを作成できます。 Issieプロジェクトは、 <project-name>という名前の名前のフォルダーであり、 <project_name>.dprj (dprjは図プロジェクトの略)という名前の空のファイルが含まれています。プロジェクトフォルダーは、それぞれ<component_name>.dgmという名前のデザインファイルのゼロ以外の数のデザインファイル(DGMは図の略)です。各設計ファイルは、階層的なハードウェアデザインの1つのデザインシートを表し、シートにはコンポーネントとして他のシートを含めることができます。
プロジェクトを開くと、Issieは最初に指定されたリポジトリを.dgmファイルを検索し、コンテンツを解析してロードし、ユーザーがISSIEでそれらを開くか、他のデザインのコンポーネントとして使用できるようにします。
ビルド環境(プロジェクトコードを変更せずに)を再インストールするには、rearun build.cmd (windows)またはbuild.sh (linuxおよびmacos)を再インストールします。
npm run distシステムの正しいバイナリを生成します/dist