此页面: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) 我在我的网络应用程序中使用一个小型数据库池.而这个特殊的功能:
withPool pool = bracket (takeConn pool) (putConn pool)
Run Code Online (Sandbox Code Playgroud)
可以用应用风格重写:
withPool = bracket <$> takeConn <*> putConn
Run Code Online (Sandbox Code Playgroud)
可以说,它同样可读,更优雅.很自然地,我想这样写.但是数据库连接池应该很快,我担心这种风格会带来不必要的开销.
所以我的问题是,在Haskell中使用应用函子有多少开销(如果有的话)?有没有基准?
许多镜头吸气剂返回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) 在我看来,qthaskell没有被积极开发/被抛弃.
它支持QtQuick吗?
是否有支持qt 5的计划/任何发展?
有人使用qt和haskell,还是gtk2hs当前最喜欢的?
尝试使用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) 我经常使用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) 我尝试了fay-jquery,并且包含的示例test.hs文件导致了150 kb的js文件.即使关闭编译它仍然是20 kb.
我知道它必须带有运行时,stdlib和jquery包装器.
我可以告诉fay不要生成stdlib(--no-stdlib和--no-builtins标志).但我不知道如何告诉它不要包含jquery代码.
所以我的问题是,如何将这些静态部分拆分为单独的js文件并仅生成特定于模块的代码?
这样,大部分代码只会加载一次(和缓存),我可以为不同的网页创建许多较小的js文件.
如何使用镜头语法检查地图是否有键?
import qualified Map as Map
let x = Map.member "bla" m
Run Code Online (Sandbox Code Playgroud)
如何使用镜头来写这个?
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) 我正在使用emacs + slime进行clojure开发.最近我们有一个新的团队成员,他不喜欢emacs,所以他用la clojure插件安装了intellij.
emacs和intellij都允许自动重新缩进大块代码,整个函数甚至模块.
这导致了一个非常烦人的问题.如果他做了一个小的改动(几行)然后重新整理整个文件,那么显然将它记录到dvcs(我们使用darcs)将产生大的补丁,改变了数百行.这使代码审查变得不可能.我怎么知道数百个承诺的行中有3个真的发生了变化?
所以现在我们有合作问题.我想知道是否还有其他使用不同IDE的clojure团队.你如何调和这些问题?
我看到的选项是:
强制使用一个IDE(emacs).这将解决问题,但我不喜欢这种权威的方法.
以某种方式设置两个环境相同缩进(不确定是否可能)
同意始终在一个IDE中缩进.这很麻烦并且容易出错.
haskell ×7
haskell-lens ×2
applicative ×1
clojure ×1
docker ×1
fay ×1
html ×1
indentation ×1
inputstream ×1
io ×1
java ×1
logging ×1
qt ×1
stream ×1
supervisord ×1