对于我的仅标题C++库(许多模板等),我使用GCov来检查测试覆盖率.但是,它会报告所有标头的100%覆盖率,因为编译器首先不会生成未使用的函数.手动发现未覆盖的功能很容易,但却无法实现持续集成的目的......
如何自动解决这个问题?我应该使用"line hit/LOC"作为我的覆盖率指标,而且再也不会达到100%吗?
我是Haskell的新手,我想知道是否有更好的方法来确定是否有一个复制库功能而不是Hoogle?
一个很好的例子:我有许多f :: Monad a => a -> m a我希望链接在一起的函数,比如
f1234 x = (return x) >>= f1 >>= f2 >>= f3 >>= f4
Run Code Online (Sandbox Code Playgroud)
但我宁愿写信
chain :: Monad m => a -> [a -> m a] -> m a
chain = foldl (>>=) <$> return
f1234 = (flip chain) [f1, f2, f3, f4]
Run Code Online (Sandbox Code Playgroud)
看起来非常基本,基础库是否提供了相当于的东西chain?
我有一条描述图形的记录作为节点和边的集合:
data MyGraph a = MyGraph {
nodes :: Set a,
edges :: Set (a,a),
components :: UnionFindM a -- ?
}
emptyGraph = MyGraph{
nodes = empty, edges = empty,
components = emptyUnionFind singleton union --?
}
addEdge g (a,b) = g{
edges = (a,b) `insert` (edges g),
components = (components g) >>= (equate a b) -- ?
}
Run Code Online (Sandbox Code Playgroud)
由于我不会删除边缘,我想使用union-find结构跟踪连接的组件(我可以在添加边缘时轻松更新),因为我想映射连接的组件,因此它将是有用的将它们保存为一组.当然,我想获得一个节点的组件.
我发现了我选择的等价库,因为我无法看到如何使用union-find创建集合,而持久性等价需要知道值范围.
现在我可以创建关系,并使用以下命令返回集合:
import Control.Monad(liftM)
import Data.Equivalence.Monad
import Data.Set(singleton, union, fromList)
f = runEquivM …Run Code Online (Sandbox Code Playgroud) 我需要显示一个几乎无限的滚动式交互式小部件列表,并在添加新数据或用户滚动到未缓存区域时根据需要添加/删除它们.
TreeView(如此处所述)是没有选项的,因为我需要完整的Widgets作为项目(由具有多个动作等的标准小部件组成,但CellRenderer不适用于此)
更糟糕的是,我不提前知道我的小部件的高度(虽然没有太大的差异),因此使用VBox可能会导致跳跃.
使用滚动条仍应感觉好像名单是有限的(即只更新后滚动完成,因此scrollbutton不跳从你的鼠标移开),并调整窗口的大小和窗口的布局时被更新,滚动位置不应该改变太多(焦点小部件应该保持原样,除非焦点小部件被滚动掉......).
最好的方法是什么?甚至可能只是在需要添加新窗口小部件时向我发送信号的库?
或者可以强迫ListView以一种不太讨厌的方式做到这一点?(即在屏幕外缓冲区上绘图,使用CellRenderer将其复制到单元格中,将鼠标/键盘事件转发到实际的窗口小部件?)
我想编译一个使用clAmdFFT,AMD的OpenCL FFT的OpenCL程序,它是闭源的.
$ objdump -x libclAmdFft.Runtime.so
Dynamic Section:
NEEDED libOpenCL.so.1
Version References:
required from libOpenCL.so.1:
0x028568b0 0x00 05 OPENCL_1.0
Run Code Online (Sandbox Code Playgroud)
在一台机器上,我正在使用AMD驱动程序,它附带一个包含版本信息的libOpenCL.so,如下所示:
a$ objdump -T /opt/AMDAPP/lib/x86_64/libOpenCL.so
0000000000002610 g DF .text 0000000000000018 OPENCL_1.0 clGetSamplerInfo
00000000000032e0 g DF .text 0000000000000018 OPENCL_1.1 clSetEventCallback
0000000000002350 g DF .text 0000000000000018 OPENCL_1.2 clCreateSubDevices
Run Code Online (Sandbox Code Playgroud)
这台机器上的一切都很好.
在另一台机器上,我使用的是nVidia驱动程序,它带有一个不包含版本信息的libOpenCL.so,如下所示:
b$ objdump -T /usr/lib/libOpenCL.so # -> /usr/lib/nvidia-current/libOpenCL.so
00000000000021f0 g DF .text 0000000000000018 Base clGetSamplerInfo
0000000000002a40 g DF .text 0000000000000018 Base clSetEventCallback
Run Code Online (Sandbox Code Playgroud)
-llibOpenCL.so -llibclAmdFft.Runtime.so由于clAmdFft想要链接到带标记的符号,因此在此处链接程序失败:
libclAmdFftRuntime.so: undefinded reference to `clCreateBuffer@OPENCL_1.0`
Run Code Online (Sandbox Code Playgroud)
动态链接器也会生成此抱怨:
b$ ldd libclAmdFft.Runtime.so …Run Code Online (Sandbox Code Playgroud) 因此,我们的Hadoop集群在某些节点上运行,只能从这些节点访问.你通过SSH连接它们并完成你的工作.
因为这很烦人,但是(可以理解)没有人会试图配置访问控制,以便它可以从外部使用,我正在尝试下一个最好的事情,即使用SSH运行SOCKS代理到簇:
$ ssh -D localhost:10000 the.gateway cat
Run Code Online (Sandbox Code Playgroud)
有SOCKS支持的耳语(自然我没有找到任何文档),显然这进入core-site.xml:
<property>
<name>fs.default.name</name>
<value>hdfs://reachable.from.behind.proxy:1234/</value></property>
<property>
<name>mapred.job.tracker</name>
<value>reachable.from.behind.proxy:5678</value></property>
<property>
<name>hadoop.rpc.socket.factory.class.default</name>
<value>org.apache.hadoop.net.SocksSocketFactory</value></property>
<property>
<name>hadoop.socks.server</name>
<value>localhost:10000</value></property>
Run Code Online (Sandbox Code Playgroud)
除了hadoop fs -ls /仍然失败,没有提到SOCKS.
有小费吗?
我只是尝试运行作业,而不是管理集群.我只需要通过SOCKS访问HDFS并提交作业(似乎在集群节点之间使用SSL /代理等完全独立;我不希望这样,我的机器不应该是集群的一部分,只是一个客户.)
那有什么有用的文件吗?为了说明我没有找到任何有用的东西:我通过运行hadoop客户端strace -f并检查它读取的配置文件来找到配置值.
是否有任何描述甚至会对哪些配置值作出反应?(我确实找到了零参考文档,只是不同的过时教程,我希望我一直在遗漏什么?)
有没有办法转储它实际使用的配置值?
鉴于三个整数,a,b并c与a,b <= c < INT_MAX我需要计算(a * b) % c,但a * b可以溢出,如果值太大,这给错误的结果.
有没有办法通过bithacks直接计算它,即不使用不会溢出的值的类型?
我的 PostgreSQL 数据库中有一个有向图,节点和循环之间可以有多个路径:
create table "edges" ("from" int, "to" int);
insert into "edges" values (0, 1), (1, 2), (2, 3), (3, 4), (1, 3);
insert into "edges" values (10, 11), (11, 12), (12, 11);
Run Code Online (Sandbox Code Playgroud)
我想找到一个节点和连接到它的每个节点之间的最小边数:
with recursive "nodes" ("node", "depth") as (
select 0, 0
union
select "to", "depth" + 1
from "edges", "nodes"
where "from" = "node"
) select * from "nodes";
Run Code Online (Sandbox Code Playgroud)
返回所有路径的深度:
node 0 1 2 3 3 4 4
depth 0 1 2 2 3 3 4 …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 GTK 的 argv 处理,但主循环似乎存在一些问题。
我的目标是在 GTK 删除其选项(如--display)之后解析命令行,但在打开窗口之前,因为我希望我的应用程序也可用于仅 CLI 的界面,并且两种变体都使用 Glib 等。这这就是我试图在command_line信号处理程序中打开窗口的原因。
这按预期工作,在窗口关闭时退出。
#include <gtkmm.h>
int main(int argc, char **argv) {
auto app = Gtk::Application::create(argc, argv, "my.app");
Gtk::ApplicationWindow win;
return app->run(win);
}
Run Code Online (Sandbox Code Playgroud)
但简单地添加HANDLES_COMMAND_LINE标志会破坏:窗口永远不会显示。
#include <gtkmm.h>
int on_cmd(const Glib::RefPtr<Gio::ApplicationCommandLine> &) {
return 0;
}
int main(int argc, char **argv) {
auto app = Gtk::Application::create(argc, argv, "my.app",
Gio::APPLICATION_HANDLES_COMMAND_LINE);
app->signal_command_line().connect(sigc::ptr_fun(on_cmd), false);
Gtk::ApplicationWindow win;
return app->run(win);
}
Run Code Online (Sandbox Code Playgroud)
所以我认为command_line处理程序实际上不应该返回?但是文档说run启动主循环。我还没有找到一种简单地等待主循环完成的方法,所以我手动启动它。窗口再次显示,但当然循环会在关闭后继续,这是该代码的最小问题:
#include <gtkmm.h>
int on_cmd(const Glib::RefPtr<Gio::ApplicationCommandLine> &, …Run Code Online (Sandbox Code Playgroud) 所以当我尝试创建一个具有任何配置的项目时,sbt(0.10)会产生最奇怪的错误,甚至不会复制wiki示例的工作......
是否有一个很好的最小,有效的sbt项目集合?(不是基本/快速的.sbt东西,而是完整的.scala文件project/)维基片段似乎已经过时或错误...
我在尝试整合梯状带SBT不能够编译失败import sbt._的project/plugins/Plugins.scala?!(在树中没有任何其他自定义文件.根据我的理解,这应该是有效的...)
基本上,我需要一个项目scalariform和-deprecated编译器选项(甚至没有在快速模式下工作......)