小编Vag*_*rdi的帖子

从OutputStream创建InputStream的最有效方法

此页面:http://blog.ostermiller.org/convert-java-outputstream-inputstream 描述了如何从OutputStream创建InputStream:

new ByteArrayInputStream(out.toByteArray())
Run Code Online (Sandbox Code Playgroud)

其他替代方案是使用PipedStreams和新线程,这很麻烦.

我不喜欢将许多兆字节复制到内存字节数组中的新内容.有没有一个库可以更有效地完成这项工作?

编辑:

根据Laurence Gonsalves的建议,我尝试了PipedStreams,事实证明它们并不难以应对.这是clojure中的示例代码:

(defn #^PipedInputStream create-pdf-stream [pdf-info]
  (let [in-stream (new PipedInputStream)
        out-stream (PipedOutputStream. in-stream)]
    (.start (Thread. #(;Here you write into out-stream)))
    in-stream))
Run Code Online (Sandbox Code Playgroud)

java io inputstream stream bytearrayoutputstream

80
推荐指数
4
解决办法
9万
查看次数

应用风格的计算成本

我在我的网络应用程序中使用一个小型数据库池.而这个特殊的功能:

withPool pool = bracket (takeConn pool) (putConn pool)
Run Code Online (Sandbox Code Playgroud)

可以用应用风格重写:

withPool = bracket <$> takeConn <*> putConn
Run Code Online (Sandbox Code Playgroud)

可以说,它同样可读,更优雅.很自然地,我想这样写.但是数据库连接池应该很快,我担心这种风格会带来不必要的开销.

所以我的问题是,在Haskell中使用应用函子有多少开销(如果有的话)?有没有基准?

haskell applicative

10
推荐指数
2
解决办法
1124
查看次数

从镜头获取默认值的Maybe

许多镜头吸气剂返回Maybe值.我经常需要用默认值替换它们.

说地图查找,但默认.

fromMaybe "" $ Map.fromList [(1,"Foo")] ^? at 1
Run Code Online (Sandbox Code Playgroud)

这可以用镜头语法编写吗?也许接近这个:

Map.fromList [(1,"Foo")] ^? at 1.or ""
Run Code Online (Sandbox Code Playgroud)

haskell haskell-lens

10
推荐指数
1
解决办法
1110
查看次数

使用QTQuick和haskell

在我看来,qthaskell没有被积极开发/被抛弃.

它支持QtQuick吗?

是否有支持qt 5的计划/任何发展?

有人使用qt和haskell,还是gtk2hs当前最喜欢的?

qt haskell

9
推荐指数
2
解决办法
2651
查看次数

Supervisord不会显示进程中的标准输出

尝试使用docker中的主管捕获我的应用程序的日志.

这是我的supervisord.conf:

[supervisord]
logfile=/dev/null
nodaemon=true

[program:autofs]
command=automount -f
redirect_stderr=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0

[program:split-pdf]
command=bin/split-pdf-server
directory=/root/split-pdf
redirect_stderr=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
Run Code Online (Sandbox Code Playgroud)

启动容器后一切正常,我可以看到我的应用程序运行的结果(它在网络共享上创建pdf文件)

但是日志显示我的应用没有输出:

015-07-02 00:39:26,119 CRIT Supervisor running as root (no user in config file)
2015-07-02 00:39:26,124 INFO supervisord started with pid 5
2015-07-02 00:39:27,127 INFO spawned: 'split-pdf' with pid 8
2015-07-02 00:39:27,130 INFO spawned: 'autofs' with pid 9
2015-07-02 00:39:28,132 INFO success: split-pdf entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2015-07-02 00:39:28,132 INFO success: autofs entered RUNNING …
Run Code Online (Sandbox Code Playgroud)

logging supervisord docker

7
推荐指数
1
解决办法
1229
查看次数

haskell的三元运营商

我经常使用list comprehension来表示可选值:

[Parent parent, Destination [DestPage currPage]] ++ [OpenChildren | parent == Bookmark 0]
Run Code Online (Sandbox Code Playgroud)

但我不知道如何做出选择而不是可选值.

我的很多代码看起来像这样:

let lblTabX         = if isAtBottom then 5 else 3
    lblTabY         = if isAtBottom then 3 else 60
    lblTabPosition  = Position left (if isAtBottom then bottom else top)
    lblTabWidth     = if isAtBottom then lblPageX - 60 else 20
    lblTabHeight    = if isAtBottom then 20 else pageHeight - 80
    lblTabMargin    = if isAtBottom then Margin 0 3 else Margin 3 0
Run Code Online (Sandbox Code Playgroud)

正如你看到很多ifs :)

所以我正在玩一些运算符,并提出了这种语法:

iif c …
Run Code Online (Sandbox Code Playgroud)

haskell list-comprehension ternary-operator

6
推荐指数
3
解决办法
3160
查看次数

fay生成文件的大小

我尝试了fay-jquery,并且包含的​​示例test.hs文件导致了150 kb的js文件.即使关闭编译它仍然是20 kb.

我知道它必须带有运行时,stdlib和jquery包装器.

我可以告诉fay不要生成stdlib(--no-stdlib和--no-builtins标志).但我不知道如何告诉它不要包含jquery代码.

所以我的问题是,如何将这些静态部分拆分为单独的js文件并仅生成特定于模块的代码?

这样,大部分代码只会加载一次(和缓存),我可以为不同的网页创建许多较小的js文件.

haskell fay

5
推荐指数
1
解决办法
211
查看次数

如何使用镜头语法检查地图是否有键?

如何使用镜头语法检查地图是否有键?

import qualified Map as Map

let x = Map.member "bla" m
Run Code Online (Sandbox Code Playgroud)

如何使用镜头来写这个?

haskell haskell-lens

4
推荐指数
1
解决办法
621
查看次数

Text.Blaze中的可选html属性

Text.Blaze有一个运营商!添加属性到html:

option ! id "bla" ! value "1" ! selected "" $ "Hello!"
Run Code Online (Sandbox Code Playgroud)

我的问题是如何使属性可选?现在我的代码很难看:

option ! id "bla" ! value "1" ! (if x == val then selected "" else someStupidAttribute "")  $ "Hello!"
Run Code Online (Sandbox Code Playgroud)

这导致每个html选项元素都有不必要的无关属性,因为我必须提供一个.

编辑:我接受了hammar的回答.我创建了一个辅助函数:

(!?) :: Attributable h => h -> (Bool,Attribute) -> h
html !? (True, attr) = html ! attr
html !? _ = html
Run Code Online (Sandbox Code Playgroud)

以下是如何使用它:

option ! id "bla" ! value "1" !? ((k == val), selected "") $ "Hello!"
Run Code Online (Sandbox Code Playgroud)

html haskell

3
推荐指数
1
解决办法
377
查看次数

不同IDE的团队中的Clojure缩进问题

我正在使用emacs + slime进行clojure开发.最近我们有一个新的团队成员,他不喜欢emacs,所以他用la clojure插件安装了intellij.

emacs和intellij都允许自动重新缩进大块代码,整个函数甚至模块.

这导致了一个非常烦人的问题.如果他做了一个小的改动(几行)然后重新整理整个文件,那么显然将它记录到dvcs(我们使用darcs)将产生大的补丁,改变了数百行.这使代码审查变得不可能.我怎么知道数百个承诺的行中有3个真的发生了变化?

所以现在我们有合作问题.我想知道是否还有其他使用不同IDE的clojure团队.你如何调和这些问题?

我看到的选项是:

  1. 强制使用一个IDE(emacs).这将解决问题,但我不喜欢这种权威的方法.

  2. 以某种方式设置两个环境相同缩进(不确定是否可能)

  3. 同意始终在一个IDE中缩进.这很麻烦并且容易出错.

clojure indentation

3
推荐指数
1
解决办法
280
查看次数