問題タブ [iterate]
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.
scala - Scala:enumerateeを適用した後に元のiterateeを取得する(playドキュメントの例はコンパイルされません)
列挙子をイテラティーに適用し、その後元のイテラティーを元に戻したいので、さらに適用することができます。Iteratee [Int、Int]を使用して入力を要約する例がPlayドキュメントにあります(http://www.playframework.org/documentation/2.0.1/Enumeratees)。次に、「3」や「6」などの文字列を入力として使用できるEnumeratee [String、Int]を使用します。例は次のとおりです。
ただし、列挙子。>>>は、反復子ではなく、パラメーターとして別の列挙子を使用するため、これはコンパイルされません。代わりに|>>を使用して試しました:
ただし、この例では「28」ではなく「10」が出力されます。適合されたイテラティーに追加されたパーツのみを考慮しているようです。
列挙子を使用するときに元のイテラティーを元に戻すにはどうすればよいですか?
scala - Scala/Play: ストリームの前に値を追加する Enumeratee を書く
1 つの Input.El を iteratee にプッシュし、残りの iteratee を返す enumeratee を書きたいと思います。ストリームに値を追加するだけでストリームを変更するため、私はこれを prepend と呼んでいます。これが私の試みです:
私が今それを呼び出すとき
先頭に追加する必要がある 0 のみを出力します。列挙子からの他の値は無視されます。enumeratee (transform メソッド) の &> メソッドもオーバーライドすると、動作させることができます。
しかし、applyOn メソッドがまだ無効であるため、これはあまりクリーンな方法ではありません。applyOn メソッドの意味を間違えたようです。私の意見では、元の iteratee を返す iteratee を返す必要があり、入力は元の iteratee で続行されます。
上記の transform メソッドは、enumeratee にどのような動作が必要かを説明する必要があります。transform の代わりに applyOn を上書きして、この動作を実現するにはどうすればよいですか?
haskell - Haskell の iteratee 関数を理解する
Haskell の iteratee I/O とは何かを理解しようとしています。次の Haskell-Wiki をいくつかの定義で確認しました。
その関数の 2 行目、3 行目、および最後の 2 行の意味がわかりません。
iteratee 関数が何をするかは知っていますが、いくつかの行がわかりません。このウィキページの他の機能は本当に不思議です。いくつかの説明が抜けているので、彼らが何をしているのか理解できません。
scala - Play Framework 2.0 でリクエストがハングアップするのはなぜですか?
Play 2.0 フレームワークのリアクティブ I/O の概念を理解しようとしています。最初から理解を深めるために、フレームワークのヘルパーをスキップしてさまざまな種類の iteratee を構築し、リクエスト本文を解析するためにIteratee
a によって使用されるカスタムをゼロから作成することにしました。BodyParser
IterateesとScalaBodyParser のドキュメントで入手可能な情報と、リアクティブ I/O の再生に関する 2 つのプレゼンテーションから始めて、次のように思いつきました。
(注:これらはすべて私にとって初めてのことなので、これについての何かが完全にがらくたである場合はご容赦ください。) Iteratee はかなりばかげており、すべてのチャンクを読み取り、受信したバイト数を合計し、いくつかのメッセージを出力するだけです。一部のデータを使用してコントローラー アクションを呼び出すと、すべてが期待どおりに機能します。すべてのチャンクが Iteratee によって受信され、すべてのデータが読み取られると完了状態に切り替わり、要求が終了することを確認できます。
次の 2 つのケースの動作を確認したかったので、コードをいじり始めました。
- すべての入力が読み取られる前にエラー状態に切り替わります。
- すべての入力が読み込まれる前に完了状態に切り替え、 の
Result
代わりに を返しInt
ます。
上記のドキュメントの私の理解では、両方が可能であるはずですが、実際には観察された動作を理解できません。最初のケースをテストするために、上記のコードの 17 行目を次のように変更しました。
そのため、10000 バイトを超える受信があった場合にエラー状態に切り替える条件を追加しました。私が得る出力はこれです:
その後、リクエストは永遠にハングアップし、決して終了しません。上記のドキュメントからの私の期待は、Iterateeerror
内で関数を呼び出すとfold
、処理を停止する必要があるということでした。ここで起こっていることは、Iteratee の fold メソッドが呼び出された後error
に数回呼び出されるということです。そうすると、リクエストがハングします。
すべての入力を読み取る前に完了状態に切り替えると、動作は非常に似ています。15 行目を次のように変更します。
そして17行目から:
次の出力が生成されます。
また、リクエストは永遠にハングします。
私の主な質問は、上記のケースでリクエストがハングしている理由です。誰かがこれに光を当てることができれば、私はそれを大いに感謝します!
haskell - Pipes-2.1.0 パッケージでのファイナライズ
Pipes-2.1.0 パッケージと zeromq3-haskell パッケージを使用して、小さなメッセージ パイプラインを構築しています。フレームのファイナライズを理解するのに問題があることを除けば、すべてうまくいっているようです。
次のフレームでは、2 つのリソースを取得します。zeromq コンテキストと zeromq ソケット。次に、メッセージ (の形式ByteStrings
) が zeromq ソケットに公開されるのを待ち続けます。
今私がこれを試してみると:
私はこれを得る:
publisher
1つだけ受け取った後に確定しBytesString
ます。
なぜこうなった?
Pipes-2.1.0 のフレームを使用したファイナライズについて誤解しているのは何ですか?
攻撃を開始した場合、外の木にチャンスはありますか?
scala - Play Framework2.0BodyParser-XMLストリームのプッシュ解析
公式のドキュメントとこれらの質問にリンクされているリソースを読んだにもかかわらず、私はこの質問をするのがかなり深遠だと感じています。
Play 2.0のIteratee、Enumerator、Enumerateeを理解できません
...反復、列挙子、およびPlay2.0のリアクティブモデル全般についてはまだかなりぼんやりしています。とにかく、大きなXML(> 100MB)ファイルをアップロードし、特定の(インターリーブされていない)NodeSeqを選択して処理し、結果をクライアントにストリーミングできるWebサービスをセットアップしたいと思います。
私が最初に行う必要があるのは、バイトのチャンクを受け取り、それらをXMLパーサーにフィードし、必要なNodeSeqsのストリームを<doc>...</doc>
怠惰な方法で出力するBodyParserを作成することだと思います。
誰かがこれがどのように達成されるかを説明するガイダンスや例を提供できますか?
更新:より多くの背景:-
私のXMLは実際にはSolradd
ドキュメントなので、次のようになります。
それぞれをストリーミング方式で処理したい<doc>
ので、パーサーは明らかに、<doc>
開始イベントに到達するまで待機し、同等の</doc>
終了イベントまですべてをバッファリングし、完了した要素のNodeSeqを発行してから、そのバッファをフラッシュする必要があります。
これがPlayBodyParserでどのように機能するか、私は完全にはわかりません。私がやりたいことをさらに明確にすることができれば、より多くの更新があります!
XMLファイル全体は大きいですが、各<doc />
要素自体は非常に小さいですが、バイトバッファが特定のサイズを超えていないことを確認する必要があることは明らかです。
scala - Play2/Scala で Enumerator をフィードするために定期的な WS 呼び出しを行う最良の方法は?
Enumerator パターンを使用して、WS.url で毎秒いくつかのツイートを取得します。
私の問題はそれです
を待っています
WS.url(...).get が Promise を返し、Promise.timeout を使用して毎秒呼び出しを再起動すると、
私は
したがって、適切な型を取得するには value.get を使用する必要があるため、非同期の側面ではあまりクリーンではないようです。
このコードは機能しますが、私の質問は次のとおりです。これを達成するためのより良い、よりエレガントな方法はありますか? 別の Promise と Promise.timeout から簡単に Promise を取得できますか?
ありがとう :)
scala - Play 2.x:Iterateesを使用したリアクティブファイルのアップロード
質問から始めます:Scala APIを使用Iteratee
してファイルをクラウドストレージにアップロードする方法(私の場合はAzure Blob Storageですが、今は最も重要ではないと思います)
バックグラウンド:
大きなメディアファイル(300 MB以上)をAzureとして保存するには、入力を約1MBのブロックにチャンクする必要がありますBlockBlobs
。残念ながら、私のScalaの知識はまだ不十分です(私のプロジェクトはJavaベースであり、Scalaの唯一の用途はUploadコントローラーです)。
私はこのコードで試しました:なぜBodyParserのIterateeで呼び出しエラーが発生したり、Play Framework2.0でリクエストがハングしたりするのですか?(としてInput
Iteratee
)-それは非常にうまく機能しますがElement
、私が使用できるものはそれぞれ8192バイトのサイズであるため、数百メガバイトのファイルをクラウドに送信するには小さすぎます。
それは私にとってまったく新しいアプローチであり、おそらく私は何かを誤解していると言わなければなりません(私がすべてを誤解しているとは言いたくないです;>)
そのトピックに役立つヒントやリンクをいただければ幸いです。同様の使用法のサンプルがあれば、それは私がアイデアを得るのに最適なオプションです。
scala - Play 2 Scala-各行をリアクティブに処理するために、Iterateeで大きなCSVファイルをアップロードするための最良の方法
Play2を使用して、elasticsearchに非常に大きなCSVファイル(数百万行)をアップロードしたいと思います。私はうまく機能する次のコードを書きました。
最初のチャンクのhttp応答ヘッダーをスキップする方法に満足していません。このiterateeを、httpヘッダーをスキップしてDone状態に直接切り替える最初のIterateeとチェーンする方法があるはずですが、その方法がわかりません。
誰かが助けることができるなら
scala - 2 つの iteratee に 1 つの列挙子を与える
私はフレームワーク、関数型プログラミング、および Iteratee I/O をプレイするのに非常に慣れていないため、私の質問はトピックから外れているか、愚かでさえあるかもしれません。
大きなテキスト ファイルをストリームとしてサード パーティにアップロードし、同時にこのファイルに関するメタ データを抽出したいと考えています (その内容に基づいて、簡略化して csv ファイルと言いました)。
私はすでに 2 つの動作するボディ パーサーIteratee[Array[Byte], B]
を作成しました。書き込みロジックIteratee[Array[Byte], MetaData]
を含むものと、MetaData 抽出ロジックを含むものです。これら 2 つのパーサーを組み合わせて、コンテンツの書き込みと抽出を同時に処理する方法を教えてください。