問題タブ [conduit]
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.
haskell - WAI /WarpResponseSourceのクリーンアップ
HTTPクライアントが接続を切断したとき(または他の現実の世界が発生したとき)にクリーンアップを実行する方法を理解できません。にラップしようとしましSource
たaddCleanup
が、呼び出されません。
これが、無限のソースストリーミングバイトストリングの私の最小限の例です。
httpリクエストでヒットすると、「起動」通知が表示され、stream
データのパージが開始されます。ただし、接続を閉じた後、「クリーンアップ」は行われません。メッセージが表示され、アクションは実行されないため、実際のコードでリソースがリークします。
haskell - HaskellのWAIリクエストをNetwork.HTTP.Conduitリクエストに変換する
サーバーを作成していますが、特定のリクエストメッセージに沿って転送する必要があります。このメッセージは基本的にPOST(またはGET)メッセージであり、数メガバイトのファイルが含まれている可能性があります。このメッセージは、ファイルを実際に保存(または取得)する別のサーバーに転送されます。
Yesodフレームワークを使用しています。したがって、を使用してgetWaiRequest
、WAIリクエストを取得できます。しかし、渡す新しいメッセージを開始するには、その怠惰のためにNetwork.HTTP.Conduitを使用する必要があります。Request m
だから私はそのモジュールで作る必要があります。しかし、私にはこの変換を行う方法がわかりません。WAIRequest
は単なるデータ型ですが、コンジットはRequest m
型であるため、コピーしようとするとエラーメッセージが表示され続けました。
誰かが私がこれを行う方法を教えてもらえますか?そうでない場合は、HTTPコンジットを使用せずにWAIリクエストを別のサーバーに渡す方法も同様に優れています。
ありがとう!
haskell - 導管を使用したシーケンシャルバイナリデータのデコード
目標は、次の型の署名を持つコンジットを持つことです
ByteString -> a
コンジットは、TCP / IP(network-conduit
パッケージを使用)を介して受信したプロトコルバッファ(関数を使用)を繰り返し解析する必要があります。
ワイヤーメッセージのフォーマットは
(中括弧はプロトコルの当事者ではなく、エンティティを区切るためにここでのみ使用されます)。
最初のアイデアは、1つのProtoBufを解析できるをsequenceSink
繰り返し適用するために使用することでした。Sink
ソースからすでに読み取られているが、それを介して消費されていない「残りの」バイトCB.take
が破棄されるため、機能しません(最初のプロトコルバッファでのみ機能します)。
そして、私は「残りをソースに戻す」方法を見つけられませんでした。
コンセプトが完全に間違っていましたか?
PS:ここでプロトコルバッファを使用していても、問題はプロトコルバッファとは関係ありません。問題をデバッグするために、私はいつも使用{length}{UTF8 encoded string}{length}{UTF8 encoded string}...
し、上記のようなコンジット(utf8StringConduit :: MonadResource m => Conduit ByteString m Text
)を使用します。
アップデート:
()
状態(上記のサンプルでは状態なし)を残りのバイトに置き換えようとしCB.take
、呼び出しを、最初に(状態から)既に読み取られたバイトを消費し、必要な場合にのみ呼び出す関数の呼び出しに置き換えましたawait
(状態が十分な大きさではありません)。残念ながら、ソースにバイトが残ってsequenceSink
いない場合はコードを実行しませんが、状態には残りのバイトが含まれているため、これも機能しません:-(。
コードに興味がある場合(最適化されていないか、あまり良くないが、テストするには十分なはずです):
haskell - Haskell でパイプからファイルへの出力を収集する方法
プロデューサー パイプがあり、プリント パイプを使用しました。出力をファイルに書き込みたいと思います。Control.Data.sinkFile を使用すると、
タイプエラーが発生します:
sinkFile を構成可能なパイプに変換するにはどうすればよいですか。Strict vs. Lazy の質問はありますか?
haskell - Attoparsec:括弧で囲まれた用語をスキップしますか?
mongoDBへのインポートに適した5列目のJSONを使用して大きなTSVファイルを作成しようとしています。特に、トップレベルとトップレベルのキーフィールドのみを_idに変更したいと思います。これは私がこれまでに持っているものです、それはうまくいくようですが遅いです:
プロファイラーによると、時間の58.7%がブラケットで、19.6%がkeyTo_idで、17.1%がメインで費やされています。
確かに、角かっこが一致する場合、角かっこで囲まれた用語を変更せずに返すより良い方法はありますか?
attoparsec-conduitを簡単に調べましたが、そのライブラリの使用方法がわからず、これが使用できる種類のものであるかどうかさえわかりません。
編集:コードを更新しました。データはopenlibrary.orgからのものです。例:http ://openlibrary.org/data/ol_dump_authors_latest.txt.gz
haskell - unwrapResumableからの「解放」はどうする?
簡単な Wai-to-uwsgi プロキシを作成しましたが、その際に を使用する必要がありましたunwrapResumable
。Pipe
これにより、最終的に呼び出す必要があるアンラップされた「リリース」関数が得られます。リリース関数のタイプは ですResourceT IO ()
。現在のリソースに登録したいと思いますが、そのためにはリリースを にする必要がありますIO ()
。リリース機能はどうすればいいですか?
haskell - 謎の閉じたハンドルの件
最初にコードを示し、次にエラー、次に型情報を示します。質問は次のとおりです。何が起こっているのかをどのように把握できますか? どうすれば問題を解決できますか?
これはうまくコンパイルされます。コンパイルされたコードを実行するとどうなるか
body
次のタイプです
フィードバックをお寄せいただきありがとうございます。この問題のトラブルシューティングを開始する方法がわかりません。
haskell - コンジットのsinkParserと組み合わせたAesonのdeliverJSON
コンジットと aeson の探索を続けます。このYesod bookValue
の (わずかに変更された) コード スニペットの代わりに、独自のデータ型を使用するにはどうすればよいでしょうか。
基本的には型dispatch
をJSONRequest→IO JSONRequestに変更したい。fromJSON の独自の派生インスタンスを使用するようにパーサーに指示するにはどうすればよいですか?
型宣言を追加して、json の多形的な戻り値の型を祈ってみましたが、厳密には Value 用であることに気付きました。
haskell - コンジット内からの永続的な使用
まず、達成したいタスクの単純化されたバージョンです。複数の大きなファイル (30 GB に達する) があり、重複するエントリを取り除く必要があります。この目的のために、データのハッシュのデータベースを確立し、ファイルを 1 つずつ開き、各アイテムをハッシュし、ハッシュがまだデータベースにない場合はデータベースと出力ファイルに記録します。
私はこれを反復子、列挙子で行う方法を知っており、コンジットを試してみたかったのです。コンジットでそれを行う方法も知っていますが、今はコンジットと永続を使用したいと考えています。型に問題があり、おそらく の概念全体に問題がありますResourceT
。
問題を説明するための疑似コードを次に示します。
問題はdbAction
機能にあります。当然、ここでデータベースにアクセスしたいと思います。それが行うアクションは基本的に単なるフィルターなので、最初は次のように書くことを考えました:
私が得る特定のエラーは次のとおりです。
これは、型シグネチャを設計する際に行った間違った仮定が原因である可能性があることに注意してください。型シグネチャをコメントアウトし、lift
ステートメントも削除すると、エラー メッセージは次のようになります。
つまり、これは?PersistStore
経由でまったくアクセスできないことを意味します。ResourceT
を使用せずに、独自のコンジットを作成することもできませんCL.mapMaybeM
。
これにより、完全には理解できないさらに別の型エラーが発生しました。
だから、私の質問は、コンジット内で意図したように永続的に使用することは可能ですか? もし、どうやって?liftIO
コンジット内で使用できるので、たとえば を使用するだけでよいことは承知していますHDBC
が、永続化がどのように機能するかを理解するために明示的に永続化を使用したいと考えていました。
javascript - コンジットで console.log を使用する
コンジット ツールバーで実行される JavaScript で記述されたスクリプトをデバッグしようとしています。今のところ私は単純に使用しています
しかし、スクリプトが大きくなるにつれて多くのアラートが発生する場合、これは非常に厄介です。ログまたはデバッグ メッセージを FireBug または Chrome のコンソールに書きたいと思います。
これははるかに合理的ですが、コンジットツールバーのhtmlコンポーネントに含まれるjavascriptファイルから実行すると、このコードは効果がありません。
コンジット ツールバー API でこれと同様の問題を実際に調査しようとしましたが、スタック上ではあまり一般的ではないことがわかりました。コンジット API の使用に関するフォーラムや優れた情報源を知っている人はいますか? 彼らの公式ページは私にとって少し混乱しています。
本当に助けてください!