我正在尝试使用HSlogger获取有关我的程序的一些信息.所以我在我的函数中添加以下行
import Data.Word
import qualified Data.ByteString as B
import qualified Data.ByteString.Lazy as L
import Data.Bits
import Data.Int
import Data.ByteString.Parser
import System.Log.Logger
import System.Log.Handler.Syslog
importFile :: FilePath -> IO (Either String (PESFile ))
importFile n = do
warningM "MyApp.Component2" "Something Bad is about to happen."
...
Run Code Online (Sandbox Code Playgroud)
这很好,因为函数在IO内部.但是,当我向以下函数添加类似的行时:
...
parsePES :: Parser PESFile
parsePES = do
header <- string "#PES"
warningM "parsing header"
...
return (PESFile ...)
Run Code Online (Sandbox Code Playgroud)
我收到类型错误:
Couldn't match expected type `Parser a0'
with actual type `String -> IO ()'
In …Run Code Online (Sandbox Code Playgroud) 我编写了以下代码,它使用光泽库获取了一堆点并在屏幕上绘制它们.
let s = blocks pes
pts = map (map mkPt) s {- stitches to points-}
lines = map Line pts {-points to lines -}
pict = Pictures lines {- lines to a picture -}
in do displayInWindow "My Window" (200, 200) (10, 10) white pict
Run Code Online (Sandbox Code Playgroud)
它工作正常,但我发现有一个重复的模式:一个函数调用链,每个函数调用的结果进入下一个参数的最后一个参数.所以我通过删除中间变量,反转顺序并使用函数组合(".")链接函数来重构,如下所示:
let pict = Pictures . (map Line) . (map $ map $ mkPt) . blocks $ pes
in do displayInWindow "My Window" (200, 200) (10, 10) white pict
Run Code Online (Sandbox Code Playgroud)
令人高兴的是,这也很好.但是我想知道我是否会降低可读性,或者我是不是习惯于阅读和编写点免费样式代码.另外,我如何推理这段代码?第二个版本更有效率,还是仅仅更高效?有什么我可以风格化的做法让它更清晰吗?
id<MyProtocol> topLayoutGuideObj = objc_msgSend(viewController, @selector(myselector));
Run Code Online (Sandbox Code Playgroud)
"函数调用的参数太多,预期为0,有2个"
但是,objc_msgSend的函数签名如下所示:
#if !OBJC_OLD_DISPATCH_PROTOTYPES
OBJC_EXPORT void objc_msgSend(void /* id self, SEL op, ... */ )
__OSX_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
OBJC_EXPORT void objc_msgSendSuper(void /* struct objc_super *super, SEL op, ... */ )
__OSX_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
#else
/**
* Sends a message with a simple return value to an instance of a class.
*
* @param self A pointer to the instance of the class that is to receive the message.
* @param op The selector of the method that …Run Code Online (Sandbox Code Playgroud) 我有一些项目要分区为多个桶,这样每个桶比最后一个桶大一些.
items = 500
chunks = 5
increment = 0.20
{- find the proportions -}
sizes = take chunks (iterate (+increment) 1)
base = sum sizes / items
buckets = map (base *) sizes
main = print buckets
Run Code Online (Sandbox Code Playgroud)
我确信有一种数学上更优雅的方式来做到这一点,但这不是我的问题.最后一步始终以科学记数法打印出来.
如何获得纯十进制输出?我看过Numeric包,但是我的速度很快.
我正在编写一些需要经常附加到列表末尾的代码.我知道使用"++"是低效的.因此,我通过附加到头部向后构建列表,然后在完成后反转它.我认为这是一个常见的初学者策略.
我宁愿以正确的顺序构建它 - 但这意味着切换到新的数据结构.我正在考虑为我的容器使用Data.Sequence或Data.DList.我的列表由严格的int对组成,我不需要随机访问它.Data.Sequence和Data.DList有什么相对优点,还有其他容器我应该考虑吗?
我已经安装了ghc 6.12.3,然后安装了Haskell平台.我正在尝试编译测试程序:
$ ghc test.hs
test.hs:3:0:
Failed to load interface for `Bindings':
Use -v to see a list of the files searched for.
Run Code Online (Sandbox Code Playgroud)
所以,我自然而然
cabal install Bindings
Run Code Online (Sandbox Code Playgroud)
哪个工作正常,并将包放在〜/ .cabal/lib/bindings-0.1.2问题是,当我再次使用ghc编译时,它仍然找不到我用cabal安装的软件包.在详细模式下编译给出:
ghc -v test.hs
Using binary package database: /home/ludflu/ghc/lib/ghc-6.12.3/package.conf.d/package.cache
Using binary package database: /home/ludflu/.ghc/x86_64-linux 6.12.3/package.conf.d/package.cache
Run Code Online (Sandbox Code Playgroud)
正如另一个stackoverflow用户所建议的,我尝试过:
ghc-pkg describe rts > rts.pkg
vi rts.pkg # add the /home/ludflu/.cabal/lib to `library-dirs` field
ghc-pkg update rts.pkg
Run Code Online (Sandbox Code Playgroud)
但无济于事.如何将.cabal添加到要搜索的包目录列表中?谢谢!
我正在评估PDF渲染技术.XSL-FO是我们选择的路径,因为它是一个开放标准,我们的源数据是XML.人们对XSL-FO的各种实现有什么经验?
到目前为止我发现的实现是:
我用来评估的标准是:性能,稳定性,可支持性,价格,模板管理工具.同样重要的是:良好的Java API和在Unix上运行的能力.
无论我们最终选择哪种产品,我们都会被要求寻找咨询服务来帮助我们构建模板,因此能够找到精通该技术的开发人员非常重要.
更新:
Ecrion人员进行了性能比较 ,这与renderX 人员有争议.然而,到目前为止,renderX拒绝提供他们自己的基准测试或测试进行比较.我想我必须运行自己的基准测试.
到目前为止,我倾向于Ecrion,因为它支持WordML输出,而renderX的人有点粗鲁.
我正在调用这样的存储函数:
select XML_INVOICE.GENERATE_XML_DOC('84200006823') from dual;
Run Code Online (Sandbox Code Playgroud)
然后查询结果显示在下面的表格中,我可以右键单击并选择"导出数据" - > XML
<?xml version='1.0' encoding='UTF8' ?>
<RESULTS>
<ROW>
<COLUMN NAME="XML_INVOICE.GENERATE_XML_DOC('84200006823')" <![CDATA[<xml>yada yada</xml><morexml>...]]></COLUMN>
</ROW>
</RESULTS>
Run Code Online (Sandbox Code Playgroud)
问题是"..." - SQL Developer(Linux上的2.1.0.63)没有显示所有数据 - 它截断结果并附加省略号.这对我没用.如何让它导出我的所有数据?
在查看Real World Haskell中的CSV示例代码之后,我尝试构建一个小的XML解析器.但是关闭标签会因"意外"/"错误而错误输出.你能告诉我为什么我的"closeTag"解析器不起作用(或者可能不会被调用)吗?谢谢!
import Text.ParserCombinators.Parsec
xmlFile = manyTill line eof
line = manyTill tag eol
eol = char '\n'
word = many1 (noneOf "></")
tag = choice [openTag, closeTag, nullTag, word]
nullTag = between (char '<') (string "/>") word
closeTag = between (string "</") (char '>') word
openTag = between (char '<') (char '>') tagContent
attrval = between (char '"') (char '"') word
atts = do {
(char ' ')
; sepBy attr (char ' ')
}
attr = do …Run Code Online (Sandbox Code Playgroud) 我已经构建了一个包装Apache FOP的Web服务.您发送XML,它会为您提供包含呈现的PDF的MTOM流.现在它正在运行,我想对它进行一些性能测试.soapUI表示他们支持MTOM,我将其用于我所有的其他Web服务性能测试,所以如果我不必编写自定义测试工具,那就太棒了.
所以这就是问题:我在soapUI中得到了响应,它看起来像这样:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<ns2:RenderDocumentResponse xmlns:ns2="http://webservices.cscinfo.com/renderService">
<ns2:Content>
<ns2:fileName xsi:nil="1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
<ns2:fileType>pdf</ns2:fileType>
<ns2:mimeType>application/pdf</ns2:mimeType>
<ns2:binaryData>JVBERAkAAiNkRUcERRkaYIMijggKNDkbEiioUBUbHrBBlE1HFwFBuWSWStGd+8ee/Nm98f935rn73P3Wfvfda6AJD8gwXCTFgJgAyhWBTh58WIjYtnYAcBDPAAA2wA4HCzs0IW+EYCmQJ82IxsmRP4F726DiD5+yrTP4zBAP+flLlZIjEAUJiM5/L42VwZF8k4PVecJbdPyZi2NE3OMErOIlmCMlaTc</ns2:binaryData>
</ns2:Content>
<ns2:message>file rendered</ns2:message>
</ns2:RenderDocumentResponse>
</soapenv:Body>
</soapenv:Envelope>
Run Code Online (Sandbox Code Playgroud)
如何让soapUI为我转储和解码二进制数据?我想确保它是一个有效的PDF和所有这些.(为了简洁起见,我在响应中截断了数据,并将其用于保护内疚!所以这篇文章中不是真正的PDF数据)
更新:这是soapUI在"原始"响应选项卡中显示的内容:
HTTP/1.1 200 OK
Date: Wed, 13 Jan 2010 17:02:31 GMT
Transfer-Encoding: chunked
Content-Type: text/xml; charset=UTF-8
X-Powered-By: Servlet/2.5 JSP/2.1
Run Code Online (Sandbox Code Playgroud)