問題タブ [plugins]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - GPL プログラム専用のプラグイン: インタープリター言語はどうですか?
GPL ライセンスのアプリケーションを Python で開発していますが、GPL が私のプログラムでプロプライエタリ プラグインの使用を許可しているかどうかを知る必要があります。この問題についてFSF は次のように述べています。
GPL の下でリリースされたプログラムがプラグインを使用している場合、プラグインのライセンス要件は何ですか?
プログラムがプラグインを呼び出す方法によって異なります。プログラムが fork と exec を使用してプラグインを呼び出す場合、プラグインは別個のプログラムであるため、メイン プログラムのライセンスではそれらの要件はありません。
プログラムがプラグインを動的にリンクし、それらが相互に関数呼び出しを行い、データ構造を共有する場合、それらは単一のプログラムを形成すると考えられます。これは、メイン プログラムとプラグインの両方の拡張として扱われる必要があります。つまり、プラグインは GPL または GPL と互換性のあるフリー ソフトウェア ライセンスの下でリリースする必要があり、それらのプラグインを配布するときは GPL の条項に従う必要があります。
プログラムがプラグインを動的にリンクしているが、それらの間の通信がプラグインの「メイン」関数をいくつかのオプションで呼び出し、それが戻るのを待つことに限定されている場合、それは境界的なケースです。
fork/exec と動的リンクの違いは、人為的であることに加えて、インタープリター型言語には引き継がれません。import
またはを介してロードされる Python/Perl/Ruby プラグインはexecfile
どうですか?
(編集: fork/exec と動的リンクの違いの理由は理解できますが、GPL に準拠したいが「精神」に反する人のように思えます。ほとんど何でもするためのプロセス間通信)。
最善の解決策は、ライセンスに例外を追加して、独自のプラグインの使用を明示的に許可することですが、 GPL であるQt / PyQtを使用しているため、そうすることができません。
ruby-on-rails - 奇妙なレール認証の問題
開発中のアプリにRESTful認証Railsプラグインを使用しています。私は私が底に達することができない奇妙な問題を抱えています。基本的に、一定期間非アクティブになってから初めてアプリにログインすると(アプリは本番環境にデプロイされますが、私だけが使用します)、404ページに移動しますが、ホームページに戻って再度ログインすると、すべてが計画どおりに機能します。何か案は?
internet-explorer - IE 用プラグインの書き方
IE Developer Toolbar は、ブラウザーからドッキングまたは分離できるプラグインです。Firefox よりも IE でこれを行う方がはるかに難しいことを理解しています。
- IE プラグインはどのように作成しますか?
- このタスクに使用できる言語は?
- Hello World プラグインを作成するにはどうすればよいですか?
javascript - Firefox ブックマークの http-get 表示からの読み取り
HTTP get からデータを読み取り、結果を解析し、ブックマークのようなドロップダウン メニューにリンクとして表示する Firefox プラグインを取得しようとしています。
私の質問は次のとおりです。これを行うサンプルコードはありますか?
browser - Google Chrome プラグインを構築するためのヒント / リソース
Google Chrome を 30 分ほど試してみたところ、現時点では最低限の機能しかないように見えますが、気に入っています。なくてはならないものをいくつか追加する明白な方法は、プラグインを使用することです。Chrome 用のプラグイン/アドオンの構築を開始する方法に関するリソースへのリンクを持っている人はいますか? ありがとう。
firefox - プロキシ パスワードを自動的に入力する Firefox アドオンを作成するにはどうすればよいですか?
パスワード認証 (NTLM だと思います) なしでインターネット アクセスを防止する HTTP プロキシを設置した会社で誰かが働いていたとします。また、このパスワードが毎日ローテーションされると仮定すると、セキュリティはほとんど追加されませんが、ほとんどの場合、従業員を悩ませます。これらのローテーション パスワードを自動的に入力する Firefox アドオンを作成するにはどうすればよいでしょうか?
明確にするために: このアドオンはパスワードを送信するだけではありません。アドオンは、パスワードのローテーション スキームに関するある程度の知識を使用して、プログラムでそれを生成します。
c++ - C ++プラグインシステムにとって何が安全ですか?
C ++のプラグインシステムは、ABIが適切に定義されておらず、各コンパイラ(またはそのバージョン)が独自のルールに従っているため、困難です。ただし、Windows上のCOMは、さまざまなコンパイラを使用するプログラマーが単純なインターフェイスを使用してホストアプリケーションのプラグインを作成できる最小限のプラグインシステムを作成できることを示しています。
実用的にして、この点ではあまり役に立たないC++標準を少し脇に置いておきましょう。C ++プラグインをサポートするWindowsおよびMac(およびオプションでLinux)用のアプリを作成したい場合、およびプラグインの作成者に適度に多くのコンパイラー(たとえば、2年未満のバージョンのVisual C ++)を提供したい場合、GCCまたはIntelのC ++コンパイラ)、C ++のどの機能を信頼できますか?
もちろん、プラグインは特定のプラットフォーム用に作成されると思います。
私の頭から離れて、ここに私が考えることができるいくつかのC ++機能があります、そして私が思うのは答えです:
- vtableレイアウト、抽象クラスを介してオブジェクトを使用するには?(はい)
- 組み込み型、ポインタ?(はい)
- 構造体、組合?(はい)
- 例外?(いいえ)
- extern "C"関数?(はい)
- 組み込みパラメーター型を持つstdcall非外部「C」関数?(はい)
- 非stdcall非extern「C」関数とユーザー定義のパラメータータイプ?(いいえ)
その分野での経験を共有していただければ幸いです。C ++プラグインシステムを備えた適度に成功したアプリを知っているなら、それもクールです。
カール
.net - .NET アプリのプラグイン設計
アプリケーションの一部を C# (現在は従来の VB6 コード) で書き直すことを検討しています。私が始めているモジュールは、さまざまなシステムからデータベースにデータをインポートする役割を担っています。年に 5 ~ 6 回、新しいクライアントから、使用しているシステムの新しいインポートを作成するよう依頼されます。現在、これには、アプリケーションに追加する新しいインポート オプションごとに、ソフトウェアの新しいバージョンをリリースする必要があります。
書き換えの目標の 1 つは、アプリケーションがプラグインをサポートするようにすることです。すべての新しいインポートは、ホスト アプリケーションが認識し、エンド ユーザーが操作できる個別のアセンブリになる可能性があります。これにより、新しいアセンブリをディレクトリにドロップするだけで、メイン (ホスト) アプリケーションによって認識されて使用されるようになるため、作業がある程度簡素化されることが期待されます。
私が苦労している項目の 1 つは、現在サポートされているインポート オプションの違いに関連しています。場合によっては、実際にユーザーにディレクトリを指定させ、ディレクトリ内のすべてのファイルをシステムに読み込ませます。それ以外の場合は、単一のファイルを指定してその内容をインポートできます。さらに、一部のインポートには、ユーザーが適用する日付範囲制限がありますが、他のインポートには適用されません。
私の質問は、ホスト アプリケーションがプラグインとオプションを簡単に認識できるようにする共通のインターフェイスを実装すると同時に、ビルドおよびサポートするインポート間である程度の柔軟性を可能にする方法でアプリケーションを設計するにはどうすればよいかということです。それぞれがユーザーに公開することは?
vim - ロードされたプラグインをVimにリストするにはどうすればよいですか?
Vimに「ロードされたプラグイン」をリストアップする方法を知っている人はいますか?私は自分でこの種のものを追跡する必要があることを知っていますが、現在のステータスを確認できることは常に素晴らしいことです。
c# - プラグインフレームワークでのメッセージパッシング
まず、私のブログでこの問題の背景を少し紹介します。
- http://www.codebork.com/coding/2008/06/25/message-passing-a-plug-framework.html
- http://www.codebork.com/coding/2008/07/31/message-passing-2.html
説明があまり明確ではないことを認識しているので、ここでできる限りのことを要約しようと思います。アプリケーションは、個人的な財政プログラムです。フレームワーク自体の詳細については、この投稿の最後にあります。
フレームワークが処理できるプラグインにはさまざまな種類があります(アカウント、エクスポート、レポートなど)。ただし、問題を引き起こしているのはこのクラスであるため、特定のクラスのプラグイン、いわゆるデータプラグインに焦点を当てています。アカウント用、トランザクション用など、1つのクラスのデータプラグインがあります。
私は大規模なリファクタリングの途中で、データプラグイン用の次のアーキテクチャを残しました。
- データプラグインオブジェクト(初期化、インストール、およびプラグインメタデータの実装)[実装
IDataPlugin<FactoryType>
] - データオブジェクト(アカウントなど)[実装、例
IAccount
] - データオブジェクトのインスタンスを作成するファクトリ[実装、例
IAccountFactory
]
以前は、データオブジェクトとプラグインオブジェクトが1つに統合されていましたが、これは、アカウントに記録されたトランザクションごとに新しいトランザクションプラグインをインスタンス化する必要があり、多くの問題を引き起こしていました。残念ながら、そのリファクタリングは私のメッセージパッシングを壊しました。データオブジェクトはを実装INotifyPropertyChanged
しているので、新しい問題が発生しました。回避方法がわかりません。プラグインオブジェクトはメッセージブローカーにイベントを登録していますが、実際に発生するのはデータオブジェクトです。イベント。これは、サブスクライブプラグインが現在、作成された各アカウント、トランザクションなどにサブスクライブする必要があることを意味します。 これは明らかにスケーラブルではありません。
私が現時点で知る限り、私には2つの可能な解決策があります。
- データプラグインオブジェクトをデータオブジェクトとメッセージブローカーの仲介役にし、場合によっては変更通知をバッチ処理します。これがなくてもできるはずだと私が感じているメッセージングシステムに別の複雑さの層を追加するので、私はこれが好きではありません。
- 現在のイベントベースの実装をジャンクし、より簡単に管理できる他の何かを使用します(メモリ内のWCF ?!)。
だから私は本当に尋ねていると思います:
- この問題をどのように解決しますか?
- 私が見落としている可能性のある解決策は何だと思いますか?
- 私のアプローチは漠然と軌道に乗っている/賢明ですか?!:-)
ブログ投稿の日付からわかるように、この問題のいくつかの変種は、かなり長い間私に負担をかけてきました!そのため、すべての回答をいただければ幸いです。
フレームワーク自体の背景は次のとおりです。
私のプラグインフレームワークは、プラグインブローカー、設定マネージャー、メッセージブローカーの3つの主要コンポーネントで構成されています。プラグインブローカーは、プラグインの発見と作成という、プラグインの基本的な作業を行います。プリファレンスマネージャーは、フレームワークと個々のプラグインのユーザープリファレンスを管理します。たとえば、有効になっているプラグイン、データを保存する場所などです。通信はパブリッシュ/サブスクライブを介して行われ、メッセージブローカーが中央に配置され、すべてが収集されます。パブリッシュされたメッセージタイプとサブスクリプションの管理。パブリッシュ/サブスクライブは現在、.NETインターフェイスを介して実装されています。このインターフェイスは;
INotifyPropertyChanged
と呼ばれる1つのイベントを提供します。PropertyChanged
メッセージブローカーは、実装しているすべてのプラグインのリストを作成しますINotifyPropertyChanged
このイベントで他のプラグインをサブスクライブします。メッセージパッシングの目的は、アカウントプラグインとトランザクションプラグインがストレージプラグインにデータが変更されたことを通知して、データを保存できるようにすることです。