問題タブ [state-machine]
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.
java - libevent に相当する Java はありますか?
各リクエストを独自のスレッドで処理する高スループット サーバーを作成しました。受信するリクエストについては、1 つまたは複数のバックエンドに対して RPC を実行する必要がある場合があります。これらのバックエンド RPC は、個別のキューとスレッド プールによって処理されます。これにより、作成されるスレッドの数とバックエンドへの接続の最大数が制限されます (クライアントを再利用してオーバーヘッドを節約するためにキャッシュが行われます)。常に接続を作成します)。しかし、これをすべて行った後、イベントベースのアーキテクチャの方が効率的であると考え始めています。
Java の libevent に相当するものは見つかりませんでしたが、適切な場所を探していないのでしょうか? Apache の Mina-statemachine は、私が見つけた最も近いものでしたが、必要以上に冗長に見え、実際のリリースはありません。
助言がありますか?
state-machine - ワークフロー エンジンの使用例
SO の読者であるあなたが、ワークフロー エンジンを使用して解決した具体的な問題と、独自のライブラリ/フレームワークを作成しなかった場合に使用したライブラリ/フレームワークについて知りたいです。また、ワークフロー エンジンが最適な選択ではなかった場合と、ステート マシンを使用する TaskList/WorkList/Task-Management タイプのアプリケーションなど、より単純なものを選択した場合/どのように選択したかについても知りたいです。
質問:
- ワークフロー エンジンを使用してどのような問題を解決しましたか?
- どのライブラリ/フレームワークを使用しましたか?
- システムのような単純なステート マシン/タスク管理で十分だったのはいつですか?
- おまけ:タスク管理とワークフロー エンジンをどのように区別しましたか?
初体験募集中です。
私がチェックアウトしたリソースのいくつか:
c# - イベントを介して他のサブスクライバーに通知するために C# の静的クラスを使用する単純なステート マシン
システム状態が変化したときに他のコントロールやコードに通知するために、アプリケーション用の単純な静的クラスのステート マシンを作成しようとしています。そして、私はほとんどそれを持っていると思いますが、回避方法がわからないという小さな問題に遭遇しています。
コードは次のとおりです。
私が抱えている問題は、次の行にあります。
具体的には、「これ」という言葉は違法です。そして、その理由を理解しています。「this」は、インスタンス化されたオブジェクト (静的クラスではない) の自己を参照することになっています。
複数のコピーをインスタンス化できるクラスよりも、ステート マシン用の Static クラスを使用したいと考えています。(それほど悪いことではありませんが、静的クラスを持つことでコードがきれいになると思います。)
では、これをどのように機能させるべきですか?
アップデート:
フォローアップとして、問題は私が抱えていた技術的な失敗ではなく、私が取っていたアプローチに関するものだったので、Jon Skeet の答えを正しいものとして選択しました。ただし、以下の他の回答のほとんどすべてが、私が扱っていた技術的な不具合を修正します。
奇妙なことに、私が書いたアプリケーションを同僚とレビューしていたとき、彼女はプログラムがサーバー接続の状態と実行中の作業の状態の両方を追跡する必要があると指摘しました。(はい、バージニア州、これは 2 つのステート マシンが必要であることを意味します。したがって、上記のコードからすべての「静的」キーワードを削除し、通常のクラスにすることが賢明なアプローチでした。)
改めまして、皆様!
objective-c - Objective-Cで基本的な有限状態マシンを作成する方法
(iphone sdk)ObjectiveCでタイマーを制御するFSMを構築しようとしています。そうでなければ、if-thenステートメントのページを含む厄介なスパゲッティコードになってしまうので、それは必要なステップだと感じました。機能の追加/変更の複雑さ、読みやすさ、難しさから、このようなより正式なソリューションを試すことになりました。
アプリケーションのコンテキストでは、タイマーの状態によって、NSManagedObjects、CoreDataなどとの複雑な相互作用が決まります。FSMコードを明確に把握するために、今のところすべての機能を省略しています。
問題は、Obj-Cでこの種のコードの例を見つけることができず、使用していたC++サンプルコードからどのように翻訳したかについてあまり自信がないことです。(私はC ++をまったく知らないので、いくつかの推測が含まれます。)私はこのバージョンの状態パターン設計をこの記事(http://www.ai-junkie.com/architecture/state_driven/tut_state1)に基づいています。 html。私はゲームを作っているわけではありませんが、この記事では、私がやっていることに役立つ概念の概要を説明します。
コードを作成するために(以下に投稿)、obj-cプロトコルなどを含む多くの新しい概念を学ぶ必要がありました。状態のデザインパターンと同様に、これらは私にとって新しいものであるため、この実装に関するフィードバックを期待しています。これは、obj-cでプロトコルオブジェクトを効果的に操作する方法ですか?
プロトコルは次のとおりです。
次に、Timerオブジェクト(最も簡略化された形式)のヘッダーファイルを示します。
そして、タイマーオブジェクトの実装:
このクラスに欠けているものがあることを心配しないでください。まだ面白いことは何もしていません。私は現在、構文を正しくするのに苦労しています。現在、コンパイル(および動作)しますが、isKindOfClassメソッド呼び出しによりコンパイラ警告が発生します(メソッドがプロトコルに見つかりません)。とにかくisKindOfClassを使いたいかどうかはよくわかりません。各id<TimerState>
オブジェクトに名前の文字列を付けて、代わりにそれを使用することを考えていました。
別の注意点:これらのid<TimerState>
宣言はすべて、元々はTimerState*宣言でした。それらをプロパティとして保持することは理にかなっているように思われました。id<TimerState>
'sで意味があるかどうかわからない。
状態クラスの1つの例を次に示します。
繰り返しになりますが、これまでのところ、どのフェーズ(またはサブステート)にあるかをアナウンスする以外は何もしません。しかし、それは重要ではありません。
ここで学びたいのは、このアーキテクチャがobj-c言語で正しく構成されているかどうかです。私が遭遇している特定の問題の1つは、タイマーのinit関数でのidオブジェクトの作成です。ご覧のとおり、「プロトコルにリリースが見つかりません」という警告が表示されていたため、リリースをコメントアウトしました。どう対処したらいいのかわからなかった。
私が必要としないのは、このコードがやり過ぎであるか無意味な形式主義であるかなどについてのコメントです。それらの考えが真実であるとしても、これを学ぶことは私にとって価値があります。それが役立つ場合は、obj-cのFSMの理論的な設計と考えてください。
有益なコメントをよろしくお願いします。
(これはあまり役に立ちませんでした:Objective-Cの有限状態マシン)
state-machine - なぜこれは無効なチューリング マシンなのですか?
試験の復習をしているときに、Sipser 著「An Introduction to the Theory of Computation」という本からの次の質問に答えるのに苦労しています。残念ながら、本書にはこの問題の解決策はありません。
以下が正当なチューリング マシンではない理由を説明してください。
M = {
入力は、変数 x1、...、xn 上の多項式 p です。
- x1、...、xn のすべての可能な設定を整数値にしてみてください
- これらすべての設定で p を評価します
- これらの設定のいずれかが 0 と評価された場合は受け入れます。それ以外の場合は拒否します。}
これは私を夢中にさせています!整数のセットが無限だからだと思いますか? これはどういうわけかアルファベットの許容サイズを超えていますか?
wcf - WCF Callback Faulted - セッションはどうなりますか?
WCFで問題が発生したときに何が起こるかを理解しようとしているだけです。PerSession の InstanceContextMode で宣言されたサービス コントラクトの実装があります...
呼び出しは次のように行われます。
私のクライアントはサーバーを呼び出し、GetServerUTC() を呼び出してサーバーの現在の UTC 時刻を返します。これは一方向の呼び出しであり、サーバーはクライアントの準備ができたときにコールバックします (この場合、単純に現在の時刻を返すのは簡単です!)
サーバーはクライアントにコールバックし、クライアントのコールバック実装でテスト目的で例外をスローします。
これはクライアントで (テスト目的で) 処理されず、クライアントがクラッシュして終了します。
サーバー上で、ICommunicationObject の faulted イベント ハンドラーを処理します...
obj.Faulted += 新しい EventHandler(EventService_Faulted);
質問...
これにより、サーバー上の現在の接続のセッションが強制終了されますか。
このメソッドで必要なこと、たとえばロギングなどを自由に行うことができると思いますが、セッションを終了するためにここで特定のことを行う必要がありますか、それとも WCF がこれを処理しますか?
ベスト プラクティスの観点から、コールバックが失敗した場合はどうすればよいですか? それは「あなたのクライアントで何かが起こった」という意味ですか?
さらに、私が処理する必要がある他の障害のあるハンドラーはありますか。
私はWCFについて多くのことを読んできましたが、何か問題が発生したときに何をすべきかについて漠然としているようです。現在、接続を管理し、サーバーへの接続が存在するかどうかに応じてユーザーアクションが発生するかどうかを判断するステートマシンをクライアントに実装しています-またはこれはやり過ぎです。
どんなヒントでも大歓迎です;)
ruby - Rubyの動的ステートマシン? ステート マシンはクラスである必要がありますか?
質問は、ステート マシンは常に(クラスで) 静的に定義されているのですか? または、クラスの各インスタンスが独自の状態セットを持つようにする方法はありますか?
タスク エンジンを実装するためにStonepathをチェックしています。そこには「状態」と「タスク」の違いがよくわからないので、タスクを直接状態にマップできると考えています。これにより、次のようなことをしなくても、タスク リスト (またはワークフロー) を動的に定義できるようになります。
代わりに、WorkItem (メインのワークフロー/タスク マネージャー モデル) には多くのタスクが含まれます。次に、タスクは状態のように機能するため、次のようなことができます。
ただし、これらのメソッド (および) はクラス メソッドであるため、 aasm gemでそれを行うことはできません。したがって、そのステート マシンを持つクラスのすべてのインスタンスは同じ状態になります。「WorkItem」または「TaskList」が、それが持つタスクに基づいて一連の状態と遷移を動的に作成するようにしたいのです。aasm_state
aasm_event
これにより、ワークフローを動的に定義し、状態をタスクにマップするだけで済みます。
ステート マシンがこのように使用されたことはありますか? このruby ワークフロー gemは、私が説明しているものと似ているようです。
更新: 次のようなことをしているのを見ることができますが、ハックのようです:
...私のモデルのプロパティはimplementation_state_machine
. 状態関連のメソッド ( ) を実装の匿名クラスmethod_missing
に委任するには、オーバーライドする必要があります。accepted_phase?
boost - ブースト ステート マシンに基づくクラスの生成
何百もの状態とアクション/イベントを持つ可能性のあるネットワークベースのサーバーを開発しています。これまでのところ、単純な switch ステートメントで管理してきましたが、text/xml ファイルによって外部から構成できるステート マシンの必要性を感じています。
ファイルから外部で状態/イベントを構成できるようにする既存の C++ 状態マシンについて、あなたの提案は何ですか?
ブースト ステート マシンを見ましたが、ステート マシン ファイルからクラスを生成する機能がないようで、何百ものクラスを手動で作成したくありませんか?
他のオプションは何ですか?
mapping - 有限チューリングマシンでの自然で認識可能な言語のマッピング
私はこの理論的な質問に対する答えを見つけるのに苦労してきました。それが直接プログラミングの質問ではない場合でも、それは本当に関連していると思います。
1000平方を超えることのできないチューリングマシンのタイプを想定します。そのようなタイプの認識可能な言語のセットと通常の認識可能な言語のセットとの間の関係は何でしょうか。
c++ - この Qt ステート マシンを機能させるにはどうすればよいですか?
チェックできる 2 つのウィジェットと、ゼロより大きい値を含む数値入力フィールドがあります。両方のウィジェットがチェックされ、数値入力フィールドにゼロより大きい値が含まれている場合は常に、ボタンを有効にする必要があります。この状況に適したステート マシンを定義するのに苦労しています。これまでのところ、次のものがあります。
ここでの問題は、次の遷移です。
ステート内のすべての子ステートをregisterButtonDisabled
初期ステートに戻します。a
状態とb
状態を同じ状態のままにしたいので、これは望ましくない動作です。
どうすればそれを保証し、同じ状態a
を維持できますか? b
ステートマシンを使用してこの問題を解決できる別の/より良い方法はありますか?
注. この問題を解決するには、無数の (おそらくより良い) 方法があります。ただし、ステート マシンを使用するソリューションにのみ関心があります。このような単純なユースケースは、単純なステートマシンを使用して解決できるはずだと思いますよね?